sovrium 0.0.2
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/CHANGELOG.md +3497 -0
- package/LICENSE.md +147 -0
- package/LICENSE_EE.md +297 -0
- package/README.md +321 -0
- package/drizzle/0000_melted_kabuki.sql +163 -0
- package/drizzle/meta/0000_snapshot.json +1216 -0
- package/drizzle/meta/_journal.json +13 -0
- package/package.json +167 -0
- package/schemas/0.0.1/app.openapi.json +70 -0
- package/schemas/0.0.1/app.schema.json +7961 -0
- package/schemas/0.0.2/app.openapi.json +80 -0
- package/schemas/0.0.2/app.schema.json +8829 -0
- package/schemas/development/app.openapi.json +70 -0
- package/schemas/development/app.schema.json +7456 -0
- package/src/application/errors/app-validation-error.ts +14 -0
- package/src/application/errors/static-generation-error.ts +16 -0
- package/src/application/metadata/favicon-transformer.ts +127 -0
- package/src/application/models/server.ts +27 -0
- package/src/application/ports/models/user-metadata.ts +36 -0
- package/src/application/ports/models/user-session.ts +34 -0
- package/src/application/ports/repositories/activity-log-repository.ts +68 -0
- package/src/application/ports/repositories/activity-repository.ts +49 -0
- package/src/application/ports/repositories/analytics-repository.ts +164 -0
- package/src/application/ports/repositories/auth-repository.ts +33 -0
- package/src/application/ports/repositories/batch-repository.ts +86 -0
- package/src/application/ports/repositories/comment-repository.ts +150 -0
- package/src/application/ports/repositories/index.ts +41 -0
- package/src/application/ports/repositories/table-repository.ts +139 -0
- package/src/application/ports/services/css-compiler.ts +55 -0
- package/src/application/ports/services/index.ts +16 -0
- package/src/application/ports/services/page-renderer.ts +79 -0
- package/src/application/ports/services/server-factory.ts +80 -0
- package/src/application/ports/services/static-site-generator.ts +82 -0
- package/src/application/use-cases/activity/programs.ts +66 -0
- package/src/application/use-cases/analytics/collect-page-view.ts +114 -0
- package/src/application/use-cases/analytics/purge-old-data.ts +40 -0
- package/src/application/use-cases/analytics/query-campaigns.ts +43 -0
- package/src/application/use-cases/analytics/query-devices.ts +36 -0
- package/src/application/use-cases/analytics/query-overview.ts +50 -0
- package/src/application/use-cases/analytics/query-pages.ts +40 -0
- package/src/application/use-cases/analytics/query-referrers.ts +43 -0
- package/src/application/use-cases/analytics/ua-parser.ts +89 -0
- package/src/application/use-cases/analytics/visitor-hash.ts +77 -0
- package/src/application/use-cases/auth/bootstrap-admin.ts +270 -0
- package/src/application/use-cases/list-activity-logs.ts +123 -0
- package/src/application/use-cases/server/generate-static-helpers.ts +374 -0
- package/src/application/use-cases/server/generate-static.ts +287 -0
- package/src/application/use-cases/server/start-server.ts +118 -0
- package/src/application/use-cases/server/startup-error-handler.ts +69 -0
- package/src/application/use-cases/server/static-content-generators.ts +182 -0
- package/src/application/use-cases/server/static-language-generators.ts +181 -0
- package/src/application/use-cases/server/static-url-rewriter.ts +237 -0
- package/src/application/use-cases/server/translation-replacer.ts +164 -0
- package/src/application/use-cases/tables/activity-programs.ts +93 -0
- package/src/application/use-cases/tables/batch-operations.ts +156 -0
- package/src/application/use-cases/tables/comment-programs.ts +436 -0
- package/src/application/use-cases/tables/permissions/permissions.ts +25 -0
- package/src/application/use-cases/tables/programs.ts +435 -0
- package/src/application/use-cases/tables/table-operations.ts +412 -0
- package/src/application/use-cases/tables/user-role.ts +52 -0
- package/src/application/use-cases/tables/utils/display-formatter.ts +471 -0
- package/src/application/use-cases/tables/utils/field-read-filter.ts +189 -0
- package/src/application/use-cases/tables/utils/list-helpers.ts +122 -0
- package/src/application/use-cases/tables/utils/record-transformer.ts +319 -0
- package/src/cli.ts +370 -0
- package/src/domain/errors/create-tagged-error.ts +36 -0
- package/src/domain/errors/index.ts +78 -0
- package/src/domain/models/api/analytics.ts +179 -0
- package/src/domain/models/api/auth.ts +231 -0
- package/src/domain/models/api/common.ts +60 -0
- package/src/domain/models/api/error.ts +89 -0
- package/src/domain/models/api/health.ts +38 -0
- package/src/domain/models/api/index.ts +42 -0
- package/src/domain/models/api/request.ts +132 -0
- package/src/domain/models/api/tables.ts +444 -0
- package/src/domain/models/app/analytics/index.ts +129 -0
- package/src/domain/models/app/auth/config.ts +116 -0
- package/src/domain/models/app/auth/index.ts +230 -0
- package/src/domain/models/app/auth/methods/email-and-password.ts +67 -0
- package/src/domain/models/app/auth/methods/index.ts +11 -0
- package/src/domain/models/app/auth/methods/magic-link.ts +54 -0
- package/src/domain/models/app/auth/oauth/index.ts +8 -0
- package/src/domain/models/app/auth/oauth/providers.ts +105 -0
- package/src/domain/models/app/auth/plugins/admin.ts +130 -0
- package/src/domain/models/app/auth/plugins/index.ts +74 -0
- package/src/domain/models/app/auth/plugins/two-factor.ts +63 -0
- package/src/domain/models/app/auth/roles.ts +179 -0
- package/src/domain/models/app/auth/strategies.ts +191 -0
- package/src/domain/models/app/auth/validation.ts +127 -0
- package/src/domain/models/app/common/branded-ids.ts +200 -0
- package/src/domain/models/app/common/definitions.ts +187 -0
- package/src/domain/models/app/component/common/component-children.ts +119 -0
- package/src/domain/models/app/component/common/component-props.ts +89 -0
- package/src/domain/models/app/component/common/component-reference.ts +170 -0
- package/src/domain/models/app/component/component.ts +81 -0
- package/src/domain/models/app/components.ts +65 -0
- package/src/domain/models/app/description.ts +83 -0
- package/src/domain/models/app/index.ts +258 -0
- package/src/domain/models/app/language/language-config.ts +200 -0
- package/src/domain/models/app/languages.ts +205 -0
- package/src/domain/models/app/name.ts +66 -0
- package/src/domain/models/app/page/common/interactions/click-interaction.ts +116 -0
- package/src/domain/models/app/page/common/interactions/entrance-animation.ts +84 -0
- package/src/domain/models/app/page/common/interactions/hover-interaction.ts +144 -0
- package/src/domain/models/app/page/common/interactions/interactions.ts +64 -0
- package/src/domain/models/app/page/common/interactions/scroll-interaction.ts +93 -0
- package/src/domain/models/app/page/common/responsive.ts +114 -0
- package/src/domain/models/app/page/common/url.ts +35 -0
- package/src/domain/models/app/page/common/variable-reference.ts +53 -0
- package/src/domain/models/app/page/id.ts +44 -0
- package/src/domain/models/app/page/index.ts +270 -0
- package/src/domain/models/app/page/meta/analytics.ts +248 -0
- package/src/domain/models/app/page/meta/custom-elements.ts +180 -0
- package/src/domain/models/app/page/meta/dns-prefetch.ts +77 -0
- package/src/domain/models/app/page/meta/favicon-set.ts +203 -0
- package/src/domain/models/app/page/meta/favicon.ts +50 -0
- package/src/domain/models/app/page/meta/favicons-config.ts +73 -0
- package/src/domain/models/app/page/meta/index.ts +278 -0
- package/src/domain/models/app/page/meta/open-graph.ts +166 -0
- package/src/domain/models/app/page/meta/preload.ts +190 -0
- package/src/domain/models/app/page/meta/structured-data/article.ts +211 -0
- package/src/domain/models/app/page/meta/structured-data/breadcrumb.ts +115 -0
- package/src/domain/models/app/page/meta/structured-data/common-fields.ts +201 -0
- package/src/domain/models/app/page/meta/structured-data/education-event.ts +256 -0
- package/src/domain/models/app/page/meta/structured-data/faq-page.ts +127 -0
- package/src/domain/models/app/page/meta/structured-data/index.ts +95 -0
- package/src/domain/models/app/page/meta/structured-data/local-business.ts +247 -0
- package/src/domain/models/app/page/meta/structured-data/organization.ts +171 -0
- package/src/domain/models/app/page/meta/structured-data/person.ts +138 -0
- package/src/domain/models/app/page/meta/structured-data/postal-address.ts +106 -0
- package/src/domain/models/app/page/meta/structured-data/product.ts +214 -0
- package/src/domain/models/app/page/meta/twitter-card.ts +217 -0
- package/src/domain/models/app/page/name.ts +38 -0
- package/src/domain/models/app/page/path.ts +21 -0
- package/src/domain/models/app/page/scripts/external-scripts.ts +163 -0
- package/src/domain/models/app/page/scripts/features.ts +135 -0
- package/src/domain/models/app/page/scripts/inline-scripts.ts +114 -0
- package/src/domain/models/app/page/scripts/scripts.ts +102 -0
- package/src/domain/models/app/page/sections.ts +298 -0
- package/src/domain/models/app/pages.ts +61 -0
- package/src/domain/models/app/permissions/index.ts +61 -0
- package/src/domain/models/app/permissions/resource-action.ts +114 -0
- package/src/domain/models/app/permissions/roles.ts +120 -0
- package/src/domain/models/app/table/check-constraints.ts +105 -0
- package/src/domain/models/app/table/cycle-detection.ts +124 -0
- package/src/domain/models/app/table/database-identifier.ts +153 -0
- package/src/domain/models/app/table/field-name.ts +36 -0
- package/src/domain/models/app/table/field-types/advanced/array-field.ts +33 -0
- package/src/domain/models/app/table/field-types/advanced/autonumber-field.ts +54 -0
- package/src/domain/models/app/table/field-types/advanced/button-field.ts +56 -0
- package/src/domain/models/app/table/field-types/advanced/color-field.ts +57 -0
- package/src/domain/models/app/table/field-types/advanced/count-field.ts +54 -0
- package/src/domain/models/app/table/field-types/advanced/formula-field.ts +58 -0
- package/src/domain/models/app/table/field-types/advanced/geolocation-field.ts +49 -0
- package/src/domain/models/app/table/field-types/advanced/index.ts +16 -0
- package/src/domain/models/app/table/field-types/advanced/json-field.ts +25 -0
- package/src/domain/models/app/table/field-types/advanced/unknown-field.ts +85 -0
- package/src/domain/models/app/table/field-types/base-field.ts +42 -0
- package/src/domain/models/app/table/field-types/date-time/created-at-field.ts +49 -0
- package/src/domain/models/app/table/field-types/date-time/date-field.ts +95 -0
- package/src/domain/models/app/table/field-types/date-time/deleted-at-field.ts +56 -0
- package/src/domain/models/app/table/field-types/date-time/duration-field.ts +73 -0
- package/src/domain/models/app/table/field-types/date-time/index.ts +12 -0
- package/src/domain/models/app/table/field-types/date-time/updated-at-field.ts +50 -0
- package/src/domain/models/app/table/field-types/index.ts +19 -0
- package/src/domain/models/app/table/field-types/media/barcode-field.ts +58 -0
- package/src/domain/models/app/table/field-types/media/index.ts +10 -0
- package/src/domain/models/app/table/field-types/media/multiple-attachments-field.ts +80 -0
- package/src/domain/models/app/table/field-types/media/single-attachment-field.ts +81 -0
- package/src/domain/models/app/table/field-types/numeric/currency-field.ts +144 -0
- package/src/domain/models/app/table/field-types/numeric/decimal-field.ts +113 -0
- package/src/domain/models/app/table/field-types/numeric/index.ts +13 -0
- package/src/domain/models/app/table/field-types/numeric/integer-field.ts +98 -0
- package/src/domain/models/app/table/field-types/numeric/percentage-field.ts +115 -0
- package/src/domain/models/app/table/field-types/numeric/progress-field.ts +71 -0
- package/src/domain/models/app/table/field-types/numeric/rating-field.ts +74 -0
- package/src/domain/models/app/table/field-types/relational/index.ts +10 -0
- package/src/domain/models/app/table/field-types/relational/lookup-field.ts +46 -0
- package/src/domain/models/app/table/field-types/relational/relationship-field.ts +112 -0
- package/src/domain/models/app/table/field-types/relational/rollup-field.ts +58 -0
- package/src/domain/models/app/table/field-types/selection/checkbox-field.ts +51 -0
- package/src/domain/models/app/table/field-types/selection/index.ts +11 -0
- package/src/domain/models/app/table/field-types/selection/multi-select-field.ts +68 -0
- package/src/domain/models/app/table/field-types/selection/single-select-field.ts +54 -0
- package/src/domain/models/app/table/field-types/selection/status-field.ts +37 -0
- package/src/domain/models/app/table/field-types/text/email-field.ts +80 -0
- package/src/domain/models/app/table/field-types/text/index.ts +13 -0
- package/src/domain/models/app/table/field-types/text/long-text-field.ts +77 -0
- package/src/domain/models/app/table/field-types/text/phone-number-field.ts +82 -0
- package/src/domain/models/app/table/field-types/text/rich-text-field.ts +66 -0
- package/src/domain/models/app/table/field-types/text/single-line-text-field.ts +79 -0
- package/src/domain/models/app/table/field-types/text/url-field.ts +81 -0
- package/src/domain/models/app/table/field-types/user/created-by-field.ts +50 -0
- package/src/domain/models/app/table/field-types/user/deleted-by-field.ts +57 -0
- package/src/domain/models/app/table/field-types/user/index.ts +11 -0
- package/src/domain/models/app/table/field-types/user/updated-by-field.ts +51 -0
- package/src/domain/models/app/table/field-types/user/user-field.ts +52 -0
- package/src/domain/models/app/table/field-types/validation-utils.ts +166 -0
- package/src/domain/models/app/table/fields.ts +216 -0
- package/src/domain/models/app/table/foreign-keys.ts +111 -0
- package/src/domain/models/app/table/formula-keywords.ts +326 -0
- package/src/domain/models/app/table/id.ts +31 -0
- package/src/domain/models/app/table/index.ts +290 -0
- package/src/domain/models/app/table/indexes.ts +80 -0
- package/src/domain/models/app/table/name.ts +37 -0
- package/src/domain/models/app/table/permissions/field-permission.ts +83 -0
- package/src/domain/models/app/table/permissions/index.ts +167 -0
- package/src/domain/models/app/table/permissions/permission-evaluator.ts +372 -0
- package/src/domain/models/app/table/permissions/permission.ts +49 -0
- package/src/domain/models/app/table/primary-key.ts +62 -0
- package/src/domain/models/app/table/table-formula-validation.ts +168 -0
- package/src/domain/models/app/table/table-indexes-validation.ts +38 -0
- package/src/domain/models/app/table/table-permissions-validation.ts +77 -0
- package/src/domain/models/app/table/table-primary-key-validation.ts +49 -0
- package/src/domain/models/app/table/table-views-validation.ts +408 -0
- package/src/domain/models/app/table/unique-constraints.ts +79 -0
- package/src/domain/models/app/table/views/fields.ts +28 -0
- package/src/domain/models/app/table/views/filters.ts +162 -0
- package/src/domain/models/app/table/views/group-by.ts +32 -0
- package/src/domain/models/app/table/views/id.ts +50 -0
- package/src/domain/models/app/table/views/index.ts +177 -0
- package/src/domain/models/app/table/views/name.ts +32 -0
- package/src/domain/models/app/table/views/permissions.ts +98 -0
- package/src/domain/models/app/table/views/sorts.ts +31 -0
- package/src/domain/models/app/tables.ts +695 -0
- package/src/domain/models/app/theme/animations.ts +208 -0
- package/src/domain/models/app/theme/border-radius.ts +58 -0
- package/src/domain/models/app/theme/breakpoints.ts +62 -0
- package/src/domain/models/app/theme/colors.ts +110 -0
- package/src/domain/models/app/theme/fonts.ts +164 -0
- package/src/domain/models/app/theme/shadows.ts +61 -0
- package/src/domain/models/app/theme/spacing.ts +115 -0
- package/src/domain/models/app/theme.ts +66 -0
- package/src/domain/models/app/version.ts +87 -0
- package/src/domain/models/record-comment.ts +91 -0
- package/src/domain/utils/content-parsing.ts +49 -0
- package/src/domain/utils/format-detection.ts +69 -0
- package/src/domain/utils/index.ts +9 -0
- package/src/domain/utils/route-matcher.ts +184 -0
- package/src/domain/utils/translation-resolver.ts +170 -0
- package/src/index.ts +208 -0
- package/src/infrastructure/analytics/tracking-script.ts +48 -0
- package/src/infrastructure/auth/better-auth/auth.ts +216 -0
- package/src/infrastructure/auth/better-auth/email-handlers.ts +162 -0
- package/src/infrastructure/auth/better-auth/index.ts +16 -0
- package/src/infrastructure/auth/better-auth/layer.ts +97 -0
- package/src/infrastructure/auth/better-auth/plugins/admin.ts +56 -0
- package/src/infrastructure/auth/better-auth/plugins/magic-link.ts +31 -0
- package/src/infrastructure/auth/better-auth/plugins/two-factor.ts +19 -0
- package/src/infrastructure/auth/better-auth/schema.ts +152 -0
- package/src/infrastructure/auth/index.ts +27 -0
- package/src/infrastructure/css/cache/css-cache-service.ts +130 -0
- package/src/infrastructure/css/compiler.ts +210 -0
- package/src/infrastructure/css/css-compiler-live.ts +20 -0
- package/src/infrastructure/css/index.ts +25 -0
- package/src/infrastructure/css/styles/animation-styles-generator.ts +177 -0
- package/src/infrastructure/css/styles/click-animations.ts +147 -0
- package/src/infrastructure/css/styles/component-layer-generators.ts +147 -0
- package/src/infrastructure/css/theme/theme-generators.ts +130 -0
- package/src/infrastructure/css/theme/theme-layer-generators.ts +219 -0
- package/src/infrastructure/css/theme/theme-token-resolver.ts +76 -0
- package/src/infrastructure/database/activity-queries.ts +111 -0
- package/src/infrastructure/database/auth/auth-validation.ts +101 -0
- package/src/infrastructure/database/drizzle/db-bun.ts +17 -0
- package/src/infrastructure/database/drizzle/db.ts +17 -0
- package/src/infrastructure/database/drizzle/index.ts +16 -0
- package/src/infrastructure/database/drizzle/layer.ts +34 -0
- package/src/infrastructure/database/drizzle/migrate.ts +77 -0
- package/src/infrastructure/database/drizzle/schema/activity-log.ts +111 -0
- package/src/infrastructure/database/drizzle/schema/analytics-page-views.ts +116 -0
- package/src/infrastructure/database/drizzle/schema/migration-audit.ts +68 -0
- package/src/infrastructure/database/drizzle/schema/record-comments.ts +79 -0
- package/src/infrastructure/database/drizzle/schema.ts +12 -0
- package/src/infrastructure/database/field-utils.ts +87 -0
- package/src/infrastructure/database/filter-operators.ts +136 -0
- package/src/infrastructure/database/formula/formula-trigger-generators.ts +114 -0
- package/src/infrastructure/database/formula/formula-utils.ts +440 -0
- package/src/infrastructure/database/generators/index-generators.ts +152 -0
- package/src/infrastructure/database/generators/trigger-generators.ts +154 -0
- package/src/infrastructure/database/index.ts +35 -0
- package/src/infrastructure/database/lookup/lookup-expression-generators.ts +356 -0
- package/src/infrastructure/database/lookup/lookup-expressions.ts +116 -0
- package/src/infrastructure/database/lookup/lookup-view-generators.ts +403 -0
- package/src/infrastructure/database/lookup/lookup-view-helpers.ts +65 -0
- package/src/infrastructure/database/lookup/lookup-view-triggers.ts +121 -0
- package/src/infrastructure/database/migration-audit-trail.ts +375 -0
- package/src/infrastructure/database/repositories/activity-log-repository-live.ts +99 -0
- package/src/infrastructure/database/repositories/activity-repository-live.ts +21 -0
- package/src/infrastructure/database/repositories/analytics-repository-live.ts +316 -0
- package/src/infrastructure/database/repositories/auth-repository-live.ts +42 -0
- package/src/infrastructure/database/repositories/batch-repository-live.ts +29 -0
- package/src/infrastructure/database/repositories/comment-repository-live.ts +39 -0
- package/src/infrastructure/database/repositories/table-repository-live.ts +38 -0
- package/src/infrastructure/database/schema/schema-dependency-sorting.ts +142 -0
- package/src/infrastructure/database/schema/schema-initializer.ts +598 -0
- package/src/infrastructure/database/schema-migration/column-detection.ts +286 -0
- package/src/infrastructure/database/schema-migration/constants.ts +31 -0
- package/src/infrastructure/database/schema-migration/constraint-sync.ts +288 -0
- package/src/infrastructure/database/schema-migration/index-sync.ts +108 -0
- package/src/infrastructure/database/schema-migration/index.ts +66 -0
- package/src/infrastructure/database/schema-migration/migration-statements.ts +106 -0
- package/src/infrastructure/database/schema-migration/rename-detection.ts +87 -0
- package/src/infrastructure/database/schema-migration/table-operations.ts +65 -0
- package/src/infrastructure/database/schema-migration/type-utils.ts +98 -0
- package/src/infrastructure/database/schema-migration/types.ts +14 -0
- package/src/infrastructure/database/schema-migration-helpers.ts +53 -0
- package/src/infrastructure/database/session-context.ts +20 -0
- package/src/infrastructure/database/sql/sql-check-constraints.ts +252 -0
- package/src/infrastructure/database/sql/sql-column-generators.ts +174 -0
- package/src/infrastructure/database/sql/sql-execution.ts +245 -0
- package/src/infrastructure/database/sql/sql-field-predicates.ts +81 -0
- package/src/infrastructure/database/sql/sql-generators.ts +91 -0
- package/src/infrastructure/database/sql/sql-junction-tables.ts +79 -0
- package/src/infrastructure/database/sql/sql-key-constraints.ts +210 -0
- package/src/infrastructure/database/sql/sql-type-mappings.ts +106 -0
- package/src/infrastructure/database/sql/sql-utils.ts +53 -0
- package/src/infrastructure/database/table-live-layers.ts +30 -0
- package/src/infrastructure/database/table-operations/column-generators.ts +82 -0
- package/src/infrastructure/database/table-operations/create-table-sql.ts +81 -0
- package/src/infrastructure/database/table-operations/index.ts +55 -0
- package/src/infrastructure/database/table-operations/migration-utils.ts +157 -0
- package/src/infrastructure/database/table-operations/table-effects.ts +234 -0
- package/src/infrastructure/database/table-operations/table-features.ts +96 -0
- package/src/infrastructure/database/table-operations/type-compatibility.ts +58 -0
- package/src/infrastructure/database/table-operations.ts +47 -0
- package/src/infrastructure/database/table-queries/batch/batch-create.ts +80 -0
- package/src/infrastructure/database/table-queries/batch/batch-delete.ts +212 -0
- package/src/infrastructure/database/table-queries/batch/batch-helpers.ts +124 -0
- package/src/infrastructure/database/table-queries/batch/batch-restore.ts +161 -0
- package/src/infrastructure/database/table-queries/batch/batch-update.ts +146 -0
- package/src/infrastructure/database/table-queries/batch/batch-upsert.ts +357 -0
- package/src/infrastructure/database/table-queries/batch/batch.ts +14 -0
- package/src/infrastructure/database/table-queries/crud/crud-read.ts +351 -0
- package/src/infrastructure/database/table-queries/crud/crud-write.ts +399 -0
- package/src/infrastructure/database/table-queries/crud/crud.ts +16 -0
- package/src/infrastructure/database/table-queries/index.ts +11 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/authorship-helpers.ts +152 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/create-record-helpers.ts +90 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/delete-helpers.ts +163 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/record-fetch-helpers.ts +79 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/update-helpers.ts +74 -0
- package/src/infrastructure/database/table-queries/query-helpers/activity-log-helpers.ts +53 -0
- package/src/infrastructure/database/table-queries/query-helpers/activity-queries.ts +106 -0
- package/src/infrastructure/database/table-queries/query-helpers/aggregation-helpers.ts +314 -0
- package/src/infrastructure/database/table-queries/query-helpers/comment-queries.ts +414 -0
- package/src/infrastructure/database/table-queries/query-helpers/record-validation-queries.ts +126 -0
- package/src/infrastructure/database/table-queries/query-helpers/trash-helpers.ts +58 -0
- package/src/infrastructure/database/table-queries/shared/error-handling.ts +47 -0
- package/src/infrastructure/database/table-queries/shared/typed-execute.ts +27 -0
- package/src/infrastructure/database/table-queries/shared/user-join-helpers.ts +38 -0
- package/src/infrastructure/database/table-queries/shared/validation.ts +39 -0
- package/src/infrastructure/database/views/view-generators.ts +258 -0
- package/src/infrastructure/devtools/devtools-layer.ts +43 -0
- package/src/infrastructure/devtools/index.ts +8 -0
- package/src/infrastructure/email/email-config.ts +103 -0
- package/src/infrastructure/email/email-service.ts +152 -0
- package/src/infrastructure/email/index.ts +107 -0
- package/src/infrastructure/email/nodemailer.ts +125 -0
- package/src/infrastructure/email/templates.ts +244 -0
- package/src/infrastructure/errors/auth-config-required-error.ts +21 -0
- package/src/infrastructure/errors/auth-error.ts +16 -0
- package/src/infrastructure/errors/css-compilation-error.ts +14 -0
- package/src/infrastructure/errors/index.ts +26 -0
- package/src/infrastructure/errors/schema-initialization-error.ts +19 -0
- package/src/infrastructure/errors/server-creation-error.ts +14 -0
- package/src/infrastructure/filesystem/copy-directory.ts +136 -0
- package/src/infrastructure/layers/app-layer.ts +61 -0
- package/src/infrastructure/layers/page-renderer-layer.ts +41 -0
- package/src/infrastructure/logging/index.ts +8 -0
- package/src/infrastructure/logging/logger.ts +204 -0
- package/src/infrastructure/schema/file-loader.ts +53 -0
- package/src/infrastructure/schema/index.ts +15 -0
- package/src/infrastructure/schema/remote-loader.ts +48 -0
- package/src/infrastructure/server/index.ts +26 -0
- package/src/infrastructure/server/language-detection.ts +87 -0
- package/src/infrastructure/server/lifecycle.ts +67 -0
- package/src/infrastructure/server/route-setup/api-routes.ts +310 -0
- package/src/infrastructure/server/route-setup/auth-route-utils.ts +399 -0
- package/src/infrastructure/server/route-setup/auth-routes.ts +245 -0
- package/src/infrastructure/server/route-setup/openapi-routes.ts +45 -0
- package/src/infrastructure/server/route-setup/openapi-schema.ts +120 -0
- package/src/infrastructure/server/route-setup/page-routes.ts +219 -0
- package/src/infrastructure/server/route-setup/static-assets.ts +191 -0
- package/src/infrastructure/server/server-factory-live.ts +45 -0
- package/src/infrastructure/server/server.ts +275 -0
- package/src/infrastructure/server/ssg-adapter.ts +196 -0
- package/src/infrastructure/server/static-site-generator-live.ts +20 -0
- package/src/infrastructure/utils/accept-language-parser.ts +106 -0
- package/src/infrastructure/utils/glob-matcher.ts +50 -0
- package/src/presentation/api/client.ts +114 -0
- package/src/presentation/api/middleware/auth.ts +233 -0
- package/src/presentation/api/middleware/table.ts +155 -0
- package/src/presentation/api/middleware/validation.ts +88 -0
- package/src/presentation/api/routes/activity/get-activity-by-id-handler.ts +77 -0
- package/src/presentation/api/routes/activity/index.ts +28 -0
- package/src/presentation/api/routes/activity.ts +339 -0
- package/src/presentation/api/routes/analytics.ts +328 -0
- package/src/presentation/api/routes/auth.ts +169 -0
- package/src/presentation/api/routes/index.ts +11 -0
- package/src/presentation/api/routes/tables/activity-handlers.ts +57 -0
- package/src/presentation/api/routes/tables/batch-permission-helpers.ts +163 -0
- package/src/presentation/api/routes/tables/batch-routes.ts +355 -0
- package/src/presentation/api/routes/tables/comment-handlers.ts +377 -0
- package/src/presentation/api/routes/tables/create-record-helpers.ts +179 -0
- package/src/presentation/api/routes/tables/effect-runner.ts +58 -0
- package/src/presentation/api/routes/tables/error-handlers.ts +53 -0
- package/src/presentation/api/routes/tables/field-permission-validation.ts +167 -0
- package/src/presentation/api/routes/tables/filter-parser.ts +75 -0
- package/src/presentation/api/routes/tables/formula-parser.ts +118 -0
- package/src/presentation/api/routes/tables/index.ts +113 -0
- package/src/presentation/api/routes/tables/list-records-filter.ts +54 -0
- package/src/presentation/api/routes/tables/param-parsers.ts +59 -0
- package/src/presentation/api/routes/tables/record-handlers.ts +484 -0
- package/src/presentation/api/routes/tables/record-routes.ts +53 -0
- package/src/presentation/api/routes/tables/record-update-handler.ts +200 -0
- package/src/presentation/api/routes/tables/sort-validation.ts +85 -0
- package/src/presentation/api/routes/tables/table-routes.ts +76 -0
- package/src/presentation/api/routes/tables/timezone-validation.ts +41 -0
- package/src/presentation/api/routes/tables/upsert-helpers.ts +471 -0
- package/src/presentation/api/routes/tables/utils.ts +159 -0
- package/src/presentation/api/routes/tables/view-routes.ts +51 -0
- package/src/presentation/api/routes/tables.ts +9 -0
- package/src/presentation/api/utils/context-helpers.ts +43 -0
- package/src/presentation/api/utils/error-sanitizer.ts +235 -0
- package/src/presentation/api/utils/field-permission-validator.ts +53 -0
- package/src/presentation/api/utils/filter-field-validator.ts +90 -0
- package/src/presentation/api/utils/index.ts +13 -0
- package/src/presentation/api/utils/run-effect.ts +94 -0
- package/src/presentation/api/utils/validate-request.ts +89 -0
- package/src/presentation/api/validation/index.ts +29 -0
- package/src/presentation/api/validation/rules/field-rules.ts +158 -0
- package/src/presentation/api/validation/rules/record-rules.ts +73 -0
- package/src/presentation/cli/index.ts +19 -0
- package/src/presentation/cli/schema-loader.ts +172 -0
- package/src/presentation/hooks/use-breakpoint.ts +155 -0
- package/src/presentation/rendering/render-error-pages.tsx +60 -0
- package/src/presentation/rendering/render-homepage.tsx +137 -0
- package/src/presentation/scripts/script-renderers.ts +112 -0
- package/src/presentation/styling/animation-composer.ts +117 -0
- package/src/presentation/styling/index.ts +13 -0
- package/src/presentation/styling/parse-style.ts +243 -0
- package/src/presentation/styling/style-utils.ts +50 -0
- package/src/presentation/styling/theme-colors.ts +53 -0
- package/src/presentation/translations/component-utils.ts +54 -0
- package/src/presentation/translations/index.ts +16 -0
- package/src/presentation/translations/translation-resolver.ts +22 -0
- package/src/presentation/ui/languages/language-switcher.tsx +119 -0
- package/src/presentation/ui/metadata/analytics-builders.tsx +174 -0
- package/src/presentation/ui/metadata/analytics-head.tsx +39 -0
- package/src/presentation/ui/metadata/custom-elements-builders.tsx +157 -0
- package/src/presentation/ui/metadata/extract-component-meta.ts +108 -0
- package/src/presentation/ui/metadata/head-elements.tsx +164 -0
- package/src/presentation/ui/metadata/index.tsx +35 -0
- package/src/presentation/ui/metadata/meta-utils.tsx +42 -0
- package/src/presentation/ui/metadata/open-graph-meta.tsx +57 -0
- package/src/presentation/ui/metadata/structured-data-from-component.tsx +134 -0
- package/src/presentation/ui/metadata/structured-data.tsx +88 -0
- package/src/presentation/ui/metadata/twitter-card-meta.tsx +80 -0
- package/src/presentation/ui/pages/DefaultHomePage.tsx +43 -0
- package/src/presentation/ui/pages/DefaultPageConfigs.ts +220 -0
- package/src/presentation/ui/pages/DynamicPage.tsx +307 -0
- package/src/presentation/ui/pages/ErrorPage.tsx +25 -0
- package/src/presentation/ui/pages/NotFoundPage.tsx +25 -0
- package/src/presentation/ui/pages/PageBodyScripts.tsx +242 -0
- package/src/presentation/ui/pages/PageBodyStyles.ts +52 -0
- package/src/presentation/ui/pages/PageHead.tsx +380 -0
- package/src/presentation/ui/pages/PageLangResolver.ts +58 -0
- package/src/presentation/ui/pages/PageMain.tsx +58 -0
- package/src/presentation/ui/pages/PageMetadata.ts +168 -0
- package/src/presentation/ui/pages/PageMetadataI18n.ts +169 -0
- package/src/presentation/ui/pages/PageScripts.ts +78 -0
- package/src/presentation/ui/pages/SectionRenderer.tsx +67 -0
- package/src/presentation/ui/pages/SectionSpacing.tsx +131 -0
- package/src/presentation/ui/sections/component-renderer.tsx +426 -0
- package/src/presentation/ui/sections/component-renderer.types.ts +33 -0
- package/src/presentation/ui/sections/components/component-reference-handler.tsx +74 -0
- package/src/presentation/ui/sections/components/component-resolution.ts +65 -0
- package/src/presentation/ui/sections/components/index.ts +9 -0
- package/src/presentation/ui/sections/hero.tsx +394 -0
- package/src/presentation/ui/sections/props/component-builder.ts +183 -0
- package/src/presentation/ui/sections/props/element-props.ts +179 -0
- package/src/presentation/ui/sections/props/index.ts +9 -0
- package/src/presentation/ui/sections/props/prop-conversion.ts +171 -0
- package/src/presentation/ui/sections/props/props-builder-config.ts +42 -0
- package/src/presentation/ui/sections/props/props-builder.ts +296 -0
- package/src/presentation/ui/sections/renderers/element-renderers/html-element-renderer.tsx +124 -0
- package/src/presentation/ui/sections/renderers/element-renderers/index.ts +59 -0
- package/src/presentation/ui/sections/renderers/element-renderers/interactive-renderers.tsx +231 -0
- package/src/presentation/ui/sections/renderers/element-renderers/media-renderers.tsx +102 -0
- package/src/presentation/ui/sections/renderers/element-renderers/text-content-renderers.tsx +42 -0
- package/src/presentation/ui/sections/renderers/element-renderers.ts +53 -0
- package/src/presentation/ui/sections/renderers/html-element-helpers.ts +100 -0
- package/src/presentation/ui/sections/renderers/specialized-renderers.tsx +212 -0
- package/src/presentation/ui/sections/rendering/component-dispatch-config.ts +31 -0
- package/src/presentation/ui/sections/rendering/component-registry/index.ts +39 -0
- package/src/presentation/ui/sections/rendering/component-registry/interactive-components.ts +54 -0
- package/src/presentation/ui/sections/rendering/component-registry/media-components.ts +36 -0
- package/src/presentation/ui/sections/rendering/component-registry/special-components.tsx +153 -0
- package/src/presentation/ui/sections/rendering/component-registry/structural-components.ts +215 -0
- package/src/presentation/ui/sections/rendering/component-registry/text-components.ts +57 -0
- package/src/presentation/ui/sections/rendering/component-registry-helpers.tsx +29 -0
- package/src/presentation/ui/sections/rendering/component-registry.tsx +21 -0
- package/src/presentation/ui/sections/rendering/component-type-dispatcher.tsx +33 -0
- package/src/presentation/ui/sections/rendering/index.ts +9 -0
- package/src/presentation/ui/sections/responsive/responsive-children-builder.tsx +96 -0
- package/src/presentation/ui/sections/responsive/responsive-content-builder.tsx +95 -0
- package/src/presentation/ui/sections/responsive/responsive-props-merger.ts +195 -0
- package/src/presentation/ui/sections/responsive/responsive-resolver.ts +213 -0
- package/src/presentation/ui/sections/styling/animation-composer-wrapper.ts +65 -0
- package/src/presentation/ui/sections/styling/class-builders.ts +45 -0
- package/src/presentation/ui/sections/styling/color-resolver.ts +43 -0
- package/src/presentation/ui/sections/styling/hover-interaction-handler.ts +107 -0
- package/src/presentation/ui/sections/styling/index.ts +9 -0
- package/src/presentation/ui/sections/styling/interaction-props-builder.ts +55 -0
- package/src/presentation/ui/sections/styling/shadow-resolver.ts +83 -0
- package/src/presentation/ui/sections/styling/spacing-resolver.ts +104 -0
- package/src/presentation/ui/sections/styling/style-processor.ts +170 -0
- package/src/presentation/ui/sections/styling/theme-tokens.ts +184 -0
- package/src/presentation/ui/sections/translations/i18n-content-resolver.ts +198 -0
- package/src/presentation/ui/sections/translations/index.ts +9 -0
- package/src/presentation/ui/sections/translations/translation-handler.ts +143 -0
- package/src/presentation/ui/sections/translations/variable-substitution.ts +225 -0
- package/src/presentation/ui/sections/utils/time-parser.ts +82 -0
- package/src/presentation/utils/link-attributes.ts +50 -0
- package/src/presentation/utils/string-utils.ts +58 -0
- package/src/presentation/utils/styles.ts +50 -0
- package/tsconfig.json +46 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Schema } from 'effect'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Transition easing function types
|
|
12
|
+
*
|
|
13
|
+
* Standard CSS easing functions for smooth transitions:
|
|
14
|
+
* - linear: Constant speed
|
|
15
|
+
* - ease: Slow start, fast middle, slow end (default)
|
|
16
|
+
* - ease-in: Slow start, fast end
|
|
17
|
+
* - ease-out: Fast start, slow end
|
|
18
|
+
* - ease-in-out: Slow start and end, fast middle
|
|
19
|
+
* - cubic-bezier(): Custom cubic bezier function (e.g., cubic-bezier(0.4, 0, 0.2, 1))
|
|
20
|
+
* - steps(): Step function for discrete animations (e.g., steps(40, end) for typewriter effect)
|
|
21
|
+
*/
|
|
22
|
+
export const EasingFunctionSchema = Schema.Union(
|
|
23
|
+
Schema.Literal('linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'),
|
|
24
|
+
Schema.String.pipe(
|
|
25
|
+
Schema.pattern(
|
|
26
|
+
/^cubic-bezier\(\s*-?[\d.]+\s*,\s*-?[\d.]+\s*,\s*-?[\d.]+\s*,\s*-?[\d.]+\s*\)$/,
|
|
27
|
+
{
|
|
28
|
+
message: () =>
|
|
29
|
+
'Custom easing must be a cubic-bezier function with exactly 4 numeric values (e.g., cubic-bezier(0.4, 0, 0.2, 1))',
|
|
30
|
+
}
|
|
31
|
+
)
|
|
32
|
+
),
|
|
33
|
+
Schema.String.pipe(
|
|
34
|
+
Schema.pattern(
|
|
35
|
+
/^steps\(\s*\d+\s*,\s*(start|end|jump-start|jump-end|jump-none|jump-both)\s*\)$/,
|
|
36
|
+
{
|
|
37
|
+
message: () =>
|
|
38
|
+
'Steps function must have a number of steps and a position (e.g., steps(40, end))',
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
).annotations({
|
|
43
|
+
description: 'Transition timing function',
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* CSS duration pattern (ms or s)
|
|
48
|
+
*
|
|
49
|
+
* Must be a number (integer or decimal) followed by 'ms' (milliseconds) or 's' (seconds).
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const durations = ['200ms', '0.5s', '1s', '1500ms']
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export const DurationSchema = Schema.String.pipe(
|
|
57
|
+
Schema.pattern(/^[0-9]+(\.[0-9]+)?(ms|s)$/, {
|
|
58
|
+
message: () => 'Duration must be a number followed by ms or s (e.g., 200ms, 0.5s)',
|
|
59
|
+
})
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Visual changes when user hovers over component
|
|
64
|
+
*
|
|
65
|
+
* Supports CSS properties for hover effects (all optional):
|
|
66
|
+
* - scale: Scale factor (e.g., 1.05 for 5% larger) - shorthand for transform: scale(X)
|
|
67
|
+
* - transform: CSS transforms (scale, rotate, translate)
|
|
68
|
+
* - opacity: Opacity value (0-1)
|
|
69
|
+
* - backgroundColor: Background color
|
|
70
|
+
* - color: Text color
|
|
71
|
+
* - borderColor: Border color
|
|
72
|
+
* - shadow: Box shadow
|
|
73
|
+
* - duration: Transition duration (default: 200ms)
|
|
74
|
+
* - easing: Transition easing (default: ease-out)
|
|
75
|
+
*
|
|
76
|
+
* All properties are animated smoothly using CSS transitions.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const hoverEffect = {
|
|
81
|
+
* scale: 1.05,
|
|
82
|
+
* shadow: '0 10px 25px rgba(0,0,0,0.15)',
|
|
83
|
+
* duration: '200ms',
|
|
84
|
+
* easing: 'ease-out'
|
|
85
|
+
* }
|
|
86
|
+
*
|
|
87
|
+
* const colorChange = {
|
|
88
|
+
* opacity: 0.8,
|
|
89
|
+
* backgroundColor: '#007bff',
|
|
90
|
+
* color: '#ffffff'
|
|
91
|
+
* }
|
|
92
|
+
* ```
|
|
93
|
+
*
|
|
94
|
+
* @see specs/app/pages/common/interactions/hover-interaction.schema.json
|
|
95
|
+
*/
|
|
96
|
+
export const HoverInteractionSchema = Schema.Struct({
|
|
97
|
+
scale: Schema.optional(
|
|
98
|
+
Schema.Number.annotations({
|
|
99
|
+
description: 'Scale factor (e.g., 1.05 for 5% larger)',
|
|
100
|
+
examples: [1.05, 1.1, 0.95],
|
|
101
|
+
})
|
|
102
|
+
),
|
|
103
|
+
transform: Schema.optional(
|
|
104
|
+
Schema.String.annotations({
|
|
105
|
+
description: 'CSS transform (scale, rotate, translate)',
|
|
106
|
+
examples: ['scale(1.05)', 'translateY(-4px)', 'rotate(5deg)'],
|
|
107
|
+
})
|
|
108
|
+
),
|
|
109
|
+
opacity: Schema.optional(
|
|
110
|
+
Schema.Number.pipe(Schema.between(0, 1)).annotations({
|
|
111
|
+
description: 'Opacity value (0-1)',
|
|
112
|
+
})
|
|
113
|
+
),
|
|
114
|
+
backgroundColor: Schema.optional(
|
|
115
|
+
Schema.String.annotations({
|
|
116
|
+
description: 'Background color on hover',
|
|
117
|
+
})
|
|
118
|
+
),
|
|
119
|
+
color: Schema.optional(
|
|
120
|
+
Schema.String.annotations({
|
|
121
|
+
description: 'Text color on hover',
|
|
122
|
+
})
|
|
123
|
+
),
|
|
124
|
+
borderColor: Schema.optional(
|
|
125
|
+
Schema.String.annotations({
|
|
126
|
+
description: 'Border color on hover',
|
|
127
|
+
})
|
|
128
|
+
),
|
|
129
|
+
shadow: Schema.optional(
|
|
130
|
+
Schema.String.annotations({
|
|
131
|
+
description: 'Box shadow on hover',
|
|
132
|
+
examples: ['0 10px 25px rgba(0,0,0,0.1)'],
|
|
133
|
+
})
|
|
134
|
+
),
|
|
135
|
+
duration: Schema.optional(DurationSchema),
|
|
136
|
+
easing: Schema.optional(EasingFunctionSchema),
|
|
137
|
+
}).annotations({
|
|
138
|
+
title: 'Hover Interaction',
|
|
139
|
+
description: 'Visual changes when user hovers over component',
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
export type EasingFunction = Schema.Schema.Type<typeof EasingFunctionSchema>
|
|
143
|
+
export type Duration = Schema.Schema.Type<typeof DurationSchema>
|
|
144
|
+
export type HoverInteraction = Schema.Schema.Type<typeof HoverInteractionSchema>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Schema } from 'effect'
|
|
9
|
+
import { ClickInteractionSchema } from './click-interaction'
|
|
10
|
+
import { EntranceAnimationSchema } from './entrance-animation'
|
|
11
|
+
import { HoverInteractionSchema } from './hover-interaction'
|
|
12
|
+
import { ScrollInteractionSchema } from './scroll-interaction'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Interactive behaviors triggered by user actions or page events
|
|
16
|
+
*
|
|
17
|
+
* Orchestrates four types of interactions (all optional):
|
|
18
|
+
* - hover: Visual changes on mouse hover
|
|
19
|
+
* - click: Actions triggered on click
|
|
20
|
+
* - scroll: Animations when entering viewport
|
|
21
|
+
* - entrance: Animations on page load
|
|
22
|
+
*
|
|
23
|
+
* Multiple interaction types can be combined on the same component.
|
|
24
|
+
* Each interaction type works independently and doesn't interfere with others.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const interactions = {
|
|
29
|
+
* hover: {
|
|
30
|
+
* transform: 'scale(1.05)',
|
|
31
|
+
* duration: '200ms',
|
|
32
|
+
* easing: 'ease-out'
|
|
33
|
+
* },
|
|
34
|
+
* click: {
|
|
35
|
+
* animation: 'pulse',
|
|
36
|
+
* navigate: '/contact'
|
|
37
|
+
* },
|
|
38
|
+
* entrance: {
|
|
39
|
+
* animation: 'fadeInUp',
|
|
40
|
+
* delay: '100ms'
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* const hoverOnly = {
|
|
45
|
+
* hover: {
|
|
46
|
+
* backgroundColor: '#007bff',
|
|
47
|
+
* color: '#ffffff'
|
|
48
|
+
* }
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @see specs/app/pages/common/interactions/interactions.schema.json
|
|
53
|
+
*/
|
|
54
|
+
export const InteractionsSchema = Schema.Struct({
|
|
55
|
+
hover: Schema.optional(HoverInteractionSchema),
|
|
56
|
+
click: Schema.optional(ClickInteractionSchema),
|
|
57
|
+
scroll: Schema.optional(ScrollInteractionSchema),
|
|
58
|
+
entrance: Schema.optional(EntranceAnimationSchema),
|
|
59
|
+
}).annotations({
|
|
60
|
+
title: 'Component Interactions',
|
|
61
|
+
description: 'Interactive behaviors triggered by user actions or page events',
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
export type Interactions = Schema.Schema.Type<typeof InteractionsSchema>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Schema } from 'effect'
|
|
9
|
+
import { DurationSchema } from './hover-interaction'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Scroll-triggered animation types
|
|
13
|
+
*
|
|
14
|
+
* Animations played when component enters viewport:
|
|
15
|
+
* - fadeIn: Fade in smoothly
|
|
16
|
+
* - fadeInUp: Fade in while moving up from below
|
|
17
|
+
* - fadeInDown: Fade in while moving down from above
|
|
18
|
+
* - fadeInLeft: Fade in while sliding from the left
|
|
19
|
+
* - fadeInRight: Fade in while sliding from the right
|
|
20
|
+
* - zoomIn: Zoom in from small to normal size
|
|
21
|
+
* - slideInUp: Slide up into position
|
|
22
|
+
* - slideInDown: Slide down into position
|
|
23
|
+
*/
|
|
24
|
+
export const ScrollAnimationSchema = Schema.Literal(
|
|
25
|
+
'fadeIn',
|
|
26
|
+
'fadeInUp',
|
|
27
|
+
'fadeInDown',
|
|
28
|
+
'fadeInLeft',
|
|
29
|
+
'fadeInRight',
|
|
30
|
+
'zoomIn',
|
|
31
|
+
'slideInUp',
|
|
32
|
+
'slideInDown'
|
|
33
|
+
).annotations({
|
|
34
|
+
description: 'Animation type triggered on scroll',
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Animations triggered when component enters viewport
|
|
39
|
+
*
|
|
40
|
+
* Uses Intersection Observer API to detect when component becomes visible.
|
|
41
|
+
*
|
|
42
|
+
* Configuration options:
|
|
43
|
+
* - animation: Animation type (required)
|
|
44
|
+
* - threshold: Percentage of element visible before triggering (0-1, default: 0.1)
|
|
45
|
+
* - delay: Delay before animation starts (e.g., '100ms', '0.5s')
|
|
46
|
+
* - duration: Animation duration (default: '600ms')
|
|
47
|
+
* - once: Trigger animation only once (default: true)
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const scrollAnimation = {
|
|
52
|
+
* animation: 'fadeInUp',
|
|
53
|
+
* threshold: 0.2,
|
|
54
|
+
* delay: '100ms',
|
|
55
|
+
* duration: '600ms',
|
|
56
|
+
* once: true
|
|
57
|
+
* }
|
|
58
|
+
*
|
|
59
|
+
* const repeatAnimation = {
|
|
60
|
+
* animation: 'zoomIn',
|
|
61
|
+
* threshold: 0.5,
|
|
62
|
+
* once: false // Animate every time it enters viewport
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @see specs/app/pages/common/interactions/scroll-interaction.schema.json
|
|
67
|
+
*/
|
|
68
|
+
export const ScrollInteractionSchema = Schema.Struct({
|
|
69
|
+
animation: ScrollAnimationSchema,
|
|
70
|
+
threshold: Schema.optional(
|
|
71
|
+
Schema.Number.pipe(Schema.between(0, 1)).annotations({
|
|
72
|
+
description: 'Percentage of element visible before triggering (0-1)',
|
|
73
|
+
})
|
|
74
|
+
),
|
|
75
|
+
delay: Schema.optional(
|
|
76
|
+
DurationSchema.annotations({
|
|
77
|
+
description: 'Delay before animation starts',
|
|
78
|
+
examples: ['0ms', '100ms', '0.5s'],
|
|
79
|
+
})
|
|
80
|
+
),
|
|
81
|
+
duration: Schema.optional(DurationSchema),
|
|
82
|
+
once: Schema.optional(
|
|
83
|
+
Schema.Boolean.annotations({
|
|
84
|
+
description: 'Trigger animation only once',
|
|
85
|
+
})
|
|
86
|
+
),
|
|
87
|
+
}).annotations({
|
|
88
|
+
title: 'Scroll Interaction',
|
|
89
|
+
description: 'Animations triggered when component enters viewport',
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
export type ScrollAnimation = Schema.Schema.Type<typeof ScrollAnimationSchema>
|
|
93
|
+
export type ScrollInteraction = Schema.Schema.Type<typeof ScrollInteractionSchema>
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Schema } from 'effect'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Component properties that can be overridden at specific breakpoints
|
|
12
|
+
*
|
|
13
|
+
* Supports overriding:
|
|
14
|
+
* - props: Component properties (className, style, etc.)
|
|
15
|
+
* - content: Text content
|
|
16
|
+
* - visible: Show/hide component
|
|
17
|
+
* - children: Different child components
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const overrides = {
|
|
22
|
+
* props: { className: 'text-2xl text-center' },
|
|
23
|
+
* content: 'Welcome!',
|
|
24
|
+
* visible: true
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export const VariantOverridesSchema = Schema.Struct({
|
|
29
|
+
props: Schema.optional(
|
|
30
|
+
Schema.Record({
|
|
31
|
+
key: Schema.String.pipe(
|
|
32
|
+
Schema.pattern(/^[a-zA-Z][a-zA-Z0-9]*$/, {
|
|
33
|
+
message: () => 'Property key must be camelCase starting with a letter',
|
|
34
|
+
})
|
|
35
|
+
),
|
|
36
|
+
value: Schema.Union(
|
|
37
|
+
Schema.String,
|
|
38
|
+
Schema.Number,
|
|
39
|
+
Schema.Boolean,
|
|
40
|
+
Schema.Record({ key: Schema.String, value: Schema.Unknown }),
|
|
41
|
+
Schema.Array(Schema.Unknown)
|
|
42
|
+
),
|
|
43
|
+
}).annotations({
|
|
44
|
+
description: 'Props to override',
|
|
45
|
+
})
|
|
46
|
+
),
|
|
47
|
+
content: Schema.optional(
|
|
48
|
+
Schema.String.annotations({
|
|
49
|
+
description: 'Content to display at this breakpoint',
|
|
50
|
+
})
|
|
51
|
+
),
|
|
52
|
+
visible: Schema.optional(
|
|
53
|
+
Schema.Boolean.annotations({
|
|
54
|
+
description: 'Show/hide component at this breakpoint',
|
|
55
|
+
})
|
|
56
|
+
),
|
|
57
|
+
children: Schema.optional(
|
|
58
|
+
Schema.Array(Schema.Unknown).annotations({
|
|
59
|
+
description: 'Different children at this breakpoint',
|
|
60
|
+
})
|
|
61
|
+
),
|
|
62
|
+
}).annotations({
|
|
63
|
+
description: 'Component properties to override at this breakpoint',
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Breakpoint-specific component overrides for responsive design
|
|
68
|
+
*
|
|
69
|
+
* Provides responsive variants matching common breakpoints:
|
|
70
|
+
* - mobile: Base mobile styles
|
|
71
|
+
* - sm: Small (640px)
|
|
72
|
+
* - md: Medium (768px)
|
|
73
|
+
* - lg: Large (1024px)
|
|
74
|
+
* - xl: Extra large (1280px)
|
|
75
|
+
* - 2xl: 2x extra large (1536px)
|
|
76
|
+
*
|
|
77
|
+
* All breakpoints are optional. Use mobile-first approach: define base
|
|
78
|
+
* styles at mobile level, then override at larger breakpoints.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const responsive = {
|
|
83
|
+
* mobile: {
|
|
84
|
+
* props: { className: 'text-2xl text-center' },
|
|
85
|
+
* content: 'Welcome!',
|
|
86
|
+
* visible: true
|
|
87
|
+
* },
|
|
88
|
+
* md: {
|
|
89
|
+
* props: { className: 'text-4xl text-left' },
|
|
90
|
+
* content: 'Welcome to Our Platform'
|
|
91
|
+
* },
|
|
92
|
+
* lg: {
|
|
93
|
+
* props: { className: 'text-6xl text-left font-bold' },
|
|
94
|
+
* content: 'Welcome to Our Amazing Platform'
|
|
95
|
+
* }
|
|
96
|
+
* }
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* @see specs/app/pages/common/responsive.schema.json
|
|
100
|
+
*/
|
|
101
|
+
export const ResponsiveSchema = Schema.Struct({
|
|
102
|
+
mobile: Schema.optional(VariantOverridesSchema),
|
|
103
|
+
sm: Schema.optional(VariantOverridesSchema),
|
|
104
|
+
md: Schema.optional(VariantOverridesSchema),
|
|
105
|
+
lg: Schema.optional(VariantOverridesSchema),
|
|
106
|
+
xl: Schema.optional(VariantOverridesSchema),
|
|
107
|
+
'2xl': Schema.optional(VariantOverridesSchema),
|
|
108
|
+
}).annotations({
|
|
109
|
+
title: 'Responsive Variants',
|
|
110
|
+
description: 'Breakpoint-specific component overrides for responsive design',
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
export type VariantOverrides = Schema.Schema.Type<typeof VariantOverridesSchema>
|
|
114
|
+
export type Responsive = Schema.Schema.Type<typeof ResponsiveSchema>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Schema } from 'effect'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* HTTP/HTTPS URL validation schema
|
|
12
|
+
*
|
|
13
|
+
* Validates URLs that start with http:// or https:// protocol.
|
|
14
|
+
* Used for external resources like images, videos, audio, and API endpoints.
|
|
15
|
+
*
|
|
16
|
+
* Validation rules:
|
|
17
|
+
* - Must start with http:// or https://
|
|
18
|
+
* - Follows standard URL format with protocol, domain, and optional path
|
|
19
|
+
* - Format annotated as 'uri' for OpenAPI/JSON Schema compatibility
|
|
20
|
+
*
|
|
21
|
+
* @example "https://example.com/image.jpg"
|
|
22
|
+
* @example "http://api.example.com/endpoint"
|
|
23
|
+
*
|
|
24
|
+
* @see specs/app/pages/common/definitions.schema.json - APP-PAGES-DEFINITIONS-006
|
|
25
|
+
*/
|
|
26
|
+
export const HttpUrlSchema = Schema.String.pipe(
|
|
27
|
+
Schema.pattern(/^https?:\/\//, {
|
|
28
|
+
message: () => 'URL must start with http:// or https://',
|
|
29
|
+
})
|
|
30
|
+
).annotations({
|
|
31
|
+
description: 'HTTP/HTTPS URL',
|
|
32
|
+
format: 'uri',
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
export type HttpUrl = Schema.Schema.Type<typeof HttpUrlSchema>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Schema } from 'effect'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Variable reference pattern for template substitution
|
|
12
|
+
*
|
|
13
|
+
* Matches strings containing $variableName syntax for runtime substitution.
|
|
14
|
+
* Variables are replaced with values from the 'vars' object when component templates are instantiated.
|
|
15
|
+
*
|
|
16
|
+
* Variable naming rules:
|
|
17
|
+
* - Must start with $ followed by a letter
|
|
18
|
+
* - Can contain only alphanumeric characters after the initial letter
|
|
19
|
+
* - Multiple variables can appear in the same string
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const refs = [
|
|
24
|
+
* '$color',
|
|
25
|
+
* '$primaryText',
|
|
26
|
+
* 'Welcome to $siteName',
|
|
27
|
+
* 'The $productName costs $price',
|
|
28
|
+
* '$icon-$size'
|
|
29
|
+
* ]
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @see specs/app/pages/common/variable-reference.schema.json
|
|
33
|
+
*/
|
|
34
|
+
export const VariableReferenceSchema = Schema.String.pipe(
|
|
35
|
+
Schema.pattern(/^.*\$[a-zA-Z][a-zA-Z0-9]*.*$/, {
|
|
36
|
+
message: () =>
|
|
37
|
+
'Variable reference must contain $variableName where variableName starts with a letter and contains only alphanumeric characters',
|
|
38
|
+
}),
|
|
39
|
+
Schema.annotations({
|
|
40
|
+
title: 'Variable Reference',
|
|
41
|
+
description:
|
|
42
|
+
'Pattern for referencing variables in component templates using $variableName syntax',
|
|
43
|
+
examples: [
|
|
44
|
+
'$color',
|
|
45
|
+
'$primaryText',
|
|
46
|
+
'Welcome to $siteName',
|
|
47
|
+
'The $productName costs $price',
|
|
48
|
+
'$icon-$size',
|
|
49
|
+
],
|
|
50
|
+
})
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
export type VariableReference = Schema.Schema.Type<typeof VariableReferenceSchema>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Schema } from 'effect'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Page ID (unique identifier for the page)
|
|
12
|
+
*
|
|
13
|
+
* Unlike database entity IDs which are auto-incrementing integers, page IDs are
|
|
14
|
+
* user-defined strings for human-readable identification and routing purposes.
|
|
15
|
+
*
|
|
16
|
+
* Valid formats:
|
|
17
|
+
* - Kebab-case: 'home-page', 'about-us'
|
|
18
|
+
* - Simple: 'homepage', 'contact'
|
|
19
|
+
* - UUIDs: '550e8400-e29b-41d4-a716-446655440000'
|
|
20
|
+
* - Numeric strings: '12345'
|
|
21
|
+
*
|
|
22
|
+
* Page IDs must be unique within the pages array.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const pageId1 = 'homepage'
|
|
27
|
+
* const pageId2 = 'about-us'
|
|
28
|
+
* const pageId3 = 'contact-form-123'
|
|
29
|
+
* const pageId4 = '550e8400-e29b-41d4-a716-446655440000' // UUID
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @see specs/app/pages/id/id.schema.json
|
|
33
|
+
*/
|
|
34
|
+
export const PageIdSchema = Schema.String.pipe(
|
|
35
|
+
Schema.minLength(1),
|
|
36
|
+
Schema.annotations({
|
|
37
|
+
identifier: 'PageId',
|
|
38
|
+
title: 'Page ID',
|
|
39
|
+
description: 'Unique identifier for the page',
|
|
40
|
+
examples: ['homepage', 'about-us', 'contact-form-123', '550e8400-e29b-41d4-a716-446655440000'],
|
|
41
|
+
})
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
export type PageId = typeof PageIdSchema.Type
|