@lssm/lib.contracts 0.0.0-canary-20251219202229 → 0.0.0-canary-20251220002821
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app-config/app-config.feature.d.ts +1 -2
- package/dist/app-config/app-config.feature.js +1 -2
- package/dist/app-config/branding.d.ts +1 -2
- package/dist/app-config/contracts.d.ts +51 -52
- package/dist/app-config/contracts.js +1 -2
- package/dist/app-config/docs/app-config.docblock.d.ts +1 -2
- package/dist/app-config/docs/app-config.docblock.js +1 -2
- package/dist/app-config/events.d.ts +28 -29
- package/dist/app-config/events.js +1 -2
- package/dist/app-config/lifecycle-contracts.d.ts +81 -82
- package/dist/app-config/lifecycle-contracts.js +1 -2
- package/dist/app-config/lifecycle.d.ts +1 -2
- package/dist/app-config/runtime.d.ts +1 -2
- package/dist/app-config/runtime.js +1 -2
- package/dist/app-config/spec.d.ts +1 -2
- package/dist/app-config/spec.js +1 -2
- package/dist/app-config/validation.d.ts +1 -2
- package/dist/app-config/validation.js +1 -2
- package/dist/capabilities/docs/capabilities.docblock.d.ts +1 -2
- package/dist/capabilities/docs/capabilities.docblock.js +1 -2
- package/dist/capabilities/openbanking.d.ts +1 -2
- package/dist/capabilities/openbanking.js +1 -2
- package/dist/capabilities.d.ts +1 -2
- package/dist/capabilities.js +1 -2
- package/dist/client/react/drivers/rn-reusables.d.ts +1 -2
- package/dist/client/react/drivers/rn-reusables.js +1 -2
- package/dist/client/react/drivers/shadcn.d.ts +1 -2
- package/dist/client/react/drivers/shadcn.js +1 -2
- package/dist/client/react/feature-render.d.ts +1 -2
- package/dist/client/react/feature-render.js +1 -2
- package/dist/client/react/form-render.d.ts +1 -2
- package/dist/client/react/form-render.js +1 -2
- package/dist/contract-registry/schemas.d.ts +1 -2
- package/dist/contract-registry/schemas.js +1 -2
- package/dist/contract-registry/types.d.ts +1 -2
- package/dist/contracts-adapter-hydration.d.ts +1 -2
- package/dist/contracts-adapter-hydration.js +3 -4
- package/dist/contracts-adapter-input.d.ts +1 -2
- package/dist/contracts-adapter-input.js +1 -2
- package/dist/data-views/docs/data-views.docblock.d.ts +1 -2
- package/dist/data-views/docs/data-views.docblock.js +1 -2
- package/dist/data-views/query-generator.d.ts +3 -4
- package/dist/data-views/query-generator.js +2 -3
- package/dist/data-views/runtime.d.ts +3 -4
- package/dist/data-views/runtime.js +3 -4
- package/dist/data-views.d.ts +1 -2
- package/dist/data-views.js +1 -2
- package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts +1 -2
- package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +1 -2
- package/dist/docs/meta.docs.d.ts +1 -2
- package/dist/docs/meta.docs.js +1 -2
- package/dist/docs/presentations.d.ts +1 -2
- package/dist/docs/presentations.js +1 -2
- package/dist/docs/registry.d.ts +1 -2
- package/dist/docs/registry.js +1 -2
- package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts +1 -2
- package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +1 -2
- package/dist/docs/tech/contracts/README.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/README.docblock.js +1 -2
- package/dist/docs/tech/contracts/create-subscription.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/create-subscription.docblock.js +1 -2
- package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +1 -2
- package/dist/docs/tech/contracts/migrations.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/migrations.docblock.js +1 -2
- package/dist/docs/tech/contracts/openapi-export.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/openapi-export.docblock.js +1 -2
- package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +1 -2
- package/dist/docs/tech/contracts/overlays.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/overlays.docblock.js +1 -2
- package/dist/docs/tech/contracts/tests.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/tests.docblock.js +1 -2
- package/dist/docs/tech/contracts/themes.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/themes.docblock.js +1 -2
- package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts +1 -2
- package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +1 -2
- package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts +1 -2
- package/dist/docs/tech/lifecycle-stage-system.docblock.js +1 -2
- package/dist/docs/tech/llm/llm-integration.docblock.d.ts +1 -2
- package/dist/docs/tech/llm/llm-integration.docblock.js +1 -2
- package/dist/docs/tech/mcp-endpoints.docblock.d.ts +1 -2
- package/dist/docs/tech/mcp-endpoints.docblock.js +1 -2
- package/dist/docs/tech/presentation-runtime.docblock.d.ts +1 -2
- package/dist/docs/tech/presentation-runtime.docblock.js +1 -2
- package/dist/docs/tech/schema/README.docblock.d.ts +1 -2
- package/dist/docs/tech/schema/README.docblock.js +1 -2
- package/dist/docs/tech/studio/learning-events.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/learning-events.docblock.js +1 -2
- package/dist/docs/tech/studio/learning-journeys.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/learning-journeys.docblock.js +1 -2
- package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/platform-admin-panel.docblock.js +1 -2
- package/dist/docs/tech/studio/project-access-teams.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/project-access-teams.docblock.js +1 -2
- package/dist/docs/tech/studio/project-routing.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/project-routing.docblock.js +1 -2
- package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +1 -2
- package/dist/docs/tech/studio/team-invitations.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/team-invitations.docblock.js +1 -2
- package/dist/docs/tech/studio/workspace-ops.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/workspace-ops.docblock.js +1 -2
- package/dist/docs/tech/studio/workspaces.docblock.d.ts +1 -2
- package/dist/docs/tech/studio/workspaces.docblock.js +1 -2
- package/dist/docs/tech/telemetry-ingest.docblock.d.ts +1 -2
- package/dist/docs/tech/telemetry-ingest.docblock.js +1 -2
- package/dist/docs/tech/templates/runtime.docblock.d.ts +1 -2
- package/dist/docs/tech/templates/runtime.docblock.js +1 -2
- package/dist/docs/tech/vscode-extension.docblock.d.ts +1 -2
- package/dist/docs/tech/vscode-extension.docblock.js +1 -2
- package/dist/docs/tech/workflows/overview.docblock.d.ts +1 -2
- package/dist/docs/tech/workflows/overview.docblock.js +1 -2
- package/dist/docs/tech-contracts.docs.d.ts +1 -2
- package/dist/docs/tech-contracts.docs.js +1 -2
- package/dist/docs/types.d.ts +1 -2
- package/dist/events.d.ts +1 -2
- package/dist/events.js +1 -2
- package/dist/experiments/docs/experiments.docblock.d.ts +1 -2
- package/dist/experiments/docs/experiments.docblock.js +1 -2
- package/dist/experiments/evaluator.d.ts +1 -2
- package/dist/experiments/evaluator.js +1 -2
- package/dist/experiments/spec-resolver.d.ts +1 -2
- package/dist/experiments/spec.d.ts +1 -2
- package/dist/experiments/spec.js +1 -2
- package/dist/features.d.ts +1 -2
- package/dist/features.js +1 -2
- package/dist/forms/docs/forms.docblock.d.ts +1 -2
- package/dist/forms/docs/forms.docblock.js +1 -2
- package/dist/forms.d.ts +5 -6
- package/dist/forms.js +4 -4
- package/dist/install.d.ts +1 -2
- package/dist/install.js +1 -2
- package/dist/integrations/binding.d.ts +1 -2
- package/dist/integrations/connection.d.ts +1 -2
- package/dist/integrations/contracts.d.ts +106 -106
- package/dist/integrations/contracts.js +1 -2
- package/dist/integrations/docs/integrations.docblock.d.ts +1 -2
- package/dist/integrations/docs/integrations.docblock.js +1 -2
- package/dist/integrations/health.d.ts +1 -2
- package/dist/integrations/health.js +1 -2
- package/dist/integrations/openbanking/contracts/accounts.d.ts +70 -70
- package/dist/integrations/openbanking/contracts/accounts.js +1 -2
- package/dist/integrations/openbanking/contracts/balances.d.ts +38 -38
- package/dist/integrations/openbanking/contracts/balances.js +1 -2
- package/dist/integrations/openbanking/contracts/index.d.ts +1 -2
- package/dist/integrations/openbanking/contracts/index.js +1 -2
- package/dist/integrations/openbanking/contracts/transactions.d.ts +52 -52
- package/dist/integrations/openbanking/contracts/transactions.js +1 -2
- package/dist/integrations/openbanking/guards.d.ts +1 -2
- package/dist/integrations/openbanking/guards.js +2 -2
- package/dist/integrations/openbanking/models.d.ts +56 -57
- package/dist/integrations/openbanking/models.js +1 -2
- package/dist/integrations/openbanking/openbanking.feature.d.ts +1 -2
- package/dist/integrations/openbanking/openbanking.feature.js +1 -2
- package/dist/integrations/openbanking/telemetry.d.ts +1 -2
- package/dist/integrations/openbanking/telemetry.js +1 -2
- package/dist/integrations/providers/calendar.d.ts +1 -2
- package/dist/integrations/providers/elevenlabs.d.ts +1 -2
- package/dist/integrations/providers/elevenlabs.js +1 -2
- package/dist/integrations/providers/email.d.ts +1 -2
- package/dist/integrations/providers/embedding.d.ts +1 -2
- package/dist/integrations/providers/gcs-storage.d.ts +1 -2
- package/dist/integrations/providers/gcs-storage.js +1 -2
- package/dist/integrations/providers/gmail.d.ts +1 -2
- package/dist/integrations/providers/gmail.js +1 -2
- package/dist/integrations/providers/google-calendar.d.ts +1 -2
- package/dist/integrations/providers/google-calendar.js +1 -2
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +1 -2
- package/dist/integrations/providers/impls/elevenlabs-voice.js +1 -2
- package/dist/integrations/providers/impls/gcs-storage.d.ts +1 -2
- package/dist/integrations/providers/impls/gcs-storage.js +1 -2
- package/dist/integrations/providers/impls/gmail-inbound.d.ts +1 -2
- package/dist/integrations/providers/impls/gmail-inbound.js +2 -3
- package/dist/integrations/providers/impls/gmail-outbound.d.ts +1 -2
- package/dist/integrations/providers/impls/gmail-outbound.js +5 -6
- package/dist/integrations/providers/impls/google-calendar.d.ts +1 -2
- package/dist/integrations/providers/impls/google-calendar.js +1 -2
- package/dist/integrations/providers/impls/mistral-embedding.d.ts +1 -2
- package/dist/integrations/providers/impls/mistral-embedding.js +1 -2
- package/dist/integrations/providers/impls/mistral-llm.d.ts +2 -3
- package/dist/integrations/providers/impls/mistral-llm.js +2 -3
- package/dist/integrations/providers/impls/postmark-email.d.ts +1 -2
- package/dist/integrations/providers/impls/postmark-email.js +1 -2
- package/dist/integrations/providers/impls/powens-client.d.ts +1 -2
- package/dist/integrations/providers/impls/powens-client.js +1 -2
- package/dist/integrations/providers/impls/powens-openbanking.d.ts +2 -3
- package/dist/integrations/providers/impls/powens-openbanking.js +1 -2
- package/dist/integrations/providers/impls/provider-factory.d.ts +1 -2
- package/dist/integrations/providers/impls/provider-factory.js +5 -3
- package/dist/integrations/providers/impls/qdrant-vector.d.ts +1 -2
- package/dist/integrations/providers/impls/qdrant-vector.js +3 -4
- package/dist/integrations/providers/impls/stripe-payments.d.ts +1 -2
- package/dist/integrations/providers/impls/stripe-payments.js +1 -2
- package/dist/integrations/providers/impls/twilio-sms.d.ts +1 -2
- package/dist/integrations/providers/impls/twilio-sms.js +1 -2
- package/dist/integrations/providers/llm.d.ts +1 -2
- package/dist/integrations/providers/mistral.d.ts +1 -2
- package/dist/integrations/providers/mistral.js +1 -2
- package/dist/integrations/providers/openbanking.d.ts +1 -2
- package/dist/integrations/providers/payments.d.ts +1 -2
- package/dist/integrations/providers/postmark.d.ts +1 -2
- package/dist/integrations/providers/postmark.js +1 -2
- package/dist/integrations/providers/powens.d.ts +1 -2
- package/dist/integrations/providers/powens.js +1 -2
- package/dist/integrations/providers/qdrant.d.ts +1 -2
- package/dist/integrations/providers/qdrant.js +1 -2
- package/dist/integrations/providers/registry.d.ts +1 -2
- package/dist/integrations/providers/registry.js +1 -2
- package/dist/integrations/providers/sms.d.ts +1 -2
- package/dist/integrations/providers/storage.d.ts +1 -2
- package/dist/integrations/providers/stripe.d.ts +1 -2
- package/dist/integrations/providers/stripe.js +1 -2
- package/dist/integrations/providers/twilio-sms.d.ts +1 -2
- package/dist/integrations/providers/twilio-sms.js +1 -2
- package/dist/integrations/providers/vector-store.d.ts +1 -2
- package/dist/integrations/providers/voice.d.ts +1 -2
- package/dist/integrations/runtime.d.ts +2 -3
- package/dist/integrations/runtime.js +2 -3
- package/dist/integrations/secrets/aws-secret-manager.d.ts +1 -2
- package/dist/integrations/secrets/aws-secret-manager.js +1 -2
- package/dist/integrations/secrets/env-secret-provider.d.ts +1 -2
- package/dist/integrations/secrets/env-secret-provider.js +1 -2
- package/dist/integrations/secrets/gcp-secret-manager.d.ts +1 -2
- package/dist/integrations/secrets/gcp-secret-manager.js +1 -2
- package/dist/integrations/secrets/manager.d.ts +1 -2
- package/dist/integrations/secrets/manager.js +2 -3
- package/dist/integrations/secrets/provider.d.ts +1 -2
- package/dist/integrations/secrets/provider.js +1 -2
- package/dist/integrations/secrets/scaleway-secret-manager.d.ts +1 -2
- package/dist/integrations/secrets/scaleway-secret-manager.js +1 -2
- package/dist/integrations/spec.d.ts +1 -2
- package/dist/integrations/spec.js +1 -2
- package/dist/jobs/define-job.d.ts +1 -2
- package/dist/jobs/define-job.js +1 -2
- package/dist/jobs/gcp-cloud-tasks.d.ts +1 -2
- package/dist/jobs/gcp-cloud-tasks.js +1 -2
- package/dist/jobs/gcp-pubsub.d.ts +1 -2
- package/dist/jobs/gcp-pubsub.js +1 -2
- package/dist/jobs/handlers/gmail-sync-handler.d.ts +2 -3
- package/dist/jobs/handlers/gmail-sync-handler.js +1 -2
- package/dist/jobs/handlers/index.d.ts +1 -2
- package/dist/jobs/handlers/index.js +1 -2
- package/dist/jobs/handlers/ping-handler.d.ts +1 -2
- package/dist/jobs/handlers/ping-handler.js +1 -2
- package/dist/jobs/handlers/storage-document-handler.d.ts +1 -2
- package/dist/jobs/handlers/storage-document-handler.js +1 -2
- package/dist/jobs/memory-queue.d.ts +1 -2
- package/dist/jobs/memory-queue.js +1 -2
- package/dist/jobs/queue.d.ts +1 -2
- package/dist/jobs/queue.js +1 -2
- package/dist/jobs/scaleway-sqs-queue.d.ts +1 -2
- package/dist/jobs/scaleway-sqs-queue.js +1 -2
- package/dist/jsonschema.d.ts +4 -5
- package/dist/jsonschema.js +1 -2
- package/dist/knowledge/binding.d.ts +1 -2
- package/dist/knowledge/contracts.d.ts +70 -70
- package/dist/knowledge/contracts.js +1 -2
- package/dist/knowledge/docs/knowledge.docblock.d.ts +1 -2
- package/dist/knowledge/docs/knowledge.docblock.js +1 -2
- package/dist/knowledge/ingestion/document-processor.d.ts +1 -2
- package/dist/knowledge/ingestion/document-processor.js +1 -2
- package/dist/knowledge/ingestion/embedding-service.d.ts +1 -2
- package/dist/knowledge/ingestion/embedding-service.js +1 -2
- package/dist/knowledge/ingestion/gmail-adapter.d.ts +1 -2
- package/dist/knowledge/ingestion/gmail-adapter.js +1 -2
- package/dist/knowledge/ingestion/storage-adapter.d.ts +1 -2
- package/dist/knowledge/ingestion/storage-adapter.js +1 -2
- package/dist/knowledge/ingestion/vector-indexer.d.ts +1 -2
- package/dist/knowledge/ingestion/vector-indexer.js +1 -2
- package/dist/knowledge/query/service.d.ts +1 -2
- package/dist/knowledge/query/service.js +1 -2
- package/dist/knowledge/runtime.d.ts +1 -2
- package/dist/knowledge/runtime.js +1 -2
- package/dist/knowledge/source.d.ts +1 -2
- package/dist/knowledge/spaces/email-threads.d.ts +1 -2
- package/dist/knowledge/spaces/email-threads.js +1 -2
- package/dist/knowledge/spaces/financial-docs.d.ts +1 -2
- package/dist/knowledge/spaces/financial-docs.js +1 -2
- package/dist/knowledge/spaces/financial-overview.d.ts +1 -2
- package/dist/knowledge/spaces/financial-overview.js +1 -2
- package/dist/knowledge/spaces/product-canon.d.ts +1 -2
- package/dist/knowledge/spaces/product-canon.js +1 -2
- package/dist/knowledge/spaces/support-faq.d.ts +1 -2
- package/dist/knowledge/spaces/support-faq.js +1 -2
- package/dist/knowledge/spaces/uploaded-docs.d.ts +1 -2
- package/dist/knowledge/spaces/uploaded-docs.js +1 -2
- package/dist/knowledge/spec.d.ts +1 -2
- package/dist/knowledge/spec.js +1 -2
- package/dist/llm/exporters.d.ts +1 -2
- package/dist/llm/exporters.js +1 -2
- package/dist/llm/prompts.d.ts +1 -2
- package/dist/llm/prompts.js +1 -2
- package/dist/llm/types.d.ts +1 -2
- package/dist/markdown.d.ts +2 -3
- package/dist/markdown.js +2 -3
- package/dist/migrations.d.ts +1 -2
- package/dist/migrations.js +1 -2
- package/dist/onboarding-base.d.ts +30 -31
- package/dist/onboarding-base.js +1 -2
- package/dist/openapi.d.ts +1 -2
- package/dist/openapi.js +1 -2
- package/dist/openbanking/docs/openbanking.docblock.d.ts +1 -2
- package/dist/openbanking/docs/openbanking.docblock.js +1 -2
- package/dist/ownership.d.ts +1 -2
- package/dist/ownership.js +1 -2
- package/dist/policy/docs/policy.docblock.d.ts +1 -2
- package/dist/policy/docs/policy.docblock.js +1 -2
- package/dist/policy/engine.d.ts +1 -2
- package/dist/policy/engine.js +1 -2
- package/dist/policy/opa-adapter.d.ts +1 -2
- package/dist/policy/opa-adapter.js +1 -2
- package/dist/policy/spec.d.ts +1 -2
- package/dist/policy/spec.js +1 -2
- package/dist/presentations/docs/presentations-conventions.docblock.d.ts +1 -2
- package/dist/presentations/docs/presentations-conventions.docblock.js +1 -2
- package/dist/presentations.backcompat.d.ts +1 -2
- package/dist/presentations.backcompat.js +1 -2
- package/dist/presentations.d.ts +4 -5
- package/dist/presentations.js +1 -2
- package/dist/presentations.v2.d.ts +1 -2
- package/dist/presentations.v2.js +6 -4
- package/dist/prompt.d.ts +1 -2
- package/dist/prompt.js +1 -2
- package/dist/promptRegistry.d.ts +3 -4
- package/dist/promptRegistry.js +1 -2
- package/dist/regenerator/adapters.d.ts +1 -2
- package/dist/regenerator/docs/regenerator.docblock.d.ts +1 -2
- package/dist/regenerator/docs/regenerator.docblock.js +1 -2
- package/dist/regenerator/executor.d.ts +1 -2
- package/dist/regenerator/executor.js +1 -2
- package/dist/regenerator/service.d.ts +1 -2
- package/dist/regenerator/service.js +1 -2
- package/dist/regenerator/sinks.d.ts +1 -2
- package/dist/regenerator/sinks.js +1 -2
- package/dist/regenerator/types.d.ts +1 -2
- package/dist/regenerator/utils.d.ts +1 -2
- package/dist/regenerator/utils.js +1 -2
- package/dist/registry.d.ts +2 -3
- package/dist/registry.js +2 -2
- package/dist/resources.d.ts +1 -2
- package/dist/resources.js +5 -3
- package/dist/schema/dist/index.js +1 -2
- package/dist/schema-to-markdown.d.ts +2 -3
- package/dist/schema-to-markdown.js +2 -3
- package/dist/server/graphql-pothos.d.ts +1 -2
- package/dist/server/graphql-pothos.js +1 -3
- package/dist/server/mcp/createMcpServer.d.ts +1 -2
- package/dist/server/mcp/createMcpServer.js +1 -2
- package/dist/server/mcp/mcpTypes.d.ts +1 -2
- package/dist/server/mcp/registerPresentations.d.ts +1 -2
- package/dist/server/mcp/registerPresentations.js +1 -2
- package/dist/server/mcp/registerPrompts.d.ts +1 -2
- package/dist/server/mcp/registerPrompts.js +1 -2
- package/dist/server/mcp/registerResources.d.ts +1 -2
- package/dist/server/mcp/registerResources.js +1 -2
- package/dist/server/mcp/registerTools.d.ts +1 -2
- package/dist/server/mcp/registerTools.js +1 -2
- package/dist/server/rest-elysia.d.ts +2 -3
- package/dist/server/rest-elysia.js +1 -2
- package/dist/server/rest-express.d.ts +1 -2
- package/dist/server/rest-express.js +1 -5
- package/dist/server/rest-generic.d.ts +2 -3
- package/dist/server/rest-generic.js +1 -3
- package/dist/server/rest-next-app.d.ts +1 -2
- package/dist/server/rest-next-app.js +1 -2
- package/dist/server/rest-next-mcp.d.ts +1 -2
- package/dist/server/rest-next-mcp.js +2 -3
- package/dist/server/rest-next-pages.d.ts +1 -2
- package/dist/server/rest-next-pages.js +1 -5
- package/dist/spec.d.ts +1 -2
- package/dist/spec.js +1 -2
- package/dist/telemetry/anomaly.d.ts +1 -2
- package/dist/telemetry/anomaly.js +1 -2
- package/dist/telemetry/docs/telemetry.docblock.d.ts +1 -2
- package/dist/telemetry/docs/telemetry.docblock.js +1 -2
- package/dist/telemetry/spec.d.ts +1 -2
- package/dist/telemetry/spec.js +1 -2
- package/dist/telemetry/tracker.d.ts +1 -2
- package/dist/telemetry/tracker.js +1 -2
- package/dist/tests/runner.d.ts +1 -2
- package/dist/tests/runner.js +1 -2
- package/dist/tests/spec.d.ts +1 -2
- package/dist/tests/spec.js +1 -2
- package/dist/themes.d.ts +1 -2
- package/dist/themes.js +1 -2
- package/dist/translations/catalog.d.ts +1 -2
- package/dist/translations/tenant.d.ts +1 -2
- package/dist/types.d.ts +1 -2
- package/dist/workflow/adapters/db-adapter.d.ts +1 -2
- package/dist/workflow/adapters/db-adapter.js +1 -2
- package/dist/workflow/adapters/file-adapter.d.ts +1 -2
- package/dist/workflow/adapters/file-adapter.js +1 -2
- package/dist/workflow/adapters/memory-store.d.ts +1 -2
- package/dist/workflow/adapters/memory-store.js +1 -2
- package/dist/workflow/expression.d.ts +1 -2
- package/dist/workflow/expression.js +4 -4
- package/dist/workflow/runner.d.ts +1 -2
- package/dist/workflow/runner.js +1 -2
- package/dist/workflow/sla-monitor.d.ts +1 -2
- package/dist/workflow/sla-monitor.js +1 -2
- package/dist/workflow/spec.d.ts +1 -2
- package/dist/workflow/spec.js +1 -2
- package/dist/workflow/state.d.ts +1 -2
- package/dist/workflow/validation.d.ts +1 -2
- package/dist/workflow/validation.js +2 -2
- package/package.json +14 -8
- package/dist/app-config/app-config.feature.d.ts.map +0 -1
- package/dist/app-config/app-config.feature.js.map +0 -1
- package/dist/app-config/branding.d.ts.map +0 -1
- package/dist/app-config/contracts.d.ts.map +0 -1
- package/dist/app-config/contracts.js.map +0 -1
- package/dist/app-config/docs/app-config.docblock.d.ts.map +0 -1
- package/dist/app-config/docs/app-config.docblock.js.map +0 -1
- package/dist/app-config/events.d.ts.map +0 -1
- package/dist/app-config/events.js.map +0 -1
- package/dist/app-config/lifecycle-contracts.d.ts.map +0 -1
- package/dist/app-config/lifecycle-contracts.js.map +0 -1
- package/dist/app-config/lifecycle.d.ts.map +0 -1
- package/dist/app-config/runtime.d.ts.map +0 -1
- package/dist/app-config/runtime.js.map +0 -1
- package/dist/app-config/spec.d.ts.map +0 -1
- package/dist/app-config/spec.js.map +0 -1
- package/dist/app-config/validation.d.ts.map +0 -1
- package/dist/app-config/validation.js.map +0 -1
- package/dist/capabilities/docs/capabilities.docblock.d.ts.map +0 -1
- package/dist/capabilities/docs/capabilities.docblock.js.map +0 -1
- package/dist/capabilities/openbanking.d.ts.map +0 -1
- package/dist/capabilities/openbanking.js.map +0 -1
- package/dist/capabilities.d.ts.map +0 -1
- package/dist/capabilities.js.map +0 -1
- package/dist/client/react/drivers/rn-reusables.d.ts.map +0 -1
- package/dist/client/react/drivers/rn-reusables.js.map +0 -1
- package/dist/client/react/drivers/shadcn.d.ts.map +0 -1
- package/dist/client/react/drivers/shadcn.js.map +0 -1
- package/dist/client/react/feature-render.d.ts.map +0 -1
- package/dist/client/react/feature-render.js.map +0 -1
- package/dist/client/react/form-render.d.ts.map +0 -1
- package/dist/client/react/form-render.js.map +0 -1
- package/dist/contract-registry/schemas.d.ts.map +0 -1
- package/dist/contract-registry/schemas.js.map +0 -1
- package/dist/contract-registry/types.d.ts.map +0 -1
- package/dist/contracts-adapter-hydration.d.ts.map +0 -1
- package/dist/contracts-adapter-hydration.js.map +0 -1
- package/dist/contracts-adapter-input.d.ts.map +0 -1
- package/dist/contracts-adapter-input.js.map +0 -1
- package/dist/data-views/docs/data-views.docblock.d.ts.map +0 -1
- package/dist/data-views/docs/data-views.docblock.js.map +0 -1
- package/dist/data-views/query-generator.d.ts.map +0 -1
- package/dist/data-views/query-generator.js.map +0 -1
- package/dist/data-views/runtime.d.ts.map +0 -1
- package/dist/data-views/runtime.js.map +0 -1
- package/dist/data-views.d.ts.map +0 -1
- package/dist/data-views.js.map +0 -1
- package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts.map +0 -1
- package/dist/docs/accessibility_wcag_compliance_specs.docblock.js.map +0 -1
- package/dist/docs/meta.docs.d.ts.map +0 -1
- package/dist/docs/meta.docs.js.map +0 -1
- package/dist/docs/presentations.d.ts.map +0 -1
- package/dist/docs/presentations.js.map +0 -1
- package/dist/docs/registry.d.ts.map +0 -1
- package/dist/docs/registry.js.map +0 -1
- package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts.map +0 -1
- package/dist/docs/tech/auth/better-auth-nextjs.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/README.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/README.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/create-subscription.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/create-subscription.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/migrations.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/migrations.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/openapi-export.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/openapi-export.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/overlays.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/overlays.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/tests.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/tests.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/themes.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/themes.docblock.js.map +0 -1
- package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts.map +0 -1
- package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js.map +0 -1
- package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts.map +0 -1
- package/dist/docs/tech/lifecycle-stage-system.docblock.js.map +0 -1
- package/dist/docs/tech/llm/llm-integration.docblock.d.ts.map +0 -1
- package/dist/docs/tech/llm/llm-integration.docblock.js.map +0 -1
- package/dist/docs/tech/mcp-endpoints.docblock.d.ts.map +0 -1
- package/dist/docs/tech/mcp-endpoints.docblock.js.map +0 -1
- package/dist/docs/tech/presentation-runtime.docblock.d.ts.map +0 -1
- package/dist/docs/tech/presentation-runtime.docblock.js.map +0 -1
- package/dist/docs/tech/schema/README.docblock.d.ts.map +0 -1
- package/dist/docs/tech/schema/README.docblock.js.map +0 -1
- package/dist/docs/tech/studio/learning-events.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/learning-events.docblock.js.map +0 -1
- package/dist/docs/tech/studio/learning-journeys.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/learning-journeys.docblock.js.map +0 -1
- package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/platform-admin-panel.docblock.js.map +0 -1
- package/dist/docs/tech/studio/project-access-teams.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/project-access-teams.docblock.js.map +0 -1
- package/dist/docs/tech/studio/project-routing.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/project-routing.docblock.js.map +0 -1
- package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/sandbox-unlogged.docblock.js.map +0 -1
- package/dist/docs/tech/studio/team-invitations.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/team-invitations.docblock.js.map +0 -1
- package/dist/docs/tech/studio/workspace-ops.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/workspace-ops.docblock.js.map +0 -1
- package/dist/docs/tech/studio/workspaces.docblock.d.ts.map +0 -1
- package/dist/docs/tech/studio/workspaces.docblock.js.map +0 -1
- package/dist/docs/tech/telemetry-ingest.docblock.d.ts.map +0 -1
- package/dist/docs/tech/telemetry-ingest.docblock.js.map +0 -1
- package/dist/docs/tech/templates/runtime.docblock.d.ts.map +0 -1
- package/dist/docs/tech/templates/runtime.docblock.js.map +0 -1
- package/dist/docs/tech/vscode-extension.docblock.d.ts.map +0 -1
- package/dist/docs/tech/vscode-extension.docblock.js.map +0 -1
- package/dist/docs/tech/workflows/overview.docblock.d.ts.map +0 -1
- package/dist/docs/tech/workflows/overview.docblock.js.map +0 -1
- package/dist/docs/tech-contracts.docs.d.ts.map +0 -1
- package/dist/docs/tech-contracts.docs.js.map +0 -1
- package/dist/docs/types.d.ts.map +0 -1
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js.map +0 -1
- package/dist/experiments/docs/experiments.docblock.d.ts.map +0 -1
- package/dist/experiments/docs/experiments.docblock.js.map +0 -1
- package/dist/experiments/evaluator.d.ts.map +0 -1
- package/dist/experiments/evaluator.js.map +0 -1
- package/dist/experiments/spec-resolver.d.ts.map +0 -1
- package/dist/experiments/spec.d.ts.map +0 -1
- package/dist/experiments/spec.js.map +0 -1
- package/dist/features.d.ts.map +0 -1
- package/dist/features.js.map +0 -1
- package/dist/forms/docs/forms.docblock.d.ts.map +0 -1
- package/dist/forms/docs/forms.docblock.js.map +0 -1
- package/dist/forms.d.ts.map +0 -1
- package/dist/forms.js.map +0 -1
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/integrations/binding.d.ts.map +0 -1
- package/dist/integrations/connection.d.ts.map +0 -1
- package/dist/integrations/contracts.d.ts.map +0 -1
- package/dist/integrations/contracts.js.map +0 -1
- package/dist/integrations/docs/integrations.docblock.d.ts.map +0 -1
- package/dist/integrations/docs/integrations.docblock.js.map +0 -1
- package/dist/integrations/health.d.ts.map +0 -1
- package/dist/integrations/health.js.map +0 -1
- package/dist/integrations/openbanking/contracts/accounts.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/accounts.js.map +0 -1
- package/dist/integrations/openbanking/contracts/balances.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/balances.js.map +0 -1
- package/dist/integrations/openbanking/contracts/index.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/index.js.map +0 -1
- package/dist/integrations/openbanking/contracts/transactions.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/transactions.js.map +0 -1
- package/dist/integrations/openbanking/guards.d.ts.map +0 -1
- package/dist/integrations/openbanking/guards.js.map +0 -1
- package/dist/integrations/openbanking/models.d.ts.map +0 -1
- package/dist/integrations/openbanking/models.js.map +0 -1
- package/dist/integrations/openbanking/openbanking.feature.d.ts.map +0 -1
- package/dist/integrations/openbanking/openbanking.feature.js.map +0 -1
- package/dist/integrations/openbanking/telemetry.d.ts.map +0 -1
- package/dist/integrations/openbanking/telemetry.js.map +0 -1
- package/dist/integrations/providers/calendar.d.ts.map +0 -1
- package/dist/integrations/providers/elevenlabs.d.ts.map +0 -1
- package/dist/integrations/providers/elevenlabs.js.map +0 -1
- package/dist/integrations/providers/email.d.ts.map +0 -1
- package/dist/integrations/providers/embedding.d.ts.map +0 -1
- package/dist/integrations/providers/gcs-storage.d.ts.map +0 -1
- package/dist/integrations/providers/gcs-storage.js.map +0 -1
- package/dist/integrations/providers/gmail.d.ts.map +0 -1
- package/dist/integrations/providers/gmail.js.map +0 -1
- package/dist/integrations/providers/google-calendar.d.ts.map +0 -1
- package/dist/integrations/providers/google-calendar.js.map +0 -1
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +0 -1
- package/dist/integrations/providers/impls/elevenlabs-voice.js.map +0 -1
- package/dist/integrations/providers/impls/gcs-storage.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gcs-storage.js.map +0 -1
- package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gmail-inbound.js.map +0 -1
- package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gmail-outbound.js.map +0 -1
- package/dist/integrations/providers/impls/google-calendar.d.ts.map +0 -1
- package/dist/integrations/providers/impls/google-calendar.js.map +0 -1
- package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +0 -1
- package/dist/integrations/providers/impls/mistral-embedding.js.map +0 -1
- package/dist/integrations/providers/impls/mistral-llm.d.ts.map +0 -1
- package/dist/integrations/providers/impls/mistral-llm.js.map +0 -1
- package/dist/integrations/providers/impls/postmark-email.d.ts.map +0 -1
- package/dist/integrations/providers/impls/postmark-email.js.map +0 -1
- package/dist/integrations/providers/impls/powens-client.d.ts.map +0 -1
- package/dist/integrations/providers/impls/powens-client.js.map +0 -1
- package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +0 -1
- package/dist/integrations/providers/impls/powens-openbanking.js.map +0 -1
- package/dist/integrations/providers/impls/provider-factory.d.ts.map +0 -1
- package/dist/integrations/providers/impls/provider-factory.js.map +0 -1
- package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +0 -1
- package/dist/integrations/providers/impls/qdrant-vector.js.map +0 -1
- package/dist/integrations/providers/impls/stripe-payments.d.ts.map +0 -1
- package/dist/integrations/providers/impls/stripe-payments.js.map +0 -1
- package/dist/integrations/providers/impls/twilio-sms.d.ts.map +0 -1
- package/dist/integrations/providers/impls/twilio-sms.js.map +0 -1
- package/dist/integrations/providers/llm.d.ts.map +0 -1
- package/dist/integrations/providers/mistral.d.ts.map +0 -1
- package/dist/integrations/providers/mistral.js.map +0 -1
- package/dist/integrations/providers/openbanking.d.ts.map +0 -1
- package/dist/integrations/providers/payments.d.ts.map +0 -1
- package/dist/integrations/providers/postmark.d.ts.map +0 -1
- package/dist/integrations/providers/postmark.js.map +0 -1
- package/dist/integrations/providers/powens.d.ts.map +0 -1
- package/dist/integrations/providers/powens.js.map +0 -1
- package/dist/integrations/providers/qdrant.d.ts.map +0 -1
- package/dist/integrations/providers/qdrant.js.map +0 -1
- package/dist/integrations/providers/registry.d.ts.map +0 -1
- package/dist/integrations/providers/registry.js.map +0 -1
- package/dist/integrations/providers/sms.d.ts.map +0 -1
- package/dist/integrations/providers/storage.d.ts.map +0 -1
- package/dist/integrations/providers/stripe.d.ts.map +0 -1
- package/dist/integrations/providers/stripe.js.map +0 -1
- package/dist/integrations/providers/twilio-sms.d.ts.map +0 -1
- package/dist/integrations/providers/twilio-sms.js.map +0 -1
- package/dist/integrations/providers/vector-store.d.ts.map +0 -1
- package/dist/integrations/providers/voice.d.ts.map +0 -1
- package/dist/integrations/runtime.d.ts.map +0 -1
- package/dist/integrations/runtime.js.map +0 -1
- package/dist/integrations/secrets/aws-secret-manager.d.ts.map +0 -1
- package/dist/integrations/secrets/aws-secret-manager.js.map +0 -1
- package/dist/integrations/secrets/env-secret-provider.d.ts.map +0 -1
- package/dist/integrations/secrets/env-secret-provider.js.map +0 -1
- package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +0 -1
- package/dist/integrations/secrets/gcp-secret-manager.js.map +0 -1
- package/dist/integrations/secrets/manager.d.ts.map +0 -1
- package/dist/integrations/secrets/manager.js.map +0 -1
- package/dist/integrations/secrets/provider.d.ts.map +0 -1
- package/dist/integrations/secrets/provider.js.map +0 -1
- package/dist/integrations/secrets/scaleway-secret-manager.d.ts.map +0 -1
- package/dist/integrations/secrets/scaleway-secret-manager.js.map +0 -1
- package/dist/integrations/spec.d.ts.map +0 -1
- package/dist/integrations/spec.js.map +0 -1
- package/dist/jobs/define-job.d.ts.map +0 -1
- package/dist/jobs/define-job.js.map +0 -1
- package/dist/jobs/gcp-cloud-tasks.d.ts.map +0 -1
- package/dist/jobs/gcp-cloud-tasks.js.map +0 -1
- package/dist/jobs/gcp-pubsub.d.ts.map +0 -1
- package/dist/jobs/gcp-pubsub.js.map +0 -1
- package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +0 -1
- package/dist/jobs/handlers/gmail-sync-handler.js.map +0 -1
- package/dist/jobs/handlers/index.d.ts.map +0 -1
- package/dist/jobs/handlers/index.js.map +0 -1
- package/dist/jobs/handlers/ping-handler.d.ts.map +0 -1
- package/dist/jobs/handlers/ping-handler.js.map +0 -1
- package/dist/jobs/handlers/storage-document-handler.d.ts.map +0 -1
- package/dist/jobs/handlers/storage-document-handler.js.map +0 -1
- package/dist/jobs/memory-queue.d.ts.map +0 -1
- package/dist/jobs/memory-queue.js.map +0 -1
- package/dist/jobs/queue.d.ts.map +0 -1
- package/dist/jobs/queue.js.map +0 -1
- package/dist/jobs/scaleway-sqs-queue.d.ts.map +0 -1
- package/dist/jobs/scaleway-sqs-queue.js.map +0 -1
- package/dist/jsonschema.d.ts.map +0 -1
- package/dist/jsonschema.js.map +0 -1
- package/dist/knowledge/binding.d.ts.map +0 -1
- package/dist/knowledge/contracts.d.ts.map +0 -1
- package/dist/knowledge/contracts.js.map +0 -1
- package/dist/knowledge/docs/knowledge.docblock.d.ts.map +0 -1
- package/dist/knowledge/docs/knowledge.docblock.js.map +0 -1
- package/dist/knowledge/ingestion/document-processor.d.ts.map +0 -1
- package/dist/knowledge/ingestion/document-processor.js.map +0 -1
- package/dist/knowledge/ingestion/embedding-service.d.ts.map +0 -1
- package/dist/knowledge/ingestion/embedding-service.js.map +0 -1
- package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +0 -1
- package/dist/knowledge/ingestion/gmail-adapter.js.map +0 -1
- package/dist/knowledge/ingestion/storage-adapter.d.ts.map +0 -1
- package/dist/knowledge/ingestion/storage-adapter.js.map +0 -1
- package/dist/knowledge/ingestion/vector-indexer.d.ts.map +0 -1
- package/dist/knowledge/ingestion/vector-indexer.js.map +0 -1
- package/dist/knowledge/query/service.d.ts.map +0 -1
- package/dist/knowledge/query/service.js.map +0 -1
- package/dist/knowledge/runtime.d.ts.map +0 -1
- package/dist/knowledge/runtime.js.map +0 -1
- package/dist/knowledge/source.d.ts.map +0 -1
- package/dist/knowledge/spaces/email-threads.d.ts.map +0 -1
- package/dist/knowledge/spaces/email-threads.js.map +0 -1
- package/dist/knowledge/spaces/financial-docs.d.ts.map +0 -1
- package/dist/knowledge/spaces/financial-docs.js.map +0 -1
- package/dist/knowledge/spaces/financial-overview.d.ts.map +0 -1
- package/dist/knowledge/spaces/financial-overview.js.map +0 -1
- package/dist/knowledge/spaces/product-canon.d.ts.map +0 -1
- package/dist/knowledge/spaces/product-canon.js.map +0 -1
- package/dist/knowledge/spaces/support-faq.d.ts.map +0 -1
- package/dist/knowledge/spaces/support-faq.js.map +0 -1
- package/dist/knowledge/spaces/uploaded-docs.d.ts.map +0 -1
- package/dist/knowledge/spaces/uploaded-docs.js.map +0 -1
- package/dist/knowledge/spec.d.ts.map +0 -1
- package/dist/knowledge/spec.js.map +0 -1
- package/dist/llm/exporters.d.ts.map +0 -1
- package/dist/llm/exporters.js.map +0 -1
- package/dist/llm/prompts.d.ts.map +0 -1
- package/dist/llm/prompts.js.map +0 -1
- package/dist/llm/types.d.ts.map +0 -1
- package/dist/markdown.d.ts.map +0 -1
- package/dist/markdown.js.map +0 -1
- package/dist/migrations.d.ts.map +0 -1
- package/dist/migrations.js.map +0 -1
- package/dist/onboarding-base.d.ts.map +0 -1
- package/dist/onboarding-base.js.map +0 -1
- package/dist/openapi.d.ts.map +0 -1
- package/dist/openapi.js.map +0 -1
- package/dist/openbanking/docs/openbanking.docblock.d.ts.map +0 -1
- package/dist/openbanking/docs/openbanking.docblock.js.map +0 -1
- package/dist/ownership.d.ts.map +0 -1
- package/dist/ownership.js.map +0 -1
- package/dist/policy/docs/policy.docblock.d.ts.map +0 -1
- package/dist/policy/docs/policy.docblock.js.map +0 -1
- package/dist/policy/engine.d.ts.map +0 -1
- package/dist/policy/engine.js.map +0 -1
- package/dist/policy/opa-adapter.d.ts.map +0 -1
- package/dist/policy/opa-adapter.js.map +0 -1
- package/dist/policy/spec.d.ts.map +0 -1
- package/dist/policy/spec.js.map +0 -1
- package/dist/presentations/docs/presentations-conventions.docblock.d.ts.map +0 -1
- package/dist/presentations/docs/presentations-conventions.docblock.js.map +0 -1
- package/dist/presentations.backcompat.d.ts.map +0 -1
- package/dist/presentations.backcompat.js.map +0 -1
- package/dist/presentations.d.ts.map +0 -1
- package/dist/presentations.js.map +0 -1
- package/dist/presentations.v2.d.ts.map +0 -1
- package/dist/presentations.v2.js.map +0 -1
- package/dist/prompt.d.ts.map +0 -1
- package/dist/prompt.js.map +0 -1
- package/dist/promptRegistry.d.ts.map +0 -1
- package/dist/promptRegistry.js.map +0 -1
- package/dist/regenerator/adapters.d.ts.map +0 -1
- package/dist/regenerator/docs/regenerator.docblock.d.ts.map +0 -1
- package/dist/regenerator/docs/regenerator.docblock.js.map +0 -1
- package/dist/regenerator/executor.d.ts.map +0 -1
- package/dist/regenerator/executor.js.map +0 -1
- package/dist/regenerator/service.d.ts.map +0 -1
- package/dist/regenerator/service.js.map +0 -1
- package/dist/regenerator/sinks.d.ts.map +0 -1
- package/dist/regenerator/sinks.js.map +0 -1
- package/dist/regenerator/types.d.ts.map +0 -1
- package/dist/regenerator/utils.d.ts.map +0 -1
- package/dist/regenerator/utils.js.map +0 -1
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/resources.d.ts.map +0 -1
- package/dist/resources.js.map +0 -1
- package/dist/schema/dist/index.js.map +0 -1
- package/dist/schema-to-markdown.d.ts.map +0 -1
- package/dist/schema-to-markdown.js.map +0 -1
- package/dist/server/graphql-pothos.d.ts.map +0 -1
- package/dist/server/graphql-pothos.js.map +0 -1
- package/dist/server/mcp/createMcpServer.d.ts.map +0 -1
- package/dist/server/mcp/createMcpServer.js.map +0 -1
- package/dist/server/mcp/mcpTypes.d.ts.map +0 -1
- package/dist/server/mcp/registerPresentations.d.ts.map +0 -1
- package/dist/server/mcp/registerPresentations.js.map +0 -1
- package/dist/server/mcp/registerPrompts.d.ts.map +0 -1
- package/dist/server/mcp/registerPrompts.js.map +0 -1
- package/dist/server/mcp/registerResources.d.ts.map +0 -1
- package/dist/server/mcp/registerResources.js.map +0 -1
- package/dist/server/mcp/registerTools.d.ts.map +0 -1
- package/dist/server/mcp/registerTools.js.map +0 -1
- package/dist/server/rest-elysia.d.ts.map +0 -1
- package/dist/server/rest-elysia.js.map +0 -1
- package/dist/server/rest-express.d.ts.map +0 -1
- package/dist/server/rest-express.js.map +0 -1
- package/dist/server/rest-generic.d.ts.map +0 -1
- package/dist/server/rest-generic.js.map +0 -1
- package/dist/server/rest-next-app.d.ts.map +0 -1
- package/dist/server/rest-next-app.js.map +0 -1
- package/dist/server/rest-next-mcp.d.ts.map +0 -1
- package/dist/server/rest-next-mcp.js.map +0 -1
- package/dist/server/rest-next-pages.d.ts.map +0 -1
- package/dist/server/rest-next-pages.js.map +0 -1
- package/dist/spec.d.ts.map +0 -1
- package/dist/spec.js.map +0 -1
- package/dist/telemetry/anomaly.d.ts.map +0 -1
- package/dist/telemetry/anomaly.js.map +0 -1
- package/dist/telemetry/docs/telemetry.docblock.d.ts.map +0 -1
- package/dist/telemetry/docs/telemetry.docblock.js.map +0 -1
- package/dist/telemetry/spec.d.ts.map +0 -1
- package/dist/telemetry/spec.js.map +0 -1
- package/dist/telemetry/tracker.d.ts.map +0 -1
- package/dist/telemetry/tracker.js.map +0 -1
- package/dist/tests/runner.d.ts.map +0 -1
- package/dist/tests/runner.js.map +0 -1
- package/dist/tests/spec.d.ts.map +0 -1
- package/dist/tests/spec.js.map +0 -1
- package/dist/themes.d.ts.map +0 -1
- package/dist/themes.js.map +0 -1
- package/dist/translations/catalog.d.ts.map +0 -1
- package/dist/translations/tenant.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/workflow/adapters/db-adapter.d.ts.map +0 -1
- package/dist/workflow/adapters/db-adapter.js.map +0 -1
- package/dist/workflow/adapters/file-adapter.d.ts.map +0 -1
- package/dist/workflow/adapters/file-adapter.js.map +0 -1
- package/dist/workflow/adapters/memory-store.d.ts.map +0 -1
- package/dist/workflow/adapters/memory-store.js.map +0 -1
- package/dist/workflow/expression.d.ts.map +0 -1
- package/dist/workflow/expression.js.map +0 -1
- package/dist/workflow/runner.d.ts.map +0 -1
- package/dist/workflow/runner.js.map +0 -1
- package/dist/workflow/sla-monitor.d.ts.map +0 -1
- package/dist/workflow/sla-monitor.js.map +0 -1
- package/dist/workflow/spec.d.ts.map +0 -1
- package/dist/workflow/spec.js.map +0 -1
- package/dist/workflow/state.d.ts.map +0 -1
- package/dist/workflow/validation.d.ts.map +0 -1
- package/dist/workflow/validation.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openbanking.js","names":["openBankingAccountsReadCapability: CapabilitySpec","openBankingTransactionsReadCapability: CapabilitySpec","openBankingBalancesReadCapability: CapabilitySpec"],"sources":["../../src/capabilities/openbanking.ts"],"sourcesContent":["import type { CapabilityRegistry, CapabilitySpec } from '../capabilities';\nimport { StabilityEnum } from '../ownership';\n\nconst OWNERS = ['platform.finance'] as const;\nconst TAGS = ['open-banking', 'finance'] as const;\n\nexport const openBankingAccountsReadCapability: CapabilitySpec = {\n meta: {\n key: 'openbanking.accounts.read',\n version: 1,\n kind: 'integration',\n title: 'Open Banking Accounts (Read)',\n description:\n 'Provides read-only access to linked bank accounts, including account summaries and metadata.',\n domain: 'finance',\n owners: [...OWNERS],\n tags: [...TAGS],\n stability: StabilityEnum.Experimental,\n },\n provides: [\n {\n surface: 'operation',\n name: 'openbanking.accounts.list',\n version: 1,\n description:\n 'List bank accounts linked to a Powens open banking connection.',\n },\n {\n surface: 'operation',\n name: 'openbanking.accounts.get',\n version: 1,\n description:\n 'Retrieve the canonical bank account record for a specific account.',\n },\n {\n surface: 'operation',\n name: 'openbanking.accounts.sync',\n version: 1,\n description:\n 'Trigger a refresh of bank account metadata from the open banking provider.',\n },\n ],\n};\n\nexport const openBankingTransactionsReadCapability: CapabilitySpec = {\n meta: {\n key: 'openbanking.transactions.read',\n version: 1,\n kind: 'integration',\n title: 'Open Banking Transactions (Read)',\n description:\n 'Enables retrieval of transaction history for linked bank accounts via open banking providers.',\n domain: 'finance',\n owners: [...OWNERS],\n tags: [...TAGS, 'transactions'],\n stability: StabilityEnum.Experimental,\n },\n provides: [\n {\n surface: 'operation',\n name: 'openbanking.transactions.list',\n version: 1,\n description:\n 'List transactions for a given bank account with optional date filtering.',\n },\n {\n surface: 'operation',\n name: 'openbanking.transactions.sync',\n version: 1,\n description:\n 'Synchronise transactions from the open banking provider into the canonical ledger.',\n },\n ],\n};\n\nexport const openBankingBalancesReadCapability: CapabilitySpec = {\n meta: {\n key: 'openbanking.balances.read',\n version: 1,\n kind: 'integration',\n title: 'Open Banking Balances (Read)',\n description:\n 'Allows querying of current and available balances for linked bank accounts via open banking providers.',\n domain: 'finance',\n owners: [...OWNERS],\n tags: [...TAGS, 'balances'],\n stability: StabilityEnum.Experimental,\n },\n provides: [\n {\n surface: 'operation',\n name: 'openbanking.balances.get',\n version: 1,\n description:\n 'Retrieve the latest known balances for a specified bank account.',\n },\n {\n surface: 'operation',\n name: 'openbanking.balances.refresh',\n version: 1,\n description: 'Force a balance refresh from the open banking provider.',\n },\n ],\n};\n\nexport function registerOpenBankingCapabilities(\n registry: CapabilityRegistry\n): CapabilityRegistry {\n return registry\n .register(openBankingAccountsReadCapability)\n .register(openBankingTransactionsReadCapability)\n .register(openBankingBalancesReadCapability);\n}\n"],"mappings":";;;AAGA,MAAM,SAAS,CAAC,mBAAmB;AACnC,MAAM,OAAO,CAAC,gBAAgB,UAAU;AAExC,MAAaA,oCAAoD;CAC/D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,MAAM;EACN,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM,CAAC,GAAG,KAAK;EACf,WAAW,cAAc;EAC1B;CACD,UAAU;EACR;GACE,SAAS;GACT,MAAM;GACN,SAAS;GACT,aACE;GACH;EACD;GACE,SAAS;GACT,MAAM;GACN,SAAS;GACT,aACE;GACH;EACD;GACE,SAAS;GACT,MAAM;GACN,SAAS;GACT,aACE;GACH;EACF;CACF;AAED,MAAaC,wCAAwD;CACnE,MAAM;EACJ,KAAK;EACL,SAAS;EACT,MAAM;EACN,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM,CAAC,GAAG,MAAM,eAAe;EAC/B,WAAW,cAAc;EAC1B;CACD,UAAU,CACR;EACE,SAAS;EACT,MAAM;EACN,SAAS;EACT,aACE;EACH,EACD;EACE,SAAS;EACT,MAAM;EACN,SAAS;EACT,aACE;EACH,CACF;CACF;AAED,MAAaC,oCAAoD;CAC/D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,MAAM;EACN,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM,CAAC,GAAG,MAAM,WAAW;EAC3B,WAAW,cAAc;EAC1B;CACD,UAAU,CACR;EACE,SAAS;EACT,MAAM;EACN,SAAS;EACT,aACE;EACH,EACD;EACE,SAAS;EACT,MAAM;EACN,SAAS;EACT,aAAa;EACd,CACF;CACF;AAED,SAAgB,gCACd,UACoB;AACpB,QAAO,SACJ,SAAS,kCAAkC,CAC3C,SAAS,sCAAsC,CAC/C,SAAS,kCAAkC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","names":[],"sources":["../src/capabilities.ts"],"sourcesContent":[],"mappings":";;;;KAGY,cAAA;KAEA,iBAAA;AAFA,UASK,oBAAA,CATS;EAEd,OAAA,EAQD,iBARkB;EAOZ,IAAA,EAAA,MAAA;EAOA,OAAA,EAAA,MAAA;EAKT,WAAA,CAAA,EAAA,MAAA;;AALgC,UAAvB,cAAA,SAAuB,aAAA,CAAA;EAAa;EAUpC,GAAA,EAAA,MAAA;EAQA;EAKA,OAAA,EAAA,MAAA;EACT,IAAA,EAnBA,cAmBA;EACK;EACA,KAAA,CAAA,EAnBH,KAmBG;;AAKA,UArBI,qBAAA,CAqBc;EAGd,GAAA,EAAA,MAAA;EAOP,OAAA,CAAA,EAAA,MAAA;EAI4B,IAAA,CAAA,EAhC7B,cAgC6B;EAerB,QAAA,CAAA,EAAA,OAAA;EACA,MAAA,CAAA,EAAA,MAAA;;AA6BD,UAxEC,aAAA,CAwEY;EAIb,GAAA,EAAA,MAAA;;;UAvEC,cAAA;QACT;aACK;aACA;;cAKA,kBAAA;;iBAGI;UAOP;sCAI4B;yBAerB,oCACA;;iBA6BD,aAAA,OAAoB;iBAIpB,gBAAA,OAAuB,iBAAiB"}
|
package/dist/capabilities.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","names":["candidate: CapabilitySpec | undefined"],"sources":["../src/capabilities.ts"],"sourcesContent":["import type { OwnerShipMeta } from './ownership';\nimport type { DocId } from './docs/registry';\n\nexport type CapabilityKind = 'api' | 'event' | 'data' | 'ui' | 'integration';\n\nexport type CapabilitySurface =\n | 'operation'\n | 'event'\n | 'workflow'\n | 'presentation'\n | 'resource';\n\nexport interface CapabilitySurfaceRef {\n surface: CapabilitySurface;\n name: string;\n version: number;\n description?: string;\n}\n\nexport interface CapabilityMeta extends OwnerShipMeta {\n /** Stable capability slug (e.g., \"payments.stripe\"). */\n key: string;\n /** Increment when the capability shape changes. */\n version: number;\n kind: CapabilityKind;\n /** Optional doc block id for governance and navigation. */\n docId?: DocId;\n}\n\nexport interface CapabilityRequirement {\n key: string;\n version?: number;\n kind?: CapabilityKind;\n optional?: boolean;\n reason?: string;\n}\n\nexport interface CapabilityRef {\n key: string;\n version: number;\n}\n\nexport interface CapabilitySpec {\n meta: CapabilityMeta;\n provides?: CapabilitySurfaceRef[];\n requires?: CapabilityRequirement[];\n}\n\nconst capKey = (key: string, version: number) => `${key}.v${version}`;\n\nexport class CapabilityRegistry {\n private readonly items = new Map<string, CapabilitySpec>();\n\n register(spec: CapabilitySpec): this {\n const key = capKey(spec.meta.key, spec.meta.version);\n if (this.items.has(key)) throw new Error(`Duplicate capability ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): CapabilitySpec[] {\n return [...this.items.values()];\n }\n\n get(key: string, version?: number): CapabilitySpec | undefined {\n if (version != null) return this.items.get(capKey(key, version));\n let candidate: CapabilitySpec | undefined;\n let max = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.key !== key) continue;\n if (spec.meta.version > max) {\n max = spec.meta.version;\n candidate = spec;\n }\n }\n return candidate;\n }\n\n satisfies(\n requirement: CapabilityRequirement,\n additional?: CapabilityRef[] | undefined\n ): boolean {\n if (requirement.optional) return true;\n if (additional?.some((ref) => matchesRequirement(ref, requirement)))\n return true;\n const spec = requirement.version\n ? this.get(requirement.key, requirement.version)\n : this.get(requirement.key);\n if (!spec) return false;\n if (requirement.kind && spec.meta.kind !== requirement.kind) return false;\n if (\n requirement.version != null &&\n spec.meta.version !== requirement.version\n )\n return false;\n return true;\n }\n}\n\nfunction matchesRequirement(\n ref: CapabilityRef,\n requirement: CapabilityRequirement\n) {\n if (ref.key !== requirement.key) return false;\n if (requirement.version != null && ref.version !== requirement.version)\n return false;\n return true;\n}\n\nexport function capabilityKey(spec: CapabilitySpec) {\n return capKey(spec.meta.key, spec.meta.version);\n}\n\nexport function defineCapability(spec: CapabilitySpec): CapabilitySpec {\n return spec;\n}\n"],"mappings":";AAgDA,MAAM,UAAU,KAAa,YAAoB,GAAG,IAAI,IAAI;AAE5D,IAAa,qBAAb,MAAgC;CAC9B,AAAiB,wBAAQ,IAAI,KAA6B;CAE1D,SAAS,MAA4B;EACnC,MAAM,MAAM,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ;AACpD,MAAI,KAAK,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,MAAM,wBAAwB,MAAM;AACvE,OAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAO;;CAGT,OAAyB;AACvB,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;;CAGjC,IAAI,KAAa,SAA8C;AAC7D,MAAI,WAAW,KAAM,QAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,CAAC;EAChE,IAAIA;EACJ,IAAI,MAAM;AACV,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE;AACtC,OAAI,KAAK,KAAK,QAAQ,IAAK;AAC3B,OAAI,KAAK,KAAK,UAAU,KAAK;AAC3B,UAAM,KAAK,KAAK;AAChB,gBAAY;;;AAGhB,SAAO;;CAGT,UACE,aACA,YACS;AACT,MAAI,YAAY,SAAU,QAAO;AACjC,MAAI,YAAY,MAAM,QAAQ,mBAAmB,KAAK,YAAY,CAAC,CACjE,QAAO;EACT,MAAM,OAAO,YAAY,UACrB,KAAK,IAAI,YAAY,KAAK,YAAY,QAAQ,GAC9C,KAAK,IAAI,YAAY,IAAI;AAC7B,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,YAAY,QAAQ,KAAK,KAAK,SAAS,YAAY,KAAM,QAAO;AACpE,MACE,YAAY,WAAW,QACvB,KAAK,KAAK,YAAY,YAAY,QAElC,QAAO;AACT,SAAO;;;AAIX,SAAS,mBACP,KACA,aACA;AACA,KAAI,IAAI,QAAQ,YAAY,IAAK,QAAO;AACxC,KAAI,YAAY,WAAW,QAAQ,IAAI,YAAY,YAAY,QAC7D,QAAO;AACT,QAAO;;AAGT,SAAgB,cAAc,MAAsB;AAClD,QAAO,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ;;AAGjD,SAAgB,iBAAiB,MAAsC;AACrE,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rn-reusables.d.ts","names":[],"sources":["../../../../src/client/react/drivers/rn-reusables.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;iBAoBgB,iBAAA,QAAyB,cAAc;KAI3C,iBAAA,GAAoB,kBAAkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rn-reusables.js","names":[],"sources":["../../../../src/client/react/drivers/rn-reusables.ts"],"sourcesContent":["/**\n * React Native driver for FormSpec using @lssm/lib.ui-kit components.\n * Maps contract form slots to mobile UI-kit primitives.\n */\nimport type { DriverSlots } from '../form-render';\n\n/**\n * Create a React Native UI-kit driver by mapping required slots to components.\n * Host apps should import their UI-kit primitives and pass them here.\n *\n * Example usage:\n * ```tsx\n * import { rnReusablesDriver } from '@lssm/lib.contracts/client/react/drivers/rn-reusables';\n * import { Input, Textarea, Button } from '@lssm/lib.ui-kit/ui';\n *\n * const driver = rnReusablesDriver({\n * Input, Textarea, Button, // ... other components\n * });\n * ```\n */\nexport function rnReusablesDriver(slots: DriverSlots): DriverSlots {\n return slots;\n}\n\nexport type RnReusablesDriver = ReturnType<typeof rnReusablesDriver>;\n"],"mappings":";;;;;;;;;;;;;;;AAoBA,SAAgB,kBAAkB,OAAiC;AACjE,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shadcn.d.ts","names":[],"sources":["../../../../src/client/react/drivers/shadcn.ts"],"sourcesContent":[],"mappings":";;;;;;AAMA;AAIA;iBAJgB,YAAA,QAAoB,cAAc;KAItC,YAAA,GAAe,kBAAkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shadcn.js","names":[],"sources":["../../../../src/client/react/drivers/shadcn.ts"],"sourcesContent":["import type { DriverSlots } from '../form-render';\n\n/**\n * Create a shadcn/ui driver by mapping required slots to components.\n * Host apps should import their shadcn primitives and pass them here.\n */\nexport function shadcnDriver(slots: DriverSlots): DriverSlots {\n return slots;\n}\n\nexport type ShadcnDriver = ReturnType<typeof shadcnDriver>;\n"],"mappings":";;;;;AAMA,SAAgB,aAAa,OAAiC;AAC5D,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feature-render.d.ts","names":[],"sources":["../../../src/client/react/feature-render.ts"],"sourcesContent":[],"mappings":";;;;;;iBAcgB,wBAAA,CAAA,GAA4B;iBAMtB,yBAAA,SACZ,yBACA,0BACF,iCADE;EARM,YAAA,CAAA,EAWG,YAXqB;EAMlB,UAAA,CAAA,EAML,MANK,CAAA,MAAA,EAAyB,OAAA,CAAA;EACrC,eAAA,CAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAQU,WARV,EAAA,GASD,KAAA,CAAM,YATL;CACA,CAAA,EAUP,OAVO,CAUC,KAAA,CAAM,YAVP,GAAA;EACF,QAAA,EAAA,MAAA;EAEW,IAAA,EAAA,MAAA;CACF,GAAA,IAAA,CAAA;AAGG,iBAkCJ,mBAAA,CAlCI,IAAA,EAmCZ,iBAnCY,CAAA,MAAA,CAAA,EAAA,IAAA,EAoCZ,OApCY,CAqChB,IArCgB,CAsCd,iBAtCc,EAAA,YAAA,GAAA,QAAA,GAAA,eAAA,GAAA,sBAAA,CAAA,CAAA,CAAA,EA0CjB,iBA1CiB;AACL,iBA6CC,eAAA,CA7CD,QAAA,EA8CH,eA9CG,EAAA,OAAA,EA+CJ,iBA/CI,CAAA,EA+Ca,eA/Cb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feature-render.js","names":[],"sources":["../../../src/client/react/feature-render.ts"],"sourcesContent":["import React from 'react';\nimport {\n createDefaultTransformEngine,\n type PresentationDescriptorV2,\n type PresentationTarget,\n type ReactRenderDescriptor,\n registerBasicValidation,\n registerDefaultReactRenderer,\n TransformEngine,\n type ComponentMap,\n} from '../../presentations.v2';\nimport { type FeatureModuleSpec, FeatureRegistry } from '../../features';\nimport type { BlockConfig } from '@blocknote/core';\n\nexport function createEngineWithDefaults(): TransformEngine {\n return registerBasicValidation(\n registerDefaultReactRenderer(createDefaultTransformEngine())\n );\n}\n\nexport async function renderFeaturePresentation(\n engine: TransformEngine,\n target: PresentationTarget,\n desc: PresentationDescriptorV2,\n options?: {\n componentMap?: ComponentMap;\n reactProps?: Record<string, unknown>;\n renderBlockNote?: (\n docJson: unknown,\n blockConfig?: BlockConfig\n ) => React.ReactElement;\n }\n): Promise<React.ReactElement | { mimeType: string; body: string } | null> {\n if (target === 'react') {\n const rd = await engine.render<ReactRenderDescriptor>('react', desc);\n if (rd.kind === 'react_component') {\n const map = options?.componentMap ?? {};\n const C = map[rd.componentKey];\n if (!C) return null;\n const merged = {\n ...(rd.props ?? {}),\n ...(options?.reactProps ?? {}),\n } as any;\n return React.createElement(C, merged);\n }\n if (rd.kind === 'blocknotejs') {\n if (options?.renderBlockNote)\n return options.renderBlockNote(rd.docJson, rd.blockConfig);\n return React.createElement(\n 'div',\n {},\n '[BlockNote renderer not configured]'\n );\n }\n return null;\n }\n // Non-react targets\n if (target === 'markdown') return engine.render(target, desc);\n if (target === 'application/json') return engine.render(target, desc);\n if (target === 'application/xml') return engine.render(target, desc);\n return null;\n}\n\nexport function createFeatureModule(\n meta: FeatureModuleSpec['meta'],\n refs: Partial<\n Pick<\n FeatureModuleSpec,\n 'operations' | 'events' | 'presentations' | 'presentationsTargets'\n >\n >\n): FeatureModuleSpec {\n return { meta, ...refs };\n}\n\nexport function registerFeature(\n registry: FeatureRegistry,\n feature: FeatureModuleSpec\n) {\n registry.register(feature);\n return registry;\n}\n"],"mappings":";;;;AAcA,SAAgB,2BAA4C;AAC1D,QAAO,wBACL,6BAA6B,8BAA8B,CAAC,CAC7D;;AAGH,eAAsB,0BACpB,QACA,QACA,MACA,SAQyE;AACzE,KAAI,WAAW,SAAS;EACtB,MAAM,KAAK,MAAM,OAAO,OAA8B,SAAS,KAAK;AACpE,MAAI,GAAG,SAAS,mBAAmB;GAEjC,MAAM,KADM,SAAS,gBAAgB,EAAE,EACzB,GAAG;AACjB,OAAI,CAAC,EAAG,QAAO;GACf,MAAM,SAAS;IACb,GAAI,GAAG,SAAS,EAAE;IAClB,GAAI,SAAS,cAAc,EAAE;IAC9B;AACD,UAAO,MAAM,cAAc,GAAG,OAAO;;AAEvC,MAAI,GAAG,SAAS,eAAe;AAC7B,OAAI,SAAS,gBACX,QAAO,QAAQ,gBAAgB,GAAG,SAAS,GAAG,YAAY;AAC5D,UAAO,MAAM,cACX,OACA,EAAE,EACF,sCACD;;AAEH,SAAO;;AAGT,KAAI,WAAW,WAAY,QAAO,OAAO,OAAO,QAAQ,KAAK;AAC7D,KAAI,WAAW,mBAAoB,QAAO,OAAO,OAAO,QAAQ,KAAK;AACrE,KAAI,WAAW,kBAAmB,QAAO,OAAO,OAAO,QAAQ,KAAK;AACpE,QAAO;;AAGT,SAAgB,oBACd,MACA,MAMmB;AACnB,QAAO;EAAE;EAAM,GAAG;EAAM;;AAG1B,SAAgB,gBACd,UACA,SACA;AACA,UAAS,SAAS,QAAQ;AAC1B,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"form-render.d.ts","names":[],"sources":["../../../src/client/react/form-render.tsx"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"form-render.js","names":["cur: unknown","Button"],"sources":["../../../src/client/react/form-render.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { Controller, useFieldArray, useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type {\n ArrayFieldSpec,\n FieldSpec,\n FormOption,\n FormSpec,\n OptionsSource,\n FormValuesFor,\n TextFieldSpec,\n TextareaFieldSpec,\n SelectFieldSpec,\n RadioFieldSpec,\n} from '../../forms';\nimport { buildZodWithRelations, evalPredicate } from '../../forms';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\n\n// Minimal, library-agnostic driver slots. Hosts can provide any UI lib via this interface.\nexport interface DriverSlots {\n Field: React.ComponentType<\n React.PropsWithChildren<{\n 'data-invalid'?: boolean;\n hidden?: boolean;\n disabled?: boolean;\n }>\n >;\n FieldLabel: React.ComponentType<\n React.PropsWithChildren<{ htmlFor?: string }>\n >;\n FieldDescription: React.ComponentType<React.PropsWithChildren<{}>>;\n FieldError: React.ComponentType<{ errors: { message?: string }[] }>;\n FieldGroup?: React.ComponentType<\n React.PropsWithChildren<{ className?: string }>\n >;\n FieldSet?: React.ComponentType<\n React.PropsWithChildren<{ className?: string }>\n >;\n FieldLegend?: React.ComponentType<\n React.PropsWithChildren<{ variant?: 'label' | 'default' }>\n >;\n\n Input: React.ComponentType<React.InputHTMLAttributes<HTMLInputElement>>;\n Textarea: React.ComponentType<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>\n >;\n // Select receives resolved options for simplicity\n Select: React.ComponentType<\n {\n id?: string;\n name?: string;\n value?: unknown;\n onChange?: (v: unknown) => void;\n disabled?: boolean;\n 'aria-invalid'?: boolean;\n options: FormOption[];\n } & Record<string, unknown>\n >;\n Checkbox: React.ComponentType<\n {\n id?: string;\n name?: string;\n checked?: boolean;\n onCheckedChange?: (v: boolean) => void;\n disabled?: boolean;\n } & Record<string, unknown>\n >;\n RadioGroup: React.ComponentType<\n {\n id?: string;\n name?: string;\n value?: unknown;\n onValueChange?: (v: unknown) => void;\n disabled?: boolean;\n options: FormOption[];\n } & Record<string, unknown>\n >;\n Switch: React.ComponentType<\n {\n id?: string;\n name?: string;\n checked?: boolean;\n onCheckedChange?: (v: boolean) => void;\n disabled?: boolean;\n } & Record<string, unknown>\n >;\n Button: React.ComponentType<\n React.PropsWithChildren<{\n type?: 'button' | 'submit' | 'reset';\n variant?: string;\n size?: string;\n onClick?: () => void;\n disabled?: boolean;\n }>\n >;\n}\n\nexport type ResolverMap<TValues> = Record<\n string,\n (values: TValues, args?: unknown) => Promise<FormOption[]> | FormOption[]\n>;\nexport type ComputationMap<TValues> = Record<\n string,\n (values: TValues) => unknown\n>;\n\nexport interface CreateRendererOptions<TValues = Record<string, unknown>> {\n driver: DriverSlots;\n formOptions?: Record<string, unknown>;\n onSubmitOverride?: (\n values: TValues,\n actionKey: string\n ) => Promise<void> | void;\n activeFlags?: string[];\n resolvers?: ResolverMap<TValues>;\n computations?: ComputationMap<TValues>;\n unmountStrategy?: 'keep' | 'clear';\n}\n\nexport interface RenderOptions<TValues = Record<string, unknown>> {\n defaultValues?: Partial<TValues>;\n overrides?: Partial<CreateRendererOptions<TValues>>;\n}\n\nfunction toOptionsArray(\n src: OptionsSource | FormOption[] | undefined\n): OptionsSource | undefined {\n if (!src) return undefined;\n if (Array.isArray(src)) return { kind: 'static', options: src };\n return src;\n}\n\nfunction getAtPath(values: unknown, path: string): unknown {\n if (!path) return undefined;\n const segs = path\n .replace(/\\[(\\d+)\\]/g, '.$1')\n .split('.')\n .filter(Boolean);\n let cur: unknown = values;\n for (const s of segs) {\n if (cur == null) return undefined;\n cur = (cur as Record<string, unknown>)[s];\n }\n return cur;\n}\n\nfunction makeDepsKey(values: unknown, deps: string[] | undefined) {\n if (!deps || deps.length === 0) return '[]';\n try {\n return JSON.stringify(deps.map((d) => getAtPath(values, d)));\n } catch {\n return '[]';\n }\n}\n\nfunction useResolvedOptions<TValues>(\n values: TValues,\n source: OptionsSource | undefined,\n resolvers?: ResolverMap<TValues>\n): FormOption[] {\n const [opts, setOpts] = useState<FormOption[]>([]);\n const depKey = useMemo(() => {\n if (!source) return 'nil';\n if (source.kind === 'static') return JSON.stringify(source.options ?? []);\n return makeDepsKey(values, source.deps);\n }, [source, values]);\n\n useEffect(() => {\n let mounted = true;\n const run = async () => {\n if (!source) return setOpts([]);\n if (source.kind === 'static') return setOpts([...(source.options ?? [])]);\n const fn = resolvers?.[source.resolverKey];\n if (!fn) return setOpts([]);\n const res = await fn(values, source.args);\n if (mounted) setOpts([...(res ?? [])]);\n };\n run();\n return () => {\n mounted = false;\n };\n }, [\n depKey,\n source && source.kind === 'resolver' ? source.resolverKey : undefined,\n ]);\n return opts;\n}\n\nfunction fieldPath(\n parent: string | undefined,\n name?: string,\n arrayIndex?: number\n) {\n if (!name) return parent ?? '';\n const child =\n typeof arrayIndex === 'number'\n ? `${name.replace(/^\\$index$/, String(arrayIndex))}`\n : name;\n return parent\n ? `${parent}${typeof arrayIndex === 'number' ? `.${arrayIndex}` : ''}.${child}`.replace(\n /\\.+/g,\n '.'\n )\n : child;\n}\n\nexport function createFormRenderer<M extends AnySchemaModel = AnySchemaModel>(\n base: CreateRendererOptions<FormValuesFor<M>>\n) {\n const conf = base;\n const { driver } = conf;\n\n function InternalForm(props: {\n spec: FormSpec<M>;\n options?: RenderOptions<FormValuesFor<M>>;\n merged: CreateRendererOptions<FormValuesFor<M>>;\n }): React.ReactElement {\n const { spec, options, merged } = props;\n const baseZod = useMemo(() => buildZodWithRelations(spec), [spec]);\n const form = useForm<FormValuesFor<M>>({\n ...merged.formOptions,\n resolver: zodResolver(baseZod),\n defaultValues: options?.defaultValues as any,\n });\n\n const values = form.watch();\n\n const renderOne = (\n f: FieldSpec,\n parent?: string,\n arrayIndex?: number\n ): React.ReactElement | null => {\n const DriverField = driver.Field;\n const DriverLabel = driver.FieldLabel;\n const DriverDesc = driver.FieldDescription;\n const DriverError = driver.FieldError;\n const name = fieldPath(parent, f.name, arrayIndex);\n const visible = evalPredicate(values, f.visibleWhen);\n const enabled = evalPredicate(values, f.enabledWhen);\n const invalid = Boolean(form.getFieldState(name as any)?.invalid);\n\n if (!visible) return null;\n\n const id = name?.replace(/\\./g, '-');\n\n const commonWrapProps = {\n 'data-invalid': invalid,\n hidden: !visible,\n disabled: !enabled,\n };\n const labelNode = f.labelI18n ? (\n <DriverLabel htmlFor={id}>{f.labelI18n}</DriverLabel>\n ) : null;\n const descNode = f.descriptionI18n ? (\n <DriverDesc>{f.descriptionI18n}</DriverDesc>\n ) : null;\n\n if (f.kind === 'group') {\n const children = f.fields.map((c: FieldSpec, i: number) => (\n <React.Fragment key={`${name}-${i}`}>\n {renderOne(c, name, arrayIndex)}\n </React.Fragment>\n ));\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n {children}\n {descNode}\n </DriverField>\n );\n }\n\n if (f.kind === 'array') {\n return renderArray(f as ArrayFieldSpec, parent);\n }\n\n // Leaf controls\n return (\n <Controller\n key={name}\n name={name as any}\n control={form.control}\n render={({ field, fieldState }) => {\n const err = fieldState.error ? [fieldState.error] : [];\n const ariaInvalid = fieldState.invalid || undefined;\n\n if (f.kind === 'text') {\n const textField = f as TextFieldSpec;\n const Input = driver.Input;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Input\n id={id}\n aria-invalid={ariaInvalid}\n placeholder={f.placeholderI18n}\n autoComplete={textField.autoComplete}\n inputMode={textField.inputMode}\n maxLength={textField.maxLength}\n minLength={textField.minLength}\n disabled={!enabled}\n {...field}\n {...(f.uiProps as Record<string, unknown>)}\n />\n {descNode}\n {fieldState.invalid ? <DriverError errors={err} /> : null}\n </DriverField>\n );\n }\n if (f.kind === 'textarea') {\n const textareaField = f as TextareaFieldSpec;\n const Textarea = driver.Textarea;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Textarea\n id={id}\n aria-invalid={ariaInvalid}\n placeholder={f.placeholderI18n}\n rows={textareaField.rows}\n maxLength={textareaField.maxLength}\n disabled={!enabled}\n {...field}\n {...(f.uiProps as Record<string, unknown>)}\n />\n {descNode}\n {fieldState.invalid ? <DriverError errors={err} /> : null}\n </DriverField>\n );\n }\n if (f.kind === 'select') {\n const selectField = f as SelectFieldSpec;\n const Select = driver.Select;\n const src = toOptionsArray(selectField.options as any);\n const opts = useResolvedOptions(\n values,\n src as any,\n merged.resolvers\n );\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Select\n id={id}\n name={name as any}\n aria-invalid={ariaInvalid}\n disabled={!enabled}\n value={field.value}\n onChange={(v: unknown) => field.onChange(v)}\n options={opts}\n {...(f.uiProps as Record<string, unknown>)}\n />\n {descNode}\n {fieldState.invalid ? <DriverError errors={err} /> : null}\n </DriverField>\n );\n }\n if (f.kind === 'checkbox') {\n const Checkbox = driver.Checkbox;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Checkbox\n id={id}\n name={name as any}\n disabled={!enabled}\n checked={!!field.value}\n onCheckedChange={(v: boolean) => field.onChange(v)}\n {...(f.uiProps as Record<string, unknown>)}\n />\n {descNode}\n {fieldState.invalid ? <DriverError errors={err} /> : null}\n </DriverField>\n );\n }\n if (f.kind === 'radio') {\n const radioField = f as RadioFieldSpec;\n const RadioGroup = driver.RadioGroup;\n const src = toOptionsArray(radioField.options as any);\n const opts = useResolvedOptions(\n values,\n src as any,\n merged.resolvers\n );\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <RadioGroup\n id={id}\n name={name as any}\n disabled={!enabled}\n value={field.value}\n onValueChange={(v: unknown) => field.onChange(v)}\n options={opts}\n {...(f.uiProps as Record<string, unknown>)}\n />\n {descNode}\n {fieldState.invalid ? <DriverError errors={err} /> : null}\n </DriverField>\n );\n }\n if (f.kind === 'switch') {\n const Switch = driver.Switch;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Switch\n id={id}\n name={name as any}\n disabled={!enabled}\n checked={!!field.value}\n onCheckedChange={(v: boolean) => field.onChange(v)}\n {...(f.uiProps as Record<string, unknown>)}\n />\n {descNode}\n {fieldState.invalid ? <DriverError errors={err} /> : null}\n </DriverField>\n );\n }\n return <></>;\n }}\n />\n );\n };\n\n const renderArray = (f: ArrayFieldSpec, parent?: string) => {\n const name = fieldPath(parent, f.name);\n const { fields, append, remove } = useFieldArray({\n control: form.control,\n name: name as any,\n });\n const canAdd = f.max == null || fields.length < f.max;\n const canRemove = (idx: number) =>\n (f.min == null ? fields.length > 0 : fields.length > f.min) && idx >= 0;\n const Button = driver.Button;\n const Label = driver.FieldLabel;\n return (\n <div key={name}>\n {f.labelI18n ? <Label>{f.labelI18n}</Label> : null}\n {fields.map((row, idx) => (\n <div key={row.id ?? idx}>\n {renderOne(f.of as FieldSpec, name, idx)}\n {canRemove(idx) ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => remove(idx)}\n >\n Remove\n </Button>\n ) : null}\n </div>\n ))}\n {canAdd ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => append({} as any)}\n >\n Add\n </Button>\n ) : null}\n </div>\n );\n };\n\n const onSubmit = async (data: FormValuesFor<M>) => {\n const actionKey = spec.actions?.[0]?.key ?? 'submit';\n if (merged.onSubmitOverride) {\n return merged.onSubmitOverride(data, actionKey);\n }\n // default: noop\n };\n\n const Button = driver.Button;\n return (\n <form onSubmit={form.handleSubmit(onSubmit)}>\n {(spec.fields || []).map((f: FieldSpec, i: number) => (\n <React.Fragment key={i}>{renderOne(f)}</React.Fragment>\n ))}\n {spec.actions && spec.actions.length ? (\n <div>\n {spec.actions.map((a: { key: string; labelI18n: string }) => (\n <Button key={a.key} type=\"submit\">\n {a.labelI18n}\n </Button>\n ))}\n </div>\n ) : null}\n </form>\n );\n }\n\n return {\n render: (spec: FormSpec<M>, options?: RenderOptions<FormValuesFor<M>>) => (\n <InternalForm\n spec={spec}\n options={options}\n merged={{\n ...conf,\n ...(options?.overrides ?? {}),\n }}\n />\n ),\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","names":[],"sources":["../../src/contract-registry/schemas.ts"],"sourcesContent":[],"mappings":";;;;cAyBa,gCAA8B,CAAA,CAAA;;EAA9B,oBAAA,EAAA,oBAEZ;EAEY,2BAAA,EAIX,2BAAA;;;;;;EAJqC,wBAAA,EAAA,wBAAA;EAAA,wBAAA,EAAA,wBAAA;EAM1B,wBAAA,EAAA,wBA2BX;;;;;cAjCW,4BAA0B,CAAA,CAAA;;;;;cAM1B,4BAA0B,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;MAAA,IAAA,EAAA,MAAA;MAAA,MAAA,EAAA,QAAA;MA6B1B,UAAA,EAAA,YAAA;;;;;;;;;;;;;;;;;cAAA,gCAA8B,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAA,IAAA,EAAA,MAAA;QAAA,WAAA,EAAA,aAAA;QAO/B,YAAA,EAAA,cAA0B;QAC7B,IAAA,EAAA,MAAA;QADkC,MAAA,EAAA,QAAA;QAGzC,UAAA,EAAA,YAAA;MAAoB,CAAA,CAAA;MAEV,MAAA,cAAA,WAA8B,YAAA,CAAA,CAAA;MACjC,IAAA,cAAA,WAAA,YAAA,CAAA,CAAA;IADsC,CAAA,eAAA,CAAA;IAG7C,YAAA,eAAA,WAAA,YAAA,CAAA,CAAA;IAAwB,oBAAA,eAAA,WAAA,YAAA,CAAA,CAAA;;;;;;;;;;;;KARd,0BAAA,GAA6B,CAAA,CAAE,aAClC,8BAEP;KAEU,8BAAA,GAAiC,CAAA,CAAE,aACtC,kCAEP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","names":[],"sources":["../../src/contract-registry/schemas.ts"],"sourcesContent":["import z from 'zod';\nimport type {\n ContractRegistryItem,\n ContractRegistryItemType,\n ContractRegistryManifest,\n} from './types';\nimport { StabilityEnum } from '../ownership';\n\nconst ContractRegistryItemTypeValues = [\n 'contractspec:operation',\n 'contractspec:event',\n 'contractspec:presentation',\n 'contractspec:form',\n 'contractspec:feature',\n 'contractspec:workflow',\n 'contractspec:template',\n 'contractspec:integration',\n 'contractspec:data-view',\n 'contractspec:migration',\n 'contractspec:telemetry',\n 'contractspec:experiment',\n 'contractspec:app-config',\n 'contractspec:knowledge',\n] as const satisfies readonly ContractRegistryItemType[];\n\nexport const ContractRegistryItemTypeSchema = z.enum(\n ContractRegistryItemTypeValues\n);\n\nexport const ContractRegistryFileSchema = z.object({\n path: z.string().min(1),\n type: z.string().min(1),\n content: z.string().optional(),\n});\n\nexport const ContractRegistryItemSchema = z.object({\n name: z.string().min(1),\n type: ContractRegistryItemTypeSchema,\n version: z.number().int().nonnegative(),\n title: z.string().min(1),\n description: z.string().min(1),\n meta: z.object({\n stability: z.enum([\n StabilityEnum.Idea,\n StabilityEnum.InCreation,\n StabilityEnum.Experimental,\n StabilityEnum.Beta,\n StabilityEnum.Stable,\n StabilityEnum.Deprecated,\n ]),\n owners: z.array(z.string().min(1)).default([]),\n tags: z.array(z.string().min(1)).default([]),\n }),\n dependencies: z.array(z.string().min(1)).optional(),\n registryDependencies: z.array(z.string().min(1)).optional(),\n files: z.array(ContractRegistryFileSchema).min(1),\n schema: z\n .object({\n input: z.unknown().optional(),\n output: z.unknown().optional(),\n })\n .optional(),\n});\n\nexport const ContractRegistryManifestSchema = z.object({\n $schema: z.string().min(1).optional(),\n name: z.string().min(1),\n homepage: z.string().min(1).optional(),\n items: z.array(ContractRegistryItemSchema),\n});\n\nexport type ContractRegistryItemParsed = z.infer<\n typeof ContractRegistryItemSchema\n> &\n ContractRegistryItem;\n\nexport type ContractRegistryManifestParsed = z.infer<\n typeof ContractRegistryManifestSchema\n> &\n ContractRegistryManifest;\n"],"mappings":";;;;AAQA,MAAM,iCAAiC;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,iCAAiC,EAAE,KAC9C,+BACD;AAED,MAAa,6BAA6B,EAAE,OAAO;CACjD,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvB,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvB,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC/B,CAAC;AAEF,MAAa,6BAA6B,EAAE,OAAO;CACjD,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvB,MAAM;CACN,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;CACvC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE;CACxB,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC9B,MAAM,EAAE,OAAO;EACb,WAAW,EAAE,KAAK;GAChB,cAAc;GACd,cAAc;GACd,cAAc;GACd,cAAc;GACd,cAAc;GACd,cAAc;GACf,CAAC;EACF,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;EAC9C,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;EAC7C,CAAC;CACF,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU;CACnD,sBAAsB,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU;CAC3D,OAAO,EAAE,MAAM,2BAA2B,CAAC,IAAI,EAAE;CACjD,QAAQ,EACL,OAAO;EACN,OAAO,EAAE,SAAS,CAAC,UAAU;EAC7B,QAAQ,EAAE,SAAS,CAAC,UAAU;EAC/B,CAAC,CACD,UAAU;CACd,CAAC;AAEF,MAAa,iCAAiC,EAAE,OAAO;CACrD,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACrC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvB,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACtC,OAAO,EAAE,MAAM,2BAA2B;CAC3C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/contract-registry/types.ts"],"sourcesContent":[],"mappings":";;;KAEY,wBAAA;KAgBA,UAAA;AAhBA,UAkBK,oBAAA,CAlBmB;EAgBxB;EAEK,IAAA,EAAA,MAAA;EAcA;;;;;;EAeL,IAAA,EAAA,MAAA;EACC;EAAU,OAAA,CAAA,EAAA,MAAA;AAIvB;UApBiB,oBAAA;;QAET;;;;;eAKO;YACH;UACF;;;;SAID;;YAEG;aACC;;;UAII,wBAAA;;;;;SAKR"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contracts-adapter-hydration.d.ts","names":[],"sources":["../src/contracts-adapter-hydration.ts"],"sourcesContent":[],"mappings":";;;UAEiB,WAAA;;EAAA,KAAA,EAAA,MAAA;AAKjB;AASsB,iBATN,YAAA,CAS6B,WAAA,EAAA,MAAA,CAAA,EATM,WASN;AAChC,iBADS,uBAAA,CACT,SAAA,EAAA,gBAAA,GAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA;EAE2C,QAAA,CAAA,EAAA,MAAA;EACrD,OAAA,CAAA,EAAA,MAAA;EAAO,OAAA,EAD8C,WAC9C;IAAP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contracts-adapter-hydration.js","names":[],"sources":["../src/contracts-adapter-hydration.ts"],"sourcesContent":["import type { ResourceRegistry } from './resources';\n\nexport interface ReturnsDecl {\n isList: boolean;\n inner: string;\n}\n\nexport function parseReturns(returnsLike: string): ReturnsDecl {\n if (!returnsLike) return { isList: false, inner: 'JSON' };\n const trimmed = String(returnsLike).trim();\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return { isList: true, inner: trimmed.slice(1, -1).trim() };\n }\n return { isList: false, inner: trimmed };\n}\n\nexport async function hydrateResourceIfNeeded(\n resources: ResourceRegistry | undefined,\n result: unknown,\n opts: { template?: string; varName?: string; returns: ReturnsDecl }\n): Promise<unknown> {\n if (!resources || !opts.template) return result;\n const varName = opts.varName ?? 'id';\n\n const hydrateOne = async (item: any) => {\n if (item && typeof item[varName] !== 'undefined') {\n const key = String(item[varName]);\n const uri = opts.template!.replace('{id}', key);\n const match = resources.match(uri);\n if (match) {\n const resolved = await match.tmpl.resolve(\n match.params as unknown as Record<string, string>,\n {}\n );\n try {\n return JSON.parse(String(resolved.data || 'null'));\n } catch {\n return resolved.data;\n }\n }\n }\n return item;\n };\n\n if (opts.returns.isList && Array.isArray(result)) {\n const hydrated = await Promise.all(result.map((x) => hydrateOne(x)));\n return hydrated;\n }\n return await hydrateOne(result as any);\n}\n"],"mappings":";AAOA,SAAgB,aAAa,aAAkC;AAC7D,KAAI,CAAC,YAAa,QAAO;EAAE,QAAQ;EAAO,OAAO;EAAQ;CACzD,MAAM,UAAU,OAAO,YAAY,CAAC,MAAM;AAC1C,KAAI,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,IAAI,CAClD,QAAO;EAAE,QAAQ;EAAM,OAAO,QAAQ,MAAM,GAAG,GAAG,CAAC,MAAM;EAAE;AAE7D,QAAO;EAAE,QAAQ;EAAO,OAAO;EAAS;;AAG1C,eAAsB,wBACpB,WACA,QACA,MACkB;AAClB,KAAI,CAAC,aAAa,CAAC,KAAK,SAAU,QAAO;CACzC,MAAM,UAAU,KAAK,WAAW;CAEhC,MAAM,aAAa,OAAO,SAAc;AACtC,MAAI,QAAQ,OAAO,KAAK,aAAa,aAAa;GAChD,MAAM,MAAM,OAAO,KAAK,SAAS;GACjC,MAAM,MAAM,KAAK,SAAU,QAAQ,QAAQ,IAAI;GAC/C,MAAM,QAAQ,UAAU,MAAM,IAAI;AAClC,OAAI,OAAO;IACT,MAAM,WAAW,MAAM,MAAM,KAAK,QAChC,MAAM,QACN,EAAE,CACH;AACD,QAAI;AACF,YAAO,KAAK,MAAM,OAAO,SAAS,QAAQ,OAAO,CAAC;YAC5C;AACN,YAAO,SAAS;;;;AAItB,SAAO;;AAGT,KAAI,KAAK,QAAQ,UAAU,MAAM,QAAQ,OAAO,CAE9C,QADiB,MAAM,QAAQ,IAAI,OAAO,KAAK,MAAM,WAAW,EAAE,CAAC,CAAC;AAGtE,QAAO,MAAM,WAAW,OAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contracts-adapter-input.d.ts","names":[],"sources":["../src/contracts-adapter-input.ts"],"sourcesContent":[],"mappings":";;;;iBAOgB,aAAA,mBAAgC;iBAgChC,iCAAiC,sBACtC,iBAAA,CAAkB,cAAc;EAjC3B,mBAAa,EAAA,CAAA,KAAA,EA8HS,cA9HwB,GAAA,IAAA,EAAA,GAAA,IAAA;AAgC9D,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contracts-adapter-input.js","names":["acc: Record<string, unknown>","typeName"],"sources":["../src/contracts-adapter-input.ts"],"sourcesContent":["import type {\n AnyEnumType,\n AnyFieldType,\n AnySchemaModel,\n} from '@lssm/lib.schema';\nimport type { SchemaTypes } from '@pothos/core';\n\nexport function isSchemaModel(x: unknown): x is AnySchemaModel {\n return (\n typeof (x as AnySchemaModel | undefined)?.getPothosInput === 'function' &&\n typeof (x as AnySchemaModel | undefined)?.getZod === 'function'\n );\n}\n\ninterface PothosNamed {\n getPothos: () => { name: string };\n}\nfunction isFieldType(\n x: unknown\n): x is AnyFieldType | AnyEnumType | PothosNamed {\n return typeof (x as { getPothos?: unknown })?.getPothos === 'function';\n}\n\nfunction isEnumType(x: unknown): x is AnyEnumType {\n return (\n typeof (x as { getEnumValues?: unknown })?.getEnumValues === 'function' &&\n typeof (x as { getPothos?: unknown })?.getPothos === 'function'\n );\n}\n\nfunction mapScalarName(name: string): string {\n if (name === 'Boolean_unsecure') return 'Boolean';\n if (name === 'ID_unsecure') return 'ID';\n if (name === 'String_unsecure') return 'String';\n if (name === 'Int_unsecure') return 'Int';\n if (name === 'Float_unsecure') return 'Float';\n return name;\n}\n\nexport function createInputTypeBuilder<T extends SchemaTypes>(\n builder: PothosSchemaTypes.SchemaBuilder<T>\n) {\n const inputTypeCache = new Map<string, unknown>();\n const enumTypeCache = new Set<string>();\n\n function registerEnumsForModel(model: AnySchemaModel) {\n const entries = Object.entries(model.config.fields) as [\n string,\n {\n type:\n | AnySchemaModel['config']['fields'][string]['type']\n | AnySchemaModel;\n isOptional: boolean;\n isArray?: boolean;\n },\n ][];\n for (const [, field] of entries) {\n if (isSchemaModel(field.type as unknown)) {\n registerEnumsForModel(field.type as unknown as AnySchemaModel);\n } else if (isEnumType((field as { type: unknown }).type)) {\n const enumObj = field.type as unknown as AnyEnumType;\n const name =\n (enumObj as { getName?: () => string }).getName?.() ??\n enumObj.getPothos().name;\n if (!enumTypeCache.has(name)) {\n builder.enumType(name as any, {\n values: enumObj.getEnumValues() as any,\n });\n enumTypeCache.add(name);\n }\n }\n }\n }\n\n function ensureInputTypeForModel(model: AnySchemaModel) {\n const typeName = String(model.config?.name ?? 'Input');\n const cached = inputTypeCache.get(typeName) as unknown;\n if (cached) return cached;\n // Pre-register any enum types used within this model (including nested models)\n registerEnumsForModel(model);\n const created = builder.inputType(model.getPothosInput(), {\n fields: (t) => {\n const entries = Object.entries(model.config.fields) as [\n string,\n {\n type:\n | AnySchemaModel['config']['fields'][string]['type']\n | AnySchemaModel;\n isOptional: boolean;\n isArray?: boolean;\n },\n ][];\n const acc: Record<string, unknown> = {};\n for (const [key, field] of entries) {\n if (isSchemaModel(field.type as unknown)) {\n const nested = ensureInputTypeForModel(\n field.type as unknown as AnySchemaModel\n );\n const typeRef = field.isArray\n ? ([nested] as never)\n : (nested as never);\n acc[key] = t.field({\n type: typeRef,\n required: !field.isOptional,\n });\n } else if (isFieldType((field as { type: unknown }).type)) {\n const typeName = mapScalarName(\n String((field.type as PothosNamed).getPothos().name)\n );\n const typeRef = field.isArray\n ? ([typeName] as never)\n : (typeName as never);\n acc[key] = t.field({\n type: typeRef,\n required: !field.isOptional,\n });\n } else {\n const typeRef = field.isArray\n ? (['JSON'] as never)\n : ('JSON' as never);\n acc[key] = t.field({\n type: typeRef,\n required: !field.isOptional,\n });\n }\n }\n return acc as never;\n },\n });\n inputTypeCache.set(typeName, created);\n return created;\n }\n\n function buildInputFieldArgs(model: AnySchemaModel | null) {\n if (!model) return null;\n if (\n !model.config?.fields ||\n Object.keys(model.config.fields).length === 0\n ) {\n return null;\n }\n const ref = ensureInputTypeForModel(model);\n return ref as never;\n }\n\n return { buildInputFieldArgs };\n}\n"],"mappings":";AAOA,SAAgB,cAAc,GAAiC;AAC7D,QACE,OAAQ,GAAkC,mBAAmB,cAC7D,OAAQ,GAAkC,WAAW;;AAOzD,SAAS,YACP,GAC+C;AAC/C,QAAO,OAAQ,GAA+B,cAAc;;AAG9D,SAAS,WAAW,GAA8B;AAChD,QACE,OAAQ,GAAmC,kBAAkB,cAC7D,OAAQ,GAA+B,cAAc;;AAIzD,SAAS,cAAc,MAAsB;AAC3C,KAAI,SAAS,mBAAoB,QAAO;AACxC,KAAI,SAAS,cAAe,QAAO;AACnC,KAAI,SAAS,kBAAmB,QAAO;AACvC,KAAI,SAAS,eAAgB,QAAO;AACpC,KAAI,SAAS,iBAAkB,QAAO;AACtC,QAAO;;AAGT,SAAgB,uBACd,SACA;CACA,MAAM,iCAAiB,IAAI,KAAsB;CACjD,MAAM,gCAAgB,IAAI,KAAa;CAEvC,SAAS,sBAAsB,OAAuB;EACpD,MAAM,UAAU,OAAO,QAAQ,MAAM,OAAO,OAAO;AAUnD,OAAK,MAAM,GAAG,UAAU,QACtB,KAAI,cAAc,MAAM,KAAgB,CACtC,uBAAsB,MAAM,KAAkC;WACrD,WAAY,MAA4B,KAAK,EAAE;GACxD,MAAM,UAAU,MAAM;GACtB,MAAM,OACH,QAAuC,WAAW,IACnD,QAAQ,WAAW,CAAC;AACtB,OAAI,CAAC,cAAc,IAAI,KAAK,EAAE;AAC5B,YAAQ,SAAS,MAAa,EAC5B,QAAQ,QAAQ,eAAe,EAChC,CAAC;AACF,kBAAc,IAAI,KAAK;;;;CAM/B,SAAS,wBAAwB,OAAuB;EACtD,MAAM,WAAW,OAAO,MAAM,QAAQ,QAAQ,QAAQ;EACtD,MAAM,SAAS,eAAe,IAAI,SAAS;AAC3C,MAAI,OAAQ,QAAO;AAEnB,wBAAsB,MAAM;EAC5B,MAAM,UAAU,QAAQ,UAAU,MAAM,gBAAgB,EAAE,EACxD,SAAS,MAAM;GACb,MAAM,UAAU,OAAO,QAAQ,MAAM,OAAO,OAAO;GAUnD,MAAMA,MAA+B,EAAE;AACvC,QAAK,MAAM,CAAC,KAAK,UAAU,QACzB,KAAI,cAAc,MAAM,KAAgB,EAAE;IACxC,MAAM,SAAS,wBACb,MAAM,KACP;IACD,MAAM,UAAU,MAAM,UACjB,CAAC,OAAO,GACR;AACL,QAAI,OAAO,EAAE,MAAM;KACjB,MAAM;KACN,UAAU,CAAC,MAAM;KAClB,CAAC;cACO,YAAa,MAA4B,KAAK,EAAE;IACzD,MAAMC,aAAW,cACf,OAAQ,MAAM,KAAqB,WAAW,CAAC,KAAK,CACrD;IACD,MAAM,UAAU,MAAM,UACjB,CAACA,WAAS,GACVA;AACL,QAAI,OAAO,EAAE,MAAM;KACjB,MAAM;KACN,UAAU,CAAC,MAAM;KAClB,CAAC;UACG;IACL,MAAM,UAAU,MAAM,UACjB,CAAC,OAAO,GACR;AACL,QAAI,OAAO,EAAE,MAAM;KACjB,MAAM;KACN,UAAU,CAAC,MAAM;KAClB,CAAC;;AAGN,UAAO;KAEV,CAAC;AACF,iBAAe,IAAI,UAAU,QAAQ;AACrC,SAAO;;CAGT,SAAS,oBAAoB,OAA8B;AACzD,MAAI,CAAC,MAAO,QAAO;AACnB,MACE,CAAC,MAAM,QAAQ,UACf,OAAO,KAAK,MAAM,OAAO,OAAO,CAAC,WAAW,EAE5C,QAAO;AAGT,SADY,wBAAwB,MAAM;;AAI5C,QAAO,EAAE,qBAAqB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-views.docblock.d.ts","names":[],"sources":["../../../src/data-views/docs/data-views.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,qCAAqC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-views.docblock.js","names":["tech_contracts_data_views_DocBlocks: DocBlock[]"],"sources":["../../../src/data-views/docs/data-views.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_data_views_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.data-views',\n title: 'DataViewSpec Overview',\n summary:\n '`DataViewSpec` is the declarative contract for projecting entities into list/detail/table/grid experiences. Each spec ties to contract operations (`source.primary`, `source.item`) and describes how the UI should present, sort, and filter records. Host applications use the spec to render UI with shared components (`DataViewRenderer`, `DataViewList`, `DataViewTable`, `DataViewDetail`) while keeping presentation logic in a single source of truth.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/data-views',\n tags: ['tech', 'contracts', 'data-views'],\n body: \"# DataViewSpec Overview\\n\\n## Purpose\\n\\n`DataViewSpec` is the declarative contract for projecting entities into list/detail/table/grid experiences. Each spec ties to contract operations (`source.primary`, `source.item`) and describes how the UI should present, sort, and filter records. Host applications use the spec to render UI with shared components (`DataViewRenderer`, `DataViewList`, `DataViewTable`, `DataViewDetail`) while keeping presentation logic in a single source of truth.\\n\\n## Location\\n\\n- Type definitions and registry: `packages/libs/contracts/src/data-views.ts`\\n- React renderers: `packages/libs/design-system/src/components/data-view`\\n- CLI scaffolding: `contractspec create --type data-view`\\n\\n## Schema Highlights\\n\\n```ts\\nexport interface DataViewSpec {\\n meta: DataViewMeta; // ownership meta + { name, version, entity }\\n source: DataViewSource; // contract operations and refresh events\\n view: DataViewConfig; // union of list/detail/table/grid definitions\\n states?: DataViewStates; // optional empty/error/loading presentations\\n policy?: { flags?: string[]; pii?: string[] };\\n}\\n```\\n\\n- **DataViewMeta**: `name`, `version`, `entity`, ownership metadata (title, description, domain, owners, tags, stability).\\n- **DataViewSource**:\\n - `primary`: required query operation (`OpRef`) for fetching collections.\\n - `item`: optional detail query (recommended for `detail` views).\\n - `mutations`: optional create/update/delete operation refs.\\n - `refreshEvents`: events that should trigger refresh.\\n- **DataViewConfig** (union):\\n - `list`: card/compact list, `primaryField`, `secondaryFields`.\\n - `table`: column configuration (`columns`, alignments, density).\\n - `detail`: sections of fields for record inspection.\\n - `grid`: multi-column grid (rendered as card list today).\\n- **DataViewField**: `key`, `label`, `dataPath`, formatting hints (`format`), sort/filter toggles, optional presentation override.\\n- **DataViewFilter**: describes filter inputs (search, enum, number, date, boolean).\\n- **DataViewAction**: simple declarative actions (`navigation` or `operation`).\\n\\n## Registry Usage\\n\\n```ts\\nimport { DataViewRegistry } from '@lssm/lib.contracts/data-views';\\nimport { ResidentsDataView } from './data-views/residents.data-view';\\n\\nconst registry = new DataViewRegistry();\\nregistry.register(ResidentsDataView);\\n\\nconst listView = registry.get('residents.admin.list');\\n```\\n\\nRegistries guard against duplicate `(name, version)` pairs and make latest-version lookup trivial.\\n\\n## Rendering\\n\\n```tsx\\nimport { DataViewRenderer } from '@lssm/lib.design-system';\\nimport { ResidentsDataView } from '../contracts/data-views/residents.data-view';\\n\\nfunction ResidentsTable({ rows }: { rows: Record<string, unknown>[] }) {\\n return (\\n <DataViewRenderer\\n spec={ResidentsDataView}\\n items={rows}\\n onRowClick={(row) => console.log('Selected', row)}\\n />\\n );\\n}\\n```\\n\\nFor more control, use specific components:\\n\\n- `DataViewList` \\u2013 friendly cards/rows\\n- `DataViewTable` \\u2013 tabular presentation with optional header/footers\\n- `DataViewDetail` \\u2013 two-column grouped layout for record inspection\\n\\nRenderers rely on the field definitions (`dataPath`, `format`) to extract values and render them consistently.\\n\\n## CLI Scaffolding\\n\\n```bash\\n# Interactive wizard\\ncontractspec create --type data-view\\n\\n# Generates packages/.../data-views/<name>.data-view.ts\\n\\n# Optional renderer scaffold\\ncontractspec build path/to/<name>.data-view.ts\\n# \\u2192 produces <name>.renderer.tsx that wraps DataViewRenderer with sensible props\\n```\\n\\nWizard prompts:\\n- name (dot notation), version, entity\\n- kind (`list`, `table`, `detail`, `grid`)\\n- primary query operation (required) and optional item query\\n- fields (label, data path, format, sorting/filtering)\\n\\n## Authoring Guidelines\\n\\n1. **Separation of data & presentation**: keep fetching logic inside contract operations; DataViewSpec only references them via `source`.\\n2. **Versioning**: bump `meta.version` when field membership, ordering, or semantics change.\\n3. **Consistency**: reuse common field keys across modules to enable shared renderers and filters.\\n4. **States**: reference `PresentationRef` for empty/error/loader states to ensure consistent UX.\\n5. **Actions**: prefer referencing contract operations instead of embedding business logic in the UI.\\n\\n## Roadmap\\n\\n- Derived filters from `fields.filterable` (auto-generated UI).\\n- Table density presets per platform.\\n- Bridge to PolicySpec for field-level visibility (Phase 2 policy expansion).\\n- Automated docs/LLM sync via CLI.\\n\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_data_views_DocBlocks);\n"],"mappings":";;;;AAGA,MAAaA,sCAAkD,CAC7D;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAa;CACzC,MAAM;CACP,CACF;AACD,kBAAkB,oCAAoC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-generator.d.ts","names":[],"sources":["../../src/data-views/query-generator.ts"],"sourcesContent":[],"mappings":";;;UAEiB,mBAAA;YACL;EADK,IAAA,CAAA,EAAA;IAOA,KAAA,EAAA,MAAa;IASjB,SAAA,EAAA,KAAA,GAAA,MAAsB;EACP,CAAA;EAET,UAAA,CAAA,EAAA;IAAsB,IAAA,EAAA,MAAA;IAiChB,QAAA,EAAA,MAAA;EAAmB,CAAA;;;UA7C3B,aAAA;;SAER;;;;;;;;;;;;;;cAOI,sBAAA;;oBACe;mBAET,sBAAsB;yBAiChB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-generator.js","names":["spec: DataViewSpec","input: Record<string, any>","errors: string[]"],"sources":["../../src/data-views/query-generator.ts"],"sourcesContent":["import type { DataViewSpec } from '../data-views';\n\nexport interface DataViewQueryParams {\n filters?: Record<string, any>;\n sort?: { field: string; direction: 'asc' | 'desc' };\n pagination?: { page: number; pageSize: number };\n search?: string;\n}\n\nexport interface DataViewQuery {\n operationName: string;\n input: Record<string, any>;\n meta: {\n pagination: { page: number; pageSize: number; skip: number; take: number };\n sorting?: { field: string; direction: 'asc' | 'desc' };\n };\n}\n\nexport class DataViewQueryGenerator {\n constructor(private spec: DataViewSpec) {}\n\n generate(params: DataViewQueryParams): DataViewQuery {\n const { primary } = this.spec.source;\n const page = params.pagination?.page ?? 1;\n const pageSize = params.pagination?.pageSize ?? 20;\n const skip = (page - 1) * pageSize;\n const take = pageSize;\n\n const input: Record<string, any> = {\n skip,\n take,\n ...params.filters,\n };\n\n if (params.search) {\n input.search = params.search;\n }\n\n if (params.sort) {\n input.orderBy = {\n [params.sort.field]: params.sort.direction,\n };\n }\n\n return {\n operationName: primary.name,\n input,\n meta: {\n pagination: { page, pageSize, skip, take },\n sorting: params.sort,\n },\n };\n }\n\n validateParams(params: DataViewQueryParams): string[] {\n const errors: string[] = [];\n\n // Validate filters against spec\n if (params.filters && this.spec.view.filters) {\n for (const key of Object.keys(params.filters)) {\n const defined = this.spec.view.filters.find((f) => f.key === key);\n if (!defined) {\n errors.push(`Unknown filter key: ${key}`);\n }\n }\n }\n\n // Validate sort field\n if (params.sort) {\n const field = this.spec.view.fields.find(\n (f) => f.key === params.sort!.field\n );\n if (!field) {\n errors.push(`Unknown sort field: ${params.sort.field}`);\n } else if (field.sortable === false) {\n errors.push(`Field is not sortable: ${params.sort.field}`);\n }\n }\n\n return errors;\n }\n}\n"],"mappings":";AAkBA,IAAa,yBAAb,MAAoC;CAClC,YAAY,AAAQA,MAAoB;EAApB;;CAEpB,SAAS,QAA4C;EACnD,MAAM,EAAE,YAAY,KAAK,KAAK;EAC9B,MAAM,OAAO,OAAO,YAAY,QAAQ;EACxC,MAAM,WAAW,OAAO,YAAY,YAAY;EAChD,MAAM,QAAQ,OAAO,KAAK;EAC1B,MAAM,OAAO;EAEb,MAAMC,QAA6B;GACjC;GACA;GACA,GAAG,OAAO;GACX;AAED,MAAI,OAAO,OACT,OAAM,SAAS,OAAO;AAGxB,MAAI,OAAO,KACT,OAAM,UAAU,GACb,OAAO,KAAK,QAAQ,OAAO,KAAK,WAClC;AAGH,SAAO;GACL,eAAe,QAAQ;GACvB;GACA,MAAM;IACJ,YAAY;KAAE;KAAM;KAAU;KAAM;KAAM;IAC1C,SAAS,OAAO;IACjB;GACF;;CAGH,eAAe,QAAuC;EACpD,MAAMC,SAAmB,EAAE;AAG3B,MAAI,OAAO,WAAW,KAAK,KAAK,KAAK,SACnC;QAAK,MAAM,OAAO,OAAO,KAAK,OAAO,QAAQ,CAE3C,KAAI,CADY,KAAK,KAAK,KAAK,QAAQ,MAAM,MAAM,EAAE,QAAQ,IAAI,CAE/D,QAAO,KAAK,uBAAuB,MAAM;;AAM/C,MAAI,OAAO,MAAM;GACf,MAAM,QAAQ,KAAK,KAAK,KAAK,OAAO,MACjC,MAAM,EAAE,QAAQ,OAAO,KAAM,MAC/B;AACD,OAAI,CAAC,MACH,QAAO,KAAK,uBAAuB,OAAO,KAAK,QAAQ;YAC9C,MAAM,aAAa,MAC5B,QAAO,KAAK,0BAA0B,OAAO,KAAK,QAAQ;;AAI9D,SAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","names":[],"sources":["../../src/data-views/runtime.ts"],"sourcesContent":[],"mappings":";;;UAEiB,qBAAA;YACL;AADZ;AAKiB,UAAA,cAAc,CAAA,IACvB,GAGE,CAAA,CAAA;EAGG,IAAA,EANL,CAMK,EAAA;EAIiB,KAAA,EAAA,MAAA;EAEb,OAAA,EAAA,OAAA;EAIuB,KAAA,CAAA,EAb9B,KAa8B;;AAMa,cAhBxC,eAAA,CAgBwC;EAAO,QAAA,MAAA;;;sBAZ9B;iBAEb;2CAIuB;+CAMa,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","names":["config: DataViewRuntimeConfig"],"sources":["../../src/data-views/runtime.ts"],"sourcesContent":["import { DataViewRegistry, type DataViewSpec } from '../data-views';\n\nexport interface DataViewRuntimeConfig {\n registry: DataViewRegistry;\n // eventBus?: EventBus; // To be integrated with actual bus implementation\n}\n\nexport interface DataViewResult<T = any> {\n data: T[];\n total: number;\n loading: boolean;\n error?: Error;\n}\n\nexport class DataViewRuntime {\n private cache = new Map<string, { data: any[]; timestamp: number }>();\n private subscriptions = new Map<string, Set<() => void>>();\n\n constructor(private config: DataViewRuntimeConfig) {}\n\n register(spec: DataViewSpec) {\n this.config.registry.register(spec);\n }\n\n getSpec(name: string, version?: number) {\n return this.config.registry.get(name, version);\n }\n\n // Simulating query execution for now as we don't have a full backend context here\n // In a real app, this would call the backend API via an adapter\n async executeQuery(specName: string, params: any): Promise<DataViewResult> {\n const spec = this.getSpec(specName);\n if (!spec) {\n throw new Error(`DataView spec not found: ${specName}`);\n }\n\n // TODO: Implement actual data fetching via Operation runtime\n // For now, return empty or cached data\n\n return {\n data: [],\n total: 0,\n loading: false,\n };\n }\n\n invalidate(specName: string) {\n this.cache.delete(specName);\n this.notifySubscribers(specName);\n }\n\n subscribe(specName: string, callback: () => void) {\n if (!this.subscriptions.has(specName)) {\n this.subscriptions.set(specName, new Set());\n }\n this.subscriptions.get(specName)!.add(callback);\n return () => {\n this.subscriptions.get(specName)?.delete(callback);\n };\n }\n\n private notifySubscribers(specName: string) {\n this.subscriptions.get(specName)?.forEach((cb) => cb());\n }\n}\n"],"mappings":";AAcA,IAAa,kBAAb,MAA6B;CAC3B,AAAQ,wBAAQ,IAAI,KAAiD;CACrE,AAAQ,gCAAgB,IAAI,KAA8B;CAE1D,YAAY,AAAQA,QAA+B;EAA/B;;CAEpB,SAAS,MAAoB;AAC3B,OAAK,OAAO,SAAS,SAAS,KAAK;;CAGrC,QAAQ,MAAc,SAAkB;AACtC,SAAO,KAAK,OAAO,SAAS,IAAI,MAAM,QAAQ;;CAKhD,MAAM,aAAa,UAAkB,QAAsC;AAEzE,MAAI,CADS,KAAK,QAAQ,SAAS,CAEjC,OAAM,IAAI,MAAM,4BAA4B,WAAW;AAMzD,SAAO;GACL,MAAM,EAAE;GACR,OAAO;GACP,SAAS;GACV;;CAGH,WAAW,UAAkB;AAC3B,OAAK,MAAM,OAAO,SAAS;AAC3B,OAAK,kBAAkB,SAAS;;CAGlC,UAAU,UAAkB,UAAsB;AAChD,MAAI,CAAC,KAAK,cAAc,IAAI,SAAS,CACnC,MAAK,cAAc,IAAI,0BAAU,IAAI,KAAK,CAAC;AAE7C,OAAK,cAAc,IAAI,SAAS,CAAE,IAAI,SAAS;AAC/C,eAAa;AACX,QAAK,cAAc,IAAI,SAAS,EAAE,OAAO,SAAS;;;CAItD,AAAQ,kBAAkB,UAAkB;AAC1C,OAAK,cAAc,IAAI,SAAS,EAAE,SAAS,OAAO,IAAI,CAAC"}
|
package/dist/data-views.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-views.d.ts","names":[],"sources":["../src/data-views.ts"],"sourcesContent":[],"mappings":";;;;;KAIY,YAAA;UAEK,YAAA,SAAqB;EAF1B;EAEK,IAAA,EAAA,MAAA;EASA;EAEN,OAAA,EAAA,MAAA;EAEF;EAGI,MAAA,EAAA,MAAA;;AAEA,UATI,cAAA,CASJ;EAGK;EAAQ,OAAA,EAVf,KAUe;EAGd;EAUK,IAAA,CAAA,EArBR,KAqBQ;EAqBA;EAQA,SAAA,CAAA,EAAA;IAUA,MAAA,CAAA,EAzDJ,KAyDI;IAMA,MAAA,CAAA,EA9DJ,KA8DI;IACT,MAAA,CAAA,EA9DK,KA8DL;EACE,CAAA;EAGE;EACA,aAAA,CAAA,EAhEM,QAgEN,EAAA;;AAGK,KAhEL,mBAAA,GAgEwB,MAAQ,GAAA,QAAA,GAAA,UAAkB,GAAA,YAAA,GAAA,MAAA,GAAA,UAAA,GAAA,SAAA,GAAA,OAAA;AAK7C,UA3DA,aAAA,CA2DqB;EAKrB;EAOA,GAAA,EAAA,MAAA;EAOA;EAKL,KAAA,EAAA,MAAA;EACR;EACA,QAAA,EAAA,MAAA;EACA;EACA,WAAA,CAAA,EAAA,MAAA;EAAkB;EAEL,MAAA,CAAA,EA/EN,mBA+EoB;EACrB;EACA,QAAA,CAAA,EAAA,OAAA;EACE;EAAe,UAAA,CAAA,EAAA,OAAA;EAGV;EACT,KAAA,CAAA,EAAA,MAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA;EACE;EACF,YAAA,CAAA,EAhFS,eAgFT;;AAGQ,UAhFC,cAAA,CAgFD;EAAa,GAAA,EAAA,MAAA;EAOhB,KAAA,EAAA,MAAA;EAGI,KAAA,EAAA,MAAA;EAOP,IAAA,EAAA,QAAA,GAAA,MAAA,GAAA,QAAA,GAAA,MAAA,GAAA,SAAA;EAI6B,OAAA,CAAA,EAAA;IAAY,KAAA,EAAA,MAAA;IAenC,KAAA,EAAA,MAAW;;;UA5GV,cAAA;;;;;cAKH;;;;UAKG,gBAAA;;;;;UAMA,kBAAA;QACT;UACE;;;YAGE;YACA;;UAGK,kBAAA,SAA2B;;;;UAK3B,oBAAA,SAA6B;;aAEjC;;UAGI,mBAAA;;;;;;UAOA,mBAAA,SAA4B;;YAEjC;;;;UAKK,kBAAA,SAA2B;;;;KAKhC,cAAA,GACR,qBACA,uBACA,sBACA;UAEa,cAAA;UACP;UACA;YACE;;UAGK,YAAA;QACT;UACE;QACF;WACG;;;;;gBAEK;;cAOH,gBAAA;;iBAGI;UAOP;uCAI6B;;iBAevB,WAAA,OAAkB"}
|
package/dist/data-views.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-views.js","names":["candidate: DataViewSpec | undefined"],"sources":["../src/data-views.ts"],"sourcesContent":["import type { OwnerShipMeta } from './ownership';\nimport type { OpRef, EventRef, PresentationRef } from './features';\nimport type { ExperimentRef } from './experiments/spec';\n\nexport type DataViewKind = 'list' | 'detail' | 'table' | 'grid';\n\nexport interface DataViewMeta extends OwnerShipMeta {\n /** Fully-qualified data view name (e.g., \"sigil.spaces.admin_list\"). */\n name: string;\n /** Version of this data view. Increment on breaking changes. */\n version: number;\n /** Canonical entity slug (e.g., \"space\", \"resident\"). */\n entity: string;\n}\n\nexport interface DataViewSource {\n /** Primary query used to fetch items for this view. */\n primary: OpRef;\n /** Optional operation used to fetch a single item (detail views). */\n item?: OpRef;\n /** Optional record mutation operations (used for inline editing or actions). */\n mutations?: {\n create?: OpRef;\n update?: OpRef;\n delete?: OpRef;\n };\n /** Events that should trigger refresh when emitted. */\n refreshEvents?: EventRef[];\n}\n\nexport type DataViewFieldFormat =\n | 'text'\n | 'number'\n | 'currency'\n | 'percentage'\n | 'date'\n | 'dateTime'\n | 'boolean'\n | 'badge';\n\nexport interface DataViewField {\n /** Unique identifier for the field within the view. */\n key: string;\n /** Human-friendly label for headers/tooltips. */\n label: string;\n /** Dot-path into the data item (e.g., \"address.city\"). */\n dataPath: string;\n /** Optional description surfaced in tooltips or docs. */\n description?: string;\n /** Optional formatting hint for renderers. */\n format?: DataViewFieldFormat;\n /** When true, the field can be used for sorting. */\n sortable?: boolean;\n /** When true, the field can be used for filtering. */\n filterable?: boolean;\n /** Optional width hint for table layouts. */\n width?: 'auto' | 'xs' | 'sm' | 'md' | 'lg';\n /** Optional presentation override (e.g., card component). */\n presentation?: PresentationRef;\n}\n\nexport interface DataViewFilter {\n key: string;\n label: string;\n field: string;\n type: 'search' | 'enum' | 'number' | 'date' | 'boolean';\n options?: { value: string; label: string }[];\n}\n\nexport interface DataViewAction {\n key: string;\n label: string;\n kind: 'navigation' | 'operation';\n /** Operation invoked when kind === 'operation'. */\n operation?: OpRef;\n /** Optional feature flag gating the action. */\n requiresFlag?: string;\n}\n\nexport interface DataViewSections {\n title?: string;\n description?: string;\n fields: string[];\n}\n\nexport interface DataViewBaseConfig {\n kind: DataViewKind;\n fields: DataViewField[];\n primaryField?: string;\n secondaryFields?: string[];\n filters?: DataViewFilter[];\n actions?: DataViewAction[];\n}\n\nexport interface DataViewListConfig extends DataViewBaseConfig {\n kind: 'list';\n layout?: 'card' | 'compact';\n}\n\nexport interface DataViewDetailConfig extends DataViewBaseConfig {\n kind: 'detail';\n sections?: DataViewSections[];\n}\n\nexport interface DataViewTableColumn {\n field: string;\n label?: string;\n width?: 'auto' | 'xs' | 'sm' | 'md' | 'lg';\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface DataViewTableConfig extends DataViewBaseConfig {\n kind: 'table';\n columns?: DataViewTableColumn[];\n rowSelectable?: boolean;\n density?: 'comfortable' | 'compact';\n}\n\nexport interface DataViewGridConfig extends DataViewBaseConfig {\n kind: 'grid';\n columns?: number;\n}\n\nexport type DataViewConfig =\n | DataViewListConfig\n | DataViewDetailConfig\n | DataViewTableConfig\n | DataViewGridConfig;\n\nexport interface DataViewStates {\n empty?: PresentationRef;\n error?: PresentationRef;\n loading?: PresentationRef;\n}\n\nexport interface DataViewSpec {\n meta: DataViewMeta;\n source: DataViewSource;\n view: DataViewConfig;\n states?: DataViewStates;\n policy?: { flags?: string[]; pii?: string[] };\n experiments?: ExperimentRef[];\n}\n\nfunction keyOf(spec: DataViewSpec) {\n return `${spec.meta.name}.v${spec.meta.version}`;\n}\n\nexport class DataViewRegistry {\n private readonly items = new Map<string, DataViewSpec>();\n\n register(spec: DataViewSpec): this {\n const key = keyOf(spec);\n if (this.items.has(key)) throw new Error(`Duplicate data view ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): DataViewSpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): DataViewSpec | undefined {\n if (version != null) return this.items.get(`${name}.v${version}`);\n let candidate: DataViewSpec | undefined;\n let max = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > max) {\n max = spec.meta.version;\n candidate = spec;\n }\n }\n return candidate;\n }\n}\n\nexport function dataViewKey(spec: DataViewSpec) {\n return keyOf(spec);\n}\n"],"mappings":";AAgJA,SAAS,MAAM,MAAoB;AACjC,QAAO,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK;;AAGzC,IAAa,mBAAb,MAA8B;CAC5B,AAAiB,wBAAQ,IAAI,KAA2B;CAExD,SAAS,MAA0B;EACjC,MAAM,MAAM,MAAM,KAAK;AACvB,MAAI,KAAK,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,MAAM,uBAAuB,MAAM;AACtE,OAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAO;;CAGT,OAAuB;AACrB,SAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;;CAGjC,IAAI,MAAc,SAA4C;AAC5D,MAAI,WAAW,KAAM,QAAO,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,UAAU;EACjE,IAAIA;EACJ,IAAI,MAAM;AACV,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE;AACtC,OAAI,KAAK,KAAK,SAAS,KAAM;AAC7B,OAAI,KAAK,KAAK,UAAU,KAAK;AAC3B,UAAM,KAAK,KAAK;AAChB,gBAAY;;;AAGhB,SAAO;;;AAIX,SAAgB,YAAY,MAAoB;AAC9C,QAAO,MAAM,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accessibility_wcag_compliance_specs.docblock.d.ts","names":[],"sources":["../../src/docs/accessibility_wcag_compliance_specs.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,+CAA+C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accessibility_wcag_compliance_specs.docblock.js","names":["accessibility_wcag_compliance_specs_DocBlocks: DocBlock[]"],"sources":["../../src/docs/accessibility_wcag_compliance_specs.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from './registry';\n\nexport const accessibility_wcag_compliance_specs_DocBlocks: DocBlock[] = [\n {\n id: 'docs.accessibility_wcag_compliance_specs',\n title: 'Accessibility & WCAG Compliance \\u2014 **specs.md**',\n summary:\n '> **Goal:** Ship interfaces that are usable by everyone, by default. This spec sets non\\u2011negotiable rules, checklists, and CI gates to meet **WCAG\\u00a02.2 AA** (aim for AAA where low\\u2011cost), align with **EN\\u00a0301\\u00a0549** (EU), and keep parity on **web (Next.js)** and **mobile (Expo/React\\u00a0Native)**.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/accessibility_wcag_compliance_specs',\n tags: ['accessibility_wcag_compliance_specs'],\n body: '# Accessibility & WCAG Compliance \\u2014 **specs.md**\\n\\n> **Goal:** Ship interfaces that are usable by everyone, by default. This spec sets non\\u2011negotiable rules, checklists, and CI gates to meet **WCAG\\u00a02.2 AA** (aim for AAA where low\\u2011cost), align with **EN\\u00a0301\\u00a0549** (EU), and keep parity on **web (Next.js)** and **mobile (Expo/React\\u00a0Native)**.\\n\\n---\\n\\n## 0) Scope & Principles\\n\\n- **Standards:** WCAG\\u00a02.2\\u00a0AA (incl. new 2.2 SCs: Focus Not Obscured, Focus Appearance, Target Size, Dragging Movements, Accessible Authentication, Redundant Entry). EN\\u00a0301\\u00a0549 compliance by conformance to WCAG.\\n- **Principles:** Perceivable, Operable, Understandable, Robust (POUR).\\n- **Rule of ARIA:** \\u201cNo ARIA is better than bad ARIA.\\u201d Prefer native elements.\\n- **Definition of Done (DoD):** No Critical/Major a11y issues in CI; keyboard complete; SR (screen reader) smoke test passed; contrasts pass; acceptance criteria below satisfied.\\n- **Repo Alignment:** Web apps use **Radix Primitives + shadcn** wrappers centralized in `packages/lssm/libs/ui-kit-web`. Prefer those components over per\\u2011app duplicates (`packages/*/apps/*/src/components/ui`). When missing, add to `ui-kit-web` first, then adopt app\\u2011side.\\n\\n---\\n\\n## 1) Design Requirements (Design System & Tokens)\\n\\n**1.1 Color & Contrast**\\n\\n- Body text, icons essential to meaning: **\\u2265\\u00a04.5:1**; large text (\\u2265\\u00a018.66px regular / 14px bold): **\\u2265\\u00a03:1**.\\n- Interactive states (default/hover/active/disabled/focus) must maintain contrast **\\u2265\\u00a03:1** against adjacent colors; text within components follows text ratios.\\n- Provide light & dark themes with tokens that guarantee minimums. **Never rely solely on color** to convey meaning; pair with text, shape, or icon.\\n\\n**1.2 Focus Indicators (WCAG\\u00a02.4.11/12)**\\n\\n- Every interactive element has a **visible focus** with clear offset; indicator contrast **\\u2265\\u00a03:1** vs adjacent colors and indicator **area \\u2265\\u00a02\\u00a0CSS\\u00a0px** thick.\\n- Focus **must not be obscured** by sticky headers/footers or scroll containers.\\n\\n**1.3 Motion & Preferences**\\n\\n- Respect `prefers-reduced-motion`: suppress large parallax, auto\\u2011animations; provide instant alternatives.\\n- Avoid motion that could trigger vestibular issues; under PRM, use fade/scale under **150ms**.\\n\\n**1.4 Target Size (2.5.8)**\\n\\n- Hit areas **\\u2265\\u00a024\\u00d724\\u00a0CSS\\u00a0px** (web) and **\\u2265\\u00a044\\u00d744\\u00a0dp** (mobile) unless exempt.\\n\\n**1.5 Typography & Layout**\\n\\n- Support zoom to **400%** without loss of content/functionality; responsive reflow at **320\\u00a0CSS\\u00a0px** width.\\n- Maintain clear heading hierarchy (h1\\u2026h6), one **h1** per view.\\n\\n- Repository baseline (Web): default body text uses Tailwind `text-lg` (\\u224818px). As of 2025\\u201109\\u201120, the repository bumped all Tailwind typography scale usages by +1 step (e.g., `text-sm`\\u2192`text-base`, `text-base`\\u2192`text-lg`, \\u2026, `text-8xl`\\u2192`text-9xl`). For long\\u2011form content, default to `prose-lg`.\\n- Do not use `text-xs` for body copy. Reserve `text-sm` only for non\\u2011essential meta (timestamps, fine print) while ensuring contrast and touch targets remain compliant.\\n- When increasing font size, ensure line height supports readability. Prefer Tailwind defaults or `leading-relaxed`/`leading-7` for body text where dense blocks appear.\\n\\n**1.6 Iconography & Imagery**\\n\\n- Decorative images: `alt=\"\"` or `aria-hidden=\"true\"`.\\n- Informative images: concise, specific **alt**; complex charts require a **data table or long description**.\\n\\n---\\n\\n## 2) Content Requirements (UX Writing)\\n\\n- Links say **what happens** (avoid \\u201cclick here\\u201d).\\n- Buttons start with verbs; avoid ambiguous labels.\\n- Form labels are **visible**; placeholders are **not labels**.\\n- Error messages: human + programmatic association; avoid color\\u2011only.\\n- Authentication: allow **copy/paste**, password managers, and avoid cognitive tests alone (**3.3.7/3.3.8/3.3.9**).\\n- Avoid CAPTCHAs that block users; if unavoidable, provide **multiple alternatives** (logic-free).\\n\\n---\\n\\n## 3) Engineering Requirements (Web \\u2014 Next.js/React)\\n\\n> Use and extend `packages/lssm/libs/ui-kit-web` as the default UI surface. It wraps **Radix** primitives with sensible a11y defaults (focus rings, roles, keyboard, ARIA binding). When a gap exists, add it to `ui-kit-web` first.\\n\\n**3.1 Semantics & Landmarks**\\n\\n- Use native elements: `<button>`, `<a href>`, `<label for>`, `<fieldset>`, `<legend>`, `<table>`, etc.\\n- Landmarks per page: `header`, `nav`, `main`, `aside`, `footer`. Provide a **Skip to main content** link.\\n- Provide a **Route Announcer** (`aria-live=\"polite\"`) and move focus to page **h1** after navigation.\\n\\n**3.2 Keyboard**\\n\\n- All functionality available with keyboard alone. Tab order follows DOM/visual order; **no keyboard traps**.\\n- Common bindings:\\n - Space/Enter \\u2192 activate button; Enter on link;\\n - Esc closes dialogs/menus;\\n - Arrow keys for lists/menus/tablists with **roving tabindex**.\\n\\n**3.3 Focus Management**\\n\\n- On route change (Next.js), move focus to the page `<h1>` or container and announce via a live region.\\n- Dialogs/menus: **trap focus** inside; return focus to invoking control on close.\\n- Don\\u2019t steal focus except after explicit user action.\\n\\n**3.4 Forms**\\n\\n- Each input has a `<label>` or `aria-label`. Group related inputs with `<fieldset><legend>`.\\n- Associate errors via `aria-describedby` or inline IDs; announce with `role=\"alert\"` (assertive only for critical).\\n- Provide **autocomplete** tokens for known fields; show **inline validation** and do not block on **onBlur** alone.\\n\\n**3.5 ARIA Usage**\\n\\n- Only when needed; match patterns (dialog, menu, combobox, tablist, listbox) per ARIA Authoring Practices.\\n- Ensure **name/role/value** are programmatically determinable.\\n\\n**3.6 Media**\\n\\n- Videos: **captions**; provide **transcripts** for audio; audio descriptions for essential visual info.\\n- No auto\\u2011playing audio. Auto\\u2011playing video must be muted and pausable; provide controls.\\n\\n**3.7 Tables & Data**\\n\\n- Use `<th scope>` for headers; captions via `<caption>`; announce sorting via `aria-sort`.\\n- Provide CSV/JSON export where charts are primary.\\n\\n**3.8 Performance & Robustness**\\n\\n- Avoid content shifts that move focus; reserve space or use skeletons.\\n- Maintain accessible names through hydration/SSR; avoid `dangerouslySetInnerHTML` where possible.\\n\\n**3.9 Next.js specifics**\\n\\n- Use `next/link` for navigation; ensure links are **links**, not buttons.\\n- `next/image` must include **alt** (empty if decorative).\\n- Announce route changes with a **global live region** and shift focus to the new view.\\n\\n**3.10 Accessibility library integration**\\n\\n- Import `@lssm/lib.accessibility` at app root. It auto-imports its `styles.css` via the package entry; ensure bundlers keep CSS side effects. If your app tree-shakes CSS, explicitly import the stylesheet once in your root layout:\\n\\n```tsx\\n// app/layout.tsx\\nimport \\'@lssm/lib.accessibility\\'; // includes tokens and provider exports\\n// or if needed: import \\'@lssm/lib.accessibility/src/styles.css\\';\\n```\\n\\n- Wrap the app with `AccessibilityProvider` and include an element with `id=\"main\"` for the skip link target.\\n\\n---\\n\\n## 3b) lssm/ui-kit-web \\u2014 Component Patterns & Defaults\\n\\n> Source: `packages/lssm/libs/ui-kit-web/ui/*`\\n\\n- **Button/Input/Textarea**: Built\\u2011in `focus-visible` rings; ensure visible labels via `FormLabel` or `aria-label`.\\n- **Form** (`form.tsx`): `FormControl` wires `aria-invalid` and `aria-describedby` to `FormMessage` and `FormDescription`. Prefer `FormMessage` for inline errors. Add `role=\"alert\"` only for critical.\\n- **Dialog/Sheet/Dropdown**: Use Radix wrappers for focus\\u2011trap and return\\u2011focus. Provide `DialogTitle` + `DialogDescription` for name/description.\\n- **Select/Combobox**: Prefer `SelectTrigger` with visible label; for icon\\u2011only triggers, supply `aria-label`. Document examples in each app.\\n- **Tabs**: Use `TabsList`, `TabsTrigger`, `TabsContent`; names are programmatically determinable.\\n- **Toast/Toaster**: Prefer non\\u2011blocking announcements; map critical to assertive region; include action buttons with clear labels.\\n- **Table**: Use `TableCaption`; ensure `TableHead` cells use proper `scope`. Provide `aria-sort` on sortable headers.\\n- **Utilities to add (repo action)**:\\n - `SkipLink` component and pattern in layouts.\\n - `RouteAnnouncer` (`aria-live=\"polite\"`) and **FocusOnRouteChange** helper.\\n - `VisuallyHidden` wrapper (Radix visually-hidden or minimal utility).\\n - `useReducedMotion` helper; honor in animated components.\\n - Touch\\u2011size variants (\\u226544\\u00d744) for interactive atoms.\\n\\n---\\n\\n## 4) Engineering Requirements (Mobile \\u2014 Expo/React\\u00a0Native)\\n\\n- Set `accessibilityLabel`, `accessibilityHint`, and `accessibilityRole` on touchables.\\n- Ensure **hit slop** / min size **\\u2265\\u00a044\\u00d744\\u00a0dp**.\\n- Support Dynamic Type / font scaling; no clipped text at **200%**.\\n- Respect **Invert Colors** and **Reduce Motion**; avoid flashing.\\n- Group related items with `accessibilityElements` ordering; hide decoration with `accessible={false}` or `importantForAccessibility=\"no-hide-descendants\"` when appropriate.\\n- Test with **VoiceOver (iOS)** and **TalkBack (Android)**.\\n\\n---\\n\\n## 5) Component Patterns (Acceptance Rules)\\n\\n**Buttons & Links**\\n\\n- Use `<button>` for actions, `<a href>` for navigation. Provide disabled states that are perceivable beyond color.\\n\\n**Navigation**\\n\\n- Provide **Skip link**. One primary nav landmark. Indicate current page (`aria-current=\"page\"`).\\n\\n**Menus/Combobox/Autocomplete**\\n\\n- Follow ARIA patterns: focus moves into list; `aria-expanded`, `aria-controls`, `aria-activedescendant` when applicable; Esc closes; typing filters.\\n\\n**Modals/Dialogs**\\n\\n- `role=\"dialog\"` or `alertdialog` with **label**; focus trapped; background inert; Esc closes; return focus to trigger.\\n\\n**Tabs**\\n\\n- `role=\"tablist\"`; tabs are in the tab order; arrow keys switch focus; content is `role=\"tabpanel\"` with `aria-labelledby`.\\n\\n**Toasts/Notifications**\\n\\n- Non-critical: `aria-live=\"polite\"`; critical: `role=\"alert\"` sparingly.\\n\\n**Infinite Scroll / \\u201cLoad More\\u201d**\\n\\n- Provide **Load more** control; announce new content to SR; preserve keyboard position.\\n\\n**Drag & Drop (2.5.7)**\\n\\n- Provide **non\\u2011drag** alternative (e.g., move up/down buttons).\\n\\n**Charts & Maps**\\n\\n- Provide **table alternative** or textual summary; keyboard access to datapoints where interactive.\\n\\n---\\n\\n## 6) Testing & CI (Blocking Gates)\\n\\n**Static & Unit**\\n\\n- `eslint-plugin-jsx-a11y` \\u2014 error on violations.\\n- `jest-axe` \\u2014 unit tests for components.\\n\\n**Automated Integration**\\n\\n- `axe-core` via Playwright or Cypress on critical flows.\\n- `pa11y-ci` on key routes; threshold: **0 Critical / 0 Serious** to merge.\\n- Lighthouse CI a11y score **\\u2265\\u00a095** on target pages.\\n\\n**Manual QA (per release)**\\n\\n- **Keyboard patrol:** navigate primary flows without mouse.\\n- **Screen reader smoke:** NVDA (Windows) or VoiceOver (macOS/iOS) across login, navigation, forms, dialogs.\\n- **Zoom & Reflow:** 200\\u2013400% & 320\\u00a0px width.\\n- **Color/Contrast check:** tokens in both themes.\\n\\n**Reporting**\\n\\n- A11y issues labeled: `a11y-blocker`, `a11y-bug`, `a11y-enhancement` with WCAG ref.\\n\\n---\\n\\n## 7) Repository\\u2011Specific Adoption Plan\\n\\n- Centralize UI usage on `packages/lssm/libs/ui-kit-web` and de\\u2011duplicate per\\u2011app `components/ui` where feasible.\\n- Introduce `SkipLink`, `RouteAnnouncer`, `FocusOnRouteChange`, and `VisuallyHidden` in `ui-kit-web`. Adopt in app layouts (`app/layout.tsx`) first.\\n- Add `useReducedMotion` and wire into animated components (e.g., `drawer`, `tooltip`, `carousel`).\\n- Add touch\\u2011size variants to `Button`, `IconButton`, `TabsTrigger`, toggles.\\n- Document Select label patterns and error association in Forms.\\n\\n---\\n\\n## 8) Code Snippets\\n\\n**Skip Link**\\n\\n```html\\n<a\\n class=\"sr-only focus:not-sr-only focus-visible:outline focus-visible:ring-4 focus-visible:ring-offset-2\"\\n href=\"#main\"\\n >Skip to main content</a\\n>\\n<main id=\"main\">\\u2026</main>\\n```\\n\\n**Dialog (Radix + shadcn/ui) \\u2014 essentials**\\n\\n```tsx\\n// Ensure label, description, focus trap, and return focus on close remain intact\\n<Dialog>\\n <DialogTrigger asChild>\\n <button aria-haspopup=\"dialog\">Open settings</button>\\n </DialogTrigger>\\n <DialogContent aria-describedby=\"settings-desc\">\\n <DialogTitle>Settings</DialogTitle>\\n <p id=\"settings-desc\">Update your preferences.</p>\\n <DialogClose asChild>\\n <button>Close</button>\\n </DialogClose>\\n </DialogContent>\\n</Dialog>\\n```\\n\\n**Form error association**\\n\\n```tsx\\n<label htmlFor=\"email\">Email</label>\\n<input id=\"email\" name=\"email\" type=\"email\" aria-describedby=\"email-err\" />\\n<p id=\"email-err\" role=\"alert\">Enter a valid email.</p>\\n```\\n\\n**Route change announcement (Next.js)**\\n\\n```tsx\\n// Add once at app root\\n<div\\n aria-live=\"polite\"\\n aria-atomic=\"true\"\\n id=\"route-announcer\"\\n className=\"sr-only\"\\n/>\\n```\\n\\n---\\n\\n## 9) Exceptions & Waivers\\n\\n- If a criterion cannot be met, file an issue with: context, attempted alternatives, WCAG reference, impact assessment, and a remediation date. **Temporary waivers only.**\\n\\n---\\n\\n## 10) Ownership\\n\\n- **Design:** maintains token contrast, component specs.\\n- **Engineering:** enforces CI gates, implements patterns.\\n- **QA:** runs manual checks per release.\\n- **PM:** blocks release if AA not met on user\\u2011visible flows.\\n\\n---\\n\\n## 11) References (internalize; no external dependency at runtime)\\n\\n- WCAG\\u00a02.2 (AA), EN\\u00a0301\\u00a0549. ARIA Authoring Practices. Platform HIG (Apple, Material).\\n- `packages/lssm/libs/ui-kit-web` as the canonical UI source for web.\\n\\n> **Bottom line:** Shipping means **accessible by default**. We don\\u2019t trade a11y for speed; we bake it into speed.\\n\\n---\\n\\n## 12) Adoption Status (2025-09-23)\\n\\n- web-artisan: AccessibilityProvider integrated; sr-only/forced-colors applied; 44x44 targets; forms announce errors; jest-axe and cypress-axe in place.\\n- web-strit: AccessibilityProvider integrated; forced-colors, sr-only; forms announce errors; 44x44 targets; contrast tokens and text-scale wired; jest-axe and cypress-axe in place.\\n- web-coliving: AccessibilityProvider integrated; forced-colors and focus visibility added; text-scale wired; landing pages converted to `Section`/stacks with text-lg defaults; CTA capture standardized; ESLint guard for text-xs in main content; jest-axe and cypress-axe in place. Next: audit icon-only controls and ensure 44x44 targets; add role=\"alert\" where critical.\\n\\n> CI gates: run eslint a11y, jest-axe on components, and cypress-axe on critical flows per app.\\n\\n---\\n\\n## 13) CI Hardening & Visual QA\\n\\n- Linting: Run eslint with jsx-a11y rules across all web apps; block on violations.\\n- Unit: Run jest-axe for ui-kit-web and app-level components.\\n- Integration: cypress-axe on key flows (auth, forms, dialogs, tables).\\n- Synthetic scans: pa11y-ci on critical pages (0 Critical/Serious policy).\\n- Performance/A11y audit: Lighthouse CI with a11y score >= 95 on target routes.\\n- Artifacts: Upload pa11y and Lighthouse reports per PR; annotate failures.\\n\\n### Recent additions (2025-09-26)\\n\\n- AutocompleteInput (groceries): Upgraded to ARIA combobox pattern with `aria-controls`, `aria-activedescendant`, `Escape`/`Tab` handling, and labelled listbox.\\n- Cypress a11y tests added for furniture and incidents modules on `/modules` and operators flows; checks run axe with critical/serious impacts.\\n\\n## 14) Accessibility Telemetry (PostHog)\\n\\n- Events (anonymized): a11y_pref_changed (text_scale, contrast_mode, reduce_motion), a11y_panel_opened.\\n- Properties: app, route, previous_value, new_value, timestamp.\\n- Dashboards: Adoption over time, per app/route; correlation with reduced bounce on forms.\\n- Privacy: No PII; aggregate only.\\n',\n },\n];\nregisterDocBlocks(accessibility_wcag_compliance_specs_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,gDAA4D,CACvE;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM,CAAC,sCAAsC;CAC7C,MAAM;CACP,CACF;AACD,kBAAkB,8CAA8C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta.docs.d.ts","names":[],"sources":["../../src/docs/meta.docs.ts"],"sourcesContent":[],"mappings":";;;cAGa,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta.docs.js","names":["metaDocs: DocBlock[]"],"sources":["../../src/docs/meta.docs.ts"],"sourcesContent":["import type { DocBlock } from './types';\nimport { registerDocBlocks } from './registry';\n\nexport const metaDocs: DocBlock[] = [\n {\n id: 'docs.meta.docblocks-process',\n title: 'DocBlocks process',\n summary: 'How to author goal/how/usage DocBlocks close to code.',\n kind: 'reference',\n visibility: 'mixed',\n route: '/docs/meta/docblocks-process',\n tags: ['docs', 'process'],\n body: `## DocBlocks authoring rules\n\n- Colocate docs beside implementation; avoid barrel /docs folders.\n- Split intent:\n - **goal**: why this exists (before implementation).\n - **how**: operational/runbook steps.\n - **usage**: quick checklist for consumers.\n- Use \\`visibility\\`: public | internal | mixed.\n- Prefer routes like \\`/docs/<domain>/<topic>/<kind>\\`; ids mirror that.\n- Keep body Markdown LLM-friendly; avoid HTML.\n- Add owners/tags/domain/stability when known.\n- For presentations/markdown outputs, rely on TransformEngine via DocRegistry.\n- No sourcePath; DocBlocks are canonical.`,\n },\n];\nregisterDocBlocks(metaDocs);\n"],"mappings":";;;AAGA,MAAaA,WAAuB,CAClC;CACE,IAAI;CACJ,OAAO;CACP,SAAS;CACT,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM,CAAC,QAAQ,UAAU;CACzB,MAAM;;;;;;;;;;;;;CAaP,CACF;AACD,kBAAkB,SAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentations.d.ts","names":[],"sources":["../../src/docs/presentations.ts"],"sourcesContent":[],"mappings":";;;;;;UAQiB,sBAAA;;AAAjB;AAgBA;AAkCA;EACS,SAAA,CAAA,EAAA,MAAA;EACG;EACT,WAAA,CAAA,EAAA,MAAA;EAAwB;EA2BX,cAAA,CAAA,EAvEG,kBAuEuB,EAAA;EACjC;EACG,cAAA,CAAA,EAAA,MAAA;EACT;EAAgB,gBAAA,CAAA,EAtEE,SAsEF;AAoBnB;AACU,UAxFO,oBAAA,CAwFP;EACE,KAAA,EAAA,MAAA;EACT,UAAA,EAxFW,wBAwFX;EAAoB,KAAA,EAvFd,QAuFc;AAQvB;AACU,iBAjEM,wBAAA,CAiEN,KAAA,EAhED,QAgEC,EAAA,OAAA,CAAA,EA/DE,sBA+DF,CAAA,EA9DP,wBA8DO;AACE,iBApCI,0BAAA,CAoCJ,KAAA,EAnCH,QAmCG,EAAA,OAAA,CAAA,EAlCA,sBAkCA,CAAA,EAjCT,gBAiCS;AACT,iBAda,6BAAA,CAcb,MAAA,EAbO,QAaP,EAAA,EAAA,OAAA,CAAA,EAZS,sBAYT,CAAA,EAXA,oBAWA,EAAA;AAAgB,iBAHH,4BAAA,CAGG,MAAA,EAFT,QAES,EAAA,EAAA,OAAA,CAAA,EADP,sBACO,CAAA,EAAhB,gBAAgB,EAAA;AAIH,iBAAA,YAAA,CACN,MAAA,EAAA,oBACE,EAAA,CAAA,EAAA,CAAA,MAAA,EAAA,wBAAwB,CAAA,EAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentations.js","names":["DEFAULT_TARGETS: PresentationTarget[]"],"sources":["../../src/docs/presentations.ts"],"sourcesContent":["import type { PresentationSpec } from '../presentations';\nimport type {\n PresentationDescriptorV2,\n PresentationTarget,\n} from '../presentations.v2';\nimport type { DocBlock } from './types';\nimport type { Stability } from '../ownership';\n\nexport interface DocPresentationOptions {\n /**\n * Namespace for presentation meta.name (e.g., web-landing.docs.ops).\n * Defaults to the DocBlock id.\n */\n namespace?: string;\n /** Route prefix when no explicit route is provided on the block. Defaults to /docs. */\n routePrefix?: string;\n /** Default presentation targets. */\n defaultTargets?: PresentationTarget[];\n /** Default version when block.version is not set. */\n defaultVersion?: number;\n /** Default stability if not provided on the DocBlock. */\n defaultStability?: Stability;\n}\n\nexport interface DocPresentationRoute {\n route: string;\n descriptor: PresentationDescriptorV2;\n block: DocBlock;\n}\n\nconst DEFAULT_TARGETS: PresentationTarget[] = [\n 'markdown',\n 'application/json',\n 'application/xml',\n 'react',\n];\n\nfunction normalizeRoute(route: string): string {\n if (!route.length) return '/';\n const withLeading = route.startsWith('/') ? route : `/${route}`;\n return withLeading === '/' ? '/' : withLeading.replace(/\\/+$/, '');\n}\n\nfunction deriveRoute(block: DocBlock, routePrefix?: string): string {\n if (block.route) return normalizeRoute(block.route);\n const prefix = routePrefix ?? '/docs';\n const slug = block.id\n .replace(/^docs\\.?/, '')\n .replace(/\\./g, '/')\n .replace(/\\/+/g, '/');\n const path = slug.startsWith('/') ? slug : `${prefix}/${slug}`;\n return normalizeRoute(path);\n}\n\nfunction buildName(block: DocBlock, namespace?: string): string {\n return namespace ? `${namespace}.${block.id}` : block.id;\n}\n\nexport function docBlockToPresentationV2(\n block: DocBlock,\n options?: DocPresentationOptions\n): PresentationDescriptorV2 {\n const targets = options?.defaultTargets ?? DEFAULT_TARGETS;\n const version = block.version ?? options?.defaultVersion ?? 1;\n const stability = block.stability ?? options?.defaultStability ?? 'stable';\n\n return {\n meta: {\n name: buildName(block, options?.namespace),\n version,\n description: block.summary ?? block.title,\n tags: block.tags,\n owners: block.owners,\n domain: block.domain,\n stability,\n },\n policy:\n block.visibility && block.visibility !== 'public'\n ? { flags: [block.visibility] }\n : undefined,\n source: {\n type: 'blocknotejs',\n docJson: block.body,\n },\n targets,\n };\n}\n\nexport function docBlockToPresentationSpec(\n block: DocBlock,\n options?: DocPresentationOptions\n): PresentationSpec {\n const version = block.version ?? options?.defaultVersion ?? 1;\n const stability = block.stability ?? options?.defaultStability ?? 'stable';\n\n return {\n meta: {\n name: buildName(block, options?.namespace),\n version,\n stability,\n tags: block.tags,\n owners: block.owners,\n description: block.summary ?? block.title,\n },\n content: {\n kind: 'markdown',\n content: block.body,\n },\n };\n}\n\nexport function docBlocksToPresentationRoutes(\n blocks: DocBlock[],\n options?: DocPresentationOptions\n): DocPresentationRoute[] {\n return blocks.map((block) => ({\n block,\n route: deriveRoute(block, options?.routePrefix),\n descriptor: docBlockToPresentationV2(block, options),\n }));\n}\n\nexport function docBlocksToPresentationSpecs(\n blocks: DocBlock[],\n options?: DocPresentationOptions\n): PresentationSpec[] {\n return blocks.map((block) => docBlockToPresentationSpec(block, options));\n}\n\nexport function mapDocRoutes(\n routes: DocPresentationRoute[]\n): [string, PresentationDescriptorV2][] {\n return routes.map(({ route, descriptor }) => [route, descriptor]);\n}\n"],"mappings":";AA8BA,MAAMA,kBAAwC;CAC5C;CACA;CACA;CACA;CACD;AAED,SAAS,eAAe,OAAuB;AAC7C,KAAI,CAAC,MAAM,OAAQ,QAAO;CAC1B,MAAM,cAAc,MAAM,WAAW,IAAI,GAAG,QAAQ,IAAI;AACxD,QAAO,gBAAgB,MAAM,MAAM,YAAY,QAAQ,QAAQ,GAAG;;AAGpE,SAAS,YAAY,OAAiB,aAA8B;AAClE,KAAI,MAAM,MAAO,QAAO,eAAe,MAAM,MAAM;CACnD,MAAM,SAAS,eAAe;CAC9B,MAAM,OAAO,MAAM,GAChB,QAAQ,YAAY,GAAG,CACvB,QAAQ,OAAO,IAAI,CACnB,QAAQ,QAAQ,IAAI;AAEvB,QAAO,eADM,KAAK,WAAW,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAC7B;;AAG7B,SAAS,UAAU,OAAiB,WAA4B;AAC9D,QAAO,YAAY,GAAG,UAAU,GAAG,MAAM,OAAO,MAAM;;AAGxD,SAAgB,yBACd,OACA,SAC0B;CAC1B,MAAM,UAAU,SAAS,kBAAkB;CAC3C,MAAM,UAAU,MAAM,WAAW,SAAS,kBAAkB;CAC5D,MAAM,YAAY,MAAM,aAAa,SAAS,oBAAoB;AAElE,QAAO;EACL,MAAM;GACJ,MAAM,UAAU,OAAO,SAAS,UAAU;GAC1C;GACA,aAAa,MAAM,WAAW,MAAM;GACpC,MAAM,MAAM;GACZ,QAAQ,MAAM;GACd,QAAQ,MAAM;GACd;GACD;EACD,QACE,MAAM,cAAc,MAAM,eAAe,WACrC,EAAE,OAAO,CAAC,MAAM,WAAW,EAAE,GAC7B;EACN,QAAQ;GACN,MAAM;GACN,SAAS,MAAM;GAChB;EACD;EACD;;AAGH,SAAgB,2BACd,OACA,SACkB;CAClB,MAAM,UAAU,MAAM,WAAW,SAAS,kBAAkB;CAC5D,MAAM,YAAY,MAAM,aAAa,SAAS,oBAAoB;AAElE,QAAO;EACL,MAAM;GACJ,MAAM,UAAU,OAAO,SAAS,UAAU;GAC1C;GACA;GACA,MAAM,MAAM;GACZ,QAAQ,MAAM;GACd,aAAa,MAAM,WAAW,MAAM;GACrC;EACD,SAAS;GACP,MAAM;GACN,SAAS,MAAM;GAChB;EACF;;AAGH,SAAgB,8BACd,QACA,SACwB;AACxB,QAAO,OAAO,KAAK,WAAW;EAC5B;EACA,OAAO,YAAY,OAAO,SAAS,YAAY;EAC/C,YAAY,yBAAyB,OAAO,QAAQ;EACrD,EAAE;;AAGL,SAAgB,6BACd,QACA,SACoB;AACpB,QAAO,OAAO,KAAK,UAAU,2BAA2B,OAAO,QAAQ,CAAC;;AAG1E,SAAgB,aACd,QACsC;AACtC,QAAO,OAAO,KAAK,EAAE,OAAO,iBAAiB,CAAC,OAAO,WAAW,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","names":[],"sources":["../../src/docs/registry.ts"],"sourcesContent":[],"mappings":";;;;;;KAUY,KAAA;;AAAZ,CAAA;AAEa,cAAA,WAAA,CAAW;EAGF,iBAAA,MAAA;EAA2B,WAAA,CAAA,MAAA,CAAA,EAA3B,QAA2B,EAAA,EAAA,OAAA,CAAA,EAAA,sBAAA;EAI/B,QAAA,CAAA,KAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAoB,sBAApB,CAAA,EAAA,IAAA;EAAoB,IAAA,CAAA,CAAA,EAQ5B,oBAR4B,EAAA;EAQ5B,GAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAIS,oBAJT,GAAA,SAAA;EAIS,aAAA,CAAA,CAAA,EAAA,CAAA,MAAA,EAIS,wBAJT,CAAA,EAAA;EAIS,mBAAA,CAAA,OAAA,CAAA,EAII,sBAJJ,CAAA,EAI6B,gBAJ7B,EAAA;;AAI6B,cAgB5C,kBAhB4C,EAgB1B,WAhB0B;AAAgB,iBAkBzD,iBAAA,CAlByD,MAAA,EAkB/B,QAlB+B,EAAA,CAAA,EAAA,IAAA;AAgB5D,iBAeG,uBAAA,CAAA,CAfe,EAeY,QAfQ,EAAA;AAEnC,iBAiBA,KAAA,CAjBiB,EAAA,EAAA,MAAS,CAAA,EAiBP,KAjBe"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","names":["requiredFields: (keyof DocBlock)[]"],"sources":["../../src/docs/registry.ts"],"sourcesContent":["import type { PresentationDescriptorV2 } from '../presentations.v2';\nimport type { PresentationSpec } from '../presentations';\nimport type { DocBlock } from './types';\nimport {\n docBlockToPresentationSpec,\n docBlocksToPresentationRoutes,\n type DocPresentationOptions,\n type DocPresentationRoute,\n} from './presentations';\n\nexport type DocId = string & { __docId: true };\n\nexport class DocRegistry {\n private readonly routes = new Map<string, DocPresentationRoute>();\n\n constructor(blocks: DocBlock[] = [], options?: DocPresentationOptions) {\n blocks.forEach((block) => this.register(block, options));\n }\n\n register(block: DocBlock, options?: DocPresentationOptions): this {\n const [route] = docBlocksToPresentationRoutes([block], options);\n if (route) {\n this.routes.set(block.id, route);\n }\n return this;\n }\n\n list(): DocPresentationRoute[] {\n return [...this.routes.values()];\n }\n\n get(id: string): DocPresentationRoute | undefined {\n return this.routes.get(id);\n }\n\n toRouteTuples(): [string, PresentationDescriptorV2][] {\n return this.list().map(({ route, descriptor }) => [route, descriptor]);\n }\n\n toPresentationSpecs(options?: DocPresentationOptions): PresentationSpec[] {\n return this.list().map(({ block }) =>\n docBlockToPresentationSpec(block, options)\n );\n }\n}\n\nconst requiredFields: (keyof DocBlock)[] = [\n 'id',\n 'title',\n 'body',\n 'kind',\n 'visibility',\n 'route',\n];\n\nexport const defaultDocRegistry = new DocRegistry();\n\nexport function registerDocBlocks(blocks: DocBlock[]): void {\n for (const block of blocks) {\n for (const field of requiredFields) {\n if (!block[field]) {\n throw new Error(\n `DocBlock ${block.id ?? '<missing id>'} missing field ${String(field)}`\n );\n }\n }\n defaultDocRegistry.register(block);\n }\n}\n\nexport function listRegisteredDocBlocks(): DocBlock[] {\n return defaultDocRegistry.list().map((r) => r.block);\n}\n\nexport function docId(id: string): DocId {\n const found = defaultDocRegistry.get(id);\n if (!found) throw new Error(`DocBlock not registered: ${id}`);\n return id as DocId;\n}\n"],"mappings":";;;AAYA,IAAa,cAAb,MAAyB;CACvB,AAAiB,yBAAS,IAAI,KAAmC;CAEjE,YAAY,SAAqB,EAAE,EAAE,SAAkC;AACrE,SAAO,SAAS,UAAU,KAAK,SAAS,OAAO,QAAQ,CAAC;;CAG1D,SAAS,OAAiB,SAAwC;EAChE,MAAM,CAAC,SAAS,8BAA8B,CAAC,MAAM,EAAE,QAAQ;AAC/D,MAAI,MACF,MAAK,OAAO,IAAI,MAAM,IAAI,MAAM;AAElC,SAAO;;CAGT,OAA+B;AAC7B,SAAO,CAAC,GAAG,KAAK,OAAO,QAAQ,CAAC;;CAGlC,IAAI,IAA8C;AAChD,SAAO,KAAK,OAAO,IAAI,GAAG;;CAG5B,gBAAsD;AACpD,SAAO,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,iBAAiB,CAAC,OAAO,WAAW,CAAC;;CAGxE,oBAAoB,SAAsD;AACxE,SAAO,KAAK,MAAM,CAAC,KAAK,EAAE,YACxB,2BAA2B,OAAO,QAAQ,CAC3C;;;AAIL,MAAMA,iBAAqC;CACzC;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,qBAAqB,IAAI,aAAa;AAEnD,SAAgB,kBAAkB,QAA0B;AAC1D,MAAK,MAAM,SAAS,QAAQ;AAC1B,OAAK,MAAM,SAAS,eAClB,KAAI,CAAC,MAAM,OACT,OAAM,IAAI,MACR,YAAY,MAAM,MAAM,eAAe,iBAAiB,OAAO,MAAM,GACtE;AAGL,qBAAmB,SAAS,MAAM;;;AAItC,SAAgB,0BAAsC;AACpD,QAAO,mBAAmB,MAAM,CAAC,KAAK,MAAM,EAAE,MAAM;;AAGtD,SAAgB,MAAM,IAAmB;AAEvC,KAAI,CADU,mBAAmB,IAAI,GAAG,CAC5B,OAAM,IAAI,MAAM,4BAA4B,KAAK;AAC7D,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"better-auth-nextjs.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/auth/better-auth-nextjs.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,wCAAwC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"better-auth-nextjs.docblock.js","names":["tech_auth_better_auth_nextjs_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/auth/better-auth-nextjs.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_auth_better_auth_nextjs_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.auth.better-auth-nextjs',\n title: 'Better Auth + Next.js integration (ContractSpec)',\n summary:\n 'How ContractSpec wires Better Auth into Next.js (server config, client singleton, and proxy cookie-only redirects).',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/auth/better-auth-nextjs',\n tags: ['auth', 'better-auth', 'nextjs', 'cookies', 'proxy', 'hmr'],\n body: `# Better Auth + Next.js integration (ContractSpec)\n\nThis repo uses Better Auth as the primary auth layer (sessions, organizations, teams, API keys, and OAuth).\n\n## Server config (Better Auth)\n\n- Source: \\`packages/bundles/contractspec-studio/src/application/services/auth.ts\\`\n- Important: \\`nextCookies()\\` must be the **last** plugin in the Better Auth plugin list so \\`Set-Cookie\\` is applied correctly in Next.js environments.\n\n## Better Auth Admin plugin\n\nContractSpec Studio enables the Better Auth **Admin plugin** to support platform-admin user operations (list users, impersonation, etc.).\n\n- Server: \\`admin()\\` plugin in \\`packages/bundles/contractspec-studio/src/application/services/auth.ts\\`\n- Client: \\`adminClient()\\` in \\`packages/bundles/contractspec-studio/src/presentation/providers/auth/client.ts\\`\n\n### PLATFORM_ADMIN ⇒ Better Auth admin role\n\nBetter Auth Admin endpoints authorize via \\`user.role\\`. ContractSpec enforces an org-driven rule:\n\n- If the **active organization** has \\`type = PLATFORM_ADMIN\\`, the signed-in user is ensured to have \\`User.role\\` containing \\`admin\\`.\n- This is applied in the session creation hook and re-checked in \\`assertsPlatformAdmin()\\`.\n\nThis keeps admin enablement deterministic and avoids manual role backfills.\n\n## Client config (React web + Expo)\n\nTo avoid duplicate background refresh/polling loops in dev (Fast Refresh/HMR), the Better Auth client is implemented as a singleton cached on \\`globalThis\\`.\n\n- Web client: \\`packages/bundles/contractspec-studio/src/presentation/providers/auth/client.ts\\`\n- Native client: \\`packages/bundles/contractspec-studio/src/presentation/providers/auth/client.native.ts\\`\n\nImport guidance:\n\n- If you only need the context/hook, prefer importing from \\`@lssm/bundle.contractspec-studio/presentation/providers/auth\\`.\n- If you explicitly need the Better Auth client instance (e.g. admin impersonation, direct API calls), import from \\`@lssm/bundle.contractspec-studio/presentation/providers/auth/client\\`.\n\n## Public routes (login / signup)\n\nPublic auth pages should avoid eager \\`authClient\\` initialization.\n\nPattern used:\n\n- In the submit handler, dynamically import \\`@lssm/bundle.contractspec-studio/presentation/providers/auth/index.web\\` and call \\`authClient.signIn.*\\` / \\`authClient.signUp.*\\`.\n\nThis prevents session refresh behavior from starting just because a public page rendered.\n\n## Next.js proxy auth (web-landing)\n\nThe Next.js proxy/middleware is used for **redirect decisions only**. It must not perform DB-backed session reads on every request.\n\n- Source: \\`packages/apps/web-landing/src/proxy.ts\\`\n- Approach: cookie-only checks via Better Auth cookies helpers:\n - \\`getSessionCookie(request)\\`\n - \\`getCookieCache(request)\\`\n\nThese checks are intentionally optimistic and should only gate routing. Full authorization must still be enforced on server-side actions/routes and GraphQL resolvers.\n`,\n },\n];\n\nregisterDocBlocks(tech_auth_better_auth_nextjs_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,yCAAqD,CAChE;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAe;EAAU;EAAW;EAAS;EAAM;CAClE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DP,CACF;AAED,kBAAkB,uCAAuC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"README.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/README.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,iCAAiC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"README.docblock.js","names":["tech_contracts_README_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/README.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_README_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.README',\n title: 'Contracts: Specs, Registry, Handlers, Adapters',\n summary:\n '- `packages/lssm/libs/contracts` defines the contracts core (SpecRegistry, ContractSpec, install helpers, REST/MCP adapters).',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/README',\n tags: ['tech', 'contracts', 'README'],\n body: \"## Contracts: Specs, Registry, Handlers, Adapters\\n\\n### What lives where\\n\\n- `packages/lssm/libs/contracts` defines the contracts core (SpecRegistry, ContractSpec, install helpers, REST/MCP adapters).\\n- `packages/lssm/libs/schema` defines the schema dictionary (`SchemaModel`, `FieldType`) used to describe I/O once and map to multiple targets (zod, GraphQL, JSON Schema).\\n- App adapters (e.g. GraphQL) live close to the app. Example: `packages/hcircle/apps/api-coliving/src/graphql/contracts-adapter.ts`.\\n\\n### npm distribution\\n\\n- `@lssm/lib.contracts` (root) keeps the legacy \\\\\\\"everything\\\\\\\" surface for backward compatibility.\\n- `@lssm/lib.contracts/client` exposes only browser-safe helpers (React renderers, client SDK, drivers). Import from this entry when bundling for the web or React Native to avoid dragging server adapters.\\n- `@lssm/lib.contracts/server` covers HTTP/MCP adapters, registries, integrations, and other Node-only helpers.\\n- `@lssm/lib.contracts/types` exports the runtime handler context utilities, while `@lssm/lib.contracts/types/all` re-exports every type alias/interface across the package via `export type` so consumers can import a single module for typings without shipping runtime code.\\n- `@lssm/lib.schema`, `@lssm/lib.design-system`, `@lssm/lib.ui-kit`, `@lssm/lib.ui-kit-web`, `@lssm/lib.accessibility`, and the presentation runtime packages are published to npm alongside contracts; prefer the scoped packages to keep tree-shaking intact.\\n- Bundlers with conditional exports should resolve subpaths first; keep root imports for server-only code paths.\\n\\n### Core concepts\\n\\n- **ContractSpec**: immutable description of an operation.\\n - `meta`: `{ name, version, kind: 'query' | 'command' }`\\n - `io`: `{ input: SchemaModel | zod schema, output: SchemaModel | zod schema }`\\n - `policy`: `{ auth?: {...}, rateLimit?: {...}, flags?: string[] }`\\n - `transport.gql.field?`: explicit GraphQL field name (otherwise derived via `defaultGqlField`).\\n- **SpecRegistry**: registry of specs + handlers. Use `installOp(reg, spec, handler)` to attach a handler.\\n- **Handler**: `(ctx, input) => Promise<output>` implementing the operation.\\n- **CapabilitySpec**: canonical capability declaration stored in `src/capabilities.ts`. Tracks `meta` (`{ key, version, kind, title, description, domain, owners, tags, stability }`), `provides` surfaces (`operation`, `event`, `workflow`, `presentation`, `resource`), and `requires` which other capabilities must be present. Enforced during `installFeature`.\\n- **PolicySpec**: declarative policy rules (`src/policy/spec.ts`) covering ABAC/ReBAC, consent + rate limit requirements, field-level controls, and PII guidance. `PolicyEngine` evaluates refs, while `OPAPolicyAdapter` lets OPA override/augment runtime decisions.\\n- **TelemetrySpec**: analytics definitions (`src/telemetry/spec.ts`) describing event semantics, privacy level, retention, sampling, and anomaly detection. `TelemetryTracker` handles redaction/sampling, `TelemetryAnomalyMonitor` raises alerts, and specs integrate with contracts/workflows via `ctx.telemetry`.\\n- **TestSpec**: declarative scenario definitions in `src/tests/spec.ts`. `TestRunner` executes fixtures/actions/assertions against a `SpecRegistry`, and the CLI (`contractspec test`) wraps the runner for automation.\\n- **ExperimentSpec**: experiment definitions (`src/experiments/spec.ts`) describing variants, allocation strategies, and success metrics. `ExperimentEvaluator` assigns variants (random/sticky/targeted) and integrates with Policy/Telemetry for safe experimentation.\\n- **AppBlueprintSpec / TenantAppConfig**: global blueprints and per-tenant overrides (`src/app-config/spec.ts`). `resolveAppConfig()` merges the two into a `ResolvedAppConfig`, while `composeAppConfig()` hydrates the merged view against registries and reports missing references for safe rollout.\\n- **RegeneratorService**: background daemon (`src/regenerator/service.ts`) that consumes telemetry/error/behavior signals, evaluates regeneration rules, and produces `SpecChangeProposal`s for Studio review.\\n- **DataViewSpec**: declarative data presentation layer in `src/data-views.ts`. Describes entity projections (`fields`, `filters`, `actions`) with `view.kind` (`list`, `table`, `detail`, `grid`), ties to query operations via `source.primary`, and exposes optional presentation-based empty/error states.\\n- **ThemeSpec**: design token + component variant definitions in `src/themes.ts`. Supports inheritance (`extends`), tenant/user overrides, and component-specific variant metadata for the design system.\\n- **MigrationSpec**: schema/data migration descriptors (`src/migrations.ts`) with ordered step plans, dependency tracking, and pre/post checks to support automated database/content migrations.\\n- **WorkflowSpec**: typed definition of multi-step workflows living in `src/workflow/spec.ts`. `WorkflowRegistry` stores versioned specs, and `validateWorkflowSpec()` (in `src/workflow/validation.ts`) checks graph integrity, step references, and reachability.\\n\\n### Lifecycle\\n\\n1. Define the spec (I/O via `SchemaModel` or zod) in a vertical lib (e.g. `contracts-coliving`).\\n2. Register it: `installOp(registry, spec, handler)` within the app/service.\\n3. Expose it via an adapter (REST, GraphQL, MCP). Each adapter maps the I/O to its transport and enforces policy.\\n4. Validate at runtime: parse `input` before executing, parse `output` before returning.\\n\\n### Adapters\\n\\n- **REST**: see `packages/lssm/libs/contracts/src/server/rest-*`. Binds routes, validates request/response, maps errors/policies.\\n- **MCP**: see `packages/lssm/libs/contracts/src/server/provider-mcp.ts` (standalone MCP server) and `packages/lssm/libs/contracts/src/server/rest-next-mcp.ts` (MCP over Next.js route). Provides tools/resources/prompts.\\n - Tools + resources are registered from Zod schemas.\\n - Resource templates are keyed by full `ResourceMeta.uriTemplate` (e.g. `docs://list`, `docs://doc/{id}`), so multiple templates can share a scheme (`docs://*`) without collisions.\\n- **GraphQL (Pothos)**: see `packages/lssm/libs/contracts/src/server/graphql-pothos.ts`. Adds Query/Mutation fields by transforming contract I/O to GraphQL types.\\n\\n### GraphQL adapter behaviour (summary)\\n\\n- Field naming: `spec.transport.gql.field` or `<name_with_dots>_v<version>`.\\n- Input/Output types from `SchemaModel` (preferred) or fallback zod introspection.\\n- Scalars: String/Int/Float/Boolean/Date/JSON; Objects/Arrays/Enums; unions for outputs; input unions => JSON.\\n- Policy: auth gate checks GraphQL context; optional feature flag gating.\\n- Complexity & tracing: attaches hints and records timings; log includes `{ specName, version }`.\\n\\n#### Returns mapping and hydration\\n\\n- `spec.transport.gql.returns` can declare the GraphQL return wrapper: e.g. `\\\"Spot\\\"` or `[Spot]`. If omitted, the adapter infers from `io.output` (SchemaModel) or `resourceRef.graphQLType`.\\n- Resource outputs: when `io.output` is a `resourceRef(...)` or `transport.gql.resource` is set, the adapter will optionally hydrate via a `ResourceRegistry` using `contracts-adapter-hydration.ts`:\\n - Grammar is parsed with `parseReturns()`.\\n - Entities are resolved via `hydrateResourceIfNeeded(resources, result, { template, varName, returns })` after handler execution.\\n\\n### Resource outputs\\n\\n- Declare resource outputs using `resourceRef(uriTemplate, opts)`.\\n- `opts.varName` (default `id`) selects the identifier field returned by the handler for URI substitution.\\n- `opts.graphQLType` is the GraphQL return type name (e.g., `Spot`) or list form (e.g., `[Spot]`).\\n- `opts.many: true` indicates the handler returns an array of resources. The handler type becomes an array of items that include the identifier field.\\n\\nExample:\\n\\n```ts\\nio: {\\n input: ListThingsInput,\\n output: resourceRef('myapp://thing/{id}', { graphQLType: '[Thing]', many: true }),\\n}\\n```\\n\\nHandler return (simplified): `{ id: string | number }[]`.\\n\\n### Errors\\n\\n- Validation errors \\u2192 transport 400/GraphQL UserInputError.\\n- Policy/auth errors \\u2192 401/403 or GraphQL ForbiddenError.\\n- Handler errors \\u2192 mapped to transport error with safe message.\\n\\n### Versioning & naming\\n\\n- Keep `meta.version` monotonic. Clients should pin to a versioned field/key.\\n- Avoid renaming existing fields; add new fields with new versions.\\n\\n### Ownership metadata (OwnerShipMeta)\\n\\nAll contracts, events, features, and presentations reference a shared ownership schema (source of truth in `packages/lssm/libs/contracts/src/ownership.ts`).\\n\\n- Required fields: `title`, `description`, `domain`, `owners[]`, `tags[]`, `stability`.\\n- Curated enums: the library exports suggested constants for owners and tags; free-form strings are still allowed for forward-compatibility.\\n- Operations (`spec.ts`): `meta` requires `stability`, `owners`, and `tags` alongside `name`, `version`, `kind`, `description`, `goal`, and `context`.\\n- Presentations V2: `meta` is a partial of ownership plus `description`.\\n- Events: may specify `ownership` (recommended) for discoverability and docs.\\n\\n### Quick start\\n\\n```ts\\n// app bootstrap\\nconst reg = new SpecRegistry();\\ninstallOp(reg, BeginSignupSpec, beginSignupHandler);\\nregisterContractsOnBuilder(gqlSchemaBuilder, reg); // GraphQL\\n// or: createRestRouter(reg) // REST\\n```\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_README_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,kCAA8C,CACzD;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAS;CACrC,MAAM;CACP,CACF;AACD,kBAAkB,gCAAgC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-subscription.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/create-subscription.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,8CAA8C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-subscription.docblock.js","names":["tech_contracts_create_subscription_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/create-subscription.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_create_subscription_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.create-subscription',\n title: 'Subscriptions via Better Auth Stripe',\n summary:\n \"This app uses Better Auth's Stripe plugin for subscription management.\",\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/create-subscription',\n tags: ['tech', 'contracts', 'create-subscription'],\n body: \"### Subscriptions via Better Auth Stripe\\n\\nThis app uses Better Auth's Stripe plugin for subscription management.\\n\\nKey endpoints:\\n\\n- `/api/auth/[...all]` \\u2013 Better Auth server\\n- `/api/auth/stripe/webhook` \\u2013 Stripe webhook handled by Better Auth\\n\\nClient usage (org mode):\\n\\n```ts\\nimport { subscription } from '@/lib/auth-client';\\n\\nawait subscription.upgrade({\\n plan: 'core',\\n annual: true,\\n referenceId: activeOrganization?.id,\\n successUrl: '/dashboard',\\n cancelUrl: '/pricing',\\n});\\n```\\n\\nPlans are configured in `src/lib/auth.ts` referencing env-provided price IDs. See Better Auth Stripe docs: [plugins: Stripe](`https://better-auth.com/docs/plugins/stripe.mdx`) and [Using with organizations](`https://www.better-auth.com/docs/plugins/stripe#using-with-organizations`).\\n\\nLanding pricing UX\\n\\n- Components: `SectionEyebrow`, `PriceBadge`, `FeatureList`, `PriceCard`\\n- Sections: `PricingSection`, `StoryPricingBenefits`\\n- Canonical pricing source: `src/lib/pricing/config.ts`\\n\\nTrial period\\n\\n- Le plan \\u00ab Essentiel \\u00bb inclut une p\\u00e9riode d\\u2019essai gratuite de 30 jours.\\n- Config c\\u00f4t\\u00e9 auth: `freeTrial: { days: 30 }` dans `src/lib/auth.ts` (Better Auth Stripe plugin).\\n- Config c\\u00f4t\\u00e9 pricing: `trial: { days: 30 }` dans `src/lib/pricing/config.ts`.\\n\\nDashboard badges\\n\\n- Le `Tableau de bord` affiche des badges d\\u2019\\u00e9tat d\\u2019abonnement:\\n - \\u00ab Essai \\u00b7 se termine le JJ/MM/AAAA \\u00bb lorsque l\\u2019essai est en cours\\n - \\u00ab Abonnement actif \\u00bb lorsque l\\u2019abonnement est actif\\n - \\u00ab Annul\\u00e9 \\u00b7 fin au terme de la p\\u00e9riode \\u00bb lorsque la r\\u00e9siliation est planifi\\u00e9e\\n- Composant: `components/dashboard/DashboardPage/molecules/Header.tsx`\\n- Source des \\u00e9tats: hook `useProfileBillingPage()` (`components/profile/ProfileBillingPage/hooks/useProfileBillingPage.tsx`)\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_create_subscription_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,+CAA2D,CACtE;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAsB;CAClD,MAAM;CACP,CACF;AACD,kBAAkB,6CAA6C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-typed-outputs.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/graphql-typed-outputs.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,gDAAgD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-typed-outputs.docblock.js","names":["tech_contracts_graphql_typed_outputs_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/graphql-typed-outputs.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_graphql_typed_outputs_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.graphql-typed-outputs',\n title: 'GraphQL Typed Outputs for Contracts',\n summary:\n 'Improved `@lssm/lib.contracts` to automatically generate proper GraphQL object types from `SchemaModel` outputs instead of defaulting to `JSON` scalar types.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/graphql-typed-outputs',\n tags: ['tech', 'contracts', 'graphql-typed-outputs'],\n body: \"# GraphQL Typed Outputs for Contracts\\n\\n## Overview\\n\\nImproved `@lssm/lib.contracts` to automatically generate proper GraphQL object types from `SchemaModel` outputs instead of defaulting to `JSON` scalar types.\\n\\n## Problem\\n\\nPreviously, when GraphQL operations were defined using contracts with `SchemaModel` outputs, the GraphQL schema would default to returning `JSON` scalar types. This meant:\\n\\n- GraphQL clients couldn't query specific fields\\n- No type safety for operation outputs\\n- Codegen would fail with \\\"must have a selection of subfields\\\" errors\\n\\n## Solution\\n\\n### 1. Auto-Type Registration in `graphql-pothos.ts`\\n\\n**File**: `packages/lssm/libs/contracts/src/server/graphql-pothos.ts`\\n\\n**Changes**:\\n\\n- Scan all contract specs and collect their `SchemaModel` outputs\\n- Automatically register GraphQL object types for each `SchemaModel`\\n- Map field types from SchemaModel to proper GraphQL scalar types\\n- Update `resolveGraphQLTypeName` to check for `SchemaModel` names before defaulting to `JSON`\\n\\n**Key Code**:\\n\\n```typescript\\n// Build a map of output types we need to register\\nconst outputTypeCache = new Map<string, AnySchemaModel>();\\nfor (const spec of reg.listSpecs()) {\\n const out = spec.io.output as AnySchemaModel | ResourceRefDescriptor<boolean>;\\n if (out && 'getZod' in out && typeof out.getZod === 'function') {\\n const model = out as AnySchemaModel;\\n const typeName = model.config?.name ?? 'UnknownOutput';\\n if (!outputTypeCache.has(typeName)) {\\n outputTypeCache.set(typeName, model);\\n }\\n }\\n}\\n\\n// Register all output types as GraphQL object types\\nfor (const [typeName, model] of outputTypeCache.entries()) {\\n builder.objectType(typeName, {\\n fields: (t) => {\\n // Map each field from SchemaModel to GraphQL field\\n // ...\\n },\\n });\\n}\\n```\\n\\n### 2. Fix Contract Definitions\\n\\n**File**: `packages/hcircle/libs/contracts-coliving/src/interactions/onboarding/org/contracts.ts`\\n\\n**Changes**:\\n\\n- Changed `GetOrgOnboardingDraftSpec` from `defineCommand` to `defineQuery` (read-only operation)\\n- Added `defineQuery` import\\n\\n**Before**:\\n\\n```typescript\\nexport const GetOrgOnboardingDraftSpec = defineCommand({\\n // ...\\n});\\n```\\n\\n**After**:\\n\\n```typescript\\nexport const GetOrgOnboardingDraftSpec = defineQuery({\\n // ...\\n});\\n```\\n\\n### 3. Update All GraphQL Queries\\n\\nUpdated all GraphQL operation calls to select proper subfields based on the output type:\\n\\n#### Output Types and Their Fields\\n\\n1. **`CreateOrgOutput`**:\\n - `organizationId: ID!`\\n - `orgType: String!`\\n\\n2. **`CompleteUserOnboardingOutput`**:\\n - `success: Boolean!`\\n - `userId: ID!`\\n\\n3. **`CompleteOrgOnboardingOutput`**:\\n - `success: Boolean!`\\n - `organizationId: ID!`\\n - `orgType: String!`\\n\\n4. **`OnboardingDraft`** (from resource_ref):\\n - `id: ID!`\\n - `organizationId: ID!`\\n - `data: JSON!`\\n - `createdAt: DateTime!`\\n - `updatedAt: DateTime!`\\n\\n5. **`GetOnboardingDraftOutput`**:\\n - `id: ID`\\n - `organizationId: ID`\\n - `data: JSON`\\n - `createdAt: DateTime`\\n - `updatedAt: DateTime`\\n\\n6. **`DeleteOnboardingDraftOutput`**:\\n - `ok: Boolean!` _(note: not `success`)_\\n\\n#### Files Updated\\n\\n1. `/packages/hcircle/apps/mobile-coliving/src/app/onboarding-org-select.tsx`\\n2. `/packages/hcircle/apps/mobile-coliving/src/app/onboarding-org.tsx`\\n3. `/packages/hcircle/apps/mobile-coliving/src/app/onboarding-user.tsx`\\n4. `/packages/hcircle/apps/web-coliving/src/app/onboarding/user/page.tsx`\\n5. `/packages/hcircle/apps/web-coliving/src/components/onboarding/OnboardingFlow.tsx`\\n6. `/packages/hcircle/apps/web-coliving/src/components/onboarding/OrgSelectionFlow.tsx`\\n\\n**Example Before**:\\n\\n```graphql\\nmutation CreateOrg($orgType: String!, $name: String!, $slug: String!) {\\n createOrganization(input: { orgType: $orgType, name: $name, slug: $slug })\\n}\\n```\\n\\n**Example After**:\\n\\n```graphql\\nmutation CreateOrg($orgType: String!, $name: String!, $slug: String!) {\\n createOrganization(input: { orgType: $orgType, name: $name, slug: $slug }) {\\n organizationId\\n orgType\\n }\\n}\\n```\\n\\n## Benefits\\n\\n1. **Type Safety**: Full type safety for GraphQL operation outputs\\n2. **Auto-Generated Types**: No need to manually specify `returns` in contract transport config\\n3. **Better DX**: GraphQL clients can now query specific fields and benefit from autocomplete\\n4. **Consistency**: All `SchemaModel` outputs are automatically typed in GraphQL\\n5. **Backward Compatible**: Operations with explicit `returns` config still work as before\\n\\n## Testing\\n\\nAll GraphQL codegen now passes:\\n\\n```bash\\ncd packages/hcircle/libs/gql-client-coliving\\nbun graphql-codegen --config codegen.ts # \\u2705 Success\\n```\\n\\n## Migration Guide for Other Verticals\\n\\nTo apply this to other verticals (e.g., Artisanos, Strit):\\n\\n1. **No code changes needed** - the improved `graphql-pothos.ts` automatically handles all `SchemaModel` outputs\\n2. **Update GraphQL queries** - Add field selections to queries that previously returned `JSON`\\n3. **Fix query/command mismatches** - Ensure read-only operations use `defineQuery` instead of `defineCommand`\\n\\n## Future Improvements\\n\\n1. Add support for nested `SchemaModel` references (currently only supports scalar fields)\\n2. Add support for array fields of SchemaModels\\n3. Consider auto-generating field selections based on the output type to reduce boilerplate\\n\\n## Related Documentation\\n\\n- [Contracts README](../../packages/lssm/libs/contracts/README.md)\\n- [Onboarding System](./hcircle/IMPLEMENTATION_COMPLETE.md)\\n- [GraphQL Architecture](./graphql/architecture.md)\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_graphql_typed_outputs_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,iDAA6D,CACxE;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAwB;CACpD,MAAM;CACP,CACF;AACD,kBAAkB,+CAA+C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/migrations.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,qCAAqC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.docblock.js","names":["tech_contracts_migrations_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/migrations.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_migrations_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.migrations',\n title: 'MigrationSpec Overview',\n summary:\n '`MigrationSpec` provides a declarative plan for schema/data/validation steps so migrations can be generated, reviewed, and executed safely by tooling. Each spec captures ownership metadata, ordered up/down steps, and optional dependency information. Runtime tooling can consume the spec to run SQL/data scripts with pre/post checks and produce audit logs.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/migrations',\n tags: ['tech', 'contracts', 'migrations'],\n body: \"# MigrationSpec Overview\\n\\n## Purpose\\n\\n`MigrationSpec` provides a declarative plan for schema/data/validation steps so migrations can be generated, reviewed, and executed safely by tooling. Each spec captures ownership metadata, ordered up/down steps, and optional dependency information. Runtime tooling can consume the spec to run SQL/data scripts with pre/post checks and produce audit logs.\\n\\n## Location\\n\\n- Spec + registry: `packages/libs/contracts/src/migrations.ts`\\n- Tests: `packages/.../migrations.test.ts`\\n\\n## Schema\\n\\n```ts\\nexport interface MigrationSpec {\\n meta: MigrationMeta; // ownership metadata + { name, version }\\n plan: {\\n up: MigrationStep[]; // required forward plan\\n down?: MigrationStep[];// optional rollback steps\\n };\\n dependencies?: string[]; // optional list of migration keys this depends on\\n}\\n```\\n\\n- **MigrationStep**\\n - `kind`: `'schema' | 'data' | 'validation'`\\n - Shared fields: `description?`, `timeoutMs?`, `retries?`, `preChecks?`, `postChecks?`\\n - `schema`: `sql` string executed in transactional context\\n - `data`: arbitrary `script` (e.g., JS/TS snippet, path to file, instructions)\\n - `validation`: `assertion` expression verifying state (e.g., SQL returning boolean)\\n- **MigrationCheck** (`preChecks`/`postChecks`)\\n - `description`: human context\\n - `expression`: expression or SQL snippet to evaluate before/after the step\\n- **Dependencies**\\n - Array of migration keys (`\\\"boundedContext.namespace.timestamp_slug\\\"`) used to ensure the registry executes prerequisites first\\n\\n## Registry Usage\\n\\n```ts\\nimport { MigrationRegistry } from '@lssm/lib.contracts/migrations';\\nimport { AddUsersMigration } from './migrations/core.db.2025_01_add_users';\\n\\nconst registry = new MigrationRegistry();\\nregistry.register(AddUsersMigration);\\n\\nconst migration = registry.get('core.db.2025_01_add_users');\\nconst all = registry.list(); // sorted by name/version\\n```\\n\\n## Authoring Guidelines\\n\\n1. Name migrations with timestamped slugs (`domain.db.YYYY_MM_description`) for clarity.\\n2. Capture ownership metadata (`owners`, `tags`, `stability`) so tooling can route approvals.\\n3. Prefer small, reversible steps. Use `plan.down` when safe; otherwise document fallback.\\n4. Use `preChecks`/`postChecks` for critical invariants (row counts, schema existence).\\n5. Specify dependencies explicitly to avoid parallel execution hazards.\\n6. For large data scripts, use `script` as a pointer (URL, file path) rather than embedding code directly.\\n\\n## Tooling Roadmap\\n\\nUpcoming CLI support (Phase 4 plan):\\n\\n- `contractspec create --type migration` (scaffolds spec skeleton)\\n- `contractspec build <migration>` (generate executor harness)\\n- `contractspec migrate create/up/down/status` orchestration commands\\n\\nThe current implementation focuses on the spec/registry foundation so downstream tooling can be layered iteratively.\\n\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_migrations_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,sCAAkD,CAC7D;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAa;CACzC,MAAM;CACP,CACF;AACD,kBAAkB,oCAAoC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-export.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/openapi-export.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,yCAAyC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-export.docblock.js","names":["tech_contracts_openapi_export_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/openapi-export.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_openapi_export_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.openapi-export',\n title: 'OpenAPI export (OpenAPI 3.1) from SpecRegistry',\n summary:\n 'Generate a deterministic OpenAPI document from a SpecRegistry using jsonSchemaForSpec + REST transport metadata.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/openapi-export',\n tags: ['contracts', 'openapi', 'rest'],\n body: `## OpenAPI export (OpenAPI 3.1) from SpecRegistry\n\n### Purpose\n\nContractSpec specs can be exported into an **OpenAPI 3.1** document for tooling (SDK generation, docs, gateways).\n\nThe export is **spec-first**:\n\n- Uses \\`jsonSchemaForSpec(spec)\\` for input/output JSON Schema (from SchemaModel → zod → JSON Schema)\n- Uses \\`spec.transport.rest.method/path\\` when present\n- Falls back to deterministic defaults:\n - Method: \\`POST\\` for commands, \\`GET\\` for queries\n - Path: \\`defaultRestPath(name, version)\\` → \\`/<dot/name>/v<version>\\`\n\n### Library API\n\n- Function: \\`openApiForRegistry(registry, options?)\\`\n- Location: \\`@lssm/lib.contracts/openapi\\`\n\n### CLI\n\nExport OpenAPI from a registry module:\n\n\\`\\`\\`bash\ncontractspec openapi --registry ./src/registry.ts --out ./openapi.json\n\\`\\`\\`\n\nThe registry module must export one of:\n\n- \\`registry: SpecRegistry\\`\n- \\`default(): SpecRegistry | Promise<SpecRegistry>\\`\n- \\`createRegistry(): SpecRegistry | Promise<SpecRegistry>\\`\n\n### Notes / limitations (current)\n\n- Responses are generated as a basic \\`200\\` response (plus schemas when available).\n- Query (GET) inputs are currently represented as a JSON request body when an input schema exists.\n- Errors are not yet expanded into OpenAPI responses; that will be added when we standardize error envelopes.`,\n },\n];\n\nregisterDocBlocks(tech_contracts_openapi_export_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,0CAAsD,CACjE;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAa;EAAW;EAAO;CACtC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCP,CACF;AAED,kBAAkB,wCAAwC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ops-to-presentation-linking.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/ops-to-presentation-linking.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,sDAAsD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ops-to-presentation-linking.docblock.js","names":["tech_contracts_ops_to_presentation_linking_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/ops-to-presentation-linking.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_ops_to_presentation_linking_DocBlocks: DocBlock[] =\n [\n {\n id: 'docs.tech.contracts.ops-to-presentation-linking',\n title: 'Ops \\u2194 Presentation linking (V2)',\n summary:\n 'This document explains how operations (ContractSpec) are linked to Presentations (PresentationDescriptorV2) via Feature modules.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/ops-to-presentation-linking',\n tags: ['tech', 'contracts', 'ops-to-presentation-linking'],\n body: \"### Ops \\u2194 Presentation linking (V2)\\n\\nThis document explains how operations (ContractSpec) are linked to Presentations (PresentationDescriptorV2) via Feature modules.\\n\\n- Location: `@lssm/lib.contracts/src/features.ts`\\n- Field: `FeatureModuleSpec.opToPresentation?: { op: { name; version }; pres: { name; version } }[]`\\n- Validation: `installFeature()` validates that linked ops exist in `SpecRegistry` and linked presentations exist in the registry, and that declared targets are present.\\n\\nExample:\\n\\n```ts\\nimport type { SpecRegistry } from '@lssm/lib.contracts/src/registry';\\nimport { FeatureRegistry, createFeatureModule } from '@lssm/lib.contracts';\\n\\nexport function buildFeaturesWithOps(ops: SpecRegistry) {\\n const features = new FeatureRegistry();\\n features.register(\\n createFeatureModule(\\n {\\n key: 'myapp.widgets.linkage',\\n title: 'Widgets (linked)',\\n description: 'Links create/update ops to UI presentations',\\n domain: 'widgets',\\n tags: ['widgets', 'linkage'],\\n stability: 'beta',\\n },\\n {\\n operations: [\\n { name: 'widgets.create', version: 1 },\\n { name: 'widgets.update', version: 1 },\\n ],\\n presentations: [{ name: 'myapp.widgets.editor.page', version: 1 }],\\n opToPresentation: [\\n {\\n op: { name: 'widgets.create', version: 1 },\\n pres: { name: 'myapp.widgets.editor.page', version: 1 },\\n },\\n {\\n op: { name: 'widgets.update', version: 1 },\\n pres: { name: 'myapp.widgets.editor.page', version: 1 },\\n },\\n ],\\n presentationsTargets: [\\n {\\n name: 'myapp.widgets.editor.page',\\n version: 1,\\n targets: ['react', 'markdown'],\\n },\\n ],\\n }\\n )\\n );\\n return { features };\\n}\\n```\\n\\nNotes\\n\\n- This enables traceability: the UI flow that realizes an op is discoverable via the feature catalog.\\n- Presentations can target multiple outputs (`react`, `markdown`, `application/json`, `application/xml`).\\n- Use `renderFeaturePresentation()` to render a descriptor to a given target with a component map.\\n\",\n },\n ];\nregisterDocBlocks(tech_contracts_ops_to_presentation_linking_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,uDACX,CACE;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAA8B;CAC1D,MAAM;CACP,CACF;AACH,kBAAkB,qDAAqD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/overlays.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,mCAAmC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.docblock.js","names":["tech_contracts_overlays_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/overlays.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_overlays_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.overlays',\n title: 'OverlaySpec Implementation',\n summary:\n 'OverlaySpecs allow tenants/users to adapt presentation without duplicating code. Implementation lives in `@lssm/lib.overlay-engine`.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/overlays',\n tags: ['tech', 'contracts', 'overlays'],\n body: \"# OverlaySpec Implementation\\n\\nOverlaySpecs allow tenants/users to adapt presentation without duplicating code. Implementation lives in `@lssm/lib.overlay-engine`.\\n\\n## Structure\\n\\n```ts\\ninterface OverlaySpec {\\n overlayId: string;\\n version: string;\\n appliesTo: {\\n capability?: string;\\n workflow?: string;\\n dataView?: string;\\n presentation?: string;\\n tenantId?: string;\\n userId?: string;\\n role?: string;\\n device?: string;\\n };\\n modifications: OverlayModification[];\\n}\\n```\\n\\nSupported modifications:\\n\\n- `hideField`\\n- `renameLabel`\\n- `reorderFields`\\n- `setDefault`\\n- `addHelpText`\\n- `makeRequired`\\n\\n## Signing\\n\\nOverlays must be signed. Use the signer helper:\\n\\n```ts\\nimport { signOverlay } from '@lssm/lib.overlay-engine/signer';\\n\\nconst signed = await signOverlay(overlay, privateKeyPem);\\nregistry.register(signed);\\n```\\n\\nKeys are stored in `OverlaySigningKey` (Prisma) and referenced by the `Overlay` model for auditing.\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_overlays_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,oCAAgD,CAC3D;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAW;CACvC,MAAM;CACP,CACF;AACD,kBAAkB,kCAAkC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tests.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/tests.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,gCAAgC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tests.docblock.js","names":["tech_contracts_tests_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/tests.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_tests_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.tests',\n title: 'TestSpec & TestRunner',\n summary:\n 'Use `TestSpec` to describe end-to-end scenarios for contracts and workflows. Specs live alongside your contracts and exercise the same SpecRegistry handlers the app uses.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/tests',\n tags: ['tech', 'contracts', 'tests'],\n body: \"## TestSpec & TestRunner\\n\\nUse `TestSpec` to describe end-to-end scenarios for contracts and workflows. Specs live alongside your contracts and exercise the same SpecRegistry handlers the app uses.\\n\\n- Types & registry: `packages/libs/contracts/src/tests/spec.ts`\\n- Runtime runner: `packages/libs/contracts/src/tests/runner.ts`\\n- CLI: `contractspec test`\\n\\n### Structure\\n\\n```ts\\nexport interface TestSpec {\\n meta: TestSpecMeta;\\n target: TestTarget; // contract or workflow\\n fixtures?: Fixture[]; // optional shared setup before each scenario\\n scenarios: TestScenario[];\\n coverage?: CoverageRequirement;\\n}\\n```\\n\\n- `Fixture`: run an operation before the scenario (`operation`, optional `input`)\\n- `Action`: operation input that the scenario exercises\\n- `Assertion`:\\n - `expectOutput` `{ match }` deep-equals the handler output\\n - `expectError` `{ messageIncludes? }` ensures an error was thrown\\n - `expectEvents` `{ events: [{ name, version, min?, max? }] }` checks emitted events\\n\\n### Example\\n\\n```ts\\nimport { defineCommand, type TestSpec } from '@lssm/lib.contracts';\\n\\nexport const AddNumbersSpec = defineCommand({\\n meta: { name: 'math.add', version: 1, /* \\u2026 */ },\\n io: {\\n input: AddNumbersInput,\\n output: AddNumbersOutput,\\n },\\n policy: { auth: 'user' },\\n});\\n\\nexport const MathAddTests: TestSpec = {\\n meta: {\\n name: 'math.add.tests',\\n version: 1,\\n title: 'Math add scenarios',\\n owners: ['@team.math'],\\n tags: ['math'],\\n stability: StabilityEnum.Experimental,\\n },\\n target: { type: 'contract', operation: { name: 'math.add' } },\\n scenarios: [\\n {\\n name: 'adds positive numbers',\\n when: {\\n operation: { name: 'math.add' },\\n input: { a: 2, b: 3 },\\n },\\n then: [\\n { type: 'expectOutput', match: { sum: 5 } },\\n {\\n type: 'expectEvents',\\n events: [{ name: 'math.sum_calculated', version: 1, min: 1 }],\\n },\\n ],\\n },\\n ],\\n};\\n```\\n\\n### Running tests\\n\\n1. Register the contract handlers in a `SpecRegistry`:\\n\\n```ts\\nexport function createRegistry() {\\n const registry = new SpecRegistry();\\n registry.register(AddNumbersSpec);\\n registry.bind(AddNumbersSpec, addNumbersHandler);\\n return registry;\\n}\\n```\\n\\n2. Run the CLI:\\n\\n```\\ncontractspec test apps/math/tests/math.add.tests.ts \\\\\\n --registry apps/math/tests/registry.ts\\n```\\n\\n- The CLI loads the TestSpec, instantiates the registry (via the provided module), and executes each scenario via `TestRunner`.\\n- `--json` outputs machine-readable results.\\n\\n### Programmatic usage\\n\\n```ts\\nconst runner = new TestRunner({\\n registry,\\n createContext: () => ({ actor: 'user', organizationId: 'tenant-1' }),\\n});\\n\\nconst result = await runner.run(MathAddTests);\\nconsole.log(result.passed, result.failed);\\n```\\n\\n- `createContext` can supply default `HandlerCtx` values.\\n- `beforeEach` / `afterEach` hooks let you seed databases or reset state.\\n\\n### Best practices\\n\\n- Keep fixtures idempotent so scenarios can run in parallel in the future.\\n- Use `expectEvents` to guard analytics/telemetry expectations.\\n- Add specs to `TestRegistry` for discovery and documentation.\\n- `coverage` captures desired coverage metrics (enforced by future tooling).\\n- Pair TestSpec files with CI using `contractspec test --json` and fail builds when `failed > 0`.\\n\\n### Mocking with Bun's `vi`\\n\\n- Pass a single function type to `vi.fn<TFunction>()` so calls retain typed arguments:\\n\\n```ts\\nconst handler = vi.fn<typeof fetch>();\\nconst fetchImpl: typeof fetch = ((...args) => handler(...args)) as typeof fetch;\\nObject.defineProperty(fetchImpl, 'preconnect', {\\n value: vi.fn<typeof fetch.preconnect>(),\\n});\\n```\\n\\n- When you need to inspect calls, use the typed mock (`handler.mock.calls`) rather than casting to `any`.\\n- Narrow optional request data defensively (e.g., check for headers before reading them) so tests remain type-safe under strict `tsconfig` settings.\\n\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_tests_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,iCAA6C,CACxD;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAQ;CACpC,MAAM;CACP,CACF;AACD,kBAAkB,+BAA+B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"themes.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/themes.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,iCAAiC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"themes.docblock.js","names":["tech_contracts_themes_DocBlocks: DocBlock[]"],"sources":["../../../../src/docs/tech/contracts/themes.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@lssm/lib.contracts/docs';\nimport { registerDocBlocks } from '../../registry';\n\nexport const tech_contracts_themes_DocBlocks: DocBlock[] = [\n {\n id: 'docs.tech.contracts.themes',\n title: 'ThemeSpec Overview',\n summary:\n '`ThemeSpec` defines a structured, versioned source of truth for design tokens, component variants, and scoped overrides. Use it to describe how tenants or individual users should experience the design system without hand-maintaining ad-hoc theme files. Specs live in `@lssm/lib.contracts`, making them accessible to generators, docs, and runtime tooling.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/tech/contracts/themes',\n tags: ['tech', 'contracts', 'themes'],\n body: \"# ThemeSpec Overview\\n\\n## Purpose\\n\\n`ThemeSpec` defines a structured, versioned source of truth for design tokens, component variants, and scoped overrides. Use it to describe how tenants or individual users should experience the design system without hand-maintaining ad-hoc theme files. Specs live in `@lssm/lib.contracts`, making them accessible to generators, docs, and runtime tooling.\\n\\n## Location\\n\\n- Types & registry: `packages/libs/contracts/src/themes.ts`\\n- Design tokens bridge: `packages/libs/design-system/src/theme/*`\\n\\n## Schema\\n\\n```ts\\nexport interface ThemeSpec {\\n meta: ThemeMeta; // ownership metadata + { name, version, extends?, scopes? }\\n tokens: ThemeTokens; // design tokens grouped by colors, radii, space, etc.\\n components?: ComponentVariantSpec[]; // per-component variant configuration\\n overrides?: ThemeOverride[]; // scoped tenant/user overrides\\n}\\n```\\n\\n- **ThemeMeta**\\n - `name`: fully-qualified identifier (e.g., `design.pastel`)\\n - `version`: increment when tokens/variants change in a breaking way\\n - `extends?`: optional `{ name, version }` pointer to a base theme\\n - `scopes?`: default scopes where the theme applies (`global`, `tenant`, `user`)\\n- **ThemeTokens**\\n - `colors`, `radii`, `space`, `typography`, `shadows`, `motion`\\n - Each entry is a map of `{ value: T; description?: string }`\\n- **ComponentVariantSpec**\\n - `component`: design-system component key (e.g., `Button`, `NavMain`)\\n - `variants`: map of variant names \\u2192 `{ props?, tokens? }`\\n- **ThemeOverride**\\n - `scope`: `'global' | 'tenant' | 'user'`\\n - `target`: identifier (e.g., `tenant:artisanos`, `user:123`)\\n - `tokens?` / `components?`: partial token/variant overrides for the target\\n\\n## Registry Usage\\n\\n```ts\\nimport { ThemeRegistry } from '@lssm/lib.contracts/themes';\\nimport { PastelTheme } from './themes/design.pastel';\\n\\nconst themes = new ThemeRegistry();\\nthemes.register(PastelTheme);\\n\\nconst theme = themes.get('design.pastel');\\nconst tenantVariant = themes\\n .get('design.pastel')\\n ?.overrides?.find((o) => o.target === 'tenant:artisanos');\\n```\\n\\nThe registry guarantees `name + version` uniqueness and exposes `list()` for discovery tooling.\\n\\n## Rendering\\n\\nThe design system consumes specs (via adapters you provide) to build runtime tokens. A simple adapter might:\\n\\n1. Resolve the base theme + applicable overrides.\\n2. Merge token maps using `ThemeTokens`.\\n3. Feed the result into `mapTokensForPlatform` in `@lssm/lib.design-system`.\\n\\n```ts\\nimport { ThemeRegistry } from '@lssm/lib.contracts/themes';\\nimport { mapTokensForPlatform } from '@lssm/lib.design-system';\\n\\nfunction resolveTokens(registry: ThemeRegistry, ref: ThemeRef, ctx: { tenant?: string; user?: string }) {\\n const spec = registry.get(ref.name, ref.version);\\n if (!spec) throw new Error('Theme not found');\\n\\n const tokens = deepMerge(spec.tokens, collectOverrides(spec.overrides, ctx));\\n return mapTokensForPlatform(tokens);\\n}\\n```\\n\\n## Authoring Guidelines\\n\\n1. Keep token names aligned with the design-system defaults (`background`, `mutedForeground`, etc.).\\n2. Use `extends` to create layered themes (base brand \\u2192 tenant tweaks \\u2192 user-level overrides).\\n3. Document variants with `description` to help designers and automation understand intent.\\n4. Prefer scoped overrides (`tenant:foo`) instead of duplicating the entire theme per tenant.\\n5. When tokens influence multiple components, capture them in `tokens` and keep `components` for API-level variant wiring.\\n\\n## CLI (Future Work)\\n\\nThe `contractspec` CLI does not yet scaffold theme specs. Planned additions:\\n\\n- `contractspec create --type theme`\\n- `contractspec build <theme.theme.ts>` \\u2192 generate design-system adapters\\n\\nFor now, author specs manually and register them alongside contract bundles.\\n\\n\",\n },\n];\nregisterDocBlocks(tech_contracts_themes_DocBlocks);\n"],"mappings":";;;AAGA,MAAaA,kCAA8C,CACzD;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAQ;EAAa;EAAS;CACrC,MAAM;CACP,CACF;AACD,kBAAkB,gCAAgC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vertical-pocket-family-office.docblock.d.ts","names":[],"sources":["../../../../src/docs/tech/contracts/vertical-pocket-family-office.docblock.ts"],"sourcesContent":[],"mappings":";;;cAGa,wDAAwD"}
|