<notatio-manipulate>
<notatio-manipulate params="{a, 1, 5}"> -- a generic Wolfram-style Manipulate: it renders a slider (or setter) per parameter and re-binds those parameters into its slotted content live. Any descendant attribute that is a notatio expression containing a named wildcard (_a) is treated as a template: the wildcard is compute-engine's slot notation, filled from the control a and re-evaluated on every change. So the same wrapper drives a plot, a glyph, several elements at once, or plain markup:
``html <notatio-manipulate params="{n, 1, 8, 1}"> <notatio-plot value="Sin(_n * x)" /> <notatio-figure kind="subset" value="[1]" n="_n" /> </notatio-manipulate> ``
A slot body is any notatio expression over the parameter wildcards (_n * 20), evaluated through the engine. Every slider carries a play button (▶) that animates it on a loop. Plots/surfaces also accept a params attribute directly as a shorthand for the single-child case.
A dragged slider applies immediately. Playback, on the other hand, advances *continuously* — covering one step per interval, but moving through the values in between rather than jumping between them, which is what makes a swept parameter look smooth on a target that redraws in under a frame. A whole-number step (an order, a count) stays on its grid regardless.
fps shows a frame-rate readout, measured only while a slider is playing; an idle Manipulate renders nothing and reports nothing. Controls sit above the content by default (controls="below" to flip). loop says what playback does at the ends -- cycle (the default, Manipulate's own), reflect or none -- and a long press on any play button opens a panel for that and for the speed.
Prose mode. Give it prose and the control panel is a *sentence* instead of a strip of sliders -- Tangle's idea, with Manipulate's declaration. The string is running text with holes: {k} names a parameter and becomes a draggable knob with that parameter's range, anything else in braces ({2 * _k + 1}) becomes a readout, and $…$ is typeset. Options ride after a bar -- {k | axis=y play}, {N(_a) | digits=4} -- so the range stays in params and the hole says only how the value is shown.
``html <notatio-manipulate params="{k, 1, 8, 1}; {a, 0, 2, 0.1}" prose="The curve $\sin(kx)$ with frequency {k}, scaled by {a}, crosses zero {2 * _k + 1} times."> <notatio-plot value="_a Sin(_k x)" /> </notatio-manipulate> ``
The knobs are ordinary <notatio-knob>s with every gesture that implies -- gears, keyboard, typing, Space to play -- and the content below re-derives as they move.
Attributes
| Attribute | Type | Default | Notes |
|---|---|---|---|
params | string | "" | Control tuples: {a, min, max}, {a, min, max, step}, { {a, init}, min, max} or a discrete {k, {1, 2, 3}}; separate several with ; or ,. |
controls | string | "above" | below puts the control panel under the content instead of above it. |
prose | string | "" | A sentence to render as the control panel, with {k} holes for the parameters. |
loop | Loop | "" | loop),
interval: NotatioManipulate.PLAY_INTERVAL_MS,
motion: "continuous",
update: () => this.#onFrame(),
},
openPlaybackMenu,
LONG_PRESS_MS,
) | What playback does at the ends: cycle (default), reflect or none.reflects |
fps | boolean | false | Show a frame-rate readout while a slider is playing. |