Repository navigation
Release v4.15.0
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,BindingScopeandQueryBindingStateresolve 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,removeComponentOutputsandQueryBindingStatein@cratis/scene.enginegive 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)useBoundQueryin@cratis/scene.reactreruns 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)stackCommandFormLayoutand the command form'swidthSizeClassproperty: atCompacta manual form stacks its fields in one column in reading order. See Command form geometry. (part of #71)applyCommandFormLayoutKeyand thecommandFormLayoutproperty 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)resolvePackageHostresolves the UI profile'slayoutandthemefrom the approved packages ashost.layoutandhost.theme. See Package hosting. (part of #75)isNetworkAssetdecides which package assets reach beyond the host. (part of #75)
Changed
- A
RenderBindingScopeProviderrendered 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
constructorandlengthresolve as absent, and aliteralbinding 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:andblob:, and protocol-relative//host/...references, not onlyhttpandhttps. The diagnostic names the assets. (part of #75)