Promote a Rule tree to a fluent Condition. The function form evaluates
the tree against a RuleCtx; combinator methods produce new Conditions
wrapping all/any/not nodes.
Chain semantics: strict left-to-right. No boolean precedence.
focused.or(hovering).and(selectionIs(1)) evaluates
((focused || hovering) && selectionIs(1)) — NOT
(focused || (hovering && selectionIs(1))) as standard precedence
would give. For grouped disjunction, use the top-level or / and /
not helpers or name intermediates.
Combinators flatten same-kind nesting on construction so a.and(b).and(c)
produces { all: [a, b, c] } rather than { all: [{ all: [a, b] }, c] }.
Canonical form simplifies downstream introspection.
Promote a Rule tree to a fluent Condition. The function form evaluates the tree against a RuleCtx; combinator methods produce new Conditions wrapping
all/any/notnodes.Chain semantics: strict left-to-right. No boolean precedence.
focused.or(hovering).and(selectionIs(1))evaluates((focused || hovering) && selectionIs(1))— NOT(focused || (hovering && selectionIs(1)))as standard precedence would give. For grouped disjunction, use the top-levelor/and/nothelpers or name intermediates.Combinators flatten same-kind nesting on construction so
a.and(b).and(c)produces{ all: [a, b, c] }rather than{ all: [{ all: [a, b] }, c] }. Canonical form simplifies downstream introspection.Use when for the inline-lambda escape hatch.