Problem
WebScene now renders bounded single-function brightness(), grayscale(), contrast(), and blur() filters, but unchanged Code OSS also uses compound foreground lists such as blur(var(...)) saturate(...). The retained emitter recognizes only exact single functions, so even supported compound lists are silently omitted and authored filter order is lost.
Scope
- Parse a bounded whitespace-separated foreground filter list in authored order.
- Support numeric
brightness(), grayscale(), contrast(), and saturate() plus pixel blur(), including repeated functions. saturate() adds the missing color-matrix primitive used by an unchanged Code OSS compound filter.
- Emit kind 30 groups in reverse-authored nesting order and kind 31 closes in authored order, so SaveLayer restoration applies CSS functions left-to-right; enforce an explicit small function-count bound.
- Keep unsupported functions and unresolved
var()/calc() lists fail-closed until their own slices exist; never partially apply a compound list.
- Preserve opacity, transforms, clips, descendants, teardown, and Skia/Flutter parity.
- Add native retained-order and browser computed-value regression coverage.
Validation debt
Browser/native pixels, damage expansion, performance, memory, lifecycle, exact package, and CI gates remain required before release promotion but are deferred under the current implementation-throughput directive.
Parent: #256. Coordination: #235/#241/#243.
Problem
WebScene now renders bounded single-function
brightness(),grayscale(),contrast(), andblur()filters, but unchanged Code OSS also uses compound foreground lists such asblur(var(...)) saturate(...). The retained emitter recognizes only exact single functions, so even supported compound lists are silently omitted and authored filter order is lost.Scope
brightness(),grayscale(),contrast(), andsaturate()plus pixelblur(), including repeated functions.saturate()adds the missing color-matrix primitive used by an unchanged Code OSS compound filter.var()/calc()lists fail-closed until their own slices exist; never partially apply a compound list.Validation debt
Browser/native pixels, damage expansion, performance, memory, lifecycle, exact package, and CI gates remain required before release promotion but are deferred under the current implementation-throughput directive.
Parent: #256. Coordination: #235/#241/#243.