@pwfabric/runtime 0.0.0-stage → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +90 -0
- package/README.md +43 -2
- package/dist/a11y/announcer.d.ts +65 -0
- package/dist/a11y/announcer.js +140 -0
- package/dist/a11y/announcer.js.map +1 -0
- package/dist/a11y/contrast.d.ts +54 -0
- package/dist/a11y/contrast.js +93 -0
- package/dist/a11y/contrast.js.map +1 -0
- package/dist/a11y/focus.d.ts +123 -0
- package/dist/a11y/focus.js +282 -0
- package/dist/a11y/focus.js.map +1 -0
- package/dist/a11y/index.d.ts +21 -0
- package/dist/a11y/index.js +18 -0
- package/dist/a11y/index.js.map +1 -0
- package/dist/a11y/keyboard.d.ts +144 -0
- package/dist/a11y/keyboard.js +317 -0
- package/dist/a11y/keyboard.js.map +1 -0
- package/dist/adapters/default-image.d.ts +25 -0
- package/dist/adapters/default-image.js +37 -0
- package/dist/adapters/default-image.js.map +1 -0
- package/dist/adapters/index.d.ts +27 -0
- package/dist/adapters/index.js +28 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/next-image.d.ts +38 -0
- package/dist/adapters/next-image.js +124 -0
- package/dist/adapters/next-image.js.map +1 -0
- package/dist/adapters/types.d.ts +61 -0
- package/dist/adapters/types.js +11 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/analytics/index.d.ts +14 -0
- package/dist/analytics/index.js +15 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/tracker.d.ts +65 -0
- package/dist/analytics/tracker.js +251 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/analytics/types.d.ts +130 -0
- package/dist/analytics/types.js +11 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/auth/index.d.ts +15 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/provider.d.ts +132 -0
- package/dist/auth/provider.js +473 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/auth/types.d.ts +117 -0
- package/dist/auth/types.js +9 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/binding/collection.d.ts +190 -0
- package/dist/binding/collection.js +358 -0
- package/dist/binding/collection.js.map +1 -0
- package/dist/binding/datasource.d.ts +319 -0
- package/dist/binding/datasource.js +556 -0
- package/dist/binding/datasource.js.map +1 -0
- package/dist/binding/engine.d.ts +65 -0
- package/dist/binding/engine.js +268 -0
- package/dist/binding/engine.js.map +1 -0
- package/dist/binding/expression.d.ts +150 -0
- package/dist/binding/expression.js +787 -0
- package/dist/binding/expression.js.map +1 -0
- package/dist/binding/index.d.ts +19 -0
- package/dist/binding/index.js +14 -0
- package/dist/binding/index.js.map +1 -0
- package/dist/binding/two-way.d.ts +149 -0
- package/dist/binding/two-way.js +462 -0
- package/dist/binding/two-way.js.map +1 -0
- package/dist/binding/types.d.ts +119 -0
- package/dist/binding/types.js +9 -0
- package/dist/binding/types.js.map +1 -0
- package/dist/blocks/component-types.d.ts +81 -0
- package/dist/blocks/component-types.js +11 -0
- package/dist/blocks/component-types.js.map +1 -0
- package/dist/blocks/composition-rules.d.ts +168 -0
- package/dist/blocks/composition-rules.js +391 -0
- package/dist/blocks/composition-rules.js.map +1 -0
- package/dist/blocks/hooks.d.ts +31 -0
- package/dist/blocks/hooks.js +42 -0
- package/dist/blocks/hooks.js.map +1 -0
- package/dist/blocks/index.d.ts +14 -0
- package/dist/blocks/index.js +23 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/registry.d.ts +84 -0
- package/dist/blocks/registry.js +136 -0
- package/dist/blocks/registry.js.map +1 -0
- package/dist/blocks/rule-engine.d.ts +131 -0
- package/dist/blocks/rule-engine.js +321 -0
- package/dist/blocks/rule-engine.js.map +1 -0
- package/dist/blocks/surface-event-context.d.ts +13 -0
- package/dist/blocks/surface-event-context.js +14 -0
- package/dist/blocks/surface-event-context.js.map +1 -0
- package/dist/blocks/surface-id-context.d.ts +13 -0
- package/dist/blocks/surface-id-context.js +15 -0
- package/dist/blocks/surface-id-context.js.map +1 -0
- package/dist/bus.d.ts +41 -0
- package/dist/bus.js +158 -0
- package/dist/bus.js.map +1 -0
- package/dist/cache/index.d.ts +9 -0
- package/dist/cache/index.js +10 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory.d.ts +32 -0
- package/dist/cache/memory.js +138 -0
- package/dist/cache/memory.js.map +1 -0
- package/dist/cache/types.d.ts +62 -0
- package/dist/cache/types.js +9 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/capability/index.d.ts +72 -0
- package/dist/capability/index.js +87 -0
- package/dist/capability/index.js.map +1 -0
- package/dist/capability/kernel-capabilities.d.ts +31 -0
- package/dist/capability/kernel-capabilities.js +36 -0
- package/dist/capability/kernel-capabilities.js.map +1 -0
- package/dist/capability/platform-capabilities.d.ts +71 -0
- package/dist/capability/platform-capabilities.js +267 -0
- package/dist/capability/platform-capabilities.js.map +1 -0
- package/dist/capability/type-mapping.d.ts +70 -0
- package/dist/capability/type-mapping.js +107 -0
- package/dist/capability/type-mapping.js.map +1 -0
- package/dist/capability/validation.d.ts +46 -0
- package/dist/capability/validation.js +54 -0
- package/dist/capability/validation.js.map +1 -0
- package/dist/connectors/declared-connector.d.ts +48 -0
- package/dist/connectors/declared-connector.js +333 -0
- package/dist/connectors/declared-connector.js.map +1 -0
- package/dist/connectors/engine-registry.d.ts +50 -0
- package/dist/connectors/engine-registry.js +135 -0
- package/dist/connectors/engine-registry.js.map +1 -0
- package/dist/connectors/index.d.ts +14 -0
- package/dist/connectors/index.js +14 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/module-loader.d.ts +70 -0
- package/dist/connectors/module-loader.js +143 -0
- package/dist/connectors/module-loader.js.map +1 -0
- package/dist/connectors/types.d.ts +174 -0
- package/dist/connectors/types.js +23 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/context.d.ts +27 -0
- package/dist/context.js +38 -0
- package/dist/context.js.map +1 -0
- package/dist/data/DataCapabilityProvider.d.ts +39 -0
- package/dist/data/DataCapabilityProvider.js +58 -0
- package/dist/data/DataCapabilityProvider.js.map +1 -0
- package/dist/data/index.d.ts +17 -0
- package/dist/data/index.js +18 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/manager.d.ts +40 -0
- package/dist/data/manager.js +442 -0
- package/dist/data/manager.js.map +1 -0
- package/dist/data/types.d.ts +218 -0
- package/dist/data/types.js +2 -0
- package/dist/data/types.js.map +1 -0
- package/dist/entity/aggregate.d.ts +8 -0
- package/dist/entity/aggregate.js +24 -0
- package/dist/entity/aggregate.js.map +1 -0
- package/dist/entity/apply-query.d.ts +58 -0
- package/dist/entity/apply-query.js +264 -0
- package/dist/entity/apply-query.js.map +1 -0
- package/dist/entity/behavior.d.ts +94 -0
- package/dist/entity/behavior.js +78 -0
- package/dist/entity/behavior.js.map +1 -0
- package/dist/entity/connector.d.ts +141 -0
- package/dist/entity/connector.js +89 -0
- package/dist/entity/connector.js.map +1 -0
- package/dist/entity/connectors/index.d.ts +12 -0
- package/dist/entity/connectors/index.js +11 -0
- package/dist/entity/connectors/index.js.map +1 -0
- package/dist/entity/connectors/static.d.ts +51 -0
- package/dist/entity/connectors/static.js +245 -0
- package/dist/entity/connectors/static.js.map +1 -0
- package/dist/entity/entity-datasource.d.ts +50 -0
- package/dist/entity/entity-datasource.js +33 -0
- package/dist/entity/entity-datasource.js.map +1 -0
- package/dist/entity/facade.d.ts +70 -0
- package/dist/entity/facade.js +70 -0
- package/dist/entity/facade.js.map +1 -0
- package/dist/entity/http-connector.d.ts +123 -0
- package/dist/entity/http-connector.js +295 -0
- package/dist/entity/http-connector.js.map +1 -0
- package/dist/entity/index.d.ts +38 -0
- package/dist/entity/index.js +31 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/postgres-connector.d.ts +64 -0
- package/dist/entity/postgres-connector.js +239 -0
- package/dist/entity/postgres-connector.js.map +1 -0
- package/dist/entity/registry.d.ts +59 -0
- package/dist/entity/registry.js +90 -0
- package/dist/entity/registry.js.map +1 -0
- package/dist/entity/store.d.ts +66 -0
- package/dist/entity/store.js +349 -0
- package/dist/entity/store.js.map +1 -0
- package/dist/entity/types.d.ts +180 -0
- package/dist/entity/types.js +10 -0
- package/dist/entity/types.js.map +1 -0
- package/dist/execution-context.d.ts +88 -0
- package/dist/execution-context.js +146 -0
- package/dist/execution-context.js.map +1 -0
- package/dist/executor.d.ts +27 -0
- package/dist/executor.js +33 -0
- package/dist/executor.js.map +1 -0
- package/dist/forms/form-entity-bridge.d.ts +94 -0
- package/dist/forms/form-entity-bridge.js +96 -0
- package/dist/forms/form-entity-bridge.js.map +1 -0
- package/dist/forms/form-write-target.d.ts +34 -0
- package/dist/forms/form-write-target.js +81 -0
- package/dist/forms/form-write-target.js.map +1 -0
- package/dist/forms/index.d.ts +22 -0
- package/dist/forms/index.js +25 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/named-control-values.d.ts +27 -0
- package/dist/forms/named-control-values.js +42 -0
- package/dist/forms/named-control-values.js.map +1 -0
- package/dist/forms/processor.d.ts +55 -0
- package/dist/forms/processor.js +154 -0
- package/dist/forms/processor.js.map +1 -0
- package/dist/forms/types.d.ts +174 -0
- package/dist/forms/types.js +33 -0
- package/dist/forms/types.js.map +1 -0
- package/dist/forms/validator.d.ts +61 -0
- package/dist/forms/validator.js +218 -0
- package/dist/forms/validator.js.map +1 -0
- package/dist/graph/index.d.ts +10 -0
- package/dist/graph/index.js +9 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/resolver.d.ts +66 -0
- package/dist/graph/resolver.js +243 -0
- package/dist/graph/resolver.js.map +1 -0
- package/dist/graph/types.d.ts +125 -0
- package/dist/graph/types.js +9 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/hooks/useInstalledAtoms.d.ts +96 -0
- package/dist/hooks/useInstalledAtoms.js +92 -0
- package/dist/hooks/useInstalledAtoms.js.map +1 -0
- package/dist/i18n/index.d.ts +15 -0
- package/dist/i18n/index.js +14 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/translator.d.ts +76 -0
- package/dist/i18n/translator.js +357 -0
- package/dist/i18n/translator.js.map +1 -0
- package/dist/i18n/types.d.ts +93 -0
- package/dist/i18n/types.js +9 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel.d.ts +47 -0
- package/dist/kernel.js +258 -0
- package/dist/kernel.js.map +1 -0
- package/dist/perf/budget.d.ts +92 -0
- package/dist/perf/budget.js +122 -0
- package/dist/perf/budget.js.map +1 -0
- package/dist/perf/index.d.ts +16 -0
- package/dist/perf/index.js +13 -0
- package/dist/perf/index.js.map +1 -0
- package/dist/perf/render-timer.d.ts +90 -0
- package/dist/perf/render-timer.js +136 -0
- package/dist/perf/render-timer.js.map +1 -0
- package/dist/perf/reporter.d.ts +126 -0
- package/dist/perf/reporter.js +241 -0
- package/dist/perf/reporter.js.map +1 -0
- package/dist/perf/web-vitals.d.ts +111 -0
- package/dist/perf/web-vitals.js +268 -0
- package/dist/perf/web-vitals.js.map +1 -0
- package/dist/registry.d.ts +63 -0
- package/dist/registry.js +126 -0
- package/dist/registry.js.map +1 -0
- package/dist/render/BehaviorSurfaceProvider.d.ts +65 -0
- package/dist/render/BehaviorSurfaceProvider.js +185 -0
- package/dist/render/BehaviorSurfaceProvider.js.map +1 -0
- package/dist/render/BlockErrorBoundary.d.ts +26 -0
- package/dist/render/BlockErrorBoundary.js +41 -0
- package/dist/render/BlockErrorBoundary.js.map +1 -0
- package/dist/render/DataBoundSurfaceRenderer.d.ts +78 -0
- package/dist/render/DataBoundSurfaceRenderer.js +998 -0
- package/dist/render/DataBoundSurfaceRenderer.js.map +1 -0
- package/dist/render/DynamicBlockWrapper.d.ts +23 -0
- package/dist/render/DynamicBlockWrapper.js +117 -0
- package/dist/render/DynamicBlockWrapper.js.map +1 -0
- package/dist/render/appearance-resolver.d.ts +50 -0
- package/dist/render/appearance-resolver.js +78 -0
- package/dist/render/appearance-resolver.js.map +1 -0
- package/dist/render/capability-gate.d.ts +69 -0
- package/dist/render/capability-gate.js +94 -0
- package/dist/render/capability-gate.js.map +1 -0
- package/dist/render/conditional-states-css.d.ts +41 -0
- package/dist/render/conditional-states-css.js +82 -0
- package/dist/render/conditional-states-css.js.map +1 -0
- package/dist/render/connections-context.d.ts +31 -0
- package/dist/render/connections-context.js +34 -0
- package/dist/render/connections-context.js.map +1 -0
- package/dist/render/dark-theme-css.d.ts +36 -0
- package/dist/render/dark-theme-css.js +67 -0
- package/dist/render/dark-theme-css.js.map +1 -0
- package/dist/render/data-binding-types.d.ts +191 -0
- package/dist/render/data-binding-types.js +11 -0
- package/dist/render/data-binding-types.js.map +1 -0
- package/dist/render/data-cache.d.ts +30 -0
- package/dist/render/data-cache.js +37 -0
- package/dist/render/data-cache.js.map +1 -0
- package/dist/render/derive-dark-theme.d.ts +17 -0
- package/dist/render/derive-dark-theme.js +18 -0
- package/dist/render/derive-dark-theme.js.map +1 -0
- package/dist/render/dynamic-artifact-context.d.ts +77 -0
- package/dist/render/dynamic-artifact-context.js +89 -0
- package/dist/render/dynamic-artifact-context.js.map +1 -0
- package/dist/render/dynamic-block-loader.d.ts +80 -0
- package/dist/render/dynamic-block-loader.js +197 -0
- package/dist/render/dynamic-block-loader.js.map +1 -0
- package/dist/render/endpoint.d.ts +18 -0
- package/dist/render/endpoint.js +109 -0
- package/dist/render/endpoint.js.map +1 -0
- package/dist/render/entity-facade-context.d.ts +34 -0
- package/dist/render/entity-facade-context.js +37 -0
- package/dist/render/entity-facade-context.js.map +1 -0
- package/dist/render/group-states-css.d.ts +41 -0
- package/dist/render/group-states-css.js +73 -0
- package/dist/render/group-states-css.js.map +1 -0
- package/dist/render/hooks/useSurfaceEvents.d.ts +8 -0
- package/dist/render/hooks/useSurfaceEvents.js +9 -0
- package/dist/render/hooks/useSurfaceEvents.js.map +1 -0
- package/dist/render/hooks/useSurfaceId.d.ts +8 -0
- package/dist/render/hooks/useSurfaceId.js +9 -0
- package/dist/render/hooks/useSurfaceId.js.map +1 -0
- package/dist/render/index.d.ts +48 -0
- package/dist/render/index.js +61 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/interaction-rule-engine.d.ts +12 -0
- package/dist/render/interaction-rule-engine.js +47 -0
- package/dist/render/interaction-rule-engine.js.map +1 -0
- package/dist/render/keyframes-css.d.ts +31 -0
- package/dist/render/keyframes-css.js +44 -0
- package/dist/render/keyframes-css.js.map +1 -0
- package/dist/render/query-state.d.ts +3 -0
- package/dist/render/query-state.js +70 -0
- package/dist/render/query-state.js.map +1 -0
- package/dist/render/renderer.d.ts +44 -0
- package/dist/render/renderer.js +937 -0
- package/dist/render/renderer.js.map +1 -0
- package/dist/render/resolve-expressions.d.ts +37 -0
- package/dist/render/resolve-expressions.js +309 -0
- package/dist/render/resolve-expressions.js.map +1 -0
- package/dist/render/responsive-style-css.d.ts +42 -0
- package/dist/render/responsive-style-css.js +123 -0
- package/dist/render/responsive-style-css.js.map +1 -0
- package/dist/render/responsive.d.ts +49 -0
- package/dist/render/responsive.js +99 -0
- package/dist/render/responsive.js.map +1 -0
- package/dist/render/scoped-css.d.ts +71 -0
- package/dist/render/scoped-css.js +102 -0
- package/dist/render/scoped-css.js.map +1 -0
- package/dist/render/shell-selection.d.ts +69 -0
- package/dist/render/shell-selection.js +117 -0
- package/dist/render/shell-selection.js.map +1 -0
- package/dist/render/states-css.d.ts +32 -0
- package/dist/render/states-css.js +63 -0
- package/dist/render/states-css.js.map +1 -0
- package/dist/render/surface-data-context.d.ts +18 -0
- package/dist/render/surface-data-context.js +21 -0
- package/dist/render/surface-data-context.js.map +1 -0
- package/dist/render/surface-event-bus.d.ts +19 -0
- package/dist/render/surface-event-bus.js +68 -0
- package/dist/render/surface-event-bus.js.map +1 -0
- package/dist/render/surface-event-context.d.ts +11 -0
- package/dist/render/surface-event-context.js +12 -0
- package/dist/render/surface-event-context.js.map +1 -0
- package/dist/render/surface-id-context.d.ts +8 -0
- package/dist/render/surface-id-context.js +9 -0
- package/dist/render/surface-id-context.js.map +1 -0
- package/dist/render/theme-utils.d.ts +14 -0
- package/dist/render/theme-utils.js +15 -0
- package/dist/render/theme-utils.js.map +1 -0
- package/dist/render/types.d.ts +282 -0
- package/dist/render/types.js +9 -0
- package/dist/render/types.js.map +1 -0
- package/dist/render/visibility-css.d.ts +42 -0
- package/dist/render/visibility-css.js +119 -0
- package/dist/render/visibility-css.js.map +1 -0
- package/dist/render/width-scope.d.ts +34 -0
- package/dist/render/width-scope.js +44 -0
- package/dist/render/width-scope.js.map +1 -0
- package/dist/render/write-only-sources.d.ts +33 -0
- package/dist/render/write-only-sources.js +99 -0
- package/dist/render/write-only-sources.js.map +1 -0
- package/dist/routing/index.d.ts +14 -0
- package/dist/routing/index.js +15 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/router.d.ts +42 -0
- package/dist/routing/router.js +218 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/routing/types.d.ts +124 -0
- package/dist/routing/types.js +9 -0
- package/dist/routing/types.js.map +1 -0
- package/dist/seo/generator.d.ts +39 -0
- package/dist/seo/generator.js +236 -0
- package/dist/seo/generator.js.map +1 -0
- package/dist/seo/index.d.ts +14 -0
- package/dist/seo/index.js +15 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/types.d.ts +181 -0
- package/dist/seo/types.js +9 -0
- package/dist/seo/types.js.map +1 -0
- package/dist/state/index.d.ts +15 -0
- package/dist/state/index.js +16 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/manager.d.ts +33 -0
- package/dist/state/manager.js +81 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/store.d.ts +40 -0
- package/dist/state/store.js +145 -0
- package/dist/state/store.js.map +1 -0
- package/dist/state/types.d.ts +107 -0
- package/dist/state/types.js +9 -0
- package/dist/state/types.js.map +1 -0
- package/dist/surface/expression.d.ts +65 -0
- package/dist/surface/expression.js +179 -0
- package/dist/surface/expression.js.map +1 -0
- package/dist/surface/index.d.ts +32 -0
- package/dist/surface/index.js +25 -0
- package/dist/surface/index.js.map +1 -0
- package/dist/surface/interpreter.d.ts +96 -0
- package/dist/surface/interpreter.js +231 -0
- package/dist/surface/interpreter.js.map +1 -0
- package/dist/surface/layout.d.ts +54 -0
- package/dist/surface/layout.js +288 -0
- package/dist/surface/layout.js.map +1 -0
- package/dist/surface/output.d.ts +90 -0
- package/dist/surface/output.js +104 -0
- package/dist/surface/output.js.map +1 -0
- package/dist/surface/primitives.d.ts +180 -0
- package/dist/surface/primitives.js +339 -0
- package/dist/surface/primitives.js.map +1 -0
- package/dist/surface/renderer.d.ts +96 -0
- package/dist/surface/renderer.js +190 -0
- package/dist/surface/renderer.js.map +1 -0
- package/dist/surface/schemas.d.ts +181 -0
- package/dist/surface/schemas.js +142 -0
- package/dist/surface/schemas.js.map +1 -0
- package/dist/surface/transforms.d.ts +144 -0
- package/dist/surface/transforms.js +120 -0
- package/dist/surface/transforms.js.map +1 -0
- package/dist/surface/types.d.ts +160 -0
- package/dist/surface/types.js +51 -0
- package/dist/surface/types.js.map +1 -0
- package/dist/surface/validation.d.ts +123 -0
- package/dist/surface/validation.js +147 -0
- package/dist/surface/validation.js.map +1 -0
- package/dist/validator.d.ts +55 -0
- package/dist/validator.js +100 -0
- package/dist/validator.js.map +1 -0
- package/package.json +106 -3
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Primitives
|
|
3
|
+
*
|
|
4
|
+
* Core primitive definitions for the runtime
|
|
5
|
+
*
|
|
6
|
+
* These are the built-in primitives that the runtime knows how to render.
|
|
7
|
+
* Each primitive has a defined contract for its props.
|
|
8
|
+
*
|
|
9
|
+
* @module @pwfabric/runtime/surface/primitives
|
|
10
|
+
*/
|
|
11
|
+
import type { PrimitiveType, RenderNode, BaseNodeProps } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Text primitive props
|
|
14
|
+
*/
|
|
15
|
+
export interface TextProps extends BaseNodeProps {
|
|
16
|
+
readonly content: string;
|
|
17
|
+
readonly variant?: 'body' | 'caption' | 'label';
|
|
18
|
+
readonly weight?: 'normal' | 'medium' | 'bold';
|
|
19
|
+
readonly truncate?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Container primitive props
|
|
23
|
+
*/
|
|
24
|
+
export interface ContainerProps extends BaseNodeProps {
|
|
25
|
+
readonly direction?: 'row' | 'column';
|
|
26
|
+
readonly align?: 'start' | 'center' | 'end' | 'stretch';
|
|
27
|
+
readonly justify?: 'start' | 'center' | 'end' | 'between' | 'around';
|
|
28
|
+
readonly gap?: number | string;
|
|
29
|
+
readonly padding?: number | string;
|
|
30
|
+
readonly wrap?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Button primitive props
|
|
34
|
+
*/
|
|
35
|
+
export interface ButtonProps extends BaseNodeProps {
|
|
36
|
+
readonly label: string;
|
|
37
|
+
readonly variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
38
|
+
readonly size?: 'sm' | 'md' | 'lg';
|
|
39
|
+
readonly disabled?: boolean;
|
|
40
|
+
readonly loading?: boolean;
|
|
41
|
+
readonly onClick?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Input primitive props
|
|
45
|
+
*/
|
|
46
|
+
export interface InputProps extends BaseNodeProps {
|
|
47
|
+
readonly name: string;
|
|
48
|
+
readonly type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';
|
|
49
|
+
readonly placeholder?: string;
|
|
50
|
+
readonly value?: string;
|
|
51
|
+
readonly disabled?: boolean;
|
|
52
|
+
readonly required?: boolean;
|
|
53
|
+
readonly onChange?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Image primitive props
|
|
57
|
+
*/
|
|
58
|
+
export interface ImageProps extends BaseNodeProps {
|
|
59
|
+
readonly src: string;
|
|
60
|
+
readonly alt: string;
|
|
61
|
+
readonly width?: number | string;
|
|
62
|
+
readonly height?: number | string;
|
|
63
|
+
readonly loading?: 'eager' | 'lazy';
|
|
64
|
+
readonly fit?: 'contain' | 'cover' | 'fill' | 'none';
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Link primitive props
|
|
68
|
+
*/
|
|
69
|
+
export interface LinkProps extends BaseNodeProps {
|
|
70
|
+
readonly href: string;
|
|
71
|
+
readonly target?: '_self' | '_blank' | '_parent' | '_top';
|
|
72
|
+
readonly rel?: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* List primitive props
|
|
76
|
+
*/
|
|
77
|
+
export interface ListProps extends BaseNodeProps {
|
|
78
|
+
readonly type?: 'ordered' | 'unordered';
|
|
79
|
+
readonly marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'none';
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Heading primitive props
|
|
83
|
+
*/
|
|
84
|
+
export interface HeadingProps extends BaseNodeProps {
|
|
85
|
+
readonly level: 1 | 2 | 3 | 4 | 5 | 6;
|
|
86
|
+
readonly content: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Spacer primitive props
|
|
90
|
+
*/
|
|
91
|
+
export interface SpacerProps extends BaseNodeProps {
|
|
92
|
+
readonly size: number | string;
|
|
93
|
+
readonly direction?: 'horizontal' | 'vertical';
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Divider primitive props
|
|
97
|
+
*/
|
|
98
|
+
export interface DividerProps extends BaseNodeProps {
|
|
99
|
+
readonly orientation?: 'horizontal' | 'vertical';
|
|
100
|
+
readonly variant?: 'solid' | 'dashed' | 'dotted';
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Slot primitive props - placeholder for injected content
|
|
104
|
+
*/
|
|
105
|
+
export interface SlotProps extends BaseNodeProps {
|
|
106
|
+
readonly name: string;
|
|
107
|
+
readonly fallback?: readonly RenderNode[];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Conditional primitive props
|
|
111
|
+
*/
|
|
112
|
+
export interface ConditionalProps extends BaseNodeProps {
|
|
113
|
+
readonly condition: string;
|
|
114
|
+
readonly then?: readonly RenderNode[];
|
|
115
|
+
readonly else?: readonly RenderNode[];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Loop primitive props
|
|
119
|
+
*/
|
|
120
|
+
export interface LoopProps extends BaseNodeProps {
|
|
121
|
+
readonly items: string;
|
|
122
|
+
readonly as: string;
|
|
123
|
+
readonly keyExpr?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Primitive definition
|
|
127
|
+
*/
|
|
128
|
+
export interface PrimitiveDefinition {
|
|
129
|
+
readonly type: PrimitiveType;
|
|
130
|
+
readonly name: string;
|
|
131
|
+
readonly description: string;
|
|
132
|
+
readonly props: Record<string, PropDefinition>;
|
|
133
|
+
readonly allowsChildren: boolean;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Property definition
|
|
137
|
+
*/
|
|
138
|
+
export interface PropDefinition {
|
|
139
|
+
readonly type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'expression';
|
|
140
|
+
readonly required: boolean;
|
|
141
|
+
readonly description: string;
|
|
142
|
+
readonly defaultValue?: unknown;
|
|
143
|
+
readonly oneOf?: readonly unknown[];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Built-in primitive definitions
|
|
147
|
+
*/
|
|
148
|
+
export declare const PRIMITIVE_DEFINITIONS: Record<PrimitiveType, PrimitiveDefinition>;
|
|
149
|
+
/**
|
|
150
|
+
* Create a text node
|
|
151
|
+
*/
|
|
152
|
+
export declare function text(content: string, props?: Omit<TextProps, 'content'>): RenderNode;
|
|
153
|
+
/**
|
|
154
|
+
* Create a container node
|
|
155
|
+
*/
|
|
156
|
+
export declare function container(children: readonly RenderNode[], props?: ContainerProps): RenderNode;
|
|
157
|
+
/**
|
|
158
|
+
* Create a button node
|
|
159
|
+
*/
|
|
160
|
+
export declare function button(label: string, props?: Omit<ButtonProps, 'label'>): RenderNode;
|
|
161
|
+
/**
|
|
162
|
+
* Create a heading node
|
|
163
|
+
*/
|
|
164
|
+
export declare function heading(level: 1 | 2 | 3 | 4 | 5 | 6, content: string, props?: Omit<HeadingProps, 'level' | 'content'>): RenderNode;
|
|
165
|
+
/**
|
|
166
|
+
* Create a spacer node
|
|
167
|
+
*/
|
|
168
|
+
export declare function spacer(size: number | string, direction?: 'horizontal' | 'vertical'): RenderNode;
|
|
169
|
+
/**
|
|
170
|
+
* Create a divider node
|
|
171
|
+
*/
|
|
172
|
+
export declare function divider(props?: DividerProps): RenderNode;
|
|
173
|
+
/**
|
|
174
|
+
* Check if a type is a known primitive
|
|
175
|
+
*/
|
|
176
|
+
export declare function isPrimitive(type: string): type is PrimitiveType;
|
|
177
|
+
/**
|
|
178
|
+
* Get primitive definition
|
|
179
|
+
*/
|
|
180
|
+
export declare function getPrimitiveDefinition(type: PrimitiveType): PrimitiveDefinition | undefined;
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Primitives
|
|
3
|
+
*
|
|
4
|
+
* Core primitive definitions for the runtime
|
|
5
|
+
*
|
|
6
|
+
* These are the built-in primitives that the runtime knows how to render.
|
|
7
|
+
* Each primitive has a defined contract for its props.
|
|
8
|
+
*
|
|
9
|
+
* @module @pwfabric/runtime/surface/primitives
|
|
10
|
+
*/
|
|
11
|
+
import { createNode } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Built-in primitive definitions
|
|
14
|
+
*/
|
|
15
|
+
export const PRIMITIVE_DEFINITIONS = {
|
|
16
|
+
text: {
|
|
17
|
+
type: 'text',
|
|
18
|
+
name: 'Text',
|
|
19
|
+
description: 'Display text content',
|
|
20
|
+
props: {
|
|
21
|
+
content: { type: 'string', required: true, description: 'Text content to display' },
|
|
22
|
+
variant: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
required: false,
|
|
25
|
+
description: 'Text variant',
|
|
26
|
+
oneOf: ['body', 'caption', 'label'],
|
|
27
|
+
defaultValue: 'body',
|
|
28
|
+
},
|
|
29
|
+
weight: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
required: false,
|
|
32
|
+
description: 'Font weight',
|
|
33
|
+
oneOf: ['normal', 'medium', 'bold'],
|
|
34
|
+
defaultValue: 'normal',
|
|
35
|
+
},
|
|
36
|
+
truncate: {
|
|
37
|
+
type: 'boolean',
|
|
38
|
+
required: false,
|
|
39
|
+
description: 'Truncate with ellipsis',
|
|
40
|
+
defaultValue: false,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
allowsChildren: false,
|
|
44
|
+
},
|
|
45
|
+
container: {
|
|
46
|
+
type: 'container',
|
|
47
|
+
name: 'Container',
|
|
48
|
+
description: 'Layout container for child elements',
|
|
49
|
+
props: {
|
|
50
|
+
direction: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
required: false,
|
|
53
|
+
description: 'Flex direction',
|
|
54
|
+
oneOf: ['row', 'column'],
|
|
55
|
+
defaultValue: 'column',
|
|
56
|
+
},
|
|
57
|
+
align: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
required: false,
|
|
60
|
+
description: 'Align items',
|
|
61
|
+
oneOf: ['start', 'center', 'end', 'stretch'],
|
|
62
|
+
},
|
|
63
|
+
justify: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
required: false,
|
|
66
|
+
description: 'Justify content',
|
|
67
|
+
oneOf: ['start', 'center', 'end', 'between', 'around'],
|
|
68
|
+
},
|
|
69
|
+
gap: { type: 'string', required: false, description: 'Gap between children' },
|
|
70
|
+
padding: { type: 'string', required: false, description: 'Container padding' },
|
|
71
|
+
wrap: { type: 'boolean', required: false, description: 'Wrap children', defaultValue: false },
|
|
72
|
+
},
|
|
73
|
+
allowsChildren: true,
|
|
74
|
+
},
|
|
75
|
+
button: {
|
|
76
|
+
type: 'button',
|
|
77
|
+
name: 'Button',
|
|
78
|
+
description: 'Interactive button element',
|
|
79
|
+
props: {
|
|
80
|
+
label: { type: 'string', required: true, description: 'Button label' },
|
|
81
|
+
variant: {
|
|
82
|
+
type: 'string',
|
|
83
|
+
required: false,
|
|
84
|
+
description: 'Button style variant',
|
|
85
|
+
oneOf: ['primary', 'secondary', 'ghost', 'danger'],
|
|
86
|
+
defaultValue: 'primary',
|
|
87
|
+
},
|
|
88
|
+
size: {
|
|
89
|
+
type: 'string',
|
|
90
|
+
required: false,
|
|
91
|
+
description: 'Button size',
|
|
92
|
+
oneOf: ['sm', 'md', 'lg'],
|
|
93
|
+
defaultValue: 'md',
|
|
94
|
+
},
|
|
95
|
+
disabled: { type: 'boolean', required: false, description: 'Disable button' },
|
|
96
|
+
loading: { type: 'boolean', required: false, description: 'Show loading state' },
|
|
97
|
+
onClick: { type: 'expression', required: false, description: 'Click handler expression' },
|
|
98
|
+
},
|
|
99
|
+
allowsChildren: false,
|
|
100
|
+
},
|
|
101
|
+
input: {
|
|
102
|
+
type: 'input',
|
|
103
|
+
name: 'Input',
|
|
104
|
+
description: 'Text input field',
|
|
105
|
+
props: {
|
|
106
|
+
name: { type: 'string', required: true, description: 'Input name' },
|
|
107
|
+
type: {
|
|
108
|
+
type: 'string',
|
|
109
|
+
required: false,
|
|
110
|
+
description: 'Input type',
|
|
111
|
+
oneOf: ['text', 'email', 'password', 'number', 'tel', 'url'],
|
|
112
|
+
defaultValue: 'text',
|
|
113
|
+
},
|
|
114
|
+
placeholder: { type: 'string', required: false, description: 'Placeholder text' },
|
|
115
|
+
value: { type: 'string', required: false, description: 'Current value' },
|
|
116
|
+
disabled: { type: 'boolean', required: false, description: 'Disable input' },
|
|
117
|
+
required: { type: 'boolean', required: false, description: 'Mark as required' },
|
|
118
|
+
onChange: { type: 'expression', required: false, description: 'Change handler expression' },
|
|
119
|
+
},
|
|
120
|
+
allowsChildren: false,
|
|
121
|
+
},
|
|
122
|
+
image: {
|
|
123
|
+
type: 'image',
|
|
124
|
+
name: 'Image',
|
|
125
|
+
description: 'Display an image',
|
|
126
|
+
props: {
|
|
127
|
+
src: { type: 'string', required: true, description: 'Image source URL' },
|
|
128
|
+
alt: { type: 'string', required: true, description: 'Alt text for accessibility' },
|
|
129
|
+
width: { type: 'string', required: false, description: 'Image width' },
|
|
130
|
+
height: { type: 'string', required: false, description: 'Image height' },
|
|
131
|
+
loading: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
required: false,
|
|
134
|
+
description: 'Loading strategy',
|
|
135
|
+
oneOf: ['eager', 'lazy'],
|
|
136
|
+
defaultValue: 'lazy',
|
|
137
|
+
},
|
|
138
|
+
fit: {
|
|
139
|
+
type: 'string',
|
|
140
|
+
required: false,
|
|
141
|
+
description: 'Object fit',
|
|
142
|
+
oneOf: ['contain', 'cover', 'fill', 'none'],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
allowsChildren: false,
|
|
146
|
+
},
|
|
147
|
+
link: {
|
|
148
|
+
type: 'link',
|
|
149
|
+
name: 'Link',
|
|
150
|
+
description: 'Navigation link',
|
|
151
|
+
props: {
|
|
152
|
+
href: { type: 'string', required: true, description: 'Link destination' },
|
|
153
|
+
target: {
|
|
154
|
+
type: 'string',
|
|
155
|
+
required: false,
|
|
156
|
+
description: 'Link target',
|
|
157
|
+
oneOf: ['_self', '_blank', '_parent', '_top'],
|
|
158
|
+
},
|
|
159
|
+
rel: { type: 'string', required: false, description: 'Link relationship' },
|
|
160
|
+
},
|
|
161
|
+
allowsChildren: true,
|
|
162
|
+
},
|
|
163
|
+
list: {
|
|
164
|
+
type: 'list',
|
|
165
|
+
name: 'List',
|
|
166
|
+
description: 'List container',
|
|
167
|
+
props: {
|
|
168
|
+
type: {
|
|
169
|
+
type: 'string',
|
|
170
|
+
required: false,
|
|
171
|
+
description: 'List type',
|
|
172
|
+
oneOf: ['ordered', 'unordered'],
|
|
173
|
+
defaultValue: 'unordered',
|
|
174
|
+
},
|
|
175
|
+
marker: {
|
|
176
|
+
type: 'string',
|
|
177
|
+
required: false,
|
|
178
|
+
description: 'List marker style',
|
|
179
|
+
oneOf: ['disc', 'circle', 'square', 'decimal', 'none'],
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
allowsChildren: true,
|
|
183
|
+
},
|
|
184
|
+
'list-item': {
|
|
185
|
+
type: 'list-item',
|
|
186
|
+
name: 'List Item',
|
|
187
|
+
description: 'Item within a list',
|
|
188
|
+
props: {},
|
|
189
|
+
allowsChildren: true,
|
|
190
|
+
},
|
|
191
|
+
heading: {
|
|
192
|
+
type: 'heading',
|
|
193
|
+
name: 'Heading',
|
|
194
|
+
description: 'Section heading',
|
|
195
|
+
props: {
|
|
196
|
+
level: {
|
|
197
|
+
type: 'number',
|
|
198
|
+
required: true,
|
|
199
|
+
description: 'Heading level (1-6)',
|
|
200
|
+
oneOf: [1, 2, 3, 4, 5, 6],
|
|
201
|
+
},
|
|
202
|
+
content: { type: 'string', required: true, description: 'Heading text' },
|
|
203
|
+
},
|
|
204
|
+
allowsChildren: false,
|
|
205
|
+
},
|
|
206
|
+
paragraph: {
|
|
207
|
+
type: 'paragraph',
|
|
208
|
+
name: 'Paragraph',
|
|
209
|
+
description: 'Text paragraph',
|
|
210
|
+
props: {},
|
|
211
|
+
allowsChildren: true,
|
|
212
|
+
},
|
|
213
|
+
spacer: {
|
|
214
|
+
type: 'spacer',
|
|
215
|
+
name: 'Spacer',
|
|
216
|
+
description: 'Empty space',
|
|
217
|
+
props: {
|
|
218
|
+
size: { type: 'string', required: true, description: 'Space size' },
|
|
219
|
+
direction: {
|
|
220
|
+
type: 'string',
|
|
221
|
+
required: false,
|
|
222
|
+
description: 'Space direction',
|
|
223
|
+
oneOf: ['horizontal', 'vertical'],
|
|
224
|
+
defaultValue: 'vertical',
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
allowsChildren: false,
|
|
228
|
+
},
|
|
229
|
+
divider: {
|
|
230
|
+
type: 'divider',
|
|
231
|
+
name: 'Divider',
|
|
232
|
+
description: 'Visual separator',
|
|
233
|
+
props: {
|
|
234
|
+
orientation: {
|
|
235
|
+
type: 'string',
|
|
236
|
+
required: false,
|
|
237
|
+
description: 'Divider orientation',
|
|
238
|
+
oneOf: ['horizontal', 'vertical'],
|
|
239
|
+
defaultValue: 'horizontal',
|
|
240
|
+
},
|
|
241
|
+
variant: {
|
|
242
|
+
type: 'string',
|
|
243
|
+
required: false,
|
|
244
|
+
description: 'Divider style',
|
|
245
|
+
oneOf: ['solid', 'dashed', 'dotted'],
|
|
246
|
+
defaultValue: 'solid',
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
allowsChildren: false,
|
|
250
|
+
},
|
|
251
|
+
slot: {
|
|
252
|
+
type: 'slot',
|
|
253
|
+
name: 'Slot',
|
|
254
|
+
description: 'Named slot for content injection',
|
|
255
|
+
props: {
|
|
256
|
+
name: { type: 'string', required: true, description: 'Slot name' },
|
|
257
|
+
},
|
|
258
|
+
allowsChildren: true, // Children are fallback content
|
|
259
|
+
},
|
|
260
|
+
fragment: {
|
|
261
|
+
type: 'fragment',
|
|
262
|
+
name: 'Fragment',
|
|
263
|
+
description: 'Invisible wrapper for multiple children',
|
|
264
|
+
props: {},
|
|
265
|
+
allowsChildren: true,
|
|
266
|
+
},
|
|
267
|
+
conditional: {
|
|
268
|
+
type: 'conditional',
|
|
269
|
+
name: 'Conditional',
|
|
270
|
+
description: 'Conditionally render content',
|
|
271
|
+
props: {
|
|
272
|
+
condition: { type: 'expression', required: true, description: 'Condition expression' },
|
|
273
|
+
},
|
|
274
|
+
allowsChildren: true,
|
|
275
|
+
},
|
|
276
|
+
loop: {
|
|
277
|
+
type: 'loop',
|
|
278
|
+
name: 'Loop',
|
|
279
|
+
description: 'Iterate over items',
|
|
280
|
+
props: {
|
|
281
|
+
items: { type: 'expression', required: true, description: 'Items expression' },
|
|
282
|
+
as: { type: 'string', required: true, description: 'Item variable name' },
|
|
283
|
+
keyExpr: { type: 'expression', required: false, description: 'Key expression' },
|
|
284
|
+
},
|
|
285
|
+
allowsChildren: true,
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
// ============================================================
|
|
289
|
+
// PRIMITIVE FACTORY FUNCTIONS
|
|
290
|
+
// ============================================================
|
|
291
|
+
/**
|
|
292
|
+
* Create a text node
|
|
293
|
+
*/
|
|
294
|
+
export function text(content, props) {
|
|
295
|
+
return createNode('text', { content, ...props });
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Create a container node
|
|
299
|
+
*/
|
|
300
|
+
export function container(children, props) {
|
|
301
|
+
return createNode('container', props ? { ...props } : {}, children);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Create a button node
|
|
305
|
+
*/
|
|
306
|
+
export function button(label, props) {
|
|
307
|
+
return createNode('button', { label, ...props });
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Create a heading node
|
|
311
|
+
*/
|
|
312
|
+
export function heading(level, content, props) {
|
|
313
|
+
return createNode('heading', { level, content, ...props });
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Create a spacer node
|
|
317
|
+
*/
|
|
318
|
+
export function spacer(size, direction) {
|
|
319
|
+
return createNode('spacer', { size, direction });
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Create a divider node
|
|
323
|
+
*/
|
|
324
|
+
export function divider(props) {
|
|
325
|
+
return createNode('divider', props ? { ...props } : {});
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Check if a type is a known primitive
|
|
329
|
+
*/
|
|
330
|
+
export function isPrimitive(type) {
|
|
331
|
+
return type in PRIMITIVE_DEFINITIONS;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Get primitive definition
|
|
335
|
+
*/
|
|
336
|
+
export function getPrimitiveDefinition(type) {
|
|
337
|
+
return PRIMITIVE_DEFINITIONS[type];
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/surface/primitives.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Built-in Primitives\n *\n * Core primitive definitions for the runtime\n *\n * These are the built-in primitives that the runtime knows how to render.\n * Each primitive has a defined contract for its props.\n *\n * @module @pwfabric/runtime/surface/primitives\n */\n\nimport type { PrimitiveType, RenderNode, BaseNodeProps } from './types.js'\nimport { createNode } from './types.js'\n\n// ============================================================\n// PRIMITIVE DEFINITIONS\n// ============================================================\n\n/**\n * Text primitive props\n */\nexport interface TextProps extends BaseNodeProps {\n readonly content: string\n readonly variant?: 'body' | 'caption' | 'label'\n readonly weight?: 'normal' | 'medium' | 'bold'\n readonly truncate?: boolean\n}\n\n/**\n * Container primitive props\n */\nexport interface ContainerProps extends BaseNodeProps {\n readonly direction?: 'row' | 'column'\n readonly align?: 'start' | 'center' | 'end' | 'stretch'\n readonly justify?: 'start' | 'center' | 'end' | 'between' | 'around'\n readonly gap?: number | string\n readonly padding?: number | string\n readonly wrap?: boolean\n}\n\n/**\n * Button primitive props\n */\nexport interface ButtonProps extends BaseNodeProps {\n readonly label: string\n readonly variant?: 'primary' | 'secondary' | 'ghost' | 'danger'\n readonly size?: 'sm' | 'md' | 'lg'\n readonly disabled?: boolean\n readonly loading?: boolean\n readonly onClick?: string // Expression or capability reference\n}\n\n/**\n * Input primitive props\n */\nexport interface InputProps extends BaseNodeProps {\n readonly name: string\n readonly type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'\n readonly placeholder?: string\n readonly value?: string\n readonly disabled?: boolean\n readonly required?: boolean\n readonly onChange?: string\n}\n\n/**\n * Image primitive props\n */\nexport interface ImageProps extends BaseNodeProps {\n readonly src: string\n readonly alt: string\n readonly width?: number | string\n readonly height?: number | string\n readonly loading?: 'eager' | 'lazy'\n readonly fit?: 'contain' | 'cover' | 'fill' | 'none'\n}\n\n/**\n * Link primitive props\n */\nexport interface LinkProps extends BaseNodeProps {\n readonly href: string\n readonly target?: '_self' | '_blank' | '_parent' | '_top'\n readonly rel?: string\n}\n\n/**\n * List primitive props\n */\nexport interface ListProps extends BaseNodeProps {\n readonly type?: 'ordered' | 'unordered'\n readonly marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'none'\n}\n\n/**\n * Heading primitive props\n */\nexport interface HeadingProps extends BaseNodeProps {\n readonly level: 1 | 2 | 3 | 4 | 5 | 6\n readonly content: string\n}\n\n/**\n * Spacer primitive props\n */\nexport interface SpacerProps extends BaseNodeProps {\n readonly size: number | string\n readonly direction?: 'horizontal' | 'vertical'\n}\n\n/**\n * Divider primitive props\n */\nexport interface DividerProps extends BaseNodeProps {\n readonly orientation?: 'horizontal' | 'vertical'\n readonly variant?: 'solid' | 'dashed' | 'dotted'\n}\n\n/**\n * Slot primitive props - placeholder for injected content\n */\nexport interface SlotProps extends BaseNodeProps {\n readonly name: string\n readonly fallback?: readonly RenderNode[]\n}\n\n/**\n * Conditional primitive props\n */\nexport interface ConditionalProps extends BaseNodeProps {\n readonly condition: string // Expression\n readonly then?: readonly RenderNode[]\n readonly else?: readonly RenderNode[]\n}\n\n/**\n * Loop primitive props\n */\nexport interface LoopProps extends BaseNodeProps {\n readonly items: string // Expression\n readonly as: string\n readonly keyExpr?: string\n}\n\n// ============================================================\n// PRIMITIVE REGISTRY\n// ============================================================\n\n/**\n * Primitive definition\n */\nexport interface PrimitiveDefinition {\n readonly type: PrimitiveType\n readonly name: string\n readonly description: string\n readonly props: Record<string, PropDefinition>\n readonly allowsChildren: boolean\n}\n\n/**\n * Property definition\n */\nexport interface PropDefinition {\n readonly type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'expression'\n readonly required: boolean\n readonly description: string\n readonly defaultValue?: unknown\n readonly oneOf?: readonly unknown[]\n}\n\n/**\n * Built-in primitive definitions\n */\nexport const PRIMITIVE_DEFINITIONS: Record<PrimitiveType, PrimitiveDefinition> = {\n text: {\n type: 'text',\n name: 'Text',\n description: 'Display text content',\n props: {\n content: { type: 'string', required: true, description: 'Text content to display' },\n variant: {\n type: 'string',\n required: false,\n description: 'Text variant',\n oneOf: ['body', 'caption', 'label'],\n defaultValue: 'body',\n },\n weight: {\n type: 'string',\n required: false,\n description: 'Font weight',\n oneOf: ['normal', 'medium', 'bold'],\n defaultValue: 'normal',\n },\n truncate: {\n type: 'boolean',\n required: false,\n description: 'Truncate with ellipsis',\n defaultValue: false,\n },\n },\n allowsChildren: false,\n },\n\n container: {\n type: 'container',\n name: 'Container',\n description: 'Layout container for child elements',\n props: {\n direction: {\n type: 'string',\n required: false,\n description: 'Flex direction',\n oneOf: ['row', 'column'],\n defaultValue: 'column',\n },\n align: {\n type: 'string',\n required: false,\n description: 'Align items',\n oneOf: ['start', 'center', 'end', 'stretch'],\n },\n justify: {\n type: 'string',\n required: false,\n description: 'Justify content',\n oneOf: ['start', 'center', 'end', 'between', 'around'],\n },\n gap: { type: 'string', required: false, description: 'Gap between children' },\n padding: { type: 'string', required: false, description: 'Container padding' },\n wrap: { type: 'boolean', required: false, description: 'Wrap children', defaultValue: false },\n },\n allowsChildren: true,\n },\n\n button: {\n type: 'button',\n name: 'Button',\n description: 'Interactive button element',\n props: {\n label: { type: 'string', required: true, description: 'Button label' },\n variant: {\n type: 'string',\n required: false,\n description: 'Button style variant',\n oneOf: ['primary', 'secondary', 'ghost', 'danger'],\n defaultValue: 'primary',\n },\n size: {\n type: 'string',\n required: false,\n description: 'Button size',\n oneOf: ['sm', 'md', 'lg'],\n defaultValue: 'md',\n },\n disabled: { type: 'boolean', required: false, description: 'Disable button' },\n loading: { type: 'boolean', required: false, description: 'Show loading state' },\n onClick: { type: 'expression', required: false, description: 'Click handler expression' },\n },\n allowsChildren: false,\n },\n\n input: {\n type: 'input',\n name: 'Input',\n description: 'Text input field',\n props: {\n name: { type: 'string', required: true, description: 'Input name' },\n type: {\n type: 'string',\n required: false,\n description: 'Input type',\n oneOf: ['text', 'email', 'password', 'number', 'tel', 'url'],\n defaultValue: 'text',\n },\n placeholder: { type: 'string', required: false, description: 'Placeholder text' },\n value: { type: 'string', required: false, description: 'Current value' },\n disabled: { type: 'boolean', required: false, description: 'Disable input' },\n required: { type: 'boolean', required: false, description: 'Mark as required' },\n onChange: { type: 'expression', required: false, description: 'Change handler expression' },\n },\n allowsChildren: false,\n },\n\n image: {\n type: 'image',\n name: 'Image',\n description: 'Display an image',\n props: {\n src: { type: 'string', required: true, description: 'Image source URL' },\n alt: { type: 'string', required: true, description: 'Alt text for accessibility' },\n width: { type: 'string', required: false, description: 'Image width' },\n height: { type: 'string', required: false, description: 'Image height' },\n loading: {\n type: 'string',\n required: false,\n description: 'Loading strategy',\n oneOf: ['eager', 'lazy'],\n defaultValue: 'lazy',\n },\n fit: {\n type: 'string',\n required: false,\n description: 'Object fit',\n oneOf: ['contain', 'cover', 'fill', 'none'],\n },\n },\n allowsChildren: false,\n },\n\n link: {\n type: 'link',\n name: 'Link',\n description: 'Navigation link',\n props: {\n href: { type: 'string', required: true, description: 'Link destination' },\n target: {\n type: 'string',\n required: false,\n description: 'Link target',\n oneOf: ['_self', '_blank', '_parent', '_top'],\n },\n rel: { type: 'string', required: false, description: 'Link relationship' },\n },\n allowsChildren: true,\n },\n\n list: {\n type: 'list',\n name: 'List',\n description: 'List container',\n props: {\n type: {\n type: 'string',\n required: false,\n description: 'List type',\n oneOf: ['ordered', 'unordered'],\n defaultValue: 'unordered',\n },\n marker: {\n type: 'string',\n required: false,\n description: 'List marker style',\n oneOf: ['disc', 'circle', 'square', 'decimal', 'none'],\n },\n },\n allowsChildren: true,\n },\n\n 'list-item': {\n type: 'list-item',\n name: 'List Item',\n description: 'Item within a list',\n props: {},\n allowsChildren: true,\n },\n\n heading: {\n type: 'heading',\n name: 'Heading',\n description: 'Section heading',\n props: {\n level: {\n type: 'number',\n required: true,\n description: 'Heading level (1-6)',\n oneOf: [1, 2, 3, 4, 5, 6],\n },\n content: { type: 'string', required: true, description: 'Heading text' },\n },\n allowsChildren: false,\n },\n\n paragraph: {\n type: 'paragraph',\n name: 'Paragraph',\n description: 'Text paragraph',\n props: {},\n allowsChildren: true,\n },\n\n spacer: {\n type: 'spacer',\n name: 'Spacer',\n description: 'Empty space',\n props: {\n size: { type: 'string', required: true, description: 'Space size' },\n direction: {\n type: 'string',\n required: false,\n description: 'Space direction',\n oneOf: ['horizontal', 'vertical'],\n defaultValue: 'vertical',\n },\n },\n allowsChildren: false,\n },\n\n divider: {\n type: 'divider',\n name: 'Divider',\n description: 'Visual separator',\n props: {\n orientation: {\n type: 'string',\n required: false,\n description: 'Divider orientation',\n oneOf: ['horizontal', 'vertical'],\n defaultValue: 'horizontal',\n },\n variant: {\n type: 'string',\n required: false,\n description: 'Divider style',\n oneOf: ['solid', 'dashed', 'dotted'],\n defaultValue: 'solid',\n },\n },\n allowsChildren: false,\n },\n\n slot: {\n type: 'slot',\n name: 'Slot',\n description: 'Named slot for content injection',\n props: {\n name: { type: 'string', required: true, description: 'Slot name' },\n },\n allowsChildren: true, // Children are fallback content\n },\n\n fragment: {\n type: 'fragment',\n name: 'Fragment',\n description: 'Invisible wrapper for multiple children',\n props: {},\n allowsChildren: true,\n },\n\n conditional: {\n type: 'conditional',\n name: 'Conditional',\n description: 'Conditionally render content',\n props: {\n condition: { type: 'expression', required: true, description: 'Condition expression' },\n },\n allowsChildren: true,\n },\n\n loop: {\n type: 'loop',\n name: 'Loop',\n description: 'Iterate over items',\n props: {\n items: { type: 'expression', required: true, description: 'Items expression' },\n as: { type: 'string', required: true, description: 'Item variable name' },\n keyExpr: { type: 'expression', required: false, description: 'Key expression' },\n },\n allowsChildren: true,\n },\n}\n\n// ============================================================\n// PRIMITIVE FACTORY FUNCTIONS\n// ============================================================\n\n/**\n * Create a text node\n */\nexport function text(content: string, props?: Omit<TextProps, 'content'>): RenderNode {\n return createNode('text', { content, ...props })\n}\n\n/**\n * Create a container node\n */\nexport function container(children: readonly RenderNode[], props?: ContainerProps): RenderNode {\n return createNode('container', props ? { ...props } : {}, children)\n}\n\n/**\n * Create a button node\n */\nexport function button(label: string, props?: Omit<ButtonProps, 'label'>): RenderNode {\n return createNode('button', { label, ...props })\n}\n\n/**\n * Create a heading node\n */\nexport function heading(\n level: 1 | 2 | 3 | 4 | 5 | 6,\n content: string,\n props?: Omit<HeadingProps, 'level' | 'content'>\n): RenderNode {\n return createNode('heading', { level, content, ...props })\n}\n\n/**\n * Create a spacer node\n */\nexport function spacer(size: number | string, direction?: 'horizontal' | 'vertical'): RenderNode {\n return createNode('spacer', { size, direction })\n}\n\n/**\n * Create a divider node\n */\nexport function divider(props?: DividerProps): RenderNode {\n return createNode('divider', props ? { ...props } : {})\n}\n\n/**\n * Check if a type is a known primitive\n */\nexport function isPrimitive(type: string): type is PrimitiveType {\n return type in PRIMITIVE_DEFINITIONS\n}\n\n/**\n * Get primitive definition\n */\nexport function getPrimitiveDefinition(type: PrimitiveType): PrimitiveDefinition | undefined {\n return PRIMITIVE_DEFINITIONS[type]\n}\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface Renderer
|
|
3
|
+
*
|
|
4
|
+
* Deterministic surface rendering engine
|
|
5
|
+
*
|
|
6
|
+
* The renderer takes an interpreted surface and produces a render tree.
|
|
7
|
+
* Rendering is deterministic: same input + context = same output.
|
|
8
|
+
*
|
|
9
|
+
* INVARIANTS:
|
|
10
|
+
* - Rendering is pure (no side effects)
|
|
11
|
+
* - Same input always produces same output
|
|
12
|
+
* - Render order is deterministic
|
|
13
|
+
* - All expressions are evaluated synchronously
|
|
14
|
+
*
|
|
15
|
+
* @module @pwfabric/runtime/surface/renderer
|
|
16
|
+
*/
|
|
17
|
+
import type { RenderNode, RenderContext, RenderResult, RenderOutput, RenderError, LayoutJSON } from './types.js';
|
|
18
|
+
import { type LayoutResult } from './layout.js';
|
|
19
|
+
import type { InterpretedSurface } from './interpreter.js';
|
|
20
|
+
/**
|
|
21
|
+
* Surface renderer options
|
|
22
|
+
*/
|
|
23
|
+
export interface RenderOptions {
|
|
24
|
+
readonly data?: Record<string, unknown>;
|
|
25
|
+
readonly slots?: Record<string, readonly RenderNode[]>;
|
|
26
|
+
readonly strict?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Surface renderer
|
|
30
|
+
*/
|
|
31
|
+
export interface SurfaceRenderer {
|
|
32
|
+
/**
|
|
33
|
+
* Render an interpreted surface
|
|
34
|
+
*/
|
|
35
|
+
render(surface: InterpretedSurface, options?: RenderOptions): RenderResult;
|
|
36
|
+
/**
|
|
37
|
+
* Render a layout directly
|
|
38
|
+
*/
|
|
39
|
+
renderLayout(layout: LayoutJSON, context: RenderContext): LayoutResult;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Deterministic surface renderer implementation
|
|
43
|
+
*
|
|
44
|
+
* This renderer guarantees:
|
|
45
|
+
* - Same input produces same output
|
|
46
|
+
* - No hidden state or side effects
|
|
47
|
+
* - Predictable ordering
|
|
48
|
+
*/
|
|
49
|
+
export declare class DeterministicRenderer implements SurfaceRenderer {
|
|
50
|
+
render(surface: InterpretedSurface, options?: RenderOptions): RenderResult;
|
|
51
|
+
renderLayout(layout: LayoutJSON, context: RenderContext): LayoutResult;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create a new surface renderer
|
|
55
|
+
*/
|
|
56
|
+
export declare function createRenderer(): SurfaceRenderer;
|
|
57
|
+
/**
|
|
58
|
+
* Render a surface to a render tree
|
|
59
|
+
*/
|
|
60
|
+
export declare function renderSurface(surface: InterpretedSurface, options?: RenderOptions): RenderResult;
|
|
61
|
+
/**
|
|
62
|
+
* Check if a render result is successful
|
|
63
|
+
*/
|
|
64
|
+
export declare function isRenderSuccess(result: RenderResult): result is {
|
|
65
|
+
success: true;
|
|
66
|
+
output: RenderOutput;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Check if a render result is a failure
|
|
70
|
+
*/
|
|
71
|
+
export declare function isRenderError(result: RenderResult): result is {
|
|
72
|
+
success: false;
|
|
73
|
+
error: RenderError;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Serialize a render node to JSON
|
|
77
|
+
*/
|
|
78
|
+
export declare function serializeNode(node: RenderNode): object;
|
|
79
|
+
/**
|
|
80
|
+
* Serialize render output to JSON
|
|
81
|
+
*/
|
|
82
|
+
export declare function serializeOutput(output: RenderOutput): object;
|
|
83
|
+
/**
|
|
84
|
+
* Compute a hash of a render node for determinism verification
|
|
85
|
+
*
|
|
86
|
+
* Same input should always produce same hash
|
|
87
|
+
*/
|
|
88
|
+
export declare function hashNode(node: RenderNode): string;
|
|
89
|
+
/**
|
|
90
|
+
* Verify determinism by rendering twice and comparing hashes
|
|
91
|
+
*/
|
|
92
|
+
export declare function verifyDeterminism(surface: InterpretedSurface, options?: RenderOptions): {
|
|
93
|
+
deterministic: boolean;
|
|
94
|
+
hash1: string;
|
|
95
|
+
hash2: string;
|
|
96
|
+
};
|