import "math/event" for Event class Observable{ value{_value} value=(v){ _event.emit([v]) _value = v } value_no_update=(v){_value = v} event{_event} static new(value){ var variable = new() variable.value_no_update = value return variable } construct new(){ _event = Event.new() } on_change(fn){ return _event.listen(fn) } on_change(initial, fn){ if(initial){ fn.call(value) } return on_change(fn) } not_on_change(fn){ _event.unlisten(fn) } on_not_null(fn){ if(value){ fn.call(value) } else { _event.once(fn) } } }