Skip to content

Release v4.15.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 05:42
cd7599e

The C# engine now resolves and validates bindings exactly like the TypeScript engine, nested templates get their own binding scope, bound queries discard stale results, command forms stack at compact widths and can be arranged from the keyboard, and a package host resolves the whole UI profile from one configuration.

Added

  • Cratis.Scene.Engine.Bindings: BindingResolver, BindingValidation, BindingScope and QueryBindingState resolve data context, query, component output and literal bindings with the same null behavior, diagnostics and cycle detection as the TypeScript engine. See Binding resolution. (part of #69)
  • nestBindingScope, removeComponentOutputs and QueryBindingState in @cratis/scene.engine give nested templates their own data context, drop the outputs of elements that leave the tree, and accept a bound query's result only for its latest run. (part of #69)
  • useBoundQuery in @cratis/scene.react reruns a bound query when its arguments change, aborts the previous run, ignores its late answer and clears the result when the selection is cleared or the rebind fails. (part of #69)
  • stackCommandFormLayout and the command form's widthSizeClass property: at Compact a manual form stacks its fields in one column in reading order. See Command form geometry. (part of #71)
  • applyCommandFormLayoutKey and the commandFormLayout property editor move a form field with the arrow keys and resize it with Shift and an arrow key, announcing moves that would leave the declared columns. (part of #71)
  • resolvePackageHost resolves the UI profile's layout and theme from the approved packages as host.layout and host.theme. See Package hosting. (part of #75)
  • isNetworkAsset decides which package assets reach beyond the host. (part of #75)

Changed

  • A RenderBindingScopeProvider rendered inside another now nests its data context, query results and component outputs over the inherited scope; previously it ignored them. (part of #69)
  • Binding paths read only own properties and array indexes, so inherited members such as constructor and length resolve as absent, and a literal binding with a null value counts as absent, matching the C# engine. (part of #69)
  • A package host is blocked with a diagnostic when the UI profile names a layout or theme no approved package provides, or a theme incompatible with the profile's packages. (part of #75)
  • With network assets forbidden, a host now blocks any absolute URL other than data: and blob:, and protocol-relative //host/... references, not only http and https. The diagnostic names the assets. (part of #75)