feat: BindableFloat — universal value source binding for all scalar properties
Lint & Test / test (push) Successful in 1m20s
Lint & Test / test (push) Successful in 1m20s
Introduce BindableFloat abstraction that allows any numeric property to be
either a static value or dynamically driven by a ValueSource. Backward-compatible
serialization: plain float when unbound, {value, source_id} dict when bound.
Backend:
- storage/bindable.py — BindableFloat dataclass + bfloat() helper
- 25+ scalar properties converted across all entity types
- Runtime VS acquisition in ColorStripStreamManager for CSS bindings
- All stream hot loops use self.resolve() for live values
- KeyColorsColorStripStream now inherits ColorStripStream
Frontend:
- BindableScalarWidget (slider + VS picker toggle) for all editors
- TypeScript BindableFloat type + helpers
- Graph editor edges for all bindable properties
- Audio source channel IconSelect grid
Fixes: daylight longitude, candlelight wind_strength/candle_type from_dict
This commit is contained in:
@@ -105,7 +105,7 @@ class TestOutputTargetUpdate:
|
||||
t = store.create_target("LED", "led", fps=30, protocol="ddp")
|
||||
updated = store.update_target(t.id, fps=60, protocol="drgb")
|
||||
assert isinstance(updated, WledOutputTarget)
|
||||
assert updated.fps == 60
|
||||
assert updated.fps.value == 60.0
|
||||
assert updated.protocol == "drgb"
|
||||
|
||||
def test_update_not_found(self, store):
|
||||
|
||||
Reference in New Issue
Block a user