aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2020-07-15 09:51:03 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-02 14:24:49 +0000
commite5509f8214e64c81c0b98142ce76aa70bdc06512 (patch)
treebbd720c68526f56935b548e0d380c954dae1dd44
parentOp: vis method instead of field (diff)
downloadalive-e5509f8214e64c81c0b98142ce76aa70bdc06512.tar.gz
alive-e5509f8214e64c81c0b98142ce76aa70bdc06512.zip
add vis/bar
-rw-r--r--alv-lib/vis.moon41
1 files changed, 41 insertions, 0 deletions
diff --git a/alv-lib/vis.moon b/alv-lib/vis.moon
new file mode 100644
index 0000000..f39eb25
--- /dev/null
+++ b/alv-lib/vis.moon
@@ -0,0 +1,41 @@
+import Constant, Op, T, Input, sig, evt from require 'alv.base'
+
+bar = Constant.meta
+ meta:
+ name: 'bar'
+ summary: "visualize number as a bar."
+ examples: { '(vis/bar val [[min] max])' }
+ description: "
+Visualizes `val` as a bar with range `min, max`.
+`val` can be a `num~` or `num!`, `min` and `max` are optional `num~`.
+`min` defaults to `0` and `max` defaults to `1`."
+
+ value: class extends Op
+ pattern = (sig.num / evt.num) + -sig.num + -sig.num
+ setup: (inputs, scope) =>
+ { val, min, max } = pattern\match inputs
+ if not max
+ min, max = nil, min
+
+ @out = val.result\fork!
+
+ super
+ val: Input.hot val
+ min: Input.cold min or Constant.num 0
+ max: Input.cold max or Constant.num 1
+
+ tick: =>
+ { :val, :min, :max } = @unwrap_all!
+ delta = max - min
+ @state = (val / delta) - min
+ @out\set val
+
+ vis: =>
+ {
+ type: 'bar'
+ bar: @state
+ }
+
+{
+ :bar
+}