Snapshot / Snapshot Demos Repo ↗

⚠️ One cell works, one doesn't — on purpose.

This notebook has two @bind widgets:

  1. a plain slider that compiles fine — drag it below and it recomputes live;

  2. a combine()‑shaped widget (two <input>s → one value) that WasmTarget can't compile to WebAssembly yet, so that cell is published as a static snapshot with a clear "not interactive in this export" note.

Interactivity is judged per cell, so a single unsupported widget doesn't sink the rest. Because something fell back, the sidebar labels the whole notebook limited.

✅ A working slider (compiles to WebAssembly)

@bind k TinySlider(12)

k = 1, and = 1 — this updates as you drag.

⚠️ A combine()-shaped widget (not supported yet)

begin
	# combine()-shaped widget: multiple <input> children, the client sends a
	# Vector of child values, transform_value reshapes it server-side. No
	# usable initial_value → the pipeline must introspect the rendered html
	# (and the defining cell below SUPPRESSES its output with `;`, so the html
	# can only come from the workspace's bond registry).
	struct DuoWidget end
	function Base.show(io::IO, ::MIME"text/html", ::DuoWidget)
		write(io, "<span><input type=color value=\"#aabbcc\"><input type=range min=1 max=3 value=2></span>")
	end
	Bonds.initial_value(::DuoWidget) = missing
	Bonds.transform_value(::DuoWidget, raw) = raw === missing ? missing : (color=string(raw[1]), n=Int(raw[2]))
end
duo_widget = @bind duo DuoWidget();
"color #aabbcc n 2"
duo === missing ? "color #aabbcc n 2" : "color $(duo.color) n $(duo.n)"