@wildo-ai/saas-models 1.1.9 → 1.1.10
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/esm/_inspect.d.ts.map +1 -1
- package/dist/esm/_inspect.js.map +1 -1
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/application-subject.shared.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-subject.shared.schemas.js.map +1 -1
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications-context.schemas.d.ts +68 -2
- package/dist/esm/applications/applications-context.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications-context.schemas.js.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/billing-account.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-account.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-configuration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-configuration.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.js.map +1 -1
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/credit-pool.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/credit-pool.shared.schemas.js.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.schemas.js.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/price.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product-definition.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/product.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.schemas.js.map +1 -1
- package/dist/esm/billing/promotions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/promotions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/promotions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/promotions.shared.schemas.js.map +1 -1
- package/dist/esm/billing/public-pricing-catalog.shared.atoms.d.ts.map +1 -1
- package/dist/esm/billing/public-pricing-catalog.shared.atoms.js.map +1 -1
- package/dist/esm/billing/public-pricing-catalog.shared.d.ts.map +1 -1
- package/dist/esm/billing/public-pricing-catalog.shared.js.map +1 -1
- package/dist/esm/billing/referral-reward.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral-reward.shared.schemas.js.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.js.map +1 -1
- package/dist/esm/billing/usage-flush-evidence.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-flush-evidence.shared.schemas.js.map +1 -1
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.js.map +1 -1
- package/dist/esm/charts/aggregation-query.shared.schemas.d.ts.map +1 -1
- package/dist/esm/charts/aggregation-query.shared.schemas.js.map +1 -1
- package/dist/esm/charts/aggregation.shared.definitions.d.ts.map +1 -1
- package/dist/esm/charts/aggregation.shared.definitions.js.map +1 -1
- package/dist/esm/charts/chart-definition-builder.shared.d.ts.map +1 -1
- package/dist/esm/charts/chart-definition-builder.shared.js.map +1 -1
- package/dist/esm/companion/artifact-placement.shared.definitions.d.ts.map +1 -1
- package/dist/esm/companion/artifact-placement.shared.definitions.js.map +1 -1
- package/dist/esm/companion/provider-discovery.shared.schemas.d.ts.map +1 -1
- package/dist/esm/companion/provider-discovery.shared.schemas.js.map +1 -1
- package/dist/esm/companion/shared-library-companion.shared.definitions.d.ts.map +1 -1
- package/dist/esm/companion/shared-library-companion.shared.definitions.js.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/companion-exports.js.map +1 -1
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts +1 -1
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js +5 -2
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-event-classification.shared.d.ts +28 -0
- package/dist/esm/compliance/audit-trails/audit-event-classification.shared.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-event-classification.shared.js +30 -0
- package/dist/esm/compliance/audit-trails/audit-event-classification.shared.js.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.js +2 -1
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts +20 -0
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js +40 -0
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.d.ts +1 -14
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.js +1 -16
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.js.map +1 -1
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.d.ts +17 -4
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js +25 -5
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js.map +1 -1
- package/dist/esm/compliance/data-classification/data-classification.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/data-classification/data-classification.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts +0 -50
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.js +4 -51
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/public-governed-documents.shared.d.ts +67 -0
- package/dist/esm/compliance/documents/public-governed-documents.shared.d.ts.map +1 -0
- package/dist/esm/compliance/documents/public-governed-documents.shared.js +69 -0
- package/dist/esm/compliance/documents/public-governed-documents.shared.js.map +1 -0
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/consent-purposes.shared.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/consent-purposes.shared.js.map +1 -1
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.js +1 -1
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/jurisdiction-containment.shared.d.ts +32 -0
- package/dist/esm/compliance/privacy/jurisdiction-containment.shared.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/jurisdiction-containment.shared.js +46 -0
- package/dist/esm/compliance/privacy/jurisdiction-containment.shared.js.map +1 -0
- package/dist/esm/compliance/privacy/legal-hold-subject-attribution.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/legal-hold-subject-attribution.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/legal-holds.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/legal-holds.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/legal-holds.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/legal-holds.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/legal-notice-obligation.shared.d.ts +47 -0
- package/dist/esm/compliance/privacy/legal-notice-obligation.shared.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/legal-notice-obligation.shared.js +54 -0
- package/dist/esm/compliance/privacy/legal-notice-obligation.shared.js.map +1 -0
- package/dist/esm/compliance/privacy/legal-notice.shared.d.ts +105 -0
- package/dist/esm/compliance/privacy/legal-notice.shared.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/legal-notice.shared.js +112 -0
- package/dist/esm/compliance/privacy/legal-notice.shared.js.map +1 -0
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts +1 -27
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.js +2 -41
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts +51 -0
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js +65 -0
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/provider-capability-disclosure.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/provider-capability-disclosure.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/purpose-ref.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/purpose-ref.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-binding.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-binding.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.d.ts +8 -8
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-scope-deleted.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-scope-deleted.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/sharing.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/sharing.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-data-recipients.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-data-recipients.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/review-cadence.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/review-cadence.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/risk-posture.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/risk-posture.shared.schemas.js.map +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.js.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts +63 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.js +11 -0
- package/dist/esm/config/app-configuration-shared.shared.schemas.js.map +1 -1
- package/dist/esm/config/app-frontend-type.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/app-frontend-type.shared.schemas.js.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.d.ts.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.js.map +1 -1
- package/dist/esm/config/brand-assets.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/brand-assets.shared.schemas.js.map +1 -1
- package/dist/esm/config/configuration-validation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/configuration-validation.shared.schemas.js.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts +16 -16
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/chart-definition.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/chart-registration-alignment.shared.d.ts.map +1 -1
- package/dist/esm/config/frontend/chart-registration-alignment.shared.js.map +1 -1
- package/dist/esm/config/frontend/navigation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/navigation.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.js.map +1 -1
- package/dist/esm/config/postgresql.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/postgresql.shared.schemas.js.map +1 -1
- package/dist/esm/config/registration-acquisition-policy.shared.utils.d.ts.map +1 -1
- package/dist/esm/config/registration-acquisition-policy.shared.utils.js.map +1 -1
- package/dist/esm/config-authoring.entry.d.ts.map +1 -1
- package/dist/esm/config-authoring.entry.js.map +1 -1
- package/dist/esm/crdt/crdt-merge.shared.utils.d.ts.map +1 -1
- package/dist/esm/crdt/crdt-merge.shared.utils.js.map +1 -1
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.js.map +1 -1
- package/dist/esm/errors/caught-error-description.shared.utils.d.ts +5 -1
- package/dist/esm/errors/caught-error-description.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/caught-error-description.shared.utils.js +48 -4
- package/dist/esm/errors/caught-error-description.shared.utils.js.map +1 -1
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.d.ts.map +1 -1
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.definitions.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.js.map +1 -1
- package/dist/esm/errors/errors.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.utils.js.map +1 -1
- package/dist/esm/errors/resource-access-forbidden.shared.error.d.ts.map +1 -1
- package/dist/esm/errors/resource-access-forbidden.shared.error.js.map +1 -1
- package/dist/esm/errors/thrown-value-description.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/thrown-value-description.shared.utils.js.map +1 -1
- package/dist/esm/errors/zod-issue-formatting.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/zod-issue-formatting.shared.utils.js.map +1 -1
- package/dist/esm/exports/tabular-csv.shared.utils.d.ts.map +1 -1
- package/dist/esm/exports/tabular-csv.shared.utils.js.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-description.shared.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-description.shared.js.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-pass-mode.shared.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-pass-mode.shared.js.map +1 -1
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.js.map +1 -1
- package/dist/esm/external-data/external-data-provenance.shared.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-provenance.shared.js.map +1 -1
- package/dist/esm/external-data.exports.d.ts.map +1 -1
- package/dist/esm/external-data.exports.js.map +1 -1
- package/dist/esm/external-providers/compose-provider-registry.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/compose-provider-registry.shared.js.map +1 -1
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js.map +1 -1
- package/dist/esm/external-providers/engine-capability-surface.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capability-surface.shared.js.map +1 -1
- package/dist/esm/external-providers/external-providers.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/external-providers.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts +34 -1
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-capability-runtime.shared.types.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-capability-runtime.shared.types.js.map +1 -1
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-provider-public-config.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-provider-public-config.shared.js.map +1 -1
- package/dist/esm/external-providers/model-cost-accounting-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/model-cost-accounting-config.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-address-lookup-contract.shared.types.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-address-lookup-contract.shared.types.js.map +1 -1
- package/dist/esm/external-providers/provider-augmentation-opt-ins.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-augmentation-opt-ins.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-browser-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-browser-operations.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-capability.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.js.map +1 -1
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-metadata.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-package-allow-list.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-package-allow-list.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-protocol.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-protocol.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-scope-reauthorization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-scope-reauthorization.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-shared-connections.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-shared-connections.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-tier-rule.shared.utils.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-tier-rule.shared.utils.js.map +1 -1
- package/dist/esm/external-providers/provider-usage-cost.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-usage-cost.shared.js.map +1 -1
- package/dist/esm/external-providers/provider-usage-pricing.example.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-usage-pricing.example.js.map +1 -1
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.js.map +1 -1
- package/dist/esm/features/application-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/features/application-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/features/connected-feature.example.d.ts.map +1 -1
- package/dist/esm/features/connected-feature.example.js.map +1 -1
- package/dist/esm/features/core-feature-definitions.shared.d.ts.map +1 -1
- package/dist/esm/features/core-feature-definitions.shared.js.map +1 -1
- package/dist/esm/features/feature-builders.shared.d.ts.map +1 -1
- package/dist/esm/features/feature-builders.shared.js.map +1 -1
- package/dist/esm/features/feature-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/feature-definition.shared.schemas.js.map +1 -1
- package/dist/esm/features/feature-registry.shared.d.ts.map +1 -1
- package/dist/esm/features/feature-registry.shared.js.map +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.js.map +1 -1
- package/dist/esm/features/scope-features.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/scope-features.shared.schemas.js.map +1 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/files/file-remote-reference-link.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/file-remote-reference-link.shared.schemas.js.map +1 -1
- package/dist/esm/files/file-upload-grant.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/file-upload-grant.shared.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/files/files.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/files.shared.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.utils.d.ts.map +1 -1
- package/dist/esm/files/files.shared.utils.js.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-work-decisions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agent-work-decisions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-work-decisions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agent-work-decisions.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/autonomous-agents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/autonomous-agents.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts +2 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.js +2 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/human-decision.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/human-decision.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-call-attributions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-call-attributions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-call-attributions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-call-attributions.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-cost-period-aggregates.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-cost-period-aggregates.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-cost-period-aggregates.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-cost-period-aggregates.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-cost-summary.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-cost-summary.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/review-deadlines.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/review-deadlines.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/work-attribution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/work-attribution.shared.schemas.js.map +1 -1
- package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.d.ts.map +1 -1
- package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.js.map +1 -1
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.d.ts.map +1 -1
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.js.map +1 -1
- package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-flow.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.utils.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.utils.js.map +1 -1
- package/dist/esm/guidance/lifecycle-config.shared.schemas.d.ts +2 -2
- package/dist/esm/guidance/lifecycle-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-config.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.js.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-presentation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-presentation.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-erasure-stance.shared.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-erasure-stance.shared.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-rest-write-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-rest-write-operations.shared.schemas.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-transport-dialect.shared.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-transport-dialect.shared.js.map +1 -1
- package/dist/esm/http-api-binding/read-through-engine-anchors.shared.d.ts.map +1 -1
- package/dist/esm/http-api-binding/read-through-engine-anchors.shared.js.map +1 -1
- package/dist/esm/i18n/application-config-vocabulary.shared.d.ts.map +1 -1
- package/dist/esm/i18n/application-config-vocabulary.shared.js.map +1 -1
- package/dist/esm/i18n/engine-open-vocabulary-values.shared.d.ts.map +1 -1
- package/dist/esm/i18n/engine-open-vocabulary-values.shared.js.map +1 -1
- package/dist/esm/i18n/engine-open-vocabulary.shared.d.ts.map +1 -1
- package/dist/esm/i18n/engine-open-vocabulary.shared.js.map +1 -1
- package/dist/esm/i18n/interpolate-label-params.shared.utils.d.ts.map +1 -1
- package/dist/esm/i18n/interpolate-label-params.shared.utils.js.map +1 -1
- package/dist/esm/i18n/labelling.dto.shared.schemas.d.ts.map +1 -1
- package/dist/esm/i18n/labelling.dto.shared.schemas.js.map +1 -1
- package/dist/esm/inbound/conversation-threads.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/conversation-threads.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/inbound/conversation-threads.shared.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/conversation-threads.shared.schemas.js.map +1 -1
- package/dist/esm/inbound/inbound-channels.shared.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/inbound-channels.shared.schemas.js.map +1 -1
- package/dist/esm/inbound/inbound-delivery.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/inbound-delivery.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/inbound/inbound-delivery.shared.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/inbound-delivery.shared.schemas.js.map +1 -1
- package/dist/esm/inbound/inbound-endpoint-env.shared.d.ts.map +1 -1
- package/dist/esm/inbound/inbound-endpoint-env.shared.js.map +1 -1
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/elicitation-depth.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/elicitation-depth.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.d.ts +13 -1
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.js +21 -1
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows.exports.d.ts.map +1 -1
- package/dist/esm/meta-workflows.exports.js.map +1 -1
- package/dist/esm/monitoring/monitoring.shared.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/monitoring.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-context.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-context.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-submission.shared.enums.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-submission.shared.enums.js.map +1 -1
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-template.shared.enums.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-template.shared.enums.js.map +1 -1
- package/dist/esm/notifications/inbound-email/inbound-email.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/inbound-email/inbound-email.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/inbound-email/inbound-email.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/inbound-email/inbound-email.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.js.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/notification-badges.core.definitions.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.core.definitions.js.map +1 -1
- package/dist/esm/notifications/notification-badges.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.schemas.js.map +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.d.ts +5 -3
- package/dist/esm/notifications/notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.js +5 -3
- package/dist/esm/notifications/notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/application-owner-organization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/application-owner-organization.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-features.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-features.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-inheritance.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-inheritance.shared.js.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.js.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.example.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.example.js.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.shared.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.path.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.path.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-activity-feed.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-activity-feed.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-activity-feed.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-activity-feed.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-capability-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-capability-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-capability-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-capability-grants.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-client-controls.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-client-controls.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-relationships.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-relationships.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-relationships.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-relationships.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.js.map +1 -1
- package/dist/esm/provider-registration-runtime.exports.d.ts.map +1 -1
- package/dist/esm/provider-registration-runtime.exports.js.map +1 -1
- package/dist/esm/public-runtime/index.d.ts +13 -0
- package/dist/esm/public-runtime/index.d.ts.map +1 -1
- package/dist/esm/public-runtime/index.js +13 -0
- package/dist/esm/public-runtime/index.js.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.d.ts +1 -1
- package/dist/esm/queue/jobs.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.js.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.js.map +1 -1
- package/dist/esm/queue/queues.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.utils.js.map +1 -1
- package/dist/esm/queue/rabbitmq-queue-args.shared.d.ts.map +1 -1
- package/dist/esm/queue/rabbitmq-queue-args.shared.js.map +1 -1
- package/dist/esm/rag/rag-retrieval-health.shared.d.ts.map +1 -1
- package/dist/esm/rag/rag-retrieval-health.shared.js.map +1 -1
- package/dist/esm/requests/header-keys.shared.d.ts.map +1 -1
- package/dist/esm/requests/header-keys.shared.js.map +1 -1
- package/dist/esm/requests/http-requests.shared.d.ts.map +1 -1
- package/dist/esm/requests/http-requests.shared.js.map +1 -1
- package/dist/esm/requests/idempotency-key.shared.d.ts.map +1 -1
- package/dist/esm/requests/idempotency-key.shared.js.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-documentation.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-documentation.js.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.js.map +1 -1
- package/dist/esm/requests/rate-limits.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/rate-limits.shared.schemas.js.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.d.ts +2 -2
- package/dist/esm/requests/websocket.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.js.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.js.map +1 -1
- package/dist/esm/resources/collection-query-parameters.shared.d.ts.map +1 -1
- package/dist/esm/resources/collection-query-parameters.shared.js.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.js.map +1 -1
- package/dist/esm/resources/embedded-resource-mark.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/embedded-resource-mark.shared.utils.js.map +1 -1
- package/dist/esm/resources/relationship-display.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/relationship-display.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resource-status-lifecycle.example.d.ts +100 -0
- package/dist/esm/resources/resource-status-lifecycle.example.d.ts.map +1 -0
- package/dist/esm/resources/resource-status-lifecycle.example.js +156 -0
- package/dist/esm/resources/resource-status-lifecycle.example.js.map +1 -0
- package/dist/esm/resources/resources-config.shared.factory.d.ts +25 -1
- package/dist/esm/resources/resources-config.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.js +31 -8
- package/dist/esm/resources/resources-config.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.d.ts +33 -0
- package/dist/esm/resources/resources-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources-registry.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources-registry.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources-relationships.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-relationships.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-serialization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-serialization.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/collection-export.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/collection-export.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.js.map +1 -1
- package/dist/esm/resources/utils/composition-seedability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/composition-seedability.validation.js.map +1 -1
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.js.map +1 -1
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.js.map +1 -1
- package/dist/esm/resources/utils/field-value-disclosure.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/field-value-disclosure.utils.js.map +1 -1
- package/dist/esm/resources/utils/http-api-write-declaration.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/http-api-write-declaration.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.js.map +1 -1
- package/dist/esm/resources/utils/no-subject-data-stance-coherence.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/no-subject-data-stance-coherence.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/populated-file-fields.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/populated-file-fields.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/repository-dto-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/repository-dto-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/request-schema-field-carriage.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/request-schema-field-carriage.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/required-fk-fillability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/required-fk-fillability.validation.js.map +1 -1
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.factory.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.factory.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.relationships.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.relationships.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.schemas.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.schemas.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.js.map +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-naming.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-naming.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.path.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.path.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-serialization.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-serialization.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-family-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-family-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-type-inference.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-type-inference.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-type-utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-type-utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.js.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.js.map +1 -1
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.js.map +1 -1
- package/dist/esm/resources/work-unit.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/work-unit.shared.schemas.js.map +1 -1
- package/dist/esm/runtime/domain-module.shared.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.shared.definitions.js.map +1 -1
- package/dist/esm/runtime/execution-context.shared.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/execution-context.shared.schemas.js.map +1 -1
- package/dist/esm/runtime/runtime.shared.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/runtime.shared.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.d.ts.map +1 -1
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.js.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/mfa-backup-code-contract.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/mfa-backup-code-contract.shared.js.map +1 -1
- package/dist/esm/security/authentications/password-blocklist.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/password-blocklist.shared.utils.js.map +1 -1
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/same-origin-redirect-path.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/same-origin-redirect-path.shared.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/service-provider-client-authentication.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/service-provider-client-authentication.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/roles.application-roles.example.d.ts +37 -0
- package/dist/esm/security/authorizations/roles.application-roles.example.d.ts.map +1 -0
- package/dist/esm/security/authorizations/roles.application-roles.example.js +50 -0
- package/dist/esm/security/authorizations/roles.application-roles.example.js.map +1 -0
- package/dist/esm/security/authorizations/roles.shared.defaults.d.ts +13 -0
- package/dist/esm/security/authorizations/roles.shared.defaults.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.defaults.js +13 -0
- package/dist/esm/security/authorizations/roles.shared.defaults.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.d.ts +29 -0
- package/dist/esm/security/authorizations/roles.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.js +28 -0
- package/dist/esm/security/authorizations/roles.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-connection-listing.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-connection-listing.shared.schemas.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.shared.utils.js.map +1 -1
- package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.js.map +1 -1
- package/dist/esm/security/outbound-target-control.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/outbound-target-control.shared.schemas.js.map +1 -1
- package/dist/esm/security/submission-challenge/submission-challenge.shared.d.ts.map +1 -1
- package/dist/esm/security/submission-challenge/submission-challenge.shared.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-actions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-actions.shared.schemas.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-env.shared.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-env.shared.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-error-codes.shared.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-error-codes.shared.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.js.map +1 -1
- package/dist/esm/testing/resource-config-builders.d.ts.map +1 -1
- package/dist/esm/testing/resource-config-builders.js.map +1 -1
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.js.map +1 -1
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.js.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js +2 -0
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-consent-decision.shared.utils.d.ts.map +1 -1
- package/dist/esm/users/user-consent-decision.shared.utils.js.map +1 -1
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-credentials.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-credentials.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-identity-links.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-preferences-reset.shared.utils.d.ts.map +1 -1
- package/dist/esm/users/user-preferences-reset.shared.utils.js.map +1 -1
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-profiles.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-profiles.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/users.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.schemas.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.shared.schemas.js","sourceRoot":"","sources":["../../../../../src/config/frontend/navigation.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Navigation — Configuration Schemas\n *\n * Zone-first, operation-driven navigation configuration model.\n * Decomposes navigation into four independent axes:\n *\n * 1. **Meaning** (input signals) — contextual facts at navigation time (source zone, operation,\n * cardinality, viewport, depth). NOT configured — these are inputs to resolution.\n * 2. **Transition** (verb) — HOW content arrives: push, replace, split, overlay, inplace, promote.\n * This is the primary thing that gets configured per zone.\n * 3. **Placement** (zones) — WHERE content lives: primary, secondary, companion, overlay.\n * Zones are structural layout areas AND source context for resolution.\n * 4. **Appearance** (visual) — HOW content renders in its slot: panel, drawer, dialog, sheet.\n * Only meaningful for split and overlay transitions.\n *\n * Key design decisions:\n * - Zones own their complete behavior (no global defaults + override pattern)\n * - Operations are transition keys; cardinality drives appearance only\n * - Embedding (tabs/sections within a parent) is view composition, not navigation\n * - `contentModel` (single/tabbed) is orthogonal to transitions\n *\n * @see _code_archive/docs-archive/navigation/navigation-v3-reflection.md\n */\n\nimport { z } from 'zod';\nimport { ViewportBreakpoint, DisplayDirection } from '@wildo-ai/zod-decorators';\nimport { CoreResourceOperation } from '../../resources/resources.shared.core.definitions';\n\n\n// ════════════════════════════════════════════════════════════════\n// Enums\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Navigation transition verbs — HOW content arrives at its destination.\n *\n * These are the six fundamental navigation actions. Every user-triggered\n * navigation event resolves to exactly one of these verbs. The source zone's\n * `transitions` map determines which verb fires for each operation.\n *\n * Four zone-level transitions: `push`, `replace`, `split`, `overlay`\n * Two cross-context transitions: `inplace` (element-level), `promote` (escape to primary)\n *\n * `push` behavior depends on the zone's `contentModel`:\n * - In `single` zones: stack-based (new content on top, back pops)\n * - In `tabbed` zones: opens a new tab and makes it active (an already-open record is NOT\n * de-duplicated — it opens again)\n *\n * @wildo_source:part:start saas.models.navigation.transition-vocabulary facet:layer:shared facet:family:navigation-config\n */\nexport enum NavigationTransition {\n /**\n * Content added to the zone's stack (single) or as a new tab (tabbed).\n * Back navigation pops the stack or switches to the previous tab.\n * URL adds a new path segment.\n */\n PUSH = 'push',\n /**\n * Content replaces the current content in the zone. No stack entry — the previous\n * content is gone from the zone's state (but remains in browser history).\n * URL replaces the current segment.\n */\n REPLACE = 'replace',\n /**\n * Content opens in an adjacent zone (secondary or companion).\n * Creates a side-by-side layout. The source zone's content remains visible.\n * Back navigation un-splits (closes the adjacent zone).\n * URL: the detail's own address beside a resource primary; beside any other primary the host\n * keeps its URL and a RESOURCE detail rides as `?pane=`. There is no split segment.\n */\n SPLIT = 'split',\n /**\n * Content opens in a floating layer above the entire layout (dialog, sheet, or drawer).\n * The underlying layout remains visible; it is non-interactive while the overlay is modal (the\n * default), and stays interactive under `overlayBehavior.modal: false`.\n * Back navigation or Escape dismisses the overlay.\n * NOT URL-addressed: opening an overlay leaves the browser URL where it was, so its content cannot\n * be linked to or restored by a reload. Choose it knowing that.\n */\n OVERLAY = 'overlay',\n /**\n * Element-level transformation within the current view. A specific item in a\n * list/section transforms from one mode to another (read → edit); a CREATE\n * materializes a new element beside the existing ones. The parent view stays,\n * the zone stack is unchanged, and surrounding items remain visible.\n *\n * Fundamentally different from `replace` (which swaps the entire zone content).\n * `inplace` operates at the element level, not the zone level.\n *\n * No lifecycle modifiers (`persistent`/`ephemeral`) are valid on `inplace`.\n * No appearance to configure — the element transforms within its existing slot.\n *\n * **It is the one transition that does not place content in a zone**, which is\n * why the controller hands it to the element-level host\n * (`InPlaceOperationContext`) instead of resolving a target zone for it. That\n * host is provided by the COLLECTION the element belongs to, so a transition\n * resolving to `inplace` on a surface with no collection above it — a detail\n * page, a breadcrumb, a picker — degrades to an OVERLAY.\n *\n * **It is TRANSIENT: no URL, and a reload returns the view to rest.** Earlier\n * revisions of this comment promised a query param (`?editing=<childId>` /\n * `?creating=<resourceType>`) and none was ever written. It is not written now\n * either, and that is a decision rather than an omission: an inline row-edit is\n * a momentary state of a listing, not a place — no comparable admin framework\n * deep-links one, and anything that should survive a reload or a back button\n * wants `push`. `ResourceOperationActionPresentation.INLINE`, the per-operation\n * tier that selects the same host, is transient for the same reason.\n *\n * @example\n * // Click \"edit\" on a child in parent's inline section → item transforms to edit form\n * transitions: { [CoreResourceOperation.UPDATE]: NavigationTransition.INPLACE }\n *\n * // Click \"add\" in a relationship section → create form appears inline in the list\n * transitions: { [CoreResourceOperation.CREATE]: NavigationTransition.INPLACE }\n */\n INPLACE = 'inplace',\n /**\n * Escape the current context and open content at primary scope.\n * Abandons the current context: overlays close, companion/secondary dismiss — except a pane\n * placed by a `persistent` split, which survives a reset by design.\n * The promoted content becomes the primary zone's top content.\n *\n * Use case: a link within an overlay should open as a full primary view,\n * or a nested detail in a companion zone should \"pop out\" to primary.\n *\n * Fundamentally different from `push` (which stays in the current zone) and\n * from `replace` (which replaces content within the same zone). `promote`\n * crosses zones and always targets primary.\n *\n * No lifecycle modifiers (`persistent`/`ephemeral`) are valid on `promote`.\n * No appearance to configure — content fills primary (same as push/replace).\n *\n * URL serialization: full URL change (promoted resource becomes the primary route).\n *\n * @example\n * // From an overlay, a link should open as primary (close overlay, show in primary)\n * transitions: { [CoreResourceOperation.READ]: NavigationTransition.PROMOTE }\n */\n PROMOTE = 'promote',\n}\n/** @wildo_source:part:end saas.models.navigation.transition-vocabulary */\n\n/**\n * Named layout zones — configurable structural areas WHERE content lives.\n *\n * Zones serve four purposes:\n * 1. **Structural** — which physical areas exist in the layout (declared in config)\n * 2. **Source context** — the same operation resolves differently FROM primary vs FROM secondary\n * 3. **Responsive** — each zone carries its own collapse behavior per viewport\n * 4. **Content model** — each zone independently manages single-stack or tabbed content\n *\n * Note: `overlay` is NOT a named zone — it's an implicit layer always available.\n * Overlay is a runtime destination, not a configurable zone. See `NavigationZone`\n * in the frontend runtime types for the full set including overlay.\n *\n * @wildo_source:part:start saas.models.navigation.surface-vocabulary facet:layer:shared facet:family:navigation-config\n */\nexport enum NavigationZoneName {\n /** Main content area. Lists, root-level reads, primary workspace. Always exists. */\n PRIMARY = 'primary',\n /**\n * First adjacent zone. Detail content in list-detail patterns.\n * Only exists if declared in config. Appears when a `split` transition targets it.\n * Typical use: showing item details alongside a list.\n */\n SECONDARY = 'secondary',\n /**\n * Persistent supplementary content. Reference panels, docs, notes, threads.\n * Only exists if declared in config, and starts hidden.\n * Reached by a `split` with `persistent: true`, or by an ordinary `split` when the secondary zone\n * is already occupied.\n * Typical use: Slack thread panel, VS Code terminal, documentation sidebar.\n */\n COMPANION = 'companion',\n}\n\n/**\n * How a zone manages multiple items. Orthogonal to transitions.\n *\n * The transition says \"content arrives\" — the content model says\n * \"how does the zone accommodate it.\" Any zone can use any content model,\n * regardless of which transitions it supports.\n */\nexport enum NavigationZoneContentModel {\n /**\n * Navigation stack: new content pushes on top, previous preserved underneath.\n * Only one item visible at a time. Back navigation pops the stack.\n * `replace` replaces the top without adding to the stack.\n * This is the default for all zones.\n */\n SINGLE = 'single',\n /**\n * Parallel tabs: every navigation landing in the zone opens a new tab and makes it active (no\n * de-duplication). Tab bar is visible, showing all open tabs. No depth stack within tabs.\n * `replace` replaces the active tab's content, and back closes the active tab and shows its\n * neighbour. The model changes RENDERING only — it does not change how navigation resolves.\n * When no tabs remain, `onEmpty` behavior applies.\n */\n TABBED = 'tabbed',\n}\n\n/**\n * Responsive collapse behavior when viewport shrinks below a zone's breakpoint.\n *\n * Only applies to secondary and companion zones. Primary never collapses.\n * It applies to content ALREADY in the zone, not only to new navigations: when the zone collapses its\n * whole history moves (a tabbed zone's tabs too, the one on screen on top), and when the viewport\n * grows back what is still on top of primary migrates home with every field intact. Whatever the\n * reader navigated past at the narrow width stays where it is.\n */\nexport enum ResponsiveCollapseMode {\n /**\n * Zone hides. Its content joins primary's navigation stack.\n * The user sees the content in-context within primary.\n * Back navigation pops back to primary's previous content.\n */\n PUSH = 'push',\n /**\n * Zone hides. Its content opens as an overlay on top of primary.\n * The user sees the content as a floating sheet/dialog.\n * Dismiss returns to the underlying primary content.\n */\n OVERLAY = 'overlay',\n}\n/** @wildo_source:part:end saas.models.navigation.surface-vocabulary */\n\n/**\n * @wildo_source:part:start saas.models.navigation.zone-declaration facet:layer:shared facet:family:navigation-config\n *\n * What happens when a zone's last content is dismissed.\n * Only meaningful for secondary and companion zones (primary never empties,\n * overlay auto-dismisses by definition).\n */\nexport enum ZoneEmptyBehavior {\n /**\n * Zone hides, adjacent zones expand to fill the space.\n * Example: closing the last detail → layout returns to list-only.\n * This is the default for all non-primary zones.\n */\n COLLAPSE = 'collapse',\n /**\n * Zone stays visible with an empty-state placeholder.\n * Example: \"Select an item to view details\" message. Keeps layout stable.\n * Useful when the user frequently toggles between items.\n */\n EMPTY_STATE = 'emptyState',\n}\n/** @wildo_source:part:end saas.models.navigation.zone-declaration */\n\n/**\n * @wildo_source:part:start saas.models.navigation.surface-vocabulary facet:layer:shared facet:family:navigation-config\n *\n * Visual presentation for overlay transitions.\n * Determines how floating content renders above the layout.\n */\nexport enum OverlayAppearance {\n /**\n * Centered modal dialog with backdrop.\n * Best for focused tasks: create forms, confirmations, destructive actions.\n * Blocks underlying content visually. Escape or backdrop click dismisses.\n */\n DIALOG = 'dialog',\n /**\n * Side or bottom drawer panel that slides in from an edge.\n * Best for contextual content that benefits from seeing the underlying layout.\n * Less disruptive than dialog. Common for detail views on mobile.\n */\n SHEET = 'sheet',\n /**\n * Vaul-backed mobile drawer.\n * Use when the navigation resolver should choose a drawer directly rather\n * than relying on a dialog appearance plus mobileShape policy.\n */\n DRAWER = 'drawer',\n}\n\n/*\n * ─── `SplitAppearance` was REMOVED on 2026-09-25, and the reason is worth keeping ───────────────\n *\n * It declared `PANEL` (\"vertical side panel\") and `DRAWER` (\"horizontal drawer, bottom panel\"), and\n * the whole sub-tree was WRITE-ONLY: the resolver computed it, the controller stored it on the stack\n * entry, and the ONLY site reading `entry.appearance` cast it to `OverlayAppearance` for the overlay\n * container. No split renderer branched on it. So `DRAWER` could never render — an author who wrote\n * it got a vertical side panel with no diagnostic — and `PANEL` was a value meaning \"the default\".\n *\n * It was also a SECOND vocabulary for an axis `SplitConfig.orientation` already owns:\n * `orientation: HORIZONTAL` is \"top-bottom\", which is what `DRAWER` described. The two were\n * independently authorable in contradiction, with no refine and nothing honouring either against the\n * other.\n *\n * Collapsed to ONE source — `SplitConfig.orientation`, which the renderer genuinely reads — per\n * \"measure what the runtime actually reads, then collapse to one source of truth\". `orientation` was\n * additionally made live on the STATIC render branch in the same change; it had been read only by\n * the resizable branch, so `HORIZONTAL` + `resizable: false` silently produced a side panel.\n *\n * `entry.appearance` is now `OverlayAppearance` alone, which removes the unchecked downcast at its\n * one reader. The removal follows the precedent already set here for `defaultVisible`, `autoSplit`\n * and `CompanionSplitConfig.orientation`: a declared-but-unread field is deleted, not deprecated.\n */\n/** @wildo_source:part:end saas.models.navigation.surface-vocabulary */\n\n// ════════════════════════════════════════════════════════════════\n// ViewportDiscriminated — Generic responsive override pattern\n// ════════════════════════════════════════════════════════════════\n\n/**\n * A value that is either a plain `T` (applies at all viewports) or a\n * viewport-keyed partial record for per-breakpoint control.\n *\n * This pattern is used throughout the navigation config for responsive properties:\n * `responsiveCollapse`, `appearance`, `contentSectionConfig`, `transition`.\n *\n * @example\n * // Plain value — same everywhere\n * responsiveCollapse: ResponsiveCollapseMode.PUSH\n *\n * // Viewport-discriminated — different per breakpoint\n * responsiveCollapse: { [ViewportBreakpoint.VERT_TABLET]: ResponsiveCollapseMode.PUSH, [ViewportBreakpoint.MOBILE]: ResponsiveCollapseMode.OVERLAY }\n *\n * // Overlay appearance — sheet on tablet, drawer on mobile\n * overlay: { [ViewportBreakpoint.VERT_TABLET]: OverlayAppearance.SHEET, [ViewportBreakpoint.MOBILE]: OverlayAppearance.DRAWER }\n */\nexport type ViewportDiscriminated<T> = T | Partial<Record<ViewportBreakpoint, T>>;\n\n/**\n * Zod schema factory for `ViewportDiscriminated<T>`.\n *\n * Produces a union: the plain inner schema OR a record keyed by `ViewportBreakpoint`\n * with inner schema values. The record must have at least one key.\n *\n * @param innerSchema - Zod schema for the value type at each breakpoint.\n */\nexport function viewportDiscriminatedSchema<T extends z.ZodType>(innerSchema: T) {\n return z.union([\n innerSchema,\n z.partialRecord(z.enum(ViewportBreakpoint), innerSchema).refine(\n (obj) => Object.keys(obj).length > 0,\n { message: 'Viewport-discriminated object must have at least one breakpoint key' },\n ),\n ]);\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Transition Config\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Extended transition with lifecycle modifiers.\n *\n * Most transitions are simple verbs (just the enum value). The object form\n * adds lifecycle semantics for two specific patterns:\n *\n * - **Companion pattern**: `{ transition: NavigationTransition.SPLIT, persistent: true }`\n * The split zone persists when the source zone's content changes.\n * Without `persistent`, a split zone would clear when primary navigates away.\n *\n * - **Inspect pattern**: `{ transition: NavigationTransition.OVERLAY, ephemeral: true }`\n * The overlay auto-closes when the source zone's stack changes.\n * Without `ephemeral`, overlays stay open until explicitly dismissed.\n *\n * Semantic constraints (enforced by `.refine()`):\n * - `persistent` is only valid on `split` transitions\n * - `ephemeral` is only valid on `overlay` transitions\n * - `persistent` and `ephemeral` are mutually exclusive\n * - `inplace` and `promote` do not accept any modifier (they are always simple verbs)\n */\nexport const TransitionObjectSchema = z.object({\n /** The transition verb. */\n transition: z.enum(NavigationTransition),\n /**\n * When `true`, the split zone persists when the source zone navigates away.\n * Only valid on `split` transitions. Targets the companion zone specifically\n * (rather than the default adjacent zone resolution).\n *\n * Example: Slack thread panel stays open when switching channels.\n */\n persistent: z.boolean().optional(),\n /**\n * When `true`, the overlay auto-closes when the source zone's stack changes.\n * Only valid on `overlay` transitions.\n *\n * Example: Quick-inspect preview that dismisses when the user clicks another item.\n */\n ephemeral: z.boolean().optional(),\n}).refine(\n (obj) => {\n if (obj.persistent && obj.transition !== NavigationTransition.SPLIT) return false;\n if (obj.ephemeral && obj.transition !== NavigationTransition.OVERLAY) return false;\n if (obj.persistent && obj.ephemeral) return false;\n return true;\n },\n { message: 'persistent is only valid on split; ephemeral is only valid on overlay; they are mutually exclusive' },\n);\nexport type TransitionObject = z.infer<typeof TransitionObjectSchema>;\n\n/**\n * A transition configuration: either a simple verb string or an object with modifiers.\n *\n * @example\n * // Simple verb\n * transitions: { read: NavigationTransition.SPLIT, create: NavigationTransition.OVERLAY }\n *\n * // Object with lifecycle modifier\n * transitions: { read: { transition: NavigationTransition.SPLIT, persistent: true } }\n */\nexport const TransitionConfigSchema = z.union([\n z.enum(NavigationTransition),\n TransitionObjectSchema,\n]);\nexport type TransitionConfig = z.infer<typeof TransitionConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Zone Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Operation → transition mapping for a zone.\n *\n * Partial record — only operations that the zone handles need entries.\n * Missing operations fall back to the framework's hardcoded defaults.\n *\n * Keys are `CoreResourceOperation` values such as `read`, `list`, `create`,\n * `update`, `delete`, and `search`.\n *\n * @example\n * transitions: {\n * read: NavigationTransition.SPLIT, // click item → split to secondary\n * list: NavigationTransition.REPLACE, // \"View all\" → replace primary\n * create: NavigationTransition.OVERLAY, // new item → dialog\n * update: NavigationTransition.INPLACE, // edit → transform element inline\n * delete: NavigationTransition.OVERLAY, // confirm → dialog\n * search: NavigationTransition.PUSH, // advanced search → full-surface route\n * }\n *\n * // From an overlay, promote a link to primary view\n * transitions: {\n * read: NavigationTransition.PROMOTE, // link in overlay → escape to primary\n * }\n */\n/** Partial record — only operations that the zone handles need entries. Missing operations fall back to framework defaults. */\nexport const ZoneTransitionsSchema = z.partialRecord(\n z.enum(CoreResourceOperation),\n TransitionConfigSchema,\n) as unknown as z.ZodType<Partial<Record<CoreResourceOperation, TransitionConfig>>>;\nexport type ZoneTransitions = Partial<Record<CoreResourceOperation, TransitionConfig>>;\n\n/**\n * Transition → visual appearance for a zone. Values are viewport-discriminated.\n *\n * Only the `overlay` transition has an appearance choice. The others have none to configure:\n * - `push`/`replace` fill the zone\n * - `split` opens a pane whose shape is `split.orientation` (there is no split appearance)\n * - `inplace` transforms an element within the current view\n * - `promote` fills primary (same as push/replace)\n *\n * @example\n * appearance: {\n * overlay: { [ViewportBreakpoint.VERT_TABLET]: OverlayAppearance.SHEET, [ViewportBreakpoint.MOBILE]: OverlayAppearance.DRAWER }, // sheet on tablet, drawer on mobile\n * }\n */\nexport const ZoneAppearanceSchema = z.object({\n /**\n * How overlay content renders. Default: `OverlayAppearance.DIALOG` (centered modal).\n *\n * There is deliberately no `split` sibling: how a PANE renders is `SplitConfig.orientation` plus\n * the zone's width bounds, which the renderer reads. See the note where `SplitAppearance` used to\n * be declared.\n */\n overlay: viewportDiscriminatedSchema(z.enum(OverlayAppearance)).optional(),\n});\nexport type ZoneAppearance = z.infer<typeof ZoneAppearanceSchema>;\n\n/**\n * @wildo_source:part:start saas.models.navigation.zone-declaration facet:layer:shared facet:family:navigation-config\n *\n * How much of its zone a destination's content occupies is NOT declared here: it is the\n * destination's `ZoneContentGeometry` (a `maxWidth` and a `fillsHeight`), because the same primary\n * zone hosts a list that wants the width cap, a detail that caps itself, and a graph that wants\n * neither. A zone's own declaration follows.\n */\n\n/**\n * Full zone configuration.\n *\n * Each declared zone in the layout owns its complete behavior:\n * which transition fires for each operation, how content appears,\n * and how the zone responds to viewport changes.\n *\n * Note: `minWidth`, `maxWidth`, `onEmpty` and `responsiveCollapse` are only meaningful for\n * secondary and companion zones. Primary never collapses, never empties, and takes remaining space.\n * Setting these on primary has no effect.\n *\n * ## Every field here is READ by the runtime, and that was checked rather than assumed (#211)\n *\n * | field | the reader |\n * |---|---|\n * | `contentModel` | `NavigationContentAreas.tsx` (TABBED detection) + `zone-visible-entry.ts` |\n * | `transitions` | `navigation-policy-resolver.service.ts` |\n * | `appearance` | the policy resolver (`appearance.overlay` — there is no split appearance) |\n * | `minWidth` / `maxWidth` | `NavigationContentAreas.tsx` drag constraints, both split branches |\n * | `onEmpty` | `zone-empty-behavior.ts` |\n * | `responsiveCollapse` | `navigation-policy-resolver.service.ts` |\n *\n * `defaultVisible` was REMOVED by that audit: nothing read it, and its only documented meaning was\n * \"defaults to `true` when `split.autoSplit` is `true`\" — a field defined in terms of another field\n * that was also dead. What it was reaching for is `onEmpty`, which every current layout already uses\n * (`zoneOccupiesSpaceWhenEmpty`) and which the runtime genuinely reads.\n */\nexport const ZoneConfigSchema = z.object({\n /**\n * How this zone manages multiple items.\n * - `NavigationZoneContentModel.SINGLE` (default): stack-based navigation. One item visible, back pops.\n * - `NavigationZoneContentModel.TABBED`: parallel tabs. Tab bar visible, multiple items accessible.\n * @default NavigationZoneContentModel.SINGLE\n */\n contentModel: z.enum(NavigationZoneContentModel).default(NavigationZoneContentModel.SINGLE),\n\n /** Operation → transition mapping. Defines what happens for each user action in this zone. */\n transitions: ZoneTransitionsSchema,\n\n /** Which shape an OVERLAY opened from this zone takes. Only overlays have an appearance: a pane's shape is `split.orientation`. */\n appearance: ZoneAppearanceSchema.optional(),\n\n /**\n * Minimum pixel width when resizing. Constrains how far this side of the\n * split divider can be dragged. Only meaningful for secondary and companion zones, and only when\n * that zone is resizable — `SplitConfigSchema.resizable` for secondary, `split.companion.resizable`\n * for companion (independent flags).\n *\n * The pixel value is converted to a share of the content area and clamped to 5–70%. When OMITTED on\n * a resizable zone the floor is 25% of the content area — or the zone's own ratio share, if that is\n * smaller — never zero. A pane is never collapsed by dragging it: closing a pane is navigation.\n *\n * A declared `maxWidth` narrower than this floor lowers the floor to it. When the shown side panes ask\n * for more than primary's 25% leaves, they shrink in proportion and none opens below its floor (a\n * non-resizable pane's floor is 25%, or its own ratio share if smaller); primary opens at exactly 25%.\n * The floors are pixels, so at a narrow window they may not fit together at all — they then give way\n * to each other in proportion, and the smaller floor a pane opens at is its drag floor. Primary never\n * gives way.\n *\n * ## It is ALSO a COLLAPSE TRIGGER, on every zone — not only a drag bound\n *\n * The paragraph above restricts this to resizing, and that stopped being the whole truth when the\n * content-area fit escalation landed: `resolveCollapseMode` feeds `minWidth` to\n * `contentAreaFitsSplit`, for resizable and non-resizable zones alike. A zone declaring\n * `minWidth: W` needs `W / 0.75` of content width beside primary's 25% floor, and below that the\n * split escalates rather than squeezing both panes under their floors.\n *\n * So a NON-resizable pane with `minWidth: 600` stops splitting on a 1000px content area at full\n * desktop width — correct behaviour, and the opposite of what this field's own contract said until\n * 2026-09-25. Declare it when you mean \"this pane is not worth opening narrower than W\", and omit\n * it when you only want a drag floor on a layout that is not resizable anyway.\n */\n minWidth: z.number().positive().optional(),\n\n /**\n * Maximum pixel width when resizing. Constrains how far this side of the\n * split divider can be dragged. Only meaningful for secondary and companion zones, and only when\n * that zone is resizable — `SplitConfigSchema.resizable` for secondary, `split.companion.resizable`\n * for companion (independent flags).\n *\n * The pixel value is converted to a share of the content area and clamped to 5–70%. When OMITTED on\n * a resizable zone the ceiling is whatever leaves the primary zone 25% of the content area.\n */\n maxWidth: z.number().positive().optional(),\n\n /**\n * What happens when this zone's last content is dismissed (stack empty, last tab closed).\n * - `ZoneEmptyBehavior.COLLAPSE` (default): zone hides, adjacent zones expand to fill.\n * - `ZoneEmptyBehavior.EMPTY_STATE`: zone stays visible with placeholder (\"Select an item to view details\").\n * Only meaningful for secondary and companion zones. Primary never empties.\n */\n onEmpty: z.enum(ZoneEmptyBehavior).optional(),\n\n /**\n * Responsive collapse rules: what happens when viewport shrinks below the zone's breakpoint.\n * Accepts a plain `ResponsiveCollapseMode` (all breakpoints) or viewport-discriminated object.\n * Only meaningful for secondary and companion zones. Primary never collapses.\n *\n * It moves content already in the zone as well as new navigations: the zone's whole history\n * moves when it collapses, and what is still on top of primary goes home when it returns — see\n * `ResponsiveCollapseMode`.\n *\n * @example\n * responsiveCollapse: ResponsiveCollapseMode.PUSH // always push into primary\n * responsiveCollapse: { [ViewportBreakpoint.VERT_TABLET]: ResponsiveCollapseMode.PUSH, [ViewportBreakpoint.MOBILE]: ResponsiveCollapseMode.OVERLAY } // tablet: push, mobile: overlay\n */\n responsiveCollapse: viewportDiscriminatedSchema(z.enum(ResponsiveCollapseMode)).optional(),\n});\nexport type ZoneConfig = z.infer<typeof ZoneConfigSchema>;\n/** @wildo_source:part:end saas.models.navigation.zone-declaration */\n\n\n// ════════════════════════════════════════════════════════════════\n// App-Level & From-Overlay Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * App-level navigation configuration: from OUTSIDE the zone system.\n *\n * Covers navigation triggered by sidebar clicks, command palette selections,\n * hotkey shortcuts, toast actions, and notification clicks.\n *\n * App-level navigation causes a **layout reset**: primary content is replaced,\n * secondary and companion zones are cleared. This is fundamentally different\n * from zone-level navigation where the source zone's content persists.\n *\n * @example\n * appLevel: {\n * transitions: {\n * list: NavigationTransition.REPLACE, // sidebar \"Projects\" → replace primary, clear others\n * read: NavigationTransition.REPLACE, // command palette \"Go to X\" → replace primary\n * create: NavigationTransition.OVERLAY, // quick action \"New X\" → dialog\n * search: NavigationTransition.REPLACE, // command/menu search surface → replace primary\n * },\n * appearance: { overlay: OverlayAppearance.DIALOG },\n * }\n */\nexport const AppLevelConfigSchema = z.object({\n /** Operation → transition mapping for app-level navigation. */\n transitions: ZoneTransitionsSchema,\n /** Appearance overrides for app-level transitions. */\n appearance: ZoneAppearanceSchema.optional(),\n});\nexport type AppLevelConfig = z.infer<typeof AppLevelConfigSchema>;\n\n/**\n * Navigation from within an overlay (dialog, sheet, or drawer).\n *\n * When already in an overlay, transitions behave differently to avoid\n * nesting overlays. Typically all operations `push` within the overlay's\n * own stack instead of opening new overlays.\n *\n * No appearance config — the content is already inside an overlay.\n *\n * @example\n * fromOverlay: {\n * transitions: {\n * read: NavigationTransition.PUSH, // push within overlay — don't nest modals\n * list: NavigationTransition.PUSH,\n * create: NavigationTransition.PUSH,\n * search: NavigationTransition.PUSH,\n * },\n * }\n */\nexport const FromOverlayConfigSchema = z.object({\n /** Operation → transition mapping when navigating from within an overlay. */\n transitions: ZoneTransitionsSchema,\n});\nexport type FromOverlayConfig = z.infer<typeof FromOverlayConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Split Geometry\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Companion-specific split geometry.\n * Controls how the companion zone is sized and positioned relative to the main content area.\n */\nexport const CompanionSplitConfigSchema = z.object({\n /**\n * Main-area-to-companion size ratio.\n * @example [70, 30] — companion takes 30% of available space\n * @default [70, 30]\n */\n ratio: z.tuple([z.number(), z.number()]).default([70, 30]),\n /**\n * Whether the companion split boundary is user-draggable.\n * When `true`, a draggable divider appears between the main area and the companion zone.\n * Per-side drag constraints use `ZoneConfig.minWidth`/`maxWidth` on the companion zone.\n * @default false\n */\n resizable: z.boolean().default(false),\n});/*\n * `orientation` was REMOVED here by the #211 audit, and it is the one removal that took a\n * capability with it. It claimed the companion could sit BELOW the main area (\"bottom panel, e.g.\n * VS Code terminal\") and nothing read it: all three zones share ONE `ResizablePanelGroup` whose\n * `direction` comes from `split.orientation`, so an author writing HORIZONTAL here got a side panel\n * and no diagnostic. Honouring it needs a NESTED panel group, with its own sizes, autoSaveId, drag\n * constraints and responsive-collapse behaviour — a feature, not a field fix. Left as a declared\n * lie it was worse than absent: it ships to application builders in the compiled\n * `config-navigation` skill and answers with silence. Build the nested group first; the field comes\n * back when something reads it.\n */\n\nexport type CompanionSplitConfig = z.infer<typeof CompanionSplitConfigSchema>;\n\n/**\n * Top-level split geometry — describes the physical relationship between zones.\n *\n * This is a top-level config (not per-zone) because it describes the INTER-zone\n * layout: how much space each zone gets, and the split direction.\n *\n * @example\n * split: {\n * ratio: [40, 60], // 40% primary, 60% secondary\n * orientation: DisplayDirection.VERTICAL, // side-by-side\n * resizable: true, // divider is draggable\n * companion: {\n * ratio: [70, 30], // companion takes 30%\n * resizable: true, // its own divider is draggable\n * },\n * }\n */\nexport const SplitConfigSchema = z.object({\n /**\n * Primary-to-secondary width/height ratio. Defines the initial proportion.\n * When `resizable` is `true`, user drag overrides this (persisted to localStorage).\n * @example [40, 60] — primary gets 40%, secondary gets 60%\n * @default [50, 50]\n */\n /*\n * ONLY `ratio[1]` is read. Primary takes what the side panes leave — `100 − Σ(side defaults)` in\n * the static branch, the resizable branch's own clamping otherwise — so the first element has no\n * reader anywhere, and with BOTH a secondary and a companion shown it is not even well defined.\n *\n * Kept as a 2-tuple rather than narrowed to one number, deliberately: `[50, 50]` reads as a\n * proportion, which is what an author is thinking about, and changing the shape would break every\n * authored layout for a field whose value is already ignored. What changed on 2026-09-25 is that\n * it says so — `ratio: [40, 30]` silently rendered a 30% pane and a 70% primary, with the authored\n * 40 discarded and no diagnostic.\n */\n ratio: z.tuple([z.number(), z.number()]).default([50, 50]),\n /**\n * Split direction between primary and secondary — **the ONE axis vocabulary**.\n *\n * - `DisplayDirection.VERTICAL` (default): side-by-side (most common for list-detail)\n * - `DisplayDirection.HORIZONTAL`: top-bottom — the shape `SplitAppearance.DRAWER` used to\n * describe before that duplicate vocabulary was removed (2026-09-25).\n *\n * Read by BOTH render branches since the same change. It was read only by the resizable branch\n * before, so `HORIZONTAL` on a non-resizable layout silently produced a side panel.\n *\n * Note this names the DIVIDER's orientation, not the stacking axis — `VERTICAL` divider, content\n * side by side. `splitDividerOrientationToPanelGroupDirection` is the one place that inverts it.\n *\n * @default DisplayDirection.VERTICAL\n */\n orientation: z.enum(DisplayDirection).default(DisplayDirection.VERTICAL),\n /**\n * Whether the primary↔secondary split boundary is user-draggable.\n * When `true`, a draggable divider appears between primary and secondary zones.\n * Per-side drag constraints use `ZoneConfig.minWidth`/`maxWidth` on each zone.\n * @default false\n */\n resizable: z.boolean().default(false),\n /** Companion zone split geometry. Only relevant if companion zone is declared. */\n companion: CompanionSplitConfigSchema.optional(),\n});\n/*\n * Every field above is READ by the runtime, checked rather than assumed (#211):\n * `ratio` and `resizable` by `NavigationContentAreas.tsx` (both the panel sizes and the\n * is-anything-draggable decision), `orientation` by `splitDividerOrientationToPanelGroupDirection`,\n * `companion` by the companion panel branch.\n *\n * `autoSplit` was REMOVED by that audit. It was declared, defaulted, documented, shipped to\n * application builders in the compiled `config-navigation` skill, authored by three preset layouts\n * and two applications — and read by nothing, so every one of those authors got `false`'s behaviour\n * whatever they wrote. Removing rather than implementing was the deliberate answer: what it\n * described is auto-SELECTING a record the user did not choose and stamping its URL, which is a\n * product decision nobody has taken, and the case people actually hit — a detail URL restoring\n * beside its list — was covered by the deep-link restoration in `528d132a` without it.\n */\nexport type SplitConfig = z.infer<typeof SplitConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Viewport Override Block\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Global viewport override — applies across ALL zones at a given breakpoint.\n *\n * Use for sweeping mobile/tablet overrides that affect the entire app.\n * For per-zone responsive behavior, use `ZoneConfig.responsiveCollapse` and\n * viewport-discriminated appearance values instead.\n *\n * @example\n * // In NavigationLayout:\n * [ViewportBreakpoint.MOBILE]: {\n * transitions: {\n * read: NavigationTransition.PUSH, // mobile: no splits, everything pushes\n * create: { transition: NavigationTransition.OVERLAY, ephemeral: true }, // mobile: create opens as an inspect-style ephemeral overlay\n * },\n * }\n */\nexport const ViewportOverrideSchema = z.object({\n /** Operation → transition overrides at this viewport. Merged over zone defaults. */\n transitions: (z.partialRecord(\n z.enum(CoreResourceOperation),\n TransitionConfigSchema,\n ) as unknown as z.ZodType<Partial<Record<CoreResourceOperation, TransitionConfig>>>).optional(),\n});\nexport type ViewportOverride = z.infer<typeof ViewportOverrideSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// NavigationLayout — Top-Level App Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * @wildo_source:part:start saas.models.navigation.layout facet:layer:shared facet:family:navigation-config\n *\n * The complete navigation layout configuration for an application.\n *\n * This is the single configuration object that defines the entire navigation\n * behavior. It specifies which zones exist, how each zone handles operations,\n * how zones are sized relative to each other, and global overrides.\n *\n * Resolution order (from highest to lowest priority; the first tier that answers wins):\n * 1. Per-operation frontend override (`operation.operationFrontendConfig.navigationOverrides`)\n * 2. Authored action presentation (an operation's explicit presentation)\n * 3. Per-relationship override (`display.inParentNavigation.transition`)\n * 4. Global viewport override (`ViewportBreakpoint.MOBILE` / `ViewportBreakpoint.VERT_TABLET` blocks)\n * 5. Source context `transitions[operation]` — an overlay source with no `fromOverlay` entry falls\n * back to primary's map\n * 6. Derived action presentation (inferred by the framework, used only after authored policy)\n * 7. Framework hardcoded fallback\n *\n * @example\n * const layout: NavigationLayout = {\n * zones: {\n * primary: { transitions: { read: NavigationTransition.SPLIT, create: NavigationTransition.OVERLAY, update: NavigationTransition.INPLACE } },\n * secondary: { transitions: { read: NavigationTransition.PUSH }, onEmpty: ZoneEmptyBehavior.COLLAPSE },\n * },\n * appLevel: { transitions: { list: NavigationTransition.REPLACE, create: NavigationTransition.OVERLAY } },\n * fromOverlay: { transitions: { read: NavigationTransition.PROMOTE } },\n * split: { ratio: [40, 60] },\n * maxDepth: 2,\n * };\n */\n/**\n * WHICH LAYER OWNS THE BACK AFFORDANCE.\n *\n * Two layers can render a back control for the same navigation stack: the app\n * SHELL (the menubar's hosted navigation control) and the current SURFACE (a\n * resource/view header, beside the icon + title + breadcrumb). Both mount the\n * same component, so without an explicit owner an app that hosts the shell\n * control gets TWO back arrows on every pushed page — one floating in the bar\n * with no context, one attached to the thing it goes back from.\n *\n * This is deliberately a POLICY rather than a per-surface flag: \"who owns this\n * chrome\" is one application-wide decision, and expressing it as an owner makes\n * the duplication unrepresentable instead of asking every surface to remember\n * to suppress itself.\n */\nexport enum NavigationBackAffordanceOwner {\n /**\n * The current surface's own header owns it — the back control sits beside the\n * surface's icon/title/breadcrumb, so it reads as \"back from THIS\". The shell\n * control renders nothing even when hosted. Default: it keeps the affordance\n * attached to its context, and matches the shell staying free of a lone,\n * context-free arrow.\n */\n SURFACE = 'surface',\n /**\n * The app shell's navigation control owns it — one fixed back control in the\n * menubar (the Notion-style top-left placement). Surface headers render none.\n * Requires the shell to actually host `NAVIGATION_CONTROL`; if it does not,\n * the application has no back affordance at all.\n */\n SHELL = 'shell',\n /**\n * BOTH layers render one. An explicit opt-in for layouts where the two\n * genuinely differ — e.g. a multi-zone shell whose bar control pops the\n * focused zone while each zone's header pops its own stack. Chosen\n * deliberately; never a default.\n */\n BOTH = 'both',\n}\n\n/** Default owner when a layout declares none — see {@link NavigationBackAffordanceOwner.SURFACE}. */\nexport const DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER: NavigationBackAffordanceOwner = NavigationBackAffordanceOwner.SURFACE;\n\n/**\n * Does `owner` grant the SHELL (menubar navigation control) a back affordance?\n * Shared by both render sites so the two can never disagree about one policy.\n */\nexport function navigationBackAffordanceAdmitsShell(owner: NavigationBackAffordanceOwner | undefined): boolean {\n const resolved = owner ?? DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER;\n return resolved === NavigationBackAffordanceOwner.SHELL || resolved === NavigationBackAffordanceOwner.BOTH;\n}\n\n/** Does `owner` grant the current SURFACE's header a back affordance? */\nexport function navigationBackAffordanceAdmitsSurface(owner: NavigationBackAffordanceOwner | undefined): boolean {\n const resolved = owner ?? DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER;\n return resolved === NavigationBackAffordanceOwner.SURFACE || resolved === NavigationBackAffordanceOwner.BOTH;\n}\n\nexport const NavigationLayoutSchema = z.object({\n /**\n * Zone declarations. Primary is required, secondary and companion are optional.\n * Undeclared zones cannot be targeted by transitions — `NavigationTransition.SPLIT` in a layout\n * without secondary will escalate to overlay.\n */\n zones: z.object({\n /** Primary zone — always exists. Main content area (lists, root reads). */\n primary: ZoneConfigSchema,\n /** Secondary zone — optional. First adjacent zone for detail content. */\n secondary: ZoneConfigSchema.optional(),\n /** Companion zone — optional. Persistent supplementary content. */\n companion: ZoneConfigSchema.optional(),\n }),\n /**\n * How navigation from the app shell (sidebar, command palette, hotkey) behaves.\n * Causes a layout reset when targeting primary.\n */\n appLevel: AppLevelConfigSchema.optional(),\n /**\n * How navigation that STARTS in an overlay resolves. `PUSH` or `REPLACE` from an overlay leaves it\n * and lands in PRIMARY (the page changes); `OVERLAY` stacks a second overlay on the first. A\n * missing entry falls back to primary's own map. Nothing here keeps a link inside the dialog.\n */\n fromOverlay: FromOverlayConfigSchema.optional(),\n /** Split geometry: ratios, orientation, resizability. */\n split: SplitConfigSchema.optional(),\n /**\n * Maximum push depth before the framework escalates to overlay.\n * When a zone's stack depth reaches `maxDepth`, the next `push` opens an overlay instead.\n * Prevents infinitely deep navigation stacks. Per-relationship `maxDepth` can override.\n */\n maxDepth: z.number().int().positive().optional(),\n\n /**\n * Which layer renders the back control — see {@link NavigationBackAffordanceOwner}.\n * Omitted means {@link DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER} (the surface's\n * own header), which is what keeps a shell that hosts `NAVIGATION_CONTROL`\n * from rendering a second, context-free back arrow beside every page's own.\n */\n backAffordanceOwner: z.enum(NavigationBackAffordanceOwner).optional(),\n\n /**\n * Mobile viewport override — applies across all zones when viewport is `<md` (< 768px).\n * Use for sweeping mobile behavior changes (e.g., all splits become pushes).\n */\n [ViewportBreakpoint.MOBILE]: ViewportOverrideSchema.optional(),\n /**\n * Tablet viewport override — applies across all zones when viewport is `<lg` (768–1023px).\n * Use for tablet-specific behavior changes.\n */\n [ViewportBreakpoint.VERT_TABLET]: ViewportOverrideSchema.optional(),\n});\nexport type NavigationLayout = z.infer<typeof NavigationLayoutSchema>;\n/** @wildo_source:part:end saas.models.navigation.layout */\n\n\n// ════════════════════════════════════════════════════════════════\n// Transition Config Helpers\n// ════════════════════════════════════════════════════════════════\n\n/**\n * The transition verb of a {@link TransitionConfig}, which is either the verb itself or an object\n * carrying it alongside its modifiers.\n *\n * Exported from here rather than from the frontend resolver — where all three of these lived until\n * 2026-09-25 — because they are pure functions of an AUTHORING type this file owns, and the layout\n * diagnostics below need them too. A second copy beside the diagnostics would have been a second\n * answer to \"what verb did the author write\".\n */\nexport function getTransitionVerb(config: TransitionConfig): NavigationTransition {\n if (typeof config === 'string') return config;\n return (config as TransitionObject).transition;\n}\n\n/** Whether a {@link TransitionConfig} carries the `ephemeral` modifier. */\nexport function isEphemeralTransition(config: TransitionConfig): boolean {\n if (typeof config === 'string') return false;\n return (config as TransitionObject).ephemeral === true;\n}\n\n/** Whether a {@link TransitionConfig} carries the `persistent` modifier — a split that targets companion. */\nexport function isPersistentTransition(config: TransitionConfig): boolean {\n if (typeof config === 'string') return false;\n return (config as TransitionObject).persistent === true;\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Navigation Layout Diagnostics\n// ════════════════════════════════════════════════════════════════\n\n/**\n * What a {@link NavigationLayoutDiagnostic} says about the layout.\n *\n * `ERROR` means the runtime will do something the author did not ask for — a declared split that\n * silently becomes a dialog. `WARNING` means a declaration is INERT: nothing goes wrong, and the\n * author believes they configured something they did not.\n *\n * Neither is fatal. See {@link collectNavigationLayoutDiagnostics} for why.\n */\nexport enum NavigationLayoutDiagnosticSeverity {\n ERROR = 'error',\n WARNING = 'warning',\n}\n\n/** The closed set of layout defects {@link collectNavigationLayoutDiagnostics} can recognise. */\nexport enum NavigationLayoutDiagnosticCode {\n /**\n * A `SPLIT` is declared somewhere in the layout and NO adjacent zone is declared, so every one of\n * those splits silently becomes an overlay.\n *\n * The single most surprising thing in the navigation runtime, and it was documented in\n * `NavigationLayoutSchema`'s own JSDoc — *\"`NavigationTransition.SPLIT` in a layout without\n * secondary will escalate to overlay\"* — while nothing checked it. An author gets a dialog where\n * they asked for a pane, with no diagnostic anywhere.\n */\n SPLIT_WITHOUT_ADJACENT_ZONE = 'split-without-adjacent-zone',\n /**\n * A `persistent` split is declared and no `companion` zone exists. A persistent split targets\n * companion SPECIFICALLY — it does not fall back to secondary — so it escalates to an overlay even\n * in a layout that declares a perfectly good `secondary`.\n *\n * Separate from {@link SPLIT_WITHOUT_ADJACENT_ZONE} because the remedy is different and the\n * surprise is larger: the author is looking at a declared pane and cannot see why their split\n * refuses to use it.\n */\n PERSISTENT_SPLIT_WITHOUT_COMPANION = 'persistent-split-without-companion',\n /**\n * `minWidth`, `maxWidth`, `onEmpty` or `responsiveCollapse` declared on PRIMARY, where every one of\n * them is inert: primary never collapses, never empties and takes the remaining space.\n *\n * `ZoneConfigSchema`'s JSDoc states this — *\"Setting these on primary has no effect\"* — so the\n * diagnostic enforces a rule the contract already carries.\n */\n INERT_PRIMARY_ZONE_FIELD = 'inert-primary-zone-field',\n /** A zone whose `minWidth` exceeds its `maxWidth`. The drag constraints cannot both be honoured. */\n ZONE_WIDTH_BOUNDS_INVERTED = 'zone-width-bounds-inverted',\n}\n\n/** One finding about an authored {@link NavigationLayout}. */\nexport interface NavigationLayoutDiagnostic {\n code: NavigationLayoutDiagnosticCode;\n severity: NavigationLayoutDiagnosticSeverity;\n /** Where in the layout, as an authoring path: `zones.primary.transitions.read`. */\n path: string;\n /** What is wrong and what the runtime will do instead. */\n message: string;\n /** The edit that fixes it. Always present — a diagnostic with no remedy is a complaint. */\n remedy: string;\n}\n\n/**\n * Read an authored {@link NavigationLayout} and report what the runtime will silently do differently\n * from what it says.\n *\n * ## Why this exists\n *\n * Nothing validated a navigation layout beyond its SHAPE until 2026-09-25 — there was no `refine`\n * anywhere in this file — so three classes of declaration were accepted and quietly ignored. The\n * escalation in {@link NavigationLayoutDiagnosticCode.SPLIT_WITHOUT_ADJACENT_ZONE} is the expensive\n * one: it is documented in this file's own prose and produces a dialog where a pane was asked for.\n *\n * ## It REPORTS; it never refuses, and that is deliberate\n *\n * A `superRefine` on {@link NavigationLayoutSchema} was the obvious implementation and was rejected.\n * The layout is parsed inside `AppConfiguration_Frontend_Schema` at application boot, so a refusal\n * there would stop an application from starting over a split that renders as a dialog — wildly\n * disproportionate, and the exact shape `.claude/rules/application-creation-directive.md` forbids:\n * a mechanism that refuses rather than marks. The precedent for the chosen shape is the\n * administrative-continuity boot report, which is non-fatal for the same reason.\n *\n * Pure, so it is equally usable from a test, a CLI check or a future authoring-time gate.\n *\n * ## What this CANNOT see, and what covers it instead\n *\n * A layout is not the only place a `SPLIT` is declared. A resource's `navigationOverrides`, a\n * relationship transition and an action presentation all reach the resolver, and none of them is in\n * the layout — so the only real instance of `SPLIT_WITHOUT_ADJACENT_ZONE` in this repository was\n * INVISIBLE here: Wonder Todos declared `SPLIT` on `todos.READ` against a single-zone layout, every\n * drill-in became a dialog for the life of the declaration, and this check reported clean.\n *\n * Re-deriving that population statically would mean a second enumeration of every tier that can\n * produce a SPLIT, kept in step with the resolver by hand. The resolver has already decided, so the\n * report lives at the DECISION instead: `useNavigationController` warns once per resource+operation\n * when a resolution carries `SPLIT_ESCALATED_NO_ADJACENT_ZONE`. That covers every tier by\n * construction and cannot drift. This function keeps the half a boot check can answer — the layout's\n * own declarations, before anything navigates.\n *\n * ## The rule that was considered and REJECTED, because it fires on correct code\n *\n * *\"A `secondary` zone is declared and no transition in the layout resolves to `SPLIT`, so the pane\n * can never open.\"* It reads like the natural companion to the rules above and it is wrong: Wonder\n * CRM declares `secondary` while `zones.primary.transitions.read` is `PUSH`, and its pane is reached\n * ONLY by `deal`'s per-resource `navigationOverrides: [{ transition: SPLIT }]` — a declaration this\n * function cannot see, because it lives in a resource's ui-behavior rather than in the layout. The\n * rule would have reported the repository's one deliberate two-zone application as misconfigured.\n *\n * A checker that mostly reports correct code trains its reader to skim the reports that matter.\n *\n * (That rationale also mis-named Wonder CRM as \"the repository's one deliberate two-zone\n * application\". The workbench declares `zones.secondary` too — and unlike CRM its pane IS reached\n * from the layout, so the rejected rule would not have fired on it. The rejection stands on CRM\n * alone.)\n */\nexport function collectNavigationLayoutDiagnostics(layout: NavigationLayout): NavigationLayoutDiagnostic[] {\n const diagnostics: NavigationLayoutDiagnostic[] = [];\n const hasSecondary = layout.zones.secondary !== undefined;\n const hasCompanion = layout.zones.companion !== undefined;\n const hasAdjacentZone = hasSecondary || hasCompanion;\n\n /*\n * Every place a layout can declare a transition. Enumerated rather than walked, because the set is\n * closed by `NavigationLayoutSchema` and a structural walk would also reach the per-resource\n * overrides this function deliberately cannot see (see the rejected rule above).\n */\n const transitionSources: { path: string; transitions: ZoneTransitions | undefined }[] = [\n { path: 'zones.primary.transitions', transitions: layout.zones.primary?.transitions },\n { path: 'zones.secondary.transitions', transitions: layout.zones.secondary?.transitions },\n { path: 'zones.companion.transitions', transitions: layout.zones.companion?.transitions },\n { path: 'appLevel.transitions', transitions: layout.appLevel?.transitions },\n { path: 'fromOverlay.transitions', transitions: layout.fromOverlay?.transitions },\n { path: `['${ViewportBreakpoint.MOBILE}'].transitions`, transitions: layout[ViewportBreakpoint.MOBILE]?.transitions },\n { path: `['${ViewportBreakpoint.VERT_TABLET}'].transitions`, transitions: layout[ViewportBreakpoint.VERT_TABLET]?.transitions },\n ];\n\n for (const source of transitionSources) {\n if (!source.transitions) continue;\n for (const [operation, config] of Object.entries(source.transitions)) {\n if (config === undefined) continue;\n if (getTransitionVerb(config as TransitionConfig) !== NavigationTransition.SPLIT) continue;\n const path = `${source.path}.${operation}`;\n\n if (!hasAdjacentZone) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.SPLIT_WITHOUT_ADJACENT_ZONE,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path,\n message:\n 'Declares SPLIT, and the layout declares no `secondary` or `companion` zone. '\n + 'The split escalates to an OVERLAY, so this operation opens as a dialog rather than beside its source.',\n remedy: 'Declare `zones.secondary`, or change this transition to the one you want (PUSH, REPLACE or OVERLAY).',\n });\n continue;\n }\n\n if (isPersistentTransition(config as TransitionConfig) && !hasCompanion) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.PERSISTENT_SPLIT_WITHOUT_COMPANION,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path,\n message:\n 'Declares a `persistent` SPLIT, which targets the `companion` zone specifically and does NOT '\n + 'fall back to `secondary`. With no companion declared it escalates to an OVERLAY.',\n remedy: 'Declare `zones.companion`, or drop `persistent` so the split may use `secondary`.',\n });\n }\n }\n }\n\n const primary = layout.zones.primary;\n if (primary) {\n const inertOnPrimary = (['minWidth', 'maxWidth', 'onEmpty', 'responsiveCollapse'] as const)\n .filter(field => primary[field] !== undefined);\n for (const field of inertOnPrimary) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.INERT_PRIMARY_ZONE_FIELD,\n severity: NavigationLayoutDiagnosticSeverity.WARNING,\n path: `zones.primary.${field}`,\n message:\n `\\`${field}\\` has no effect on the primary zone: primary never collapses, never empties, and takes `\n + 'the space the other zones leave.',\n remedy: `Move \\`${field}\\` to \\`zones.secondary\\` or \\`zones.companion\\`, or remove it.`,\n });\n }\n }\n\n for (const zoneName of ['primary', 'secondary', 'companion'] as const) {\n const zone = layout.zones[zoneName];\n if (zone?.minWidth !== undefined && zone.maxWidth !== undefined && zone.minWidth > zone.maxWidth) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.ZONE_WIDTH_BOUNDS_INVERTED,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path: `zones.${zoneName}`,\n message: `\\`minWidth\\` (${zone.minWidth}) exceeds \\`maxWidth\\` (${zone.maxWidth}); the drag constraints cannot both hold.`,\n remedy: 'Lower `minWidth` or raise `maxWidth` so the range is non-empty.',\n });\n }\n }\n\n return diagnostics;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Per-Resource Operation Override\n// ════════════════════════════════════════════════════════════════\n\n// DELETED — NavigationOperationOverrideSchema and NavigationOperationOverride\n// Transferred to @wildo-ai/saas-frontend-lib (resources.frontend.schemas)\n"]}
|
|
1
|
+
{"version":3,"file":"navigation.shared.schemas.js","sourceRoot":"","sources":["../../../../src/config/frontend/navigation.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Navigation — Configuration Schemas\n *\n * Zone-first, operation-driven navigation configuration model.\n * Decomposes navigation into four independent axes:\n *\n * 1. **Meaning** (input signals) — contextual facts at navigation time (source zone, operation,\n * cardinality, viewport, depth). NOT configured — these are inputs to resolution.\n * 2. **Transition** (verb) — HOW content arrives: push, replace, split, overlay, inplace, promote.\n * This is the primary thing that gets configured per zone.\n * 3. **Placement** (zones) — WHERE content lives: primary, secondary, companion, overlay.\n * Zones are structural layout areas AND source context for resolution.\n * 4. **Appearance** (visual) — HOW content renders in its slot: panel, drawer, dialog, sheet.\n * Only meaningful for split and overlay transitions.\n *\n * Key design decisions:\n * - Zones own their complete behavior (no global defaults + override pattern)\n * - Operations are transition keys; cardinality drives appearance only\n * - Embedding (tabs/sections within a parent) is view composition, not navigation\n * - `contentModel` (single/tabbed) is orthogonal to transitions\n *\n * @see _code_archive/docs-archive/navigation/navigation-v3-reflection.md\n */\n\nimport { z } from 'zod';\nimport { ViewportBreakpoint, DisplayDirection } from '@wildo-ai/zod-decorators';\nimport { CoreResourceOperation } from '../../resources/resources.shared.core.definitions';\n\n\n// ════════════════════════════════════════════════════════════════\n// Enums\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Navigation transition verbs — HOW content arrives at its destination.\n *\n * These are the six fundamental navigation actions. Every user-triggered\n * navigation event resolves to exactly one of these verbs. The source zone's\n * `transitions` map determines which verb fires for each operation.\n *\n * Four zone-level transitions: `push`, `replace`, `split`, `overlay`\n * Two cross-context transitions: `inplace` (element-level), `promote` (escape to primary)\n *\n * `push` behavior depends on the zone's `contentModel`:\n * - In `single` zones: stack-based (new content on top, back pops)\n * - In `tabbed` zones: opens a new tab and makes it active (an already-open record is NOT\n * de-duplicated — it opens again)\n *\n * @wildo_source:part:start saas.models.navigation.transition-vocabulary facet:layer:shared facet:family:navigation-config\n */\nexport enum NavigationTransition {\n /**\n * Content added to the zone's stack (single) or as a new tab (tabbed).\n * Back navigation pops the stack or switches to the previous tab.\n * URL adds a new path segment.\n */\n PUSH = 'push',\n /**\n * Content replaces the current content in the zone. No stack entry — the previous\n * content is gone from the zone's state (but remains in browser history).\n * URL replaces the current segment.\n */\n REPLACE = 'replace',\n /**\n * Content opens in an adjacent zone (secondary or companion).\n * Creates a side-by-side layout. The source zone's content remains visible.\n * Back navigation un-splits (closes the adjacent zone).\n * URL: the detail's own address beside a resource primary; beside any other primary the host\n * keeps its URL and a RESOURCE detail rides as `?pane=`. There is no split segment.\n */\n SPLIT = 'split',\n /**\n * Content opens in a floating layer above the entire layout (dialog, sheet, or drawer).\n * The underlying layout remains visible; it is non-interactive while the overlay is modal (the\n * default), and stays interactive under `overlayBehavior.modal: false`.\n * Back navigation or Escape dismisses the overlay.\n * NOT URL-addressed: opening an overlay leaves the browser URL where it was, so its content cannot\n * be linked to or restored by a reload. Choose it knowing that.\n */\n OVERLAY = 'overlay',\n /**\n * Element-level transformation within the current view. A specific item in a\n * list/section transforms from one mode to another (read → edit); a CREATE\n * materializes a new element beside the existing ones. The parent view stays,\n * the zone stack is unchanged, and surrounding items remain visible.\n *\n * Fundamentally different from `replace` (which swaps the entire zone content).\n * `inplace` operates at the element level, not the zone level.\n *\n * No lifecycle modifiers (`persistent`/`ephemeral`) are valid on `inplace`.\n * No appearance to configure — the element transforms within its existing slot.\n *\n * **It is the one transition that does not place content in a zone**, which is\n * why the controller hands it to the element-level host\n * (`InPlaceOperationContext`) instead of resolving a target zone for it. That\n * host is provided by the COLLECTION the element belongs to, so a transition\n * resolving to `inplace` on a surface with no collection above it — a detail\n * page, a breadcrumb, a picker — degrades to an OVERLAY.\n *\n * **It is TRANSIENT: no URL, and a reload returns the view to rest.** Earlier\n * revisions of this comment promised a query param (`?editing=<childId>` /\n * `?creating=<resourceType>`) and none was ever written. It is not written now\n * either, and that is a decision rather than an omission: an inline row-edit is\n * a momentary state of a listing, not a place — no comparable admin framework\n * deep-links one, and anything that should survive a reload or a back button\n * wants `push`. `ResourceOperationActionPresentation.INLINE`, the per-operation\n * tier that selects the same host, is transient for the same reason.\n *\n * @example\n * // Click \"edit\" on a child in parent's inline section → item transforms to edit form\n * transitions: { [CoreResourceOperation.UPDATE]: NavigationTransition.INPLACE }\n *\n * // Click \"add\" in a relationship section → create form appears inline in the list\n * transitions: { [CoreResourceOperation.CREATE]: NavigationTransition.INPLACE }\n */\n INPLACE = 'inplace',\n /**\n * Escape the current context and open content at primary scope.\n * Abandons the current context: overlays close, companion/secondary dismiss — except a pane\n * placed by a `persistent` split, which survives a reset by design.\n * The promoted content becomes the primary zone's top content.\n *\n * Use case: a link within an overlay should open as a full primary view,\n * or a nested detail in a companion zone should \"pop out\" to primary.\n *\n * Fundamentally different from `push` (which stays in the current zone) and\n * from `replace` (which replaces content within the same zone). `promote`\n * crosses zones and always targets primary.\n *\n * No lifecycle modifiers (`persistent`/`ephemeral`) are valid on `promote`.\n * No appearance to configure — content fills primary (same as push/replace).\n *\n * URL serialization: full URL change (promoted resource becomes the primary route).\n *\n * @example\n * // From an overlay, a link should open as primary (close overlay, show in primary)\n * transitions: { [CoreResourceOperation.READ]: NavigationTransition.PROMOTE }\n */\n PROMOTE = 'promote',\n}\n/** @wildo_source:part:end saas.models.navigation.transition-vocabulary */\n\n/**\n * Named layout zones — configurable structural areas WHERE content lives.\n *\n * Zones serve four purposes:\n * 1. **Structural** — which physical areas exist in the layout (declared in config)\n * 2. **Source context** — the same operation resolves differently FROM primary vs FROM secondary\n * 3. **Responsive** — each zone carries its own collapse behavior per viewport\n * 4. **Content model** — each zone independently manages single-stack or tabbed content\n *\n * Note: `overlay` is NOT a named zone — it's an implicit layer always available.\n * Overlay is a runtime destination, not a configurable zone. See `NavigationZone`\n * in the frontend runtime types for the full set including overlay.\n *\n * @wildo_source:part:start saas.models.navigation.surface-vocabulary facet:layer:shared facet:family:navigation-config\n */\nexport enum NavigationZoneName {\n /** Main content area. Lists, root-level reads, primary workspace. Always exists. */\n PRIMARY = 'primary',\n /**\n * First adjacent zone. Detail content in list-detail patterns.\n * Only exists if declared in config. Appears when a `split` transition targets it.\n * Typical use: showing item details alongside a list.\n */\n SECONDARY = 'secondary',\n /**\n * Persistent supplementary content. Reference panels, docs, notes, threads.\n * Only exists if declared in config, and starts hidden.\n * Reached by a `split` with `persistent: true`, or by an ordinary `split` when the secondary zone\n * is already occupied.\n * Typical use: Slack thread panel, VS Code terminal, documentation sidebar.\n */\n COMPANION = 'companion',\n}\n\n/**\n * How a zone manages multiple items. Orthogonal to transitions.\n *\n * The transition says \"content arrives\" — the content model says\n * \"how does the zone accommodate it.\" Any zone can use any content model,\n * regardless of which transitions it supports.\n */\nexport enum NavigationZoneContentModel {\n /**\n * Navigation stack: new content pushes on top, previous preserved underneath.\n * Only one item visible at a time. Back navigation pops the stack.\n * `replace` replaces the top without adding to the stack.\n * This is the default for all zones.\n */\n SINGLE = 'single',\n /**\n * Parallel tabs: every navigation landing in the zone opens a new tab and makes it active (no\n * de-duplication). Tab bar is visible, showing all open tabs. No depth stack within tabs.\n * `replace` replaces the active tab's content, and back closes the active tab and shows its\n * neighbour. The model changes RENDERING only — it does not change how navigation resolves.\n * When no tabs remain, `onEmpty` behavior applies.\n */\n TABBED = 'tabbed',\n}\n\n/**\n * Responsive collapse behavior when viewport shrinks below a zone's breakpoint.\n *\n * Only applies to secondary and companion zones. Primary never collapses.\n * It applies to content ALREADY in the zone, not only to new navigations: when the zone collapses its\n * whole history moves (a tabbed zone's tabs too, the one on screen on top), and when the viewport\n * grows back what is still on top of primary migrates home with every field intact. Whatever the\n * reader navigated past at the narrow width stays where it is.\n */\nexport enum ResponsiveCollapseMode {\n /**\n * Zone hides. Its content joins primary's navigation stack.\n * The user sees the content in-context within primary.\n * Back navigation pops back to primary's previous content.\n */\n PUSH = 'push',\n /**\n * Zone hides. Its content opens as an overlay on top of primary.\n * The user sees the content as a floating sheet/dialog.\n * Dismiss returns to the underlying primary content.\n */\n OVERLAY = 'overlay',\n}\n/** @wildo_source:part:end saas.models.navigation.surface-vocabulary */\n\n/**\n * @wildo_source:part:start saas.models.navigation.zone-declaration facet:layer:shared facet:family:navigation-config\n *\n * What happens when a zone's last content is dismissed.\n * Only meaningful for secondary and companion zones (primary never empties,\n * overlay auto-dismisses by definition).\n */\nexport enum ZoneEmptyBehavior {\n /**\n * Zone hides, adjacent zones expand to fill the space.\n * Example: closing the last detail → layout returns to list-only.\n * This is the default for all non-primary zones.\n */\n COLLAPSE = 'collapse',\n /**\n * Zone stays visible with an empty-state placeholder.\n * Example: \"Select an item to view details\" message. Keeps layout stable.\n * Useful when the user frequently toggles between items.\n */\n EMPTY_STATE = 'emptyState',\n}\n/** @wildo_source:part:end saas.models.navigation.zone-declaration */\n\n/**\n * @wildo_source:part:start saas.models.navigation.surface-vocabulary facet:layer:shared facet:family:navigation-config\n *\n * Visual presentation for overlay transitions.\n * Determines how floating content renders above the layout.\n */\nexport enum OverlayAppearance {\n /**\n * Centered modal dialog with backdrop.\n * Best for focused tasks: create forms, confirmations, destructive actions.\n * Blocks underlying content visually. Escape or backdrop click dismisses.\n */\n DIALOG = 'dialog',\n /**\n * Side or bottom drawer panel that slides in from an edge.\n * Best for contextual content that benefits from seeing the underlying layout.\n * Less disruptive than dialog. Common for detail views on mobile.\n */\n SHEET = 'sheet',\n /**\n * Vaul-backed mobile drawer.\n * Use when the navigation resolver should choose a drawer directly rather\n * than relying on a dialog appearance plus mobileShape policy.\n */\n DRAWER = 'drawer',\n}\n\n/*\n * ─── `SplitAppearance` was REMOVED on 2026-09-25, and the reason is worth keeping ───────────────\n *\n * It declared `PANEL` (\"vertical side panel\") and `DRAWER` (\"horizontal drawer, bottom panel\"), and\n * the whole sub-tree was WRITE-ONLY: the resolver computed it, the controller stored it on the stack\n * entry, and the ONLY site reading `entry.appearance` cast it to `OverlayAppearance` for the overlay\n * container. No split renderer branched on it. So `DRAWER` could never render — an author who wrote\n * it got a vertical side panel with no diagnostic — and `PANEL` was a value meaning \"the default\".\n *\n * It was also a SECOND vocabulary for an axis `SplitConfig.orientation` already owns:\n * `orientation: HORIZONTAL` is \"top-bottom\", which is what `DRAWER` described. The two were\n * independently authorable in contradiction, with no refine and nothing honouring either against the\n * other.\n *\n * Collapsed to ONE source — `SplitConfig.orientation`, which the renderer genuinely reads — per\n * \"measure what the runtime actually reads, then collapse to one source of truth\". `orientation` was\n * additionally made live on the STATIC render branch in the same change; it had been read only by\n * the resizable branch, so `HORIZONTAL` + `resizable: false` silently produced a side panel.\n *\n * `entry.appearance` is now `OverlayAppearance` alone, which removes the unchecked downcast at its\n * one reader. The removal follows the precedent already set here for `defaultVisible`, `autoSplit`\n * and `CompanionSplitConfig.orientation`: a declared-but-unread field is deleted, not deprecated.\n */\n/** @wildo_source:part:end saas.models.navigation.surface-vocabulary */\n\n// ════════════════════════════════════════════════════════════════\n// ViewportDiscriminated — Generic responsive override pattern\n// ════════════════════════════════════════════════════════════════\n\n/**\n * A value that is either a plain `T` (applies at all viewports) or a\n * viewport-keyed partial record for per-breakpoint control.\n *\n * This pattern is used throughout the navigation config for responsive properties:\n * `responsiveCollapse`, `appearance`, `contentSectionConfig`, `transition`.\n *\n * @example\n * // Plain value — same everywhere\n * responsiveCollapse: ResponsiveCollapseMode.PUSH\n *\n * // Viewport-discriminated — different per breakpoint\n * responsiveCollapse: { [ViewportBreakpoint.VERT_TABLET]: ResponsiveCollapseMode.PUSH, [ViewportBreakpoint.MOBILE]: ResponsiveCollapseMode.OVERLAY }\n *\n * // Overlay appearance — sheet on tablet, drawer on mobile\n * overlay: { [ViewportBreakpoint.VERT_TABLET]: OverlayAppearance.SHEET, [ViewportBreakpoint.MOBILE]: OverlayAppearance.DRAWER }\n */\nexport type ViewportDiscriminated<T> = T | Partial<Record<ViewportBreakpoint, T>>;\n\n/**\n * Zod schema factory for `ViewportDiscriminated<T>`.\n *\n * Produces a union: the plain inner schema OR a record keyed by `ViewportBreakpoint`\n * with inner schema values. The record must have at least one key.\n *\n * @param innerSchema - Zod schema for the value type at each breakpoint.\n */\nexport function viewportDiscriminatedSchema<T extends z.ZodType>(innerSchema: T) {\n return z.union([\n innerSchema,\n z.partialRecord(z.enum(ViewportBreakpoint), innerSchema).refine(\n (obj) => Object.keys(obj).length > 0,\n { message: 'Viewport-discriminated object must have at least one breakpoint key' },\n ),\n ]);\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Transition Config\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Extended transition with lifecycle modifiers.\n *\n * Most transitions are simple verbs (just the enum value). The object form\n * adds lifecycle semantics for two specific patterns:\n *\n * - **Companion pattern**: `{ transition: NavigationTransition.SPLIT, persistent: true }`\n * The split zone persists when the source zone's content changes.\n * Without `persistent`, a split zone would clear when primary navigates away.\n *\n * - **Inspect pattern**: `{ transition: NavigationTransition.OVERLAY, ephemeral: true }`\n * The overlay auto-closes when the source zone's stack changes.\n * Without `ephemeral`, overlays stay open until explicitly dismissed.\n *\n * Semantic constraints (enforced by `.refine()`):\n * - `persistent` is only valid on `split` transitions\n * - `ephemeral` is only valid on `overlay` transitions\n * - `persistent` and `ephemeral` are mutually exclusive\n * - `inplace` and `promote` do not accept any modifier (they are always simple verbs)\n */\nexport const TransitionObjectSchema = z.object({\n /** The transition verb. */\n transition: z.enum(NavigationTransition),\n /**\n * When `true`, the split zone persists when the source zone navigates away.\n * Only valid on `split` transitions. Targets the companion zone specifically\n * (rather than the default adjacent zone resolution).\n *\n * Example: Slack thread panel stays open when switching channels.\n */\n persistent: z.boolean().optional(),\n /**\n * When `true`, the overlay auto-closes when the source zone's stack changes.\n * Only valid on `overlay` transitions.\n *\n * Example: Quick-inspect preview that dismisses when the user clicks another item.\n */\n ephemeral: z.boolean().optional(),\n}).refine(\n (obj) => {\n if (obj.persistent && obj.transition !== NavigationTransition.SPLIT) return false;\n if (obj.ephemeral && obj.transition !== NavigationTransition.OVERLAY) return false;\n if (obj.persistent && obj.ephemeral) return false;\n return true;\n },\n { message: 'persistent is only valid on split; ephemeral is only valid on overlay; they are mutually exclusive' },\n);\nexport type TransitionObject = z.infer<typeof TransitionObjectSchema>;\n\n/**\n * A transition configuration: either a simple verb string or an object with modifiers.\n *\n * @example\n * // Simple verb\n * transitions: { read: NavigationTransition.SPLIT, create: NavigationTransition.OVERLAY }\n *\n * // Object with lifecycle modifier\n * transitions: { read: { transition: NavigationTransition.SPLIT, persistent: true } }\n */\nexport const TransitionConfigSchema = z.union([\n z.enum(NavigationTransition),\n TransitionObjectSchema,\n]);\nexport type TransitionConfig = z.infer<typeof TransitionConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Zone Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Operation → transition mapping for a zone.\n *\n * Partial record — only operations that the zone handles need entries.\n * Missing operations fall back to the framework's hardcoded defaults.\n *\n * Keys are `CoreResourceOperation` values such as `read`, `list`, `create`,\n * `update`, `delete`, and `search`.\n *\n * @example\n * transitions: {\n * read: NavigationTransition.SPLIT, // click item → split to secondary\n * list: NavigationTransition.REPLACE, // \"View all\" → replace primary\n * create: NavigationTransition.OVERLAY, // new item → dialog\n * update: NavigationTransition.INPLACE, // edit → transform element inline\n * delete: NavigationTransition.OVERLAY, // confirm → dialog\n * search: NavigationTransition.PUSH, // advanced search → full-surface route\n * }\n *\n * // From an overlay, promote a link to primary view\n * transitions: {\n * read: NavigationTransition.PROMOTE, // link in overlay → escape to primary\n * }\n */\n/** Partial record — only operations that the zone handles need entries. Missing operations fall back to framework defaults. */\nexport const ZoneTransitionsSchema = z.partialRecord(\n z.enum(CoreResourceOperation),\n TransitionConfigSchema,\n) as unknown as z.ZodType<Partial<Record<CoreResourceOperation, TransitionConfig>>>;\nexport type ZoneTransitions = Partial<Record<CoreResourceOperation, TransitionConfig>>;\n\n/**\n * Transition → visual appearance for a zone. Values are viewport-discriminated.\n *\n * Only the `overlay` transition has an appearance choice. The others have none to configure:\n * - `push`/`replace` fill the zone\n * - `split` opens a pane whose shape is `split.orientation` (there is no split appearance)\n * - `inplace` transforms an element within the current view\n * - `promote` fills primary (same as push/replace)\n *\n * @example\n * appearance: {\n * overlay: { [ViewportBreakpoint.VERT_TABLET]: OverlayAppearance.SHEET, [ViewportBreakpoint.MOBILE]: OverlayAppearance.DRAWER }, // sheet on tablet, drawer on mobile\n * }\n */\nexport const ZoneAppearanceSchema = z.object({\n /**\n * How overlay content renders. Default: `OverlayAppearance.DIALOG` (centered modal).\n *\n * There is deliberately no `split` sibling: how a PANE renders is `SplitConfig.orientation` plus\n * the zone's width bounds, which the renderer reads. See the note where `SplitAppearance` used to\n * be declared.\n */\n overlay: viewportDiscriminatedSchema(z.enum(OverlayAppearance)).optional(),\n});\nexport type ZoneAppearance = z.infer<typeof ZoneAppearanceSchema>;\n\n/**\n * @wildo_source:part:start saas.models.navigation.zone-declaration facet:layer:shared facet:family:navigation-config\n *\n * How much of its zone a destination's content occupies is NOT declared here: it is the\n * destination's `ZoneContentGeometry` (a `maxWidth` and a `fillsHeight`), because the same primary\n * zone hosts a list that wants the width cap, a detail that caps itself, and a graph that wants\n * neither. A zone's own declaration follows.\n */\n\n/**\n * Full zone configuration.\n *\n * Each declared zone in the layout owns its complete behavior:\n * which transition fires for each operation, how content appears,\n * and how the zone responds to viewport changes.\n *\n * Note: `minWidth`, `maxWidth`, `onEmpty` and `responsiveCollapse` are only meaningful for\n * secondary and companion zones. Primary never collapses, never empties, and takes remaining space.\n * Setting these on primary has no effect.\n *\n * ## Every field here is READ by the runtime, and that was checked rather than assumed (#211)\n *\n * | field | the reader |\n * |---|---|\n * | `contentModel` | `NavigationContentAreas.tsx` (TABBED detection) + `zone-visible-entry.ts` |\n * | `transitions` | `navigation-policy-resolver.service.ts` |\n * | `appearance` | the policy resolver (`appearance.overlay` — there is no split appearance) |\n * | `minWidth` / `maxWidth` | `NavigationContentAreas.tsx` drag constraints, both split branches |\n * | `onEmpty` | `zone-empty-behavior.ts` |\n * | `responsiveCollapse` | `navigation-policy-resolver.service.ts` |\n *\n * `defaultVisible` was REMOVED by that audit: nothing read it, and its only documented meaning was\n * \"defaults to `true` when `split.autoSplit` is `true`\" — a field defined in terms of another field\n * that was also dead. What it was reaching for is `onEmpty`, which every current layout already uses\n * (`zoneOccupiesSpaceWhenEmpty`) and which the runtime genuinely reads.\n */\nexport const ZoneConfigSchema = z.object({\n /**\n * How this zone manages multiple items.\n * - `NavigationZoneContentModel.SINGLE` (default): stack-based navigation. One item visible, back pops.\n * - `NavigationZoneContentModel.TABBED`: parallel tabs. Tab bar visible, multiple items accessible.\n * @default NavigationZoneContentModel.SINGLE\n */\n contentModel: z.enum(NavigationZoneContentModel).default(NavigationZoneContentModel.SINGLE),\n\n /** Operation → transition mapping. Defines what happens for each user action in this zone. */\n transitions: ZoneTransitionsSchema,\n\n /** Which shape an OVERLAY opened from this zone takes. Only overlays have an appearance: a pane's shape is `split.orientation`. */\n appearance: ZoneAppearanceSchema.optional(),\n\n /**\n * Minimum pixel width when resizing. Constrains how far this side of the\n * split divider can be dragged. Only meaningful for secondary and companion zones, and only when\n * that zone is resizable — `SplitConfigSchema.resizable` for secondary, `split.companion.resizable`\n * for companion (independent flags).\n *\n * The pixel value is converted to a share of the content area and clamped to 5–70%. When OMITTED on\n * a resizable zone the floor is 25% of the content area — or the zone's own ratio share, if that is\n * smaller — never zero. A pane is never collapsed by dragging it: closing a pane is navigation.\n *\n * A declared `maxWidth` narrower than this floor lowers the floor to it. When the shown side panes ask\n * for more than primary's 25% leaves, they shrink in proportion and none opens below its floor (a\n * non-resizable pane's floor is 25%, or its own ratio share if smaller); primary opens at exactly 25%.\n * The floors are pixels, so at a narrow window they may not fit together at all — they then give way\n * to each other in proportion, and the smaller floor a pane opens at is its drag floor. Primary never\n * gives way.\n *\n * ## It is ALSO a COLLAPSE TRIGGER, on every zone — not only a drag bound\n *\n * The paragraph above restricts this to resizing, and that stopped being the whole truth when the\n * content-area fit escalation landed: `resolveCollapseMode` feeds `minWidth` to\n * `contentAreaFitsSplit`, for resizable and non-resizable zones alike. A zone declaring\n * `minWidth: W` needs `W / 0.75` of content width beside primary's 25% floor, and below that the\n * split escalates rather than squeezing both panes under their floors.\n *\n * So a NON-resizable pane with `minWidth: 600` stops splitting on a 1000px content area at full\n * desktop width — correct behaviour, and the opposite of what this field's own contract said until\n * 2026-09-25. Declare it when you mean \"this pane is not worth opening narrower than W\", and omit\n * it when you only want a drag floor on a layout that is not resizable anyway.\n */\n minWidth: z.number().positive().optional(),\n\n /**\n * Maximum pixel width when resizing. Constrains how far this side of the\n * split divider can be dragged. Only meaningful for secondary and companion zones, and only when\n * that zone is resizable — `SplitConfigSchema.resizable` for secondary, `split.companion.resizable`\n * for companion (independent flags).\n *\n * The pixel value is converted to a share of the content area and clamped to 5–70%. When OMITTED on\n * a resizable zone the ceiling is whatever leaves the primary zone 25% of the content area.\n */\n maxWidth: z.number().positive().optional(),\n\n /**\n * What happens when this zone's last content is dismissed (stack empty, last tab closed).\n * - `ZoneEmptyBehavior.COLLAPSE` (default): zone hides, adjacent zones expand to fill.\n * - `ZoneEmptyBehavior.EMPTY_STATE`: zone stays visible with placeholder (\"Select an item to view details\").\n * Only meaningful for secondary and companion zones. Primary never empties.\n */\n onEmpty: z.enum(ZoneEmptyBehavior).optional(),\n\n /**\n * Responsive collapse rules: what happens when viewport shrinks below the zone's breakpoint.\n * Accepts a plain `ResponsiveCollapseMode` (all breakpoints) or viewport-discriminated object.\n * Only meaningful for secondary and companion zones. Primary never collapses.\n *\n * It moves content already in the zone as well as new navigations: the zone's whole history\n * moves when it collapses, and what is still on top of primary goes home when it returns — see\n * `ResponsiveCollapseMode`.\n *\n * @example\n * responsiveCollapse: ResponsiveCollapseMode.PUSH // always push into primary\n * responsiveCollapse: { [ViewportBreakpoint.VERT_TABLET]: ResponsiveCollapseMode.PUSH, [ViewportBreakpoint.MOBILE]: ResponsiveCollapseMode.OVERLAY } // tablet: push, mobile: overlay\n */\n responsiveCollapse: viewportDiscriminatedSchema(z.enum(ResponsiveCollapseMode)).optional(),\n});\nexport type ZoneConfig = z.infer<typeof ZoneConfigSchema>;\n/** @wildo_source:part:end saas.models.navigation.zone-declaration */\n\n\n// ════════════════════════════════════════════════════════════════\n// App-Level & From-Overlay Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * App-level navigation configuration: from OUTSIDE the zone system.\n *\n * Covers navigation triggered by sidebar clicks, command palette selections,\n * hotkey shortcuts, toast actions, and notification clicks.\n *\n * App-level navigation causes a **layout reset**: primary content is replaced,\n * secondary and companion zones are cleared. This is fundamentally different\n * from zone-level navigation where the source zone's content persists.\n *\n * @example\n * appLevel: {\n * transitions: {\n * list: NavigationTransition.REPLACE, // sidebar \"Projects\" → replace primary, clear others\n * read: NavigationTransition.REPLACE, // command palette \"Go to X\" → replace primary\n * create: NavigationTransition.OVERLAY, // quick action \"New X\" → dialog\n * search: NavigationTransition.REPLACE, // command/menu search surface → replace primary\n * },\n * appearance: { overlay: OverlayAppearance.DIALOG },\n * }\n */\nexport const AppLevelConfigSchema = z.object({\n /** Operation → transition mapping for app-level navigation. */\n transitions: ZoneTransitionsSchema,\n /** Appearance overrides for app-level transitions. */\n appearance: ZoneAppearanceSchema.optional(),\n});\nexport type AppLevelConfig = z.infer<typeof AppLevelConfigSchema>;\n\n/**\n * Navigation from within an overlay (dialog, sheet, or drawer).\n *\n * When already in an overlay, transitions behave differently to avoid\n * nesting overlays. Typically all operations `push` within the overlay's\n * own stack instead of opening new overlays.\n *\n * No appearance config — the content is already inside an overlay.\n *\n * @example\n * fromOverlay: {\n * transitions: {\n * read: NavigationTransition.PUSH, // push within overlay — don't nest modals\n * list: NavigationTransition.PUSH,\n * create: NavigationTransition.PUSH,\n * search: NavigationTransition.PUSH,\n * },\n * }\n */\nexport const FromOverlayConfigSchema = z.object({\n /** Operation → transition mapping when navigating from within an overlay. */\n transitions: ZoneTransitionsSchema,\n});\nexport type FromOverlayConfig = z.infer<typeof FromOverlayConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Split Geometry\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Companion-specific split geometry.\n * Controls how the companion zone is sized and positioned relative to the main content area.\n */\nexport const CompanionSplitConfigSchema = z.object({\n /**\n * Main-area-to-companion size ratio.\n * @example [70, 30] — companion takes 30% of available space\n * @default [70, 30]\n */\n ratio: z.tuple([z.number(), z.number()]).default([70, 30]),\n /**\n * Whether the companion split boundary is user-draggable.\n * When `true`, a draggable divider appears between the main area and the companion zone.\n * Per-side drag constraints use `ZoneConfig.minWidth`/`maxWidth` on the companion zone.\n * @default false\n */\n resizable: z.boolean().default(false),\n});/*\n * `orientation` was REMOVED here by the #211 audit, and it is the one removal that took a\n * capability with it. It claimed the companion could sit BELOW the main area (\"bottom panel, e.g.\n * VS Code terminal\") and nothing read it: all three zones share ONE `ResizablePanelGroup` whose\n * `direction` comes from `split.orientation`, so an author writing HORIZONTAL here got a side panel\n * and no diagnostic. Honouring it needs a NESTED panel group, with its own sizes, autoSaveId, drag\n * constraints and responsive-collapse behaviour — a feature, not a field fix. Left as a declared\n * lie it was worse than absent: it ships to application builders in the compiled\n * `config-navigation` skill and answers with silence. Build the nested group first; the field comes\n * back when something reads it.\n */\n\nexport type CompanionSplitConfig = z.infer<typeof CompanionSplitConfigSchema>;\n\n/**\n * Top-level split geometry — describes the physical relationship between zones.\n *\n * This is a top-level config (not per-zone) because it describes the INTER-zone\n * layout: how much space each zone gets, and the split direction.\n *\n * @example\n * split: {\n * ratio: [40, 60], // 40% primary, 60% secondary\n * orientation: DisplayDirection.VERTICAL, // side-by-side\n * resizable: true, // divider is draggable\n * companion: {\n * ratio: [70, 30], // companion takes 30%\n * resizable: true, // its own divider is draggable\n * },\n * }\n */\nexport const SplitConfigSchema = z.object({\n /**\n * Primary-to-secondary width/height ratio. Defines the initial proportion.\n * When `resizable` is `true`, user drag overrides this (persisted to localStorage).\n * @example [40, 60] — primary gets 40%, secondary gets 60%\n * @default [50, 50]\n */\n /*\n * ONLY `ratio[1]` is read. Primary takes what the side panes leave — `100 − Σ(side defaults)` in\n * the static branch, the resizable branch's own clamping otherwise — so the first element has no\n * reader anywhere, and with BOTH a secondary and a companion shown it is not even well defined.\n *\n * Kept as a 2-tuple rather than narrowed to one number, deliberately: `[50, 50]` reads as a\n * proportion, which is what an author is thinking about, and changing the shape would break every\n * authored layout for a field whose value is already ignored. What changed on 2026-09-25 is that\n * it says so — `ratio: [40, 30]` silently rendered a 30% pane and a 70% primary, with the authored\n * 40 discarded and no diagnostic.\n */\n ratio: z.tuple([z.number(), z.number()]).default([50, 50]),\n /**\n * Split direction between primary and secondary — **the ONE axis vocabulary**.\n *\n * - `DisplayDirection.VERTICAL` (default): side-by-side (most common for list-detail)\n * - `DisplayDirection.HORIZONTAL`: top-bottom — the shape `SplitAppearance.DRAWER` used to\n * describe before that duplicate vocabulary was removed (2026-09-25).\n *\n * Read by BOTH render branches since the same change. It was read only by the resizable branch\n * before, so `HORIZONTAL` on a non-resizable layout silently produced a side panel.\n *\n * Note this names the DIVIDER's orientation, not the stacking axis — `VERTICAL` divider, content\n * side by side. `splitDividerOrientationToPanelGroupDirection` is the one place that inverts it.\n *\n * @default DisplayDirection.VERTICAL\n */\n orientation: z.enum(DisplayDirection).default(DisplayDirection.VERTICAL),\n /**\n * Whether the primary↔secondary split boundary is user-draggable.\n * When `true`, a draggable divider appears between primary and secondary zones.\n * Per-side drag constraints use `ZoneConfig.minWidth`/`maxWidth` on each zone.\n * @default false\n */\n resizable: z.boolean().default(false),\n /** Companion zone split geometry. Only relevant if companion zone is declared. */\n companion: CompanionSplitConfigSchema.optional(),\n});\n/*\n * Every field above is READ by the runtime, checked rather than assumed (#211):\n * `ratio` and `resizable` by `NavigationContentAreas.tsx` (both the panel sizes and the\n * is-anything-draggable decision), `orientation` by `splitDividerOrientationToPanelGroupDirection`,\n * `companion` by the companion panel branch.\n *\n * `autoSplit` was REMOVED by that audit. It was declared, defaulted, documented, shipped to\n * application builders in the compiled `config-navigation` skill, authored by three preset layouts\n * and two applications — and read by nothing, so every one of those authors got `false`'s behaviour\n * whatever they wrote. Removing rather than implementing was the deliberate answer: what it\n * described is auto-SELECTING a record the user did not choose and stamping its URL, which is a\n * product decision nobody has taken, and the case people actually hit — a detail URL restoring\n * beside its list — was covered by the deep-link restoration in `528d132a` without it.\n */\nexport type SplitConfig = z.infer<typeof SplitConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Viewport Override Block\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Global viewport override — applies across ALL zones at a given breakpoint.\n *\n * Use for sweeping mobile/tablet overrides that affect the entire app.\n * For per-zone responsive behavior, use `ZoneConfig.responsiveCollapse` and\n * viewport-discriminated appearance values instead.\n *\n * @example\n * // In NavigationLayout:\n * [ViewportBreakpoint.MOBILE]: {\n * transitions: {\n * read: NavigationTransition.PUSH, // mobile: no splits, everything pushes\n * create: { transition: NavigationTransition.OVERLAY, ephemeral: true }, // mobile: create opens as an inspect-style ephemeral overlay\n * },\n * }\n */\nexport const ViewportOverrideSchema = z.object({\n /** Operation → transition overrides at this viewport. Merged over zone defaults. */\n transitions: (z.partialRecord(\n z.enum(CoreResourceOperation),\n TransitionConfigSchema,\n ) as unknown as z.ZodType<Partial<Record<CoreResourceOperation, TransitionConfig>>>).optional(),\n});\nexport type ViewportOverride = z.infer<typeof ViewportOverrideSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// NavigationLayout — Top-Level App Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * @wildo_source:part:start saas.models.navigation.layout facet:layer:shared facet:family:navigation-config\n *\n * The complete navigation layout configuration for an application.\n *\n * This is the single configuration object that defines the entire navigation\n * behavior. It specifies which zones exist, how each zone handles operations,\n * how zones are sized relative to each other, and global overrides.\n *\n * Resolution order (from highest to lowest priority; the first tier that answers wins):\n * 1. Per-operation frontend override (`operation.operationFrontendConfig.navigationOverrides`)\n * 2. Authored action presentation (an operation's explicit presentation)\n * 3. Per-relationship override (`display.inParentNavigation.transition`)\n * 4. Global viewport override (`ViewportBreakpoint.MOBILE` / `ViewportBreakpoint.VERT_TABLET` blocks)\n * 5. Source context `transitions[operation]` — an overlay source with no `fromOverlay` entry falls\n * back to primary's map\n * 6. Derived action presentation (inferred by the framework, used only after authored policy)\n * 7. Framework hardcoded fallback\n *\n * @example\n * const layout: NavigationLayout = {\n * zones: {\n * primary: { transitions: { read: NavigationTransition.SPLIT, create: NavigationTransition.OVERLAY, update: NavigationTransition.INPLACE } },\n * secondary: { transitions: { read: NavigationTransition.PUSH }, onEmpty: ZoneEmptyBehavior.COLLAPSE },\n * },\n * appLevel: { transitions: { list: NavigationTransition.REPLACE, create: NavigationTransition.OVERLAY } },\n * fromOverlay: { transitions: { read: NavigationTransition.PROMOTE } },\n * split: { ratio: [40, 60] },\n * maxDepth: 2,\n * };\n */\n/**\n * WHICH LAYER OWNS THE BACK AFFORDANCE.\n *\n * Two layers can render a back control for the same navigation stack: the app\n * SHELL (the menubar's hosted navigation control) and the current SURFACE (a\n * resource/view header, beside the icon + title + breadcrumb). Both mount the\n * same component, so without an explicit owner an app that hosts the shell\n * control gets TWO back arrows on every pushed page — one floating in the bar\n * with no context, one attached to the thing it goes back from.\n *\n * This is deliberately a POLICY rather than a per-surface flag: \"who owns this\n * chrome\" is one application-wide decision, and expressing it as an owner makes\n * the duplication unrepresentable instead of asking every surface to remember\n * to suppress itself.\n */\nexport enum NavigationBackAffordanceOwner {\n /**\n * The current surface's own header owns it — the back control sits beside the\n * surface's icon/title/breadcrumb, so it reads as \"back from THIS\". The shell\n * control renders nothing even when hosted. Default: it keeps the affordance\n * attached to its context, and matches the shell staying free of a lone,\n * context-free arrow.\n */\n SURFACE = 'surface',\n /**\n * The app shell's navigation control owns it — one fixed back control in the\n * menubar (the Notion-style top-left placement). Surface headers render none.\n * Requires the shell to actually host `NAVIGATION_CONTROL`; if it does not,\n * the application has no back affordance at all.\n */\n SHELL = 'shell',\n /**\n * BOTH layers render one. An explicit opt-in for layouts where the two\n * genuinely differ — e.g. a multi-zone shell whose bar control pops the\n * focused zone while each zone's header pops its own stack. Chosen\n * deliberately; never a default.\n */\n BOTH = 'both',\n}\n\n/** Default owner when a layout declares none — see {@link NavigationBackAffordanceOwner.SURFACE}. */\nexport const DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER: NavigationBackAffordanceOwner = NavigationBackAffordanceOwner.SURFACE;\n\n/**\n * Does `owner` grant the SHELL (menubar navigation control) a back affordance?\n * Shared by both render sites so the two can never disagree about one policy.\n */\nexport function navigationBackAffordanceAdmitsShell(owner: NavigationBackAffordanceOwner | undefined): boolean {\n const resolved = owner ?? DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER;\n return resolved === NavigationBackAffordanceOwner.SHELL || resolved === NavigationBackAffordanceOwner.BOTH;\n}\n\n/** Does `owner` grant the current SURFACE's header a back affordance? */\nexport function navigationBackAffordanceAdmitsSurface(owner: NavigationBackAffordanceOwner | undefined): boolean {\n const resolved = owner ?? DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER;\n return resolved === NavigationBackAffordanceOwner.SURFACE || resolved === NavigationBackAffordanceOwner.BOTH;\n}\n\nexport const NavigationLayoutSchema = z.object({\n /**\n * Zone declarations. Primary is required, secondary and companion are optional.\n * Undeclared zones cannot be targeted by transitions — `NavigationTransition.SPLIT` in a layout\n * without secondary will escalate to overlay.\n */\n zones: z.object({\n /** Primary zone — always exists. Main content area (lists, root reads). */\n primary: ZoneConfigSchema,\n /** Secondary zone — optional. First adjacent zone for detail content. */\n secondary: ZoneConfigSchema.optional(),\n /** Companion zone — optional. Persistent supplementary content. */\n companion: ZoneConfigSchema.optional(),\n }),\n /**\n * How navigation from the app shell (sidebar, command palette, hotkey) behaves.\n * Causes a layout reset when targeting primary.\n */\n appLevel: AppLevelConfigSchema.optional(),\n /**\n * How navigation that STARTS in an overlay resolves. `PUSH` or `REPLACE` from an overlay leaves it\n * and lands in PRIMARY (the page changes); `OVERLAY` stacks a second overlay on the first. A\n * missing entry falls back to primary's own map. Nothing here keeps a link inside the dialog.\n */\n fromOverlay: FromOverlayConfigSchema.optional(),\n /** Split geometry: ratios, orientation, resizability. */\n split: SplitConfigSchema.optional(),\n /**\n * Maximum push depth before the framework escalates to overlay.\n * When a zone's stack depth reaches `maxDepth`, the next `push` opens an overlay instead.\n * Prevents infinitely deep navigation stacks. Per-relationship `maxDepth` can override.\n */\n maxDepth: z.number().int().positive().optional(),\n\n /**\n * Which layer renders the back control — see {@link NavigationBackAffordanceOwner}.\n * Omitted means {@link DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER} (the surface's\n * own header), which is what keeps a shell that hosts `NAVIGATION_CONTROL`\n * from rendering a second, context-free back arrow beside every page's own.\n */\n backAffordanceOwner: z.enum(NavigationBackAffordanceOwner).optional(),\n\n /**\n * Mobile viewport override — applies across all zones when viewport is `<md` (< 768px).\n * Use for sweeping mobile behavior changes (e.g., all splits become pushes).\n */\n [ViewportBreakpoint.MOBILE]: ViewportOverrideSchema.optional(),\n /**\n * Tablet viewport override — applies across all zones when viewport is `<lg` (768–1023px).\n * Use for tablet-specific behavior changes.\n */\n [ViewportBreakpoint.VERT_TABLET]: ViewportOverrideSchema.optional(),\n});\nexport type NavigationLayout = z.infer<typeof NavigationLayoutSchema>;\n/** @wildo_source:part:end saas.models.navigation.layout */\n\n\n// ════════════════════════════════════════════════════════════════\n// Transition Config Helpers\n// ════════════════════════════════════════════════════════════════\n\n/**\n * The transition verb of a {@link TransitionConfig}, which is either the verb itself or an object\n * carrying it alongside its modifiers.\n *\n * Exported from here rather than from the frontend resolver — where all three of these lived until\n * 2026-09-25 — because they are pure functions of an AUTHORING type this file owns, and the layout\n * diagnostics below need them too. A second copy beside the diagnostics would have been a second\n * answer to \"what verb did the author write\".\n */\nexport function getTransitionVerb(config: TransitionConfig): NavigationTransition {\n if (typeof config === 'string') return config;\n return (config as TransitionObject).transition;\n}\n\n/** Whether a {@link TransitionConfig} carries the `ephemeral` modifier. */\nexport function isEphemeralTransition(config: TransitionConfig): boolean {\n if (typeof config === 'string') return false;\n return (config as TransitionObject).ephemeral === true;\n}\n\n/** Whether a {@link TransitionConfig} carries the `persistent` modifier — a split that targets companion. */\nexport function isPersistentTransition(config: TransitionConfig): boolean {\n if (typeof config === 'string') return false;\n return (config as TransitionObject).persistent === true;\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Navigation Layout Diagnostics\n// ════════════════════════════════════════════════════════════════\n\n/**\n * What a {@link NavigationLayoutDiagnostic} says about the layout.\n *\n * `ERROR` means the runtime will do something the author did not ask for — a declared split that\n * silently becomes a dialog. `WARNING` means a declaration is INERT: nothing goes wrong, and the\n * author believes they configured something they did not.\n *\n * Neither is fatal. See {@link collectNavigationLayoutDiagnostics} for why.\n */\nexport enum NavigationLayoutDiagnosticSeverity {\n ERROR = 'error',\n WARNING = 'warning',\n}\n\n/** The closed set of layout defects {@link collectNavigationLayoutDiagnostics} can recognise. */\nexport enum NavigationLayoutDiagnosticCode {\n /**\n * A `SPLIT` is declared somewhere in the layout and NO adjacent zone is declared, so every one of\n * those splits silently becomes an overlay.\n *\n * The single most surprising thing in the navigation runtime, and it was documented in\n * `NavigationLayoutSchema`'s own JSDoc — *\"`NavigationTransition.SPLIT` in a layout without\n * secondary will escalate to overlay\"* — while nothing checked it. An author gets a dialog where\n * they asked for a pane, with no diagnostic anywhere.\n */\n SPLIT_WITHOUT_ADJACENT_ZONE = 'split-without-adjacent-zone',\n /**\n * A `persistent` split is declared and no `companion` zone exists. A persistent split targets\n * companion SPECIFICALLY — it does not fall back to secondary — so it escalates to an overlay even\n * in a layout that declares a perfectly good `secondary`.\n *\n * Separate from {@link SPLIT_WITHOUT_ADJACENT_ZONE} because the remedy is different and the\n * surprise is larger: the author is looking at a declared pane and cannot see why their split\n * refuses to use it.\n */\n PERSISTENT_SPLIT_WITHOUT_COMPANION = 'persistent-split-without-companion',\n /**\n * `minWidth`, `maxWidth`, `onEmpty` or `responsiveCollapse` declared on PRIMARY, where every one of\n * them is inert: primary never collapses, never empties and takes the remaining space.\n *\n * `ZoneConfigSchema`'s JSDoc states this — *\"Setting these on primary has no effect\"* — so the\n * diagnostic enforces a rule the contract already carries.\n */\n INERT_PRIMARY_ZONE_FIELD = 'inert-primary-zone-field',\n /** A zone whose `minWidth` exceeds its `maxWidth`. The drag constraints cannot both be honoured. */\n ZONE_WIDTH_BOUNDS_INVERTED = 'zone-width-bounds-inverted',\n}\n\n/** One finding about an authored {@link NavigationLayout}. */\nexport interface NavigationLayoutDiagnostic {\n code: NavigationLayoutDiagnosticCode;\n severity: NavigationLayoutDiagnosticSeverity;\n /** Where in the layout, as an authoring path: `zones.primary.transitions.read`. */\n path: string;\n /** What is wrong and what the runtime will do instead. */\n message: string;\n /** The edit that fixes it. Always present — a diagnostic with no remedy is a complaint. */\n remedy: string;\n}\n\n/**\n * Read an authored {@link NavigationLayout} and report what the runtime will silently do differently\n * from what it says.\n *\n * ## Why this exists\n *\n * Nothing validated a navigation layout beyond its SHAPE until 2026-09-25 — there was no `refine`\n * anywhere in this file — so three classes of declaration were accepted and quietly ignored. The\n * escalation in {@link NavigationLayoutDiagnosticCode.SPLIT_WITHOUT_ADJACENT_ZONE} is the expensive\n * one: it is documented in this file's own prose and produces a dialog where a pane was asked for.\n *\n * ## It REPORTS; it never refuses, and that is deliberate\n *\n * A `superRefine` on {@link NavigationLayoutSchema} was the obvious implementation and was rejected.\n * The layout is parsed inside `AppConfiguration_Frontend_Schema` at application boot, so a refusal\n * there would stop an application from starting over a split that renders as a dialog — wildly\n * disproportionate, and the exact shape `.claude/rules/application-creation-directive.md` forbids:\n * a mechanism that refuses rather than marks. The precedent for the chosen shape is the\n * administrative-continuity boot report, which is non-fatal for the same reason.\n *\n * Pure, so it is equally usable from a test, a CLI check or a future authoring-time gate.\n *\n * ## What this CANNOT see, and what covers it instead\n *\n * A layout is not the only place a `SPLIT` is declared. A resource's `navigationOverrides`, a\n * relationship transition and an action presentation all reach the resolver, and none of them is in\n * the layout — so the only real instance of `SPLIT_WITHOUT_ADJACENT_ZONE` in this repository was\n * INVISIBLE here: Wonder Todos declared `SPLIT` on `todos.READ` against a single-zone layout, every\n * drill-in became a dialog for the life of the declaration, and this check reported clean.\n *\n * Re-deriving that population statically would mean a second enumeration of every tier that can\n * produce a SPLIT, kept in step with the resolver by hand. The resolver has already decided, so the\n * report lives at the DECISION instead: `useNavigationController` warns once per resource+operation\n * when a resolution carries `SPLIT_ESCALATED_NO_ADJACENT_ZONE`. That covers every tier by\n * construction and cannot drift. This function keeps the half a boot check can answer — the layout's\n * own declarations, before anything navigates.\n *\n * ## The rule that was considered and REJECTED, because it fires on correct code\n *\n * *\"A `secondary` zone is declared and no transition in the layout resolves to `SPLIT`, so the pane\n * can never open.\"* It reads like the natural companion to the rules above and it is wrong: Wonder\n * CRM declares `secondary` while `zones.primary.transitions.read` is `PUSH`, and its pane is reached\n * ONLY by `deal`'s per-resource `navigationOverrides: [{ transition: SPLIT }]` — a declaration this\n * function cannot see, because it lives in a resource's ui-behavior rather than in the layout. The\n * rule would have reported the repository's one deliberate two-zone application as misconfigured.\n *\n * A checker that mostly reports correct code trains its reader to skim the reports that matter.\n *\n * (That rationale also mis-named Wonder CRM as \"the repository's one deliberate two-zone\n * application\". The workbench declares `zones.secondary` too — and unlike CRM its pane IS reached\n * from the layout, so the rejected rule would not have fired on it. The rejection stands on CRM\n * alone.)\n */\nexport function collectNavigationLayoutDiagnostics(layout: NavigationLayout): NavigationLayoutDiagnostic[] {\n const diagnostics: NavigationLayoutDiagnostic[] = [];\n const hasSecondary = layout.zones.secondary !== undefined;\n const hasCompanion = layout.zones.companion !== undefined;\n const hasAdjacentZone = hasSecondary || hasCompanion;\n\n /*\n * Every place a layout can declare a transition. Enumerated rather than walked, because the set is\n * closed by `NavigationLayoutSchema` and a structural walk would also reach the per-resource\n * overrides this function deliberately cannot see (see the rejected rule above).\n */\n const transitionSources: { path: string; transitions: ZoneTransitions | undefined }[] = [\n { path: 'zones.primary.transitions', transitions: layout.zones.primary?.transitions },\n { path: 'zones.secondary.transitions', transitions: layout.zones.secondary?.transitions },\n { path: 'zones.companion.transitions', transitions: layout.zones.companion?.transitions },\n { path: 'appLevel.transitions', transitions: layout.appLevel?.transitions },\n { path: 'fromOverlay.transitions', transitions: layout.fromOverlay?.transitions },\n { path: `['${ViewportBreakpoint.MOBILE}'].transitions`, transitions: layout[ViewportBreakpoint.MOBILE]?.transitions },\n { path: `['${ViewportBreakpoint.VERT_TABLET}'].transitions`, transitions: layout[ViewportBreakpoint.VERT_TABLET]?.transitions },\n ];\n\n for (const source of transitionSources) {\n if (!source.transitions) continue;\n for (const [operation, config] of Object.entries(source.transitions)) {\n if (config === undefined) continue;\n if (getTransitionVerb(config as TransitionConfig) !== NavigationTransition.SPLIT) continue;\n const path = `${source.path}.${operation}`;\n\n if (!hasAdjacentZone) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.SPLIT_WITHOUT_ADJACENT_ZONE,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path,\n message:\n 'Declares SPLIT, and the layout declares no `secondary` or `companion` zone. '\n + 'The split escalates to an OVERLAY, so this operation opens as a dialog rather than beside its source.',\n remedy: 'Declare `zones.secondary`, or change this transition to the one you want (PUSH, REPLACE or OVERLAY).',\n });\n continue;\n }\n\n if (isPersistentTransition(config as TransitionConfig) && !hasCompanion) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.PERSISTENT_SPLIT_WITHOUT_COMPANION,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path,\n message:\n 'Declares a `persistent` SPLIT, which targets the `companion` zone specifically and does NOT '\n + 'fall back to `secondary`. With no companion declared it escalates to an OVERLAY.',\n remedy: 'Declare `zones.companion`, or drop `persistent` so the split may use `secondary`.',\n });\n }\n }\n }\n\n const primary = layout.zones.primary;\n if (primary) {\n const inertOnPrimary = (['minWidth', 'maxWidth', 'onEmpty', 'responsiveCollapse'] as const)\n .filter(field => primary[field] !== undefined);\n for (const field of inertOnPrimary) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.INERT_PRIMARY_ZONE_FIELD,\n severity: NavigationLayoutDiagnosticSeverity.WARNING,\n path: `zones.primary.${field}`,\n message:\n `\\`${field}\\` has no effect on the primary zone: primary never collapses, never empties, and takes `\n + 'the space the other zones leave.',\n remedy: `Move \\`${field}\\` to \\`zones.secondary\\` or \\`zones.companion\\`, or remove it.`,\n });\n }\n }\n\n for (const zoneName of ['primary', 'secondary', 'companion'] as const) {\n const zone = layout.zones[zoneName];\n if (zone?.minWidth !== undefined && zone.maxWidth !== undefined && zone.minWidth > zone.maxWidth) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.ZONE_WIDTH_BOUNDS_INVERTED,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path: `zones.${zoneName}`,\n message: `\\`minWidth\\` (${zone.minWidth}) exceeds \\`maxWidth\\` (${zone.maxWidth}); the drag constraints cannot both hold.`,\n remedy: 'Lower `minWidth` or raise `maxWidth` so the range is non-empty.',\n });\n }\n }\n\n return diagnostics;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Per-Resource Operation Override\n// ════════════════════════════════════════════════════════════════\n\n// DELETED — NavigationOperationOverrideSchema and NavigationOperationOverride\n// Transferred to @wildo-ai/saas-frontend-lib (resources.frontend.schemas)\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.shared.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"onboarding.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/config/frontend/onboarding.shared.schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.shared.schemas.js","sourceRoot":"","sources":["../../../../../src/config/frontend/onboarding.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Core primitives\n * ────────────────────────────────────────────────────────────── */\n\n/** @wildo_source:part:start saas.models.onboarding-trigger facet:layer:shared facet:family:guidance facet:audience:app-developer */\n/** Onboarding Trigger Types - when/how onboarding flows are activated */\nexport const OnboardingTriggerType = {\n /** Triggered when user first visits the app */\n FIRST_VISIT: 'first-visit',\n /** Triggered when a specific URL/route is visited */\n ROUTE_MATCH: 'route-match',\n /** Triggered by a specific event */\n EVENT: 'event',\n /** Triggered manually (via API or user action) */\n MANUAL: 'manual',\n /** Triggered after a specific time delay */\n DELAYED: 'delayed',\n} as const;\nexport type OnboardingTriggerType = typeof OnboardingTriggerType[keyof typeof OnboardingTriggerType];\n/** @wildo_source:part:end saas.models.onboarding-trigger */\n\n/** @wildo_source:part:start saas.models.onboarding-elements facet:layer:shared facet:family:guidance facet:audience:app-developer */\n/** Onboarding Element Types */\nexport enum OnboardingElementType {\n CHECKLIST = \"checklist\",\n CHECKLIST_ITEM = \"checklist-item\",\n TOUR = \"tour\",\n TOOLTIP = \"tooltip\",\n MODAL = \"modal\",\n BANNER = \"banner\",\n ANNOUNCEMENT = \"announcement\",\n BADGE = \"badge\",\n CARD = \"card\",\n SURVEY = \"survey\",\n}\n\n/** Onboarding Status */\nexport enum OnboardingStatus {\n NOT_STARTED = \"not-started\",\n IN_PROGRESS = \"in-progress\",\n COMPLETED = \"completed\",\n SKIPPED = \"skipped\",\n DISMISSED = \"dismissed\",\n}\n/** @wildo_source:part:end saas.models.onboarding-elements */\n\n/**\n * Terminal onboarding/guidance statuses — the end states from which no further\n * lifecycle transition is valid. A flow in `COMPLETED`, `SKIPPED`, or\n * `DISMISSED` has been finished, skipped, or dismissed by the user and must not\n * be re-completed / re-dismissed / re-skipped / re-activated.\n *\n * `NOT_STARTED`, `IN_PROGRESS`, and \"no persisted state yet\" (`undefined`) are\n * the NON-terminal states. Treating `undefined` as non-terminal is the crux for\n * surfaces that render a flow WITHOUT routing it through the guidance trigger\n * engine (e.g. a standalone `OnboardingView`): such a flow legitimately has no\n * persisted state on first render, yet the user's first action (dismiss / skip /\n * complete) must still be recorded. Guarding on `=== IN_PROGRESS` would silently\n * drop that first action and the surface would reappear on reload.\n *\n * Single source of truth for the four guidance lifecycle guards\n * (activate / complete / dismiss / skip) — terminal-state reasoning lives here,\n * not inlined per call site, to prevent drift between them.\n */\nexport function isTerminalOnboardingStatus(status: OnboardingStatus | undefined): boolean {\n return (\n status === OnboardingStatus.COMPLETED\n || status === OnboardingStatus.SKIPPED\n || status === OnboardingStatus.DISMISSED\n );\n}\n\n/** @wildo_source:part:start saas.models.onboarding-elements */\n/** Tour Step Placement */\nexport enum TourStepPlacement {\n TOP = \"top\",\n BOTTOM = \"bottom\",\n LEFT = \"left\",\n RIGHT = \"right\",\n CENTER = \"center\",\n}\n\n\n/** Onboarding Variant */\nexport enum OnboardingVariant {\n INFO = \"info\",\n SUCCESS = \"success\",\n WARNING = \"warning\",\n ERROR = \"error\",\n}\n\n/** Badge Variant */\nexport enum OnboardingBadgeVariant {\n DEFAULT = \"default\",\n PRIMARY = \"primary\",\n SECONDARY = \"secondary\",\n SUCCESS = \"success\",\n WARNING = \"warning\",\n ERROR = \"error\",\n}\n\n/** Card Variant */\nexport enum OnboardingCardVariant {\n DEFAULT = \"default\",\n OUTLINED = \"outlined\",\n ELEVATED = \"elevated\",\n}\n\n/** Survey Question Type */\nexport enum OnboardingSurveyQuestionType {\n TEXT = \"text\",\n RADIO = \"radio\",\n CHECKBOX = \"checkbox\",\n RATING = \"rating\",\n TEXTAREA = \"textarea\",\n SINGLE_CHOICE = \"single-choice\",\n}\n\n/** Banner Position */\nexport enum OnboardingBannerPosition {\n TOP = \"top\",\n BOTTOM = \"bottom\",\n}\n/** @wildo_source:part:end saas.models.onboarding-elements */\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Schemas\n * ────────────────────────────────────────────────────────────── */\n\n/*\n * `OnboardingTriggerConditionsSchema` and the `trigger.conditions` field were REMOVED (#1369).\n * They declared `newUsersOnly`, `triggerOnce` and `requiredRoles`, were validated by BOTH\n * specification surfaces, and were read by NOTHING: repo-wide the vocabulary had exactly one\n * producer (the resource-guidance compiler, which emitted a constant) and zero consumers. No\n * application ever authored one.\n *\n * What made it worse than an ignored field is that the behaviour it described DOES happen, by a\n * different mechanism — a flow does not re-trigger, because every status transition refuses from a\n * terminal status via `isTerminalOnboardingStatus`. So an author declaring `triggerOnce: true`\n * observed exactly what they asked for and concluded the field worked. It was falsifiable only in\n * the direction nobody tries: `triggerOnce: false` changed nothing, and an application wanting a\n * flow to re-trigger could not express it and got no error saying so.\n *\n * `requiredRoles` was the dangerous one, because it reads as a GATE. A flow declaring it was shown\n * to everybody. Role gating is real one level up — `GuidanceAudienceSchema.roles`, enforced in\n * `guidance-audience.frontend.utils.ts` — so there were two spellings of one question and only one\n * of them worked.\n *\n * Removed rather than wired, on the same ground as the flow-level `options` block (#1368): each key\n * either duplicates a mechanism that IS enforced (`audience.roles`, and the terminal-status rule\n * that `newUsersOnly` restates) or names a mode that does not exist (`triggerOnce: false`). Making\n * a flow re-trigger is a real capability and deserves to be asked as its own question, against the\n * state that would drive it — not carried as a default nobody could turn off.\n */\n\n/** @wildo_source:part:start saas.models.onboarding-trigger */\n/** Onboarding Trigger Schema - defines when/how an onboarding or guidance flow is activated.\n * Important runtime note:\n * - `EVENT` is the only trigger type evaluated by the backend operation pipeline. Its `eventName`\n * for a resource operation succeeding is `<resourceType>:<operationIdentifier>` — build it from\n * your resource-type enum and `CoreResourceOperation`, e.g.\n * `` `${MyModule_ResourceType.PROJECTS}:${CoreResourceOperation.CREATE}` ``.\n * - `FIRST_VISIT`, `ROUTE_MATCH`, `DELAYED`, and `MANUAL` are frontend/manual concerns.\n * - A flow shows once per subject: it does not re-trigger after it is completed, skipped or dismissed. */\nexport const OnboardingTriggerSchema = z.object({\n /** The type of trigger that activates this onboarding */\n type: z.enum(OnboardingTriggerType).default(OnboardingTriggerType.FIRST_VISIT),\n\n /** For ROUTE_MATCH: Route pattern to match (regex or glob) */\n routePattern: z.string().optional(),\n\n /** For EVENT: Event name to listen for */\n eventName: z.string().optional(),\n\n /** For DELAYED: Delay in milliseconds before triggering */\n delayMs: z.number().positive().optional(),\n});\n/** @wildo_source:part:end saas.models.onboarding-trigger */\n\n/** @wildo_source:part:start saas.frontend.onboarding-view */\n/** Onboarding View Options Schema — the `options` of an onboarding DOCUMENT (guidance flows have none). */\nexport const OnboardingViewOptionsSchema = z.object({\n showProgress: z.boolean().default(true),\n allowDismiss: z.boolean().default(true),\n persistState: z.boolean().default(true),\n autoStart: z.boolean().default(false),\n allowSkip: z.boolean().default(true),\n className: z.string().optional(),\n});\n/** @wildo_source:part:end saas.frontend.onboarding-view */\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Reusable Config Schemas\n *\n * These config schemas define the type-specific structural/runtime properties\n * for each onboarding element, separated from base identity/state fields.\n * for reuse across packages.\n * ────────────────────────────────────────────────────────────── */\n\n/** @wildo_source:part:start saas.models.onboarding-elements */\n/** Tour Step Schema */\nexport const OnboardingTourStepSchema = z.object({\n ref: z.string(),\n order: z.number().int().nonnegative(),\n placement: z.enum(TourStepPlacement).default(TourStepPlacement.BOTTOM),\n targetSelector: z.string().optional(),\n /** Optional resource field name this step targets — resolved to [data-guidance-field=\"...\"] at render time */\n targetField: z.string().optional(),\n imageUrl: z.url().optional(),\n videoUrl: z.url().optional(),\n});\n\n/** Survey Question Schema */\nexport const OnboardingSurveyQuestionSchema = z.object({\n id: z.string(),\n ref: z.string().optional(),\n type: z.enum(OnboardingSurveyQuestionType),\n options: z.array(z.object({ ref: z.string() })).optional(),\n required: z.boolean().default(false),\n /**\n * The field of the survey's bound resource this answer is written to.\n *\n * Omitted, the answer is recorded on the subject's own guidance-state row and nothing else reads\n * it — which is right for a genuine survey.\n *\n * Declared, the answer becomes a value the application owns: it is written through the target\n * resource's ordinary default `API_CALL` UPDATE, under the ordinary authorization, alongside every\n * other bound answer in the same submission. It is NOT a second write path — a bound survey is a\n * form whose fields were asked one at a time.\n *\n * It is meaningless without `bindTo` on the survey itself, and the element schema REFUSES that\n * combination rather than ignoring it.\n */\n bindToField: z.string().min(1).optional(),\n});\n\n/**\n * The question types a field binding accepts, because their answer IS the value.\n *\n * The choice types are excluded ON PURPOSE rather than by oversight. An option carries only a\n * `ref`, which is an i18n key — so binding a RADIO, CHECKBOX or SINGLE_CHOICE question would write\n * that key into an application's resource field and store `favouriteColourBlue` where the\n * application expected a colour. Silently, and durably.\n *\n * Refused rather than documented, because a binding that stores the wrong thing is worse than one\n * that does not exist: nothing downstream can tell a key from a value. Admitting the choice types\n * means giving an option a VALUE alongside its ref, which is an additive change to this schema and\n * the natural next step if an application needs it.\n */\nexport const SURVEY_QUESTION_TYPES_WHOSE_ANSWER_IS_A_VALUE: readonly OnboardingSurveyQuestionType[] = [\n OnboardingSurveyQuestionType.TEXT,\n OnboardingSurveyQuestionType.TEXTAREA,\n OnboardingSurveyQuestionType.RATING,\n];\n\n/**\n * Where a survey's answers land, beyond the guidance-state row.\n *\n * ## Why the resource is named once, and the field per question\n *\n * A survey writes ONE row in ONE submission. Naming the resource per question would let a single\n * submit fan out across several resources, which buys nothing an application cannot express with two\n * surveys, and costs partial-failure semantics: three writes, the second refused, and an element\n * that is neither complete nor cleanly incomplete. One resource, one write, one outcome.\n *\n * ## What the target has to be\n *\n * A resource the current subject already has a row of, reachable without naming an id — the shape\n * `userProfiles` has, and the shape an application's own `USERS → <resource>` composition has. The\n * scope parameters are injected by `ScopedResourceRegistryProvider`, exactly as they are for the\n * guidance-state write itself, so the binding never addresses a row by id and cannot reach another\n * subject's data.\n *\n * v1 performs an UPDATE and does not create a missing row. That is a stated limitation rather than a\n * silent one: the write is refused, loudly, and the element does not complete. Create-if-absent is\n * additive and can be added against a real target that needs it.\n */\nexport const OnboardingSurveyBindingSchema = z.object({\n /** The resource type whose row receives the bound answers. */\n resourceType: z.string().min(1),\n});\n\n/** Checklist Config Schema - type-specific fields only */\nexport const OnboardingChecklistConfigSchema = z.object({\n showProgress: z.boolean().default(true),\n});\n\n/** Checklist Item Config Schema - type-specific fields only */\nexport const OnboardingChecklistItemConfigSchema = z.object({\n actionRef: z.string().optional(),\n});\n\n/** Tour Config Schema - type-specific fields only */\nexport const OnboardingTourConfigSchema = z.object({\n steps: z.array(OnboardingTourStepSchema).default([]),\n autoStart: z.boolean().default(false),\n allowSkip: z.boolean().default(true),\n});\n\n/** Tooltip Config Schema - type-specific fields only */\nexport const OnboardingTooltipConfigSchema = z.object({\n targetSelector: z.string(),\n placement: z.enum(TourStepPlacement).default(TourStepPlacement.BOTTOM),\n showOnce: z.boolean().default(true),\n});\n\n/** Modal Config Schema - type-specific fields only */\nexport const OnboardingModalConfigSchema = z.object({\n imageUrl: z.url().optional(),\n videoUrl: z.url().optional(),\n ctaAction: z.string().optional(),\n dismissible: z.boolean().default(true),\n});\n\n/** Banner Config Schema - type-specific fields only */\nexport const OnboardingBannerConfigSchema = z.object({\n variant: z.enum(OnboardingVariant).default(OnboardingVariant.INFO),\n dismissible: z.boolean().default(true),\n position: z.enum(OnboardingBannerPosition).default(OnboardingBannerPosition.TOP),\n actionRef: z.string().optional(),\n});\n\n/** Announcement Config Schema - type-specific fields only */\nexport const OnboardingAnnouncementConfigSchema = z.object({\n variant: z.enum(OnboardingVariant).default(OnboardingVariant.INFO),\n dismissible: z.boolean().default(true),\n icon: z.string().optional(),\n actionRef: z.string().optional(),\n});\n\n/** Badge Config Schema - type-specific fields only */\nexport const OnboardingBadgeConfigSchema = z.object({\n icon: z.string().optional(),\n variant: z.enum(OnboardingBadgeVariant).default(OnboardingBadgeVariant.DEFAULT),\n color: z.string().optional(),\n unlocked: z.boolean().default(false),\n actionRef: z.string().optional(),\n});\n\n/** Card Config Schema - type-specific fields only */\nexport const OnboardingCardConfigSchema = z.object({\n icon: z.string().optional(),\n imageUrl: z.url().optional(),\n variant: z.enum(OnboardingCardVariant).default(OnboardingCardVariant.DEFAULT),\n actionRef: z.string().optional(),\n});\n\n/** Survey Config Schema - type-specific fields only */\nexport const OnboardingSurveyConfigSchema = z.object({\n questions: z.array(OnboardingSurveyQuestionSchema).default([]),\n allowSkip: z.boolean().default(true),\n /** Where bound answers are written. See {@link OnboardingSurveyBindingSchema}. */\n bindTo: OnboardingSurveyBindingSchema.optional(),\n});\n\n/**\n * A question may only name a field when its survey names a resource.\n *\n * Refused rather than ignored, because an ignored `bindToField` is the exact defect this capability\n * was built alongside: an author declares where an answer should go, the runtime drops it on the\n * floor, and nothing says so until somebody reads the row and finds it empty.\n *\n * It lives as a standalone function rather than a `.superRefine` on the config schema because that\n * schema's `.shape` is SPREAD into a discriminated-union member, and a refinement wrapper has no\n * `.shape`; and it cannot sit on the union member either, since `z.discriminatedUnion` requires\n * plain object members. So the union applies it, once, for the SURVEY case.\n */\nexport function assertSurveyFieldBindingsHaveATarget(\n survey: {\n bindTo?: { resourceType: string };\n questions: { id: string; type: OnboardingSurveyQuestionType; bindToField?: string }[];\n },\n ctx: z.RefinementCtx,\n pathPrefix: (string | number)[] = [],\n): void {\n survey.questions.forEach((question, index) => {\n if (question.bindToField === undefined) return;\n if (!survey.bindTo) {\n ctx.addIssue({\n code: 'custom',\n path: [...pathPrefix, 'questions', index, 'bindToField'],\n message:\n `question \"${question.id}\" declares bindToField \"${question.bindToField}\" but the survey declares no `\n + 'bindTo.resourceType, so the answer has nowhere to be written. Declare the survey\\'s target resource, '\n + 'or remove the field binding.',\n });\n return;\n }\n if (!SURVEY_QUESTION_TYPES_WHOSE_ANSWER_IS_A_VALUE.includes(question.type)) {\n ctx.addIssue({\n code: 'custom',\n path: [...pathPrefix, 'questions', index, 'bindToField'],\n message:\n `question \"${question.id}\" is a ${question.type} question and cannot be bound to a field. Its answer is an `\n + 'option REF, which is an i18n key rather than a value, so writing it to a resource would store the key. '\n + `Bind a ${SURVEY_QUESTION_TYPES_WHOSE_ANSWER_IS_A_VALUE.join(' / ')} question instead.`,\n });\n }\n });\n}\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Element Base Schema (for reuse)\n *\n * Contains common fields shared by all onboarding element types.\n * Extracted for reuse across packages.\n * ────────────────────────────────────────────────────────────── */\n\nexport const OnboardingElementBaseSchema = z.object({\n /** Unique reference for this element */\n ref: z.string(),\n /** Element type discriminator */\n type: z.enum(OnboardingElementType),\n /** Current status */\n status: z.enum(OnboardingStatus).default(OnboardingStatus.NOT_STARTED),\n /** Display order */\n order: z.number().int().nonnegative(),\n /** Optional resource field name this element targets — resolved to a CSS selector [data-guidance-field=\"...\"] at render time */\n targetField: z.string().optional(),\n});\n\nexport type OnboardingElementBase = z.infer<typeof OnboardingElementBaseSchema>;\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Element Union\n * ────────────────────────────────────────────────────────────── */\n\n/**\n * Typed discriminated union of all onboarding element types.\n * Use this for runtime validation and type inference.\n * Note: Created separately from SchemaFamily to preserve full TypeScript type inference.\n */\nexport const OnboardingElementSchema = z.discriminatedUnion('type', [\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.CHECKLIST),\n items: z.array(z.string()),\n ...OnboardingChecklistConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.CHECKLIST_ITEM),\n completed: z.boolean().default(false),\n ...OnboardingChecklistItemConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.TOUR),\n currentStepIndex: z.number().int().nonnegative().default(0),\n ...OnboardingTourConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.TOOLTIP),\n ...OnboardingTooltipConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.MODAL),\n ...OnboardingModalConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.BANNER),\n ...OnboardingBannerConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.ANNOUNCEMENT),\n ...OnboardingAnnouncementConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.BADGE),\n ...OnboardingBadgeConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.CARD),\n ...OnboardingCardConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.SURVEY),\n ...OnboardingSurveyConfigSchema.shape,\n }),\n]).superRefine((element, ctx) => {\n // The one cross-field rule in this vocabulary, applied where a discriminated union allows it.\n if (element.type !== OnboardingElementType.SURVEY) return;\n assertSurveyFieldBindingsHaveATarget(element, ctx);\n});\n/** @wildo_source:part:end saas.models.onboarding-elements */\n\n/*\n * Maintainer note — outside the anchor because it is history. An `OnboardingElementSchemaFamily`\n * (a `createSchemaFamily` re-declaration of the same ten variants) once sat beside the union above\n * and was removed: nothing consumed it, and its own comment admitted the union was the copy that was\n * read. Two hand-maintained declarations of one vocabulary drift on the eleventh element type — keep\n * the union as the only one.\n */\n\n/** ──────────────────────────────────────────────────────────────\n * Onboarding – Type Definitions\n * ────────────────────────────────────────────────────────────── */\n\nexport type OnboardingTrigger = z.infer<typeof OnboardingTriggerSchema>;\nexport type OnboardingViewOptions = z.infer<typeof OnboardingViewOptionsSchema>;\nexport type OnboardingTourStep = z.infer<typeof OnboardingTourStepSchema>;\nexport type OnboardingSurveyQuestion = z.infer<typeof OnboardingSurveyQuestionSchema>;\nexport type OnboardingElement = z.infer<typeof OnboardingElementSchema>;\n\n/** Config schema types */\nexport type OnboardingChecklistConfig = z.infer<typeof OnboardingChecklistConfigSchema>;\nexport type OnboardingChecklistItemConfig = z.infer<typeof OnboardingChecklistItemConfigSchema>;\nexport type OnboardingTourConfig = z.infer<typeof OnboardingTourConfigSchema>;\nexport type OnboardingTooltipConfig = z.infer<typeof OnboardingTooltipConfigSchema>;\nexport type OnboardingModalConfig = z.infer<typeof OnboardingModalConfigSchema>;\nexport type OnboardingBannerConfig = z.infer<typeof OnboardingBannerConfigSchema>;\nexport type OnboardingAnnouncementConfig = z.infer<typeof OnboardingAnnouncementConfigSchema>;\nexport type OnboardingBadgeConfig = z.infer<typeof OnboardingBadgeConfigSchema>;\nexport type OnboardingCardConfig = z.infer<typeof OnboardingCardConfigSchema>;\nexport type OnboardingSurveyConfig = z.infer<typeof OnboardingSurveyConfigSchema>;\n\n/**\n * Individual element variant types - extracted from OnboardingElement discriminated union.\n */\nexport type OnboardingChecklistElement = Extract<OnboardingElement, { type: OnboardingElementType.CHECKLIST }>;\nexport type OnboardingChecklistItemElement = Extract<OnboardingElement, { type: OnboardingElementType.CHECKLIST_ITEM }>;\nexport type OnboardingTourElement = Extract<OnboardingElement, { type: OnboardingElementType.TOUR }>;\nexport type OnboardingTooltipElement = Extract<OnboardingElement, { type: OnboardingElementType.TOOLTIP }>;\nexport type OnboardingModalElement = Extract<OnboardingElement, { type: OnboardingElementType.MODAL }>;\nexport type OnboardingBannerElement = Extract<OnboardingElement, { type: OnboardingElementType.BANNER }>;\nexport type OnboardingAnnouncementElement = Extract<OnboardingElement, { type: OnboardingElementType.ANNOUNCEMENT }>;\nexport type OnboardingBadgeElement = Extract<OnboardingElement, { type: OnboardingElementType.BADGE }>;\nexport type OnboardingCardElement = Extract<OnboardingElement, { type: OnboardingElementType.CARD }>;\nexport type OnboardingSurveyElement = Extract<OnboardingElement, { type: OnboardingElementType.SURVEY }>;\n\n"]}
|
|
1
|
+
{"version":3,"file":"onboarding.shared.schemas.js","sourceRoot":"","sources":["../../../../src/config/frontend/onboarding.shared.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;oEAEoE;AAEpE,oIAAoI;AACpI,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,+CAA+C;IAC/C,WAAW,EAAE,aAAa;IAC1B,qDAAqD;IACrD,WAAW,EAAE,aAAa;IAC1B,oCAAoC;IACpC,KAAK,EAAE,OAAO;IACd,kDAAkD;IAClD,MAAM,EAAE,QAAQ;IAChB,4CAA4C;IAC5C,OAAO,EAAE,SAAS;CACV,CAAC;AAEX,4DAA4D;AAE5D,qIAAqI;AACrI,+BAA+B;AAC/B,MAAM,CAAN,IAAY,qBAWX;AAXD,WAAY,qBAAqB;IAC/B,gDAAuB,CAAA;IACvB,0DAAiC,CAAA;IACjC,sCAAa,CAAA;IACb,4CAAmB,CAAA;IACnB,wCAAe,CAAA;IACf,0CAAiB,CAAA;IACjB,sDAA6B,CAAA;IAC7B,wCAAe,CAAA;IACf,sCAAa,CAAA;IACb,0CAAiB,CAAA;AACnB,CAAC,EAXW,qBAAqB,KAArB,qBAAqB,QAWhC;AAED,wBAAwB;AACxB,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,+CAA2B,CAAA;IAC3B,+CAA2B,CAAA;IAC3B,2CAAuB,CAAA;IACvB,uCAAmB,CAAA;IACnB,2CAAuB,CAAA;AACzB,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B;AACD,6DAA6D;AAE7D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAoC;IAC7E,OAAO,CACL,MAAM,KAAK,gBAAgB,CAAC,SAAS;WAClC,MAAM,KAAK,gBAAgB,CAAC,OAAO;WACnC,MAAM,KAAK,gBAAgB,CAAC,SAAS,CACzC,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,0BAA0B;AAC1B,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IAC3B,gCAAW,CAAA;IACX,sCAAiB,CAAA;IACjB,kCAAa,CAAA;IACb,oCAAe,CAAA;IACf,sCAAiB,CAAA;AACnB,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAGD,yBAAyB;AACzB,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,kCAAa,CAAA;IACb,wCAAmB,CAAA;IACnB,wCAAmB,CAAA;IACnB,oCAAe,CAAA;AACjB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED,oBAAoB;AACpB,MAAM,CAAN,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,6CAAmB,CAAA;IACnB,6CAAmB,CAAA;IACnB,iDAAuB,CAAA;IACvB,6CAAmB,CAAA;IACnB,6CAAmB,CAAA;IACnB,yCAAe,CAAA;AACjB,CAAC,EAPW,sBAAsB,KAAtB,sBAAsB,QAOjC;AAED,mBAAmB;AACnB,MAAM,CAAN,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,4CAAmB,CAAA;IACnB,8CAAqB,CAAA;IACrB,8CAAqB,CAAA;AACvB,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,QAIhC;AAED,2BAA2B;AAC3B,MAAM,CAAN,IAAY,4BAOX;AAPD,WAAY,4BAA4B;IACtC,6CAAa,CAAA;IACb,+CAAe,CAAA;IACf,qDAAqB,CAAA;IACrB,iDAAiB,CAAA;IACjB,qDAAqB,CAAA;IACrB,+DAA+B,CAAA;AACjC,CAAC,EAPW,4BAA4B,KAA5B,4BAA4B,QAOvC;AAED,sBAAsB;AACtB,MAAM,CAAN,IAAY,wBAGX;AAHD,WAAY,wBAAwB;IAClC,uCAAW,CAAA;IACX,6CAAiB,CAAA;AACnB,CAAC,EAHW,wBAAwB,KAAxB,wBAAwB,QAGnC;AACD,6DAA6D;AAE7D;;oEAEoE;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,8DAA8D;AAC9D;;;;;;;2GAO2G;AAC3G,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,yDAAyD;IACzD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC;IAE9E,8DAA8D;IAC9D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEnC,0CAA0C;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEhC,2DAA2D;IAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AACH,4DAA4D;AAE5D,6DAA6D;AAC7D,2GAA2G;AAC3G,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AACH,2DAA2D;AAE3D;;;;;;oEAMoE;AAEpE,+DAA+D;AAC/D,uBAAuB;AACvB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACtE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,8GAA8G;IAC9G,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1D,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACpC;;;;;;;;;;;;;OAaG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,6CAA6C,GAA4C;IACpG,4BAA4B,CAAC,IAAI;IACjC,4BAA4B,CAAC,QAAQ;IACrC,4BAA4B,CAAC,MAAM;CACpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,8DAA8D;IAC9D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAChC,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACxC,CAAC,CAAC;AAEH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,qDAAqD;AACrD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACrC,CAAC,CAAC;AAEH,wDAAwD;AACxD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACtE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACpC,CAAC,CAAC;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACvC,CAAC,CAAC;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAClE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAClE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC;IAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,qDAAqD;AACrD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC;IAC7E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACpC,kFAAkF;IAClF,MAAM,EAAE,6BAA6B,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oCAAoC,CAClD,MAGC,EACD,GAAoB,EACpB,aAAkC,EAAE;IAEpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC3C,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO;QAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC;gBACxD,OAAO,EACL,aAAa,QAAQ,CAAC,EAAE,2BAA2B,QAAQ,CAAC,WAAW,+BAA+B;sBACpG,uGAAuG;sBACvG,8BAA8B;aACnC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,6CAA6C,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC;gBACxD,OAAO,EACL,aAAa,QAAQ,CAAC,EAAE,UAAU,QAAQ,CAAC,IAAI,6DAA6D;sBAC1G,yGAAyG;sBACzG,UAAU,6CAA6C,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB;aAC5F,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;oEAKoE;AAEpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,wCAAwC;IACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,iCAAiC;IACjC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACnC,qBAAqB;IACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC;IACtE,oBAAoB;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,gIAAgI;IAChI,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAIH;;oEAEoE;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAClE,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC;QAChD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,GAAG,+BAA+B,CAAC,KAAK;KACzC,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,cAAc,CAAC;QACrD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACrC,GAAG,mCAAmC,CAAC,KAAK;KAC7C,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC3C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,GAAG,0BAA0B,CAAC,KAAK;KACpC,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAC9C,GAAG,6BAA6B,CAAC,KAAK;KACvC,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC5C,GAAG,2BAA2B,CAAC,KAAK;KACrC,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAC7C,GAAG,4BAA4B,CAAC,KAAK;KACtC,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,YAAY,CAAC;QACnD,GAAG,kCAAkC,CAAC,KAAK;KAC5C,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC5C,GAAG,2BAA2B,CAAC,KAAK;KACrC,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC3C,GAAG,0BAA0B,CAAC,KAAK;KACpC,CAAC;IACF,2BAA2B,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAC7C,GAAG,4BAA4B,CAAC,KAAK;KACtC,CAAC;CACH,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IAC9B,8FAA8F;IAC9F,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,CAAC,MAAM;QAAE,OAAO;IAC1D,oCAAoC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Core primitives\n * ────────────────────────────────────────────────────────────── */\n\n/** @wildo_source:part:start saas.models.onboarding-trigger facet:layer:shared facet:family:guidance facet:audience:app-developer */\n/** Onboarding Trigger Types - when/how onboarding flows are activated */\nexport const OnboardingTriggerType = {\n /** Triggered when user first visits the app */\n FIRST_VISIT: 'first-visit',\n /** Triggered when a specific URL/route is visited */\n ROUTE_MATCH: 'route-match',\n /** Triggered by a specific event */\n EVENT: 'event',\n /** Triggered manually (via API or user action) */\n MANUAL: 'manual',\n /** Triggered after a specific time delay */\n DELAYED: 'delayed',\n} as const;\nexport type OnboardingTriggerType = typeof OnboardingTriggerType[keyof typeof OnboardingTriggerType];\n/** @wildo_source:part:end saas.models.onboarding-trigger */\n\n/** @wildo_source:part:start saas.models.onboarding-elements facet:layer:shared facet:family:guidance facet:audience:app-developer */\n/** Onboarding Element Types */\nexport enum OnboardingElementType {\n CHECKLIST = \"checklist\",\n CHECKLIST_ITEM = \"checklist-item\",\n TOUR = \"tour\",\n TOOLTIP = \"tooltip\",\n MODAL = \"modal\",\n BANNER = \"banner\",\n ANNOUNCEMENT = \"announcement\",\n BADGE = \"badge\",\n CARD = \"card\",\n SURVEY = \"survey\",\n}\n\n/** Onboarding Status */\nexport enum OnboardingStatus {\n NOT_STARTED = \"not-started\",\n IN_PROGRESS = \"in-progress\",\n COMPLETED = \"completed\",\n SKIPPED = \"skipped\",\n DISMISSED = \"dismissed\",\n}\n/** @wildo_source:part:end saas.models.onboarding-elements */\n\n/**\n * Terminal onboarding/guidance statuses — the end states from which no further\n * lifecycle transition is valid. A flow in `COMPLETED`, `SKIPPED`, or\n * `DISMISSED` has been finished, skipped, or dismissed by the user and must not\n * be re-completed / re-dismissed / re-skipped / re-activated.\n *\n * `NOT_STARTED`, `IN_PROGRESS`, and \"no persisted state yet\" (`undefined`) are\n * the NON-terminal states. Treating `undefined` as non-terminal is the crux for\n * surfaces that render a flow WITHOUT routing it through the guidance trigger\n * engine (e.g. a standalone `OnboardingView`): such a flow legitimately has no\n * persisted state on first render, yet the user's first action (dismiss / skip /\n * complete) must still be recorded. Guarding on `=== IN_PROGRESS` would silently\n * drop that first action and the surface would reappear on reload.\n *\n * Single source of truth for the four guidance lifecycle guards\n * (activate / complete / dismiss / skip) — terminal-state reasoning lives here,\n * not inlined per call site, to prevent drift between them.\n */\nexport function isTerminalOnboardingStatus(status: OnboardingStatus | undefined): boolean {\n return (\n status === OnboardingStatus.COMPLETED\n || status === OnboardingStatus.SKIPPED\n || status === OnboardingStatus.DISMISSED\n );\n}\n\n/** @wildo_source:part:start saas.models.onboarding-elements */\n/** Tour Step Placement */\nexport enum TourStepPlacement {\n TOP = \"top\",\n BOTTOM = \"bottom\",\n LEFT = \"left\",\n RIGHT = \"right\",\n CENTER = \"center\",\n}\n\n\n/** Onboarding Variant */\nexport enum OnboardingVariant {\n INFO = \"info\",\n SUCCESS = \"success\",\n WARNING = \"warning\",\n ERROR = \"error\",\n}\n\n/** Badge Variant */\nexport enum OnboardingBadgeVariant {\n DEFAULT = \"default\",\n PRIMARY = \"primary\",\n SECONDARY = \"secondary\",\n SUCCESS = \"success\",\n WARNING = \"warning\",\n ERROR = \"error\",\n}\n\n/** Card Variant */\nexport enum OnboardingCardVariant {\n DEFAULT = \"default\",\n OUTLINED = \"outlined\",\n ELEVATED = \"elevated\",\n}\n\n/** Survey Question Type */\nexport enum OnboardingSurveyQuestionType {\n TEXT = \"text\",\n RADIO = \"radio\",\n CHECKBOX = \"checkbox\",\n RATING = \"rating\",\n TEXTAREA = \"textarea\",\n SINGLE_CHOICE = \"single-choice\",\n}\n\n/** Banner Position */\nexport enum OnboardingBannerPosition {\n TOP = \"top\",\n BOTTOM = \"bottom\",\n}\n/** @wildo_source:part:end saas.models.onboarding-elements */\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Schemas\n * ────────────────────────────────────────────────────────────── */\n\n/*\n * `OnboardingTriggerConditionsSchema` and the `trigger.conditions` field were REMOVED (#1369).\n * They declared `newUsersOnly`, `triggerOnce` and `requiredRoles`, were validated by BOTH\n * specification surfaces, and were read by NOTHING: repo-wide the vocabulary had exactly one\n * producer (the resource-guidance compiler, which emitted a constant) and zero consumers. No\n * application ever authored one.\n *\n * What made it worse than an ignored field is that the behaviour it described DOES happen, by a\n * different mechanism — a flow does not re-trigger, because every status transition refuses from a\n * terminal status via `isTerminalOnboardingStatus`. So an author declaring `triggerOnce: true`\n * observed exactly what they asked for and concluded the field worked. It was falsifiable only in\n * the direction nobody tries: `triggerOnce: false` changed nothing, and an application wanting a\n * flow to re-trigger could not express it and got no error saying so.\n *\n * `requiredRoles` was the dangerous one, because it reads as a GATE. A flow declaring it was shown\n * to everybody. Role gating is real one level up — `GuidanceAudienceSchema.roles`, enforced in\n * `guidance-audience.frontend.utils.ts` — so there were two spellings of one question and only one\n * of them worked.\n *\n * Removed rather than wired, on the same ground as the flow-level `options` block (#1368): each key\n * either duplicates a mechanism that IS enforced (`audience.roles`, and the terminal-status rule\n * that `newUsersOnly` restates) or names a mode that does not exist (`triggerOnce: false`). Making\n * a flow re-trigger is a real capability and deserves to be asked as its own question, against the\n * state that would drive it — not carried as a default nobody could turn off.\n */\n\n/** @wildo_source:part:start saas.models.onboarding-trigger */\n/** Onboarding Trigger Schema - defines when/how an onboarding or guidance flow is activated.\n * Important runtime note:\n * - `EVENT` is the only trigger type evaluated by the backend operation pipeline. Its `eventName`\n * for a resource operation succeeding is `<resourceType>:<operationIdentifier>` — build it from\n * your resource-type enum and `CoreResourceOperation`, e.g.\n * `` `${MyModule_ResourceType.PROJECTS}:${CoreResourceOperation.CREATE}` ``.\n * - `FIRST_VISIT`, `ROUTE_MATCH`, `DELAYED`, and `MANUAL` are frontend/manual concerns.\n * - A flow shows once per subject: it does not re-trigger after it is completed, skipped or dismissed. */\nexport const OnboardingTriggerSchema = z.object({\n /** The type of trigger that activates this onboarding */\n type: z.enum(OnboardingTriggerType).default(OnboardingTriggerType.FIRST_VISIT),\n\n /** For ROUTE_MATCH: Route pattern to match (regex or glob) */\n routePattern: z.string().optional(),\n\n /** For EVENT: Event name to listen for */\n eventName: z.string().optional(),\n\n /** For DELAYED: Delay in milliseconds before triggering */\n delayMs: z.number().positive().optional(),\n});\n/** @wildo_source:part:end saas.models.onboarding-trigger */\n\n/** @wildo_source:part:start saas.frontend.onboarding-view */\n/** Onboarding View Options Schema — the `options` of an onboarding DOCUMENT (guidance flows have none). */\nexport const OnboardingViewOptionsSchema = z.object({\n showProgress: z.boolean().default(true),\n allowDismiss: z.boolean().default(true),\n persistState: z.boolean().default(true),\n autoStart: z.boolean().default(false),\n allowSkip: z.boolean().default(true),\n className: z.string().optional(),\n});\n/** @wildo_source:part:end saas.frontend.onboarding-view */\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Reusable Config Schemas\n *\n * These config schemas define the type-specific structural/runtime properties\n * for each onboarding element, separated from base identity/state fields.\n * for reuse across packages.\n * ────────────────────────────────────────────────────────────── */\n\n/** @wildo_source:part:start saas.models.onboarding-elements */\n/** Tour Step Schema */\nexport const OnboardingTourStepSchema = z.object({\n ref: z.string(),\n order: z.number().int().nonnegative(),\n placement: z.enum(TourStepPlacement).default(TourStepPlacement.BOTTOM),\n targetSelector: z.string().optional(),\n /** Optional resource field name this step targets — resolved to [data-guidance-field=\"...\"] at render time */\n targetField: z.string().optional(),\n imageUrl: z.url().optional(),\n videoUrl: z.url().optional(),\n});\n\n/** Survey Question Schema */\nexport const OnboardingSurveyQuestionSchema = z.object({\n id: z.string(),\n ref: z.string().optional(),\n type: z.enum(OnboardingSurveyQuestionType),\n options: z.array(z.object({ ref: z.string() })).optional(),\n required: z.boolean().default(false),\n /**\n * The field of the survey's bound resource this answer is written to.\n *\n * Omitted, the answer is recorded on the subject's own guidance-state row and nothing else reads\n * it — which is right for a genuine survey.\n *\n * Declared, the answer becomes a value the application owns: it is written through the target\n * resource's ordinary default `API_CALL` UPDATE, under the ordinary authorization, alongside every\n * other bound answer in the same submission. It is NOT a second write path — a bound survey is a\n * form whose fields were asked one at a time.\n *\n * It is meaningless without `bindTo` on the survey itself, and the element schema REFUSES that\n * combination rather than ignoring it.\n */\n bindToField: z.string().min(1).optional(),\n});\n\n/**\n * The question types a field binding accepts, because their answer IS the value.\n *\n * The choice types are excluded ON PURPOSE rather than by oversight. An option carries only a\n * `ref`, which is an i18n key — so binding a RADIO, CHECKBOX or SINGLE_CHOICE question would write\n * that key into an application's resource field and store `favouriteColourBlue` where the\n * application expected a colour. Silently, and durably.\n *\n * Refused rather than documented, because a binding that stores the wrong thing is worse than one\n * that does not exist: nothing downstream can tell a key from a value. Admitting the choice types\n * means giving an option a VALUE alongside its ref, which is an additive change to this schema and\n * the natural next step if an application needs it.\n */\nexport const SURVEY_QUESTION_TYPES_WHOSE_ANSWER_IS_A_VALUE: readonly OnboardingSurveyQuestionType[] = [\n OnboardingSurveyQuestionType.TEXT,\n OnboardingSurveyQuestionType.TEXTAREA,\n OnboardingSurveyQuestionType.RATING,\n];\n\n/**\n * Where a survey's answers land, beyond the guidance-state row.\n *\n * ## Why the resource is named once, and the field per question\n *\n * A survey writes ONE row in ONE submission. Naming the resource per question would let a single\n * submit fan out across several resources, which buys nothing an application cannot express with two\n * surveys, and costs partial-failure semantics: three writes, the second refused, and an element\n * that is neither complete nor cleanly incomplete. One resource, one write, one outcome.\n *\n * ## What the target has to be\n *\n * A resource the current subject already has a row of, reachable without naming an id — the shape\n * `userProfiles` has, and the shape an application's own `USERS → <resource>` composition has. The\n * scope parameters are injected by `ScopedResourceRegistryProvider`, exactly as they are for the\n * guidance-state write itself, so the binding never addresses a row by id and cannot reach another\n * subject's data.\n *\n * v1 performs an UPDATE and does not create a missing row. That is a stated limitation rather than a\n * silent one: the write is refused, loudly, and the element does not complete. Create-if-absent is\n * additive and can be added against a real target that needs it.\n */\nexport const OnboardingSurveyBindingSchema = z.object({\n /** The resource type whose row receives the bound answers. */\n resourceType: z.string().min(1),\n});\n\n/** Checklist Config Schema - type-specific fields only */\nexport const OnboardingChecklistConfigSchema = z.object({\n showProgress: z.boolean().default(true),\n});\n\n/** Checklist Item Config Schema - type-specific fields only */\nexport const OnboardingChecklistItemConfigSchema = z.object({\n actionRef: z.string().optional(),\n});\n\n/** Tour Config Schema - type-specific fields only */\nexport const OnboardingTourConfigSchema = z.object({\n steps: z.array(OnboardingTourStepSchema).default([]),\n autoStart: z.boolean().default(false),\n allowSkip: z.boolean().default(true),\n});\n\n/** Tooltip Config Schema - type-specific fields only */\nexport const OnboardingTooltipConfigSchema = z.object({\n targetSelector: z.string(),\n placement: z.enum(TourStepPlacement).default(TourStepPlacement.BOTTOM),\n showOnce: z.boolean().default(true),\n});\n\n/** Modal Config Schema - type-specific fields only */\nexport const OnboardingModalConfigSchema = z.object({\n imageUrl: z.url().optional(),\n videoUrl: z.url().optional(),\n ctaAction: z.string().optional(),\n dismissible: z.boolean().default(true),\n});\n\n/** Banner Config Schema - type-specific fields only */\nexport const OnboardingBannerConfigSchema = z.object({\n variant: z.enum(OnboardingVariant).default(OnboardingVariant.INFO),\n dismissible: z.boolean().default(true),\n position: z.enum(OnboardingBannerPosition).default(OnboardingBannerPosition.TOP),\n actionRef: z.string().optional(),\n});\n\n/** Announcement Config Schema - type-specific fields only */\nexport const OnboardingAnnouncementConfigSchema = z.object({\n variant: z.enum(OnboardingVariant).default(OnboardingVariant.INFO),\n dismissible: z.boolean().default(true),\n icon: z.string().optional(),\n actionRef: z.string().optional(),\n});\n\n/** Badge Config Schema - type-specific fields only */\nexport const OnboardingBadgeConfigSchema = z.object({\n icon: z.string().optional(),\n variant: z.enum(OnboardingBadgeVariant).default(OnboardingBadgeVariant.DEFAULT),\n color: z.string().optional(),\n unlocked: z.boolean().default(false),\n actionRef: z.string().optional(),\n});\n\n/** Card Config Schema - type-specific fields only */\nexport const OnboardingCardConfigSchema = z.object({\n icon: z.string().optional(),\n imageUrl: z.url().optional(),\n variant: z.enum(OnboardingCardVariant).default(OnboardingCardVariant.DEFAULT),\n actionRef: z.string().optional(),\n});\n\n/** Survey Config Schema - type-specific fields only */\nexport const OnboardingSurveyConfigSchema = z.object({\n questions: z.array(OnboardingSurveyQuestionSchema).default([]),\n allowSkip: z.boolean().default(true),\n /** Where bound answers are written. See {@link OnboardingSurveyBindingSchema}. */\n bindTo: OnboardingSurveyBindingSchema.optional(),\n});\n\n/**\n * A question may only name a field when its survey names a resource.\n *\n * Refused rather than ignored, because an ignored `bindToField` is the exact defect this capability\n * was built alongside: an author declares where an answer should go, the runtime drops it on the\n * floor, and nothing says so until somebody reads the row and finds it empty.\n *\n * It lives as a standalone function rather than a `.superRefine` on the config schema because that\n * schema's `.shape` is SPREAD into a discriminated-union member, and a refinement wrapper has no\n * `.shape`; and it cannot sit on the union member either, since `z.discriminatedUnion` requires\n * plain object members. So the union applies it, once, for the SURVEY case.\n */\nexport function assertSurveyFieldBindingsHaveATarget(\n survey: {\n bindTo?: { resourceType: string };\n questions: { id: string; type: OnboardingSurveyQuestionType; bindToField?: string }[];\n },\n ctx: z.RefinementCtx,\n pathPrefix: (string | number)[] = [],\n): void {\n survey.questions.forEach((question, index) => {\n if (question.bindToField === undefined) return;\n if (!survey.bindTo) {\n ctx.addIssue({\n code: 'custom',\n path: [...pathPrefix, 'questions', index, 'bindToField'],\n message:\n `question \"${question.id}\" declares bindToField \"${question.bindToField}\" but the survey declares no `\n + 'bindTo.resourceType, so the answer has nowhere to be written. Declare the survey\\'s target resource, '\n + 'or remove the field binding.',\n });\n return;\n }\n if (!SURVEY_QUESTION_TYPES_WHOSE_ANSWER_IS_A_VALUE.includes(question.type)) {\n ctx.addIssue({\n code: 'custom',\n path: [...pathPrefix, 'questions', index, 'bindToField'],\n message:\n `question \"${question.id}\" is a ${question.type} question and cannot be bound to a field. Its answer is an `\n + 'option REF, which is an i18n key rather than a value, so writing it to a resource would store the key. '\n + `Bind a ${SURVEY_QUESTION_TYPES_WHOSE_ANSWER_IS_A_VALUE.join(' / ')} question instead.`,\n });\n }\n });\n}\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Element Base Schema (for reuse)\n *\n * Contains common fields shared by all onboarding element types.\n * Extracted for reuse across packages.\n * ────────────────────────────────────────────────────────────── */\n\nexport const OnboardingElementBaseSchema = z.object({\n /** Unique reference for this element */\n ref: z.string(),\n /** Element type discriminator */\n type: z.enum(OnboardingElementType),\n /** Current status */\n status: z.enum(OnboardingStatus).default(OnboardingStatus.NOT_STARTED),\n /** Display order */\n order: z.number().int().nonnegative(),\n /** Optional resource field name this element targets — resolved to a CSS selector [data-guidance-field=\"...\"] at render time */\n targetField: z.string().optional(),\n});\n\nexport type OnboardingElementBase = z.infer<typeof OnboardingElementBaseSchema>;\n\n/** ──────────────────────────────────────────────────────────────\n * OnboardingView – Element Union\n * ────────────────────────────────────────────────────────────── */\n\n/**\n * Typed discriminated union of all onboarding element types.\n * Use this for runtime validation and type inference.\n * Note: Created separately from SchemaFamily to preserve full TypeScript type inference.\n */\nexport const OnboardingElementSchema = z.discriminatedUnion('type', [\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.CHECKLIST),\n items: z.array(z.string()),\n ...OnboardingChecklistConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.CHECKLIST_ITEM),\n completed: z.boolean().default(false),\n ...OnboardingChecklistItemConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.TOUR),\n currentStepIndex: z.number().int().nonnegative().default(0),\n ...OnboardingTourConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.TOOLTIP),\n ...OnboardingTooltipConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.MODAL),\n ...OnboardingModalConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.BANNER),\n ...OnboardingBannerConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.ANNOUNCEMENT),\n ...OnboardingAnnouncementConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.BADGE),\n ...OnboardingBadgeConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.CARD),\n ...OnboardingCardConfigSchema.shape,\n }),\n OnboardingElementBaseSchema.extend({\n type: z.literal(OnboardingElementType.SURVEY),\n ...OnboardingSurveyConfigSchema.shape,\n }),\n]).superRefine((element, ctx) => {\n // The one cross-field rule in this vocabulary, applied where a discriminated union allows it.\n if (element.type !== OnboardingElementType.SURVEY) return;\n assertSurveyFieldBindingsHaveATarget(element, ctx);\n});\n/** @wildo_source:part:end saas.models.onboarding-elements */\n\n/*\n * Maintainer note — outside the anchor because it is history. An `OnboardingElementSchemaFamily`\n * (a `createSchemaFamily` re-declaration of the same ten variants) once sat beside the union above\n * and was removed: nothing consumed it, and its own comment admitted the union was the copy that was\n * read. Two hand-maintained declarations of one vocabulary drift on the eleventh element type — keep\n * the union as the only one.\n */\n\n/** ──────────────────────────────────────────────────────────────\n * Onboarding – Type Definitions\n * ────────────────────────────────────────────────────────────── */\n\nexport type OnboardingTrigger = z.infer<typeof OnboardingTriggerSchema>;\nexport type OnboardingViewOptions = z.infer<typeof OnboardingViewOptionsSchema>;\nexport type OnboardingTourStep = z.infer<typeof OnboardingTourStepSchema>;\nexport type OnboardingSurveyQuestion = z.infer<typeof OnboardingSurveyQuestionSchema>;\nexport type OnboardingElement = z.infer<typeof OnboardingElementSchema>;\n\n/** Config schema types */\nexport type OnboardingChecklistConfig = z.infer<typeof OnboardingChecklistConfigSchema>;\nexport type OnboardingChecklistItemConfig = z.infer<typeof OnboardingChecklistItemConfigSchema>;\nexport type OnboardingTourConfig = z.infer<typeof OnboardingTourConfigSchema>;\nexport type OnboardingTooltipConfig = z.infer<typeof OnboardingTooltipConfigSchema>;\nexport type OnboardingModalConfig = z.infer<typeof OnboardingModalConfigSchema>;\nexport type OnboardingBannerConfig = z.infer<typeof OnboardingBannerConfigSchema>;\nexport type OnboardingAnnouncementConfig = z.infer<typeof OnboardingAnnouncementConfigSchema>;\nexport type OnboardingBadgeConfig = z.infer<typeof OnboardingBadgeConfigSchema>;\nexport type OnboardingCardConfig = z.infer<typeof OnboardingCardConfigSchema>;\nexport type OnboardingSurveyConfig = z.infer<typeof OnboardingSurveyConfigSchema>;\n\n/**\n * Individual element variant types - extracted from OnboardingElement discriminated union.\n */\nexport type OnboardingChecklistElement = Extract<OnboardingElement, { type: OnboardingElementType.CHECKLIST }>;\nexport type OnboardingChecklistItemElement = Extract<OnboardingElement, { type: OnboardingElementType.CHECKLIST_ITEM }>;\nexport type OnboardingTourElement = Extract<OnboardingElement, { type: OnboardingElementType.TOUR }>;\nexport type OnboardingTooltipElement = Extract<OnboardingElement, { type: OnboardingElementType.TOOLTIP }>;\nexport type OnboardingModalElement = Extract<OnboardingElement, { type: OnboardingElementType.MODAL }>;\nexport type OnboardingBannerElement = Extract<OnboardingElement, { type: OnboardingElementType.BANNER }>;\nexport type OnboardingAnnouncementElement = Extract<OnboardingElement, { type: OnboardingElementType.ANNOUNCEMENT }>;\nexport type OnboardingBadgeElement = Extract<OnboardingElement, { type: OnboardingElementType.BADGE }>;\nexport type OnboardingCardElement = Extract<OnboardingElement, { type: OnboardingElementType.CARD }>;\nexport type OnboardingSurveyElement = Extract<OnboardingElement, { type: OnboardingElementType.SURVEY }>;\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresql.shared.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"postgresql.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/config/postgresql.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAoBT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresql.shared.schemas.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"postgresql.shared.schemas.js","sourceRoot":"","sources":["../../../src/config/postgresql.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,wCAAmB,CAAA;IACnB,4CAAuB,CAAA;IACvB,gDAA2B,CAAA;AAC7B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAQ5C;IACC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEpF,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,GAAG,GAAG,gBAAgB,QAAQ,IAAI,eAAe,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;IAEpF,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,OAAO,EAAE,CAAC;QACZ,WAAW,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["/**\n * Shared PostgreSQL connection semantics.\n *\n * These values are used across backend runtime code and platform/bootstrap\n * tooling, so they must live in a neutral shared package instead of either\n * side depending on the other for pure database connection meaning.\n */\n\n/**\n * PostgreSQL SSL modes for connection security.\n */\nexport enum PostgreSQLSSLMode {\n DISABLE = 'disable',\n REQUIRE = 'require',\n VERIFY_CA = 'verify-ca',\n VERIFY_FULL = 'verify-full',\n}\n\n/**\n * Build a PostgreSQL connection URL from individual connection components.\n */\nexport function buildPostgreSQLConnectionUrl(params: {\n host: string;\n port?: number;\n database: string;\n username: string;\n password: string;\n sslMode?: PostgreSQLSSLMode;\n schema?: string;\n}): string {\n const { host, port = 5432, database, username, password, sslMode, schema } = params;\n\n const encodedPassword = encodeURIComponent(password);\n\n let url = `postgresql://${username}:${encodedPassword}@${host}:${port}/${database}`;\n\n const queryParams: string[] = [];\n if (sslMode) {\n queryParams.push(`sslmode=${sslMode}`);\n }\n if (schema) {\n queryParams.push(`schema=${schema}`);\n }\n\n if (queryParams.length > 0) {\n url += `?${queryParams.join('&')}`;\n }\n\n return url;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registration-acquisition-policy.shared.utils.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"registration-acquisition-policy.shared.utils.d.ts","sourceRoot":"","sources":["../../../src/config/registration-acquisition-policy.shared.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,gBAAgB,EACjB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAElF;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAwCT;AAED,MAAM,WAAW,6BAA6B;IAC5C,wEAAwE;IACxE,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,gFAAgF;IAChF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,GAAG,SAAS,EAC7E,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,gBAAgB,EAAE,SAAS,MAAM,EAAE,EACnC,OAAO,EAAE,8BAA8B,GACtC,6BAA6B,CAe/B"}
|