Block Reference
Every building block an object may be composed of, with its properties, their types, defaults and ranges. This page is generated from the live registry, so it cannot drift from what the compiler will accept.
How to read this page
- Primitives and modifiers and behaviours list properties; a node sets them as constants under
properties, or as bindings underbindingsfor the same names. A binding always wins. - Components list parameters; a node sets them under
parameters, each one a constant or a binding. - A default written
"token:stroke.accent"is read through the design tokens, so it follows the board's preset rather than being a fixed colour. - A range column reading
min 0, max 1clamps the value; one listing alternatives is the set the value must come from. - Every drawing block also carries
fill,stroke,strokeWidth,strokeDash,strokeLinecap,opacityandvisible.
The same catalogue is available to an agent at runtime through list_building_blocks, search_building_blocks and get_building_block_schema, which read the registry directly.
Limits
| Limit | Value |
|---|---|
| Nodes in one object | 2 000 |
| Nesting depth | 16 |
| Component nesting depth | 8 |
repeat count | 720 |
| Characters in one expression | 512 |
| Rows in one memory | 2 000, at six decimals |
image sources | https:, data:image/ and relative paths |
path data | The SVG path grammar only |
Primitives
The blocks that draw. A node names one as its type, and sets these under properties as constants or under bindings as declarative values.
arc circle clip-box ellipse group image line path polygon polyline rect ring text
arc — Arc
Circular arc or annular sector measured clockwise from the start angle.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
centerX | number | 0 | |
centerY | number | 0 | |
radius | number | 40 | min 0 |
innerRadius | number | 0 | min 0 |
startAngle | number | 225 | |
endAngle | number | -45 |
circle — Circle
Circle defined by a centre point and a radius.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
centerX | number | 0 | |
centerY | number | 0 | |
radius | number | 40 | min 0 |
clip-box — Clip box
Container showing only the part of its children that falls inside it.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
x | number | 0 | |
y | number | 0 | |
width | number | 100 | min 0 |
height | number | 60 | min 0 |
ellipse — Ellipse
Ellipse defined by a centre point and two radii.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
centerX | number | 0 | |
centerY | number | 0 | |
radiusX | number | 50 | min 0 |
radiusY | number | 30 | min 0 |
group — Group
Container that positions, rotates and scales its children as one unit.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" |
image — Image
Bitmap or SVG image placed in a box. Only https:, data: and same-origin relative sources are allowed.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
x | number | 0 | |
y | number | 0 | |
width | number | 60 | min 0 |
height | number | 60 | min 0 |
href | string | "" | |
preserveAspectRatio | string | "xMidYMid meet" |
line — Line
Straight line segment between two points.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
x1 | number | 0 | |
y1 | number | 0 | |
x2 | number | 100 | |
y2 | number | 0 |
path — Path
Raw SVG path data. Commands are restricted to the standard path grammar.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
d | string | "" |
polygon — Polygon
Closed sequence of connected points.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
points | points | [] |
polyline — Polyline
Open sequence of connected points.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
points | points | [] |
rect — Rectangle
Axis-aligned rectangle with optional corner radius.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
x | number | 0 | |
y | number | 0 | |
width | number | 100 | min 0 |
height | number | 60 | min 0 |
cornerRadius | number | 0 | min 0 |
ring — Ring
Full annulus between an inner and an outer radius.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
centerX | number | 0 | |
centerY | number | 0 | |
innerRadius | number | 30 | min 0 |
outerRadius | number | 40 | min 0 |
text — Text
Single line of text anchored at a point.
| Property | Type | Default | Range |
|---|---|---|---|
fill | colour | "none" | |
stroke | colour | "none" | |
strokeWidth | number | 1 | min 0, max 100 |
strokeDash | string | "" | |
strokeLinecap | string | "round" | butt | round | square |
opacity | number | 1 | min 0, max 1 |
visible | boolean | true | |
pointerEvents | string | "" | |
x | number | 0 | |
y | number | 0 | |
text | string | "" | |
unit | string | "" | |
fontSize | number | "token:font.size.default" | min 1, max 400 |
fontFamily | string | "token:font.family" | |
fontWeight | number | "token:font.weight.default" | min 100, max 900 |
textAnchor | string | "middle" | start | middle | end |
baseline | string | "central" | auto | central | hanging |
Modifiers
Applied to a node and everything under it, in the order the modifiers array lists them.
fill mirror opacity repeat rotate scale stroke translate visibility z-order
fill — Fill
Overrides the fill colour of a node.
| Property | Type | Default | Range |
|---|---|---|---|
color | colour | null |
mirror — Mirror
Mirrors a node about a horizontal or vertical axis through an anchor point.
| Property | Type | Default | Range |
|---|---|---|---|
axis | string | "horizontal" | horizontal | vertical |
centerX | number | 0 | |
centerY | number | 0 |
opacity — Opacity
Sets the opacity of a node or group.
| Property | Type | Default | Range |
|---|---|---|---|
value | number | 1 | min 0, max 1 |
repeat — Repeat
Repeats the node it is applied to, offsetting each copy by an angle step, a translation or a scale. The copy index is available to bindings as the parameter $index.
| Property | Type | Default | Range |
|---|---|---|---|
count | number | 1 | min 0 |
angleStep | number | 0 | |
angleStart | number | 0 | |
centerX | number | 0 | |
centerY | number | 0 | |
dx | number | 0 | |
dy | number | 0 |
rotate — Rotate
Rotates a node clockwise around an anchor point, in degrees.
| Property | Type | Default | Range |
|---|---|---|---|
angle | number | 0 | |
centerX | number | 0 | |
centerY | number | 0 |
scale — Scale
Scales a node around an anchor point.
| Property | Type | Default | Range |
|---|---|---|---|
scaleX | number | 1 | |
scaleY | number | 1 | |
centerX | number | 0 | |
centerY | number | 0 |
stroke — Stroke
Overrides the stroke colour, width and dash pattern of a node.
| Property | Type | Default | Range |
|---|---|---|---|
color | colour | null | |
width | number | null | min 0 |
dash | string | null |
translate — Translate
Moves a node or group by an offset.
| Property | Type | Default | Range |
|---|---|---|---|
dx | number | 0 | |
dy | number | 0 |
visibility — Visibility
Shows or hides a node, typically bound to a model condition.
| Property | Type | Default | Range |
|---|---|---|---|
visible | boolean | true |
z-order — Z order
Sorts siblings; higher values are drawn on top.
| Property | Type | Default | Range |
|---|---|---|---|
order | number | 0 |
Behaviours
What the reader can do to a node, and what that writes. Listed on the node under behaviours.
clickable drag-angle drag-axis-tick drag-circle-point drag-rotate draggable follow-pointer forget hoverable keep-time play-note press-and-slide remember resizable respond-to-simulation rotatable selectable tooltip track-pointer
clickable — Clickable
Writes a value into a model variable or into a component parameter when the node is clicked. The value is a binding like any other, so a key can write what the model or the object itself currently holds rather than only a constant.
| Property | Type | Default | Range |
|---|---|---|---|
variable | variable | "" | |
property | string | "" | |
value | number | 0 |
drag-angle — Drag angle
Lets the user drag the node around an anchor point and writes the resulting angle back into a model variable, using the same angle-to-value mapping the node was bound with. Naming a length as well makes the node reach the pointer rather than only point at it: how far the pointer stands from the anchor is written as the length, in the units the node is drawn in, so one drag both turns the thing and stretches it.
| Property | Type | Default | Range |
|---|---|---|---|
variable | variable | "" | |
property | string | "" | |
verticalVariable | variable | "" | |
verticalProperty | string | "" | |
centerX | number | 0 | |
centerY | number | 0 | |
degreesPerUnit | number | 6 | |
offsetDegrees | number | 0 | |
signed | boolean | false | |
minimum | number | null | |
maximum | number | null | |
wrapAt | number | null | |
lengthVariable | variable | "" | |
lengthProperty | string | "" | |
pixelsPerUnit | number | 1 | |
minimumLength | number | null | |
maximumLength | number | null | |
hoverFill | colour | "none" | |
hoverOpacity | number | 0.15 | min 0, max 1 |
drag-axis-tick — Drag axis tick
Rescales an axis by dragging one of its ticks: the tick follows the pointer and the far end of the axis moves with it, writing the object's own maximum. An axis standing on zero is pulled from the middle, naming no minimum property and handing nought over as the minimum value, so what it writes is how far the drawing reaches from the origin. The same interaction, and the same arithmetic, the chart's axes have. An axis whose ticks are placed by the logarithm of their value is dragged in decades rather than in values, and one that says how many parts it is cut into rather than how much one part is worth keeps the part and writes the count, so its numbers stay the same distance apart and there are more or fewer of them.
| Property | Type | Default | Range |
|---|---|---|---|
axis | string | "x" | x | y |
value | number | 0 | |
minimumProperty | string | "" | |
minimumValue | number | null | |
maximumProperty | string | "" | |
scale | string | "linear" | linear | logarithmic |
countProperty | string | "" | |
stepValue | number | 0 | |
originPixel | number | 0 | |
lengthPixels | number | 0 | min 0 |
drag-circle-point — Drag a point round a circle
Drags a point round a circle and writes back everything the circle is read for at once: the angle the point stands at, how far out it stands, how far across and how far up it is, the tangent of that angle and the length of the arc it has swept. Each of them goes into the term its row names, or into the object's own parameter when that row holds a plain number instead, and a row the model works out for itself is left alone — so a circle whose angle a definition gives is still dragged where it writes the point. Asking for a number of divisions makes the angle land on one of them: the point follows the pointer while it is held and lands on the nearest division, exactly, the moment it is let go. The whole drag is one edit.
| Property | Type | Default | Range |
|---|---|---|---|
centerX | number | 0 | |
centerY | number | 0 | |
pixelsPerUnit | number | 1 | |
unitsPerTurn | number | 360 | |
angleValue | number | 0 | |
angleVariable | variable | "" | |
angleProperty | string | "" | |
radiusVariable | variable | "" | |
radiusProperty | string | "" | |
stretch | boolean | false | |
minimumRadius | number | null | |
maximumRadius | number | null | |
xVariable | variable | "" | |
xProperty | string | "" | |
yVariable | variable | "" | |
yProperty | string | "" | |
tangentVariable | variable | "" | |
tangentProperty | string | "" | |
arcVariable | variable | "" | |
arcProperty | string | "" | |
snapDivisions | number | 0 | min 0, max 360 |
hoverFill | colour | "none" | |
hoverOpacity | number | 0.15 | min 0, max 1 |
drag-rotate — Drag rotate
Lets the user turn the node around an anchor point by dragging it. The variable moves by the angle the pointer travels, so the grabbed point follows the pointer instead of jumping to it, which is what a rose, a bezel or a dial ring needs.
| Property | Type | Default | Range |
|---|---|---|---|
variable | variable | "" | |
property | string | "" | |
verticalVariable | variable | "" | |
verticalProperty | string | "" | |
centerX | number | 0 | |
centerY | number | 0 | |
degreesPerUnit | number | 1 | |
minimum | number | null | |
maximum | number | null | |
wrapAt | number | null | |
hoverFill | colour | "none" | |
hoverOpacity | number | 0.15 | min 0, max 1 |
draggable — Draggable
The object can be moved with the move handle. Provided by the host shape for every component.
follow-pointer — Follow pointer
Reports where the pointer is over the node, in the units the node is scaled in, so a drawing can show the value under the cursor. What is reported is not kept: it lasts as long as the pointer is over the node, and the model is not touched.
| Property | Type | Default | Range |
|---|---|---|---|
xParameter | string | "" | |
yParameter | string | "" | |
activeParameter | string | "" | |
originX | number | 0 | |
originY | number | 0 | |
scaleX | number | 1 | |
scaleY | number | -1 | |
minimumX | number | null | |
maximumX | number | null | |
minimumY | number | null | |
maximumY | number | null | |
whilePlaying | boolean | false |
forget — Forget
Empties one of the object's memories when the node is clicked.
| Property | Type | Default | Range |
|---|---|---|---|
memory | string | "" |
hoverable — Hoverable
The node reacts to pointer hover with the standard highlight cursor.
| Property | Type | Default | Range |
|---|---|---|---|
cursor | string | "pointer" |
keep-time — Keep time
A transport key for a reading of the clock: play sets it counting real time from wherever it stands, pause holds it there, and stop ends the run and clears it. A key set to toggle is both — it starts a clock standing still and holds a clock that is counting, so one key does the work of two. What is counted is written into the four parts of the reading — the hours, the minutes, the seconds and the thousandths — each into the term that part names, or into the object's own property when it names a plain number instead. The whole run is one edit.
| Property | Type | Default | Range |
|---|---|---|---|
action | string | "play" | play | pause | stop | toggle |
hourVariable | variable | "" | |
hourProperty | string | "" | |
minuteVariable | variable | "" | |
minuteProperty | string | "" | |
secondVariable | variable | "" | |
secondProperty | string | "" | |
millisecondVariable | variable | "" | |
millisecondProperty | string | "" | |
runningParameter | string | "" | |
intervalMs | number | 33 | min 10, max 1000 |
play-note — Play a note
A key of an instrument: it sounds its own pitch for as long as it is held, and stops when it is let go. Several keys sound together, whether they are held by several fingers or by several computer keys at once, and sliding across them plays them in turn. The object reports the notes it is holding into a parameter of its own, so its drawing can show which keys are down and what it publishes can be worked out from the chord. Nothing is written down: a file remembers no note left sounding.
| Property | Type | Default | Range |
|---|---|---|---|
frequency | number | 0 | min 0 |
note | number | 0 | |
keyCode | string | "" | |
notesParameter | string | "" |
press-and-slide — Press and slide
A control the reader holds down: pressing keeps the value where it is, sliding the pointer up raises it and down lowers it, by however far it travelled, and letting go lets the value fall back to its resting value a step at a time. It is what a pedal or a throttle needs — nothing is written by pressing alone, and the whole gesture, the fall back included, is one edit.
| Property | Type | Default | Range |
|---|---|---|---|
variable | variable | "" | |
property | string | "" | |
verticalVariable | variable | "" | |
verticalProperty | string | "" | |
bearing | number | null | |
unitsPerPixel | number | 1 | |
restValue | number | 0 | |
returnStep | number | 0 | min 0 |
intervalMs | number | 100 | min 20, max 5000 |
minimum | number | null | |
maximum | number | null | |
hoverFill | colour | "none" | |
hoverOpacity | number | 0.15 | min 0, max 1 |
remember — Remember
Appends a row to one of the object's memories when the node is clicked. A row carries a label and two numbers, all of them bindings, so a key records what the object held at the moment it was pressed.
| Property | Type | Default | Range |
|---|---|---|---|
memory | string | "" | |
text | string | "" | |
x | number | 0 | |
y | number | 0 | |
limit | number | 50 | min 1, max 2000 |
resizable — Resizable
The object can be resized with the corner handles. Provided by the host shape for every component.
respond-to-simulation — Respond to simulation updates
Marks the object as redrawing on every simulation tick. Components with model bindings get this automatically.
rotatable — Rotatable
The object can be rotated with the rotation handle. Provided by the host shape for every component.
selectable — Selectable
The object can be selected on the board. Provided by the host shape for every component.
tooltip — Tooltip
Shows a native tooltip with a fixed or bound text when the pointer rests on the node.
| Property | Type | Default | Range |
|---|---|---|---|
text | string | "" |
track-pointer — Track pointer
Records where the pointer is while it is dragged over the node, one sample every sampling interval, into one of the object's memories. The sample is written in the units the node is scaled in, so what is recorded is a pair of values rather than a pair of pixels — and when the memory names model terms, the run becomes the values those terms take, iteration by iteration. Nothing is recorded until the pointer travels: a click that never moves leaves the memory alone, and a drag opens its run at the point the pointer went down.
| Property | Type | Default | Range |
|---|---|---|---|
memory | string | "" | |
mode | string | "replace" | replace | append |
xVariable | string | "" | |
xProperty | string | "" | |
yVariable | string | "" | |
yProperty | string | "" | |
limit | number | 600 | min 1, max 2000 |
sampleMs | number | 33 | min 10, max 1000 |
minimumMovePixels | number | 0 | min 0, max 50 |
breakOnDrag | boolean | false | |
originX | number | 0 | |
originY | number | 0 | |
scaleX | number | 1 | |
scaleY | number | -1 | |
minimumX | number | null | |
maximumX | number | null | |
minimumY | number | null | |
maximumY | number | null |
Components
Ready-made assemblies. A node names one as its type and sets these under parameters.
calculator circular-gauge clock compass dial-face key-cap label-ring mechanical-wave memory-list memory-trace mouse-tracker orbit-system oscilloscope piano piano-keyboard plot-axes plot-crosshair plot-grid pointer-hand pointer-ring protractor rotating-vector ruler seven-segment-display speedometer steering-wheel thermometer tick-ring trigonometric-circle
calculator — Calculator
Calculator whose working is held by the object itself: four functions on a narrow one, and a scientific pad of powers, roots, trigonometry and logarithms beside the digits once it is wide enough to hold one. Term keys load the value a model variable has at the iteration on screen, the result can be written back into a model variable, and every completed operation is kept in a history the object remembers and can be read back from.
| Parameter | Type | Default | Range |
|---|---|---|---|
n | number | 0 | |
a | number | 0 | |
p | number | 0 | |
s | number | 0 | |
dp | number | 0 | |
ad | number | 0 | |
fresh | number | 0 | |
inv | number | 0 | |
history | memory | [] | |
termA | variable | "" | |
termB | variable | "" | |
termC | variable | "" | |
termD | variable | "" | |
keyAColor | colour | "token:surface.muted" | |
keyBColor | colour | "token:surface.muted" | |
keyCColor | colour | "token:surface.muted" | |
keyDColor | colour | "token:surface.muted" | |
resultVariable | variable | "" | |
digits | number | 2 | min 0, max 6 |
scientific | boolean | true | |
angleUnit | string | "radians" | radians | degrees |
showHistory | boolean | true | |
historyLimit | number | 24 | min 1, max 200 |
bodyColor | colour | "token:surface.emphasis" | |
displayColor | colour | "token:surface.default" | |
keyColor | colour | "token:surface.default" | |
functionKeyColor | colour | "token:surface.muted" | |
accentColor | colour | "token:stroke.accent" | |
borderColor | colour | "token:stroke.subtle" | |
textColor | colour | "token:text.primary" | |
accentTextColor | colour | "token:text.inverse" | |
mutedTextColor | colour | "token:text.secondary" |
circular-gauge — Circular gauge
Ring gauge that fills clockwise in proportion to a model variable.
| Parameter | Type | Default | Range |
|---|---|---|---|
valueVariable | variable | "0" | |
minimum | number | 0 | |
maximum | number | 100 | |
startAngle | number | 90 | |
spanAngle | number | 360 | min 1, max 360 |
thickness | number | 0.22 | min 0.02, max 1 |
trackColor | colour | "token:surface.muted" | |
fillColor | colour | "token:stroke.accent" | |
labelColor | colour | "token:text.primary" | |
digits | number | 0 | min 0, max 6 |
unit | unit | "" | |
showReadout | boolean | true |
clock — Clock
Clock reading the hour, minute, second and millisecond a model gives it, or reading the model's own time as a count of seconds, shown either as a face with a hand for each or as a digital readout of the same time. The seconds and the milliseconds can each be left out, and what is left out goes from the face and from the readout alike. Run by its own keys it is a stopwatch: one key starts and holds it, one takes a lap, and one ends the run — and the laps it has taken are kept in a list of their own under the face.
| Parameter | Type | Default | Range |
|---|---|---|---|
syncedWithPlayer | boolean | false | |
hourVariable | variable | "0" | |
minuteVariable | variable | "0" | |
secondVariable | variable | "0" | |
millisecondVariable | variable | "0" | |
shownAs | string | "analogue" | analogue | digital |
showControls | boolean | false | |
showLaps | boolean | false | |
faceColor | colour | "token:surface.default" | |
borderColor | colour | "token:stroke.default" | |
hourColor | colour | "token:stroke.strong" | |
minuteColor | colour | "token:stroke.strong" | |
secondColor | colour | "token:stroke.warning" | |
millisecondColor | colour | "#00000000" | |
numberColor | colour | "token:text.primary" | |
buttonColor | colour | "token:surface.muted" | |
running | number | 0 | |
laps | memory | [] |
compass — Compass
Compass rose with cardinal labels, a needle whose heading comes from a model variable and a rose that a second variable can turn. The needle and the rim of the rose can be dragged to write those variables back.
| Parameter | Type | Default | Range |
|---|---|---|---|
headingVariable | variable | "0" | |
rotationVariable | variable | "0" | |
pointers | terms | [] | |
showDegrees | boolean | false | |
faceColor | colour | "token:surface.default" | |
borderColor | colour | "token:stroke.default" | |
tickColor | colour | "token:stroke.subtle" | |
needleColor | colour | "token:stroke.warning" | |
tailColor | colour | "token:stroke.subtle" | |
labelColor | colour | "token:text.primary" |
dial-face — Dial face
Circular face with an optional bezel ring, used as the background of clocks, gauges and compasses.
| Parameter | Type | Default | Range |
|---|---|---|---|
centerX | number | 0 | |
centerY | number | 0 | |
radius | number | 80 | min 1 |
faceColor | colour | "token:surface.default" | |
borderColor | colour | "token:stroke.default" | |
borderWidth | number | 2 | min 0, max 40 |
bezelWidth | number | 0 | min 0, max 60 |
bezelColor | colour | "token:surface.emphasis" |
key-cap — Key cap
Rounded key with a centred label. It carries no interaction of its own: put it inside a group and give that group the behaviour the key performs, so the same cap serves a keypad, a legend or a toolbar.
| Parameter | Type | Default | Range |
|---|---|---|---|
x | number | 0 | |
y | number | 0 | |
width | number | 44 | min 0 |
height | number | 32 | min 0 |
label | string | "" | |
fill | colour | "token:surface.default" | |
borderColor | colour | "token:stroke.subtle" | |
borderWidth | number | 1 | min 0 |
cornerRadius | number | 6 | min 0 |
labelColor | colour | "token:text.primary" | |
fontSize | number | 14 | min 1 |
fontWeight | number | 500 | min 100, max 900 |
label-ring — Label ring
Numeric or text labels placed evenly around a centre, always drawn upright.
| Parameter | Type | Default | Range |
|---|---|---|---|
centerX | number | 0 | |
centerY | number | 0 | |
radius | number | 60 | min 1 |
count | number | 12 | min 0, max 360 |
startAngle | number | 90 | |
spanAngle | number | 360 | |
includeEnd | boolean | false | |
startValue | number | 12 | |
valueStep | number | 1 | |
wrapAt | number | 12 | min 0 |
digits | number | 0 | min 0, max 6 |
numberFormat | string | "decimal" | decimal | pi |
texts | string | "" | |
fontSize | number | 12 | min 1 |
fontFamily | string | "token:font.family" | |
fontWeight | number | 400 | min 100, max 900 |
color | colour | "token:text.primary" |
mechanical-wave — Mechanical wave
A mechanical wave drawn as a chain of oscillators, each taking up the motion of the source as late as its distance from it. It repeats what a term of the model has been doing, one oscillator to each iteration of the run, or works its own wave out and hands the model the oscillator it is read at.
| Parameter | Type | Default | Range |
|---|---|---|---|
wave | variable | "" | |
amplitude | variable | "2" | |
frequency | variable | "0.5" | |
speed | variable | "5" | |
damping | variable | "0" | |
length | number | 20 | min 0.001 |
autoScale | boolean | true | |
minimumY | number | -2 | |
maximumY | number | 2 | |
samples | number | 30 | min 2, max 200 |
orientation | string | "transverse" | transverse | longitudinal | radial |
wavefront | boolean | true | |
elementSize | number | 4 | min 1, max 30 |
referenceIndex | number | 1 | min 0, max 200 |
showArrows | boolean | false | |
showLine | boolean | false | |
showAxes | boolean | false | |
backgroundColor | colour | "token:surface.default" | |
borderColor | colour | "token:stroke.subtle" | |
waveColor | colour | "token:stroke.accent" | |
referenceColor | colour | "token:stroke.strong" | |
axisColor | colour | "token:axis.color" |
memory-list — Memory list
The rows of a memory drawn as a list, newest first, with the label on the left and the number on the right. Rows can carry actions, so choosing one puts what it holds back into the object.
| Parameter | Type | Default | Range |
|---|---|---|---|
rows | object | [] | |
x | number | 0 | |
y | number | 0 | |
width | number | 120 | min 0 |
height | number | 160 | min 0 |
rowHeight | number | 20 | min 6 |
order | string | "newest" | newest | oldest |
layout | string | "row" | row | stacked |
digits | number | 2 | min 0, max 6 |
fontSize | number | "token:font.size.default" | min 1 |
textColor | colour | "token:text.secondary" | |
valueColor | colour | "token:text.primary" | |
rowColor | colour | "none" | |
cornerRadius | number | 4 | min 0 |
emptyText | string | "" | |
rowActions | object | [] |
memory-trace — Memory trace
The path the rows of a memory draw, mapped from the values they hold to the pixels of a plot with the same origin and scale the recording used.
| Parameter | Type | Default | Range |
|---|---|---|---|
rows | object | [] | |
originX | number | 0 | |
originY | number | 0 | |
scaleX | number | 1 | |
scaleY | number | -1 | |
color | colour | "token:stroke.accent" | |
lineWidth | number | 2 | min 0 |
opacity | number | 1 | min 0, max 1 |
shownRows | number | 0 | min 0 |
showPoints | boolean | false | |
pointRadius | number | 1.5 | min 0 |
clipX | number | 0 | |
clipY | number | 0 | |
clipWidth | number | 0 | min 0 |
clipHeight | number | 0 | min 0 |
mouse-tracker — Mouse tracker
Records where the pointer goes across the plot, against a horizontal and a vertical axis. Every drag adds to what is already there, drawn as a line of its own, so several of them build one recording made of separate runs. A click records nothing: the plot is only written to by a gesture that travels. The run is measurements: name a variable for each axis and it takes the value of sample n at iteration n, so the model's own player replays the gesture and everything reading those variables moves with it. A variable the model works out for itself is read rather than written: the gesture says where the model's input now stands, the definitions say what comes out of it, and that is the value the line is drawn through and the value the run remembers, so a recording made against a definition is in the model's own coordinates. The marker showing the sample on screen can be any character from the catalogue, placed by its pivot point.
| Parameter | Type | Default | Range |
|---|---|---|---|
samples | memory | [] | |
xVariable | variable | "0" | |
yVariable | variable | "0" | |
xVariableUnit | string | "" | |
yVariableUnit | string | "" | |
xValueColor | colour | "token:axis.color" | |
yValueColor | colour | "token:axis.color" | |
characterKey | character | "" | |
characterImage | string | "" | |
characterPivotX | number | 0.5 | |
characterPivotY | number | 0.5 | |
characterAspect | number | 1 | |
hoverX | number | 0 | |
hoverY | number | 0 | |
hovering | number | 0 | |
autoScale | boolean | false | |
equalScales | boolean | false | |
minimumX | number | 0 | |
maximumX | number | 10 | |
minimumY | number | 0 | |
maximumY | number | 10 | |
perStep | boolean | false | |
showGrid | boolean | false | |
showTicks | boolean | false | |
ticks | number | 5 | min 2, max 11 |
backgroundColor | colour | "token:surface.default" | |
dataAreaColor | colour | "token:surface.default" | |
axisColor | colour | "token:axis.color" | |
valueColor | colour | "token:stroke.warning" | |
foregroundColor | colour | "token:axis.labelColor" | |
borderColor | colour | "token:stroke.subtle" |
orbit-system — Orbit system
Central body with up to four orbiting bodies whose angular positions come from model variables or from simulation time and an orbital period.
| Parameter | Type | Default | Range |
|---|---|---|---|
timeVariable | variable | "t" | |
bodyCount | number | 3 | min 0, max 4 |
period1 | number | 4 | min 0.0001 |
period2 | number | 8 | min 0.0001 |
period3 | number | 16 | min 0.0001 |
period4 | number | 32 | min 0.0001 |
showOrbits | boolean | true | |
starColor | colour | "#f08c02" | |
bodyColor | colour | "token:stroke.accent" | |
orbitColor | colour | "token:stroke.subtle" |
oscilloscope — Oscilloscope
A screen the model's waves are read on. Each row of the list names a wave the model defined over element indices and draws it across a graticule, in a colour of its own, so as many of them as the reader names stand one over another. A row naming a term the model holds no elements of — one an object writes a point at a time — is read over the run instead, a point to each row: the trace fills the screen from the left as the run goes, and once the run has passed the right-hand edge the screen travels with it, so a term that was never a wave is drawn as the wave its points make and goes on being drawn where the model has got to. Resting the pointer on the screen stands a cursor on it and reads every trace where it crosses, and a mark left by a click measures the distance from there to the cursor — a wavelength taken crest to crest, and the wavenumber that follows from it.
| Parameter | Type | Default | Range |
|---|---|---|---|
waves | terms | [] | |
minimumX | number | -5 | |
maximumX | number | 5 | |
minimumY | number | -5 | |
maximumY | number | 5 | |
samples | number | 200 | min 2, max 300 |
ticks | number | 10 | min 2, max 11 |
showGrid | boolean | true | |
showTicks | boolean | true | |
showMark | boolean | false | |
markX | number | 0 | |
hoverX | number | 0 | |
hoverY | number | 0 | |
hovering | number | 0 | |
backgroundColor | colour | "#e0e0e0" | |
screenColor | colour | "#a5d6a7" | |
gridColor | colour | "#ffffff" | |
axisColor | colour | "#000000" | |
originColor | colour | "#000000" | |
cursorColor | colour | "token:stroke.default" | |
foregroundColor | colour | "token:axis.labelColor" | |
borderColor | colour | "token:stroke.subtle" |
piano — Piano
A piano keyboard played with the pointer or with the computer keys, several notes at a time, that hands the model the sound of the chord it is holding, a point of it on every row of the run.
| Parameter | Type | Default | Range |
|---|---|---|---|
wave | variable | "" | |
amplitude | variable | "1" | |
samples | number | 30 | min 2, max 2000 |
duration | number | 0.02 | min 0.001 |
firstOctave | number | 4 | min 0, max 8 |
octaves | number | 2 | min 1, max 4 |
notes | object | null | |
whiteColor | colour | "token:surface.default" | |
blackColor | colour | "token:stroke.strong" | |
pressedColor | colour | "token:stroke.accent" | |
borderColor | colour | "token:stroke.default" |
piano-keyboard — Piano keyboard
A run of piano keys, drawn and tuned from the note each one carries: the naturals share the width between them and the sharps ride over the seams. Every key sounds its own pitch while it is held, by pointer or by the computer key that plays it, and the keys that are down are drawn lit. Nothing is written on a key: a keyboard is read by where a key sits, not by a letter painted on it.
| Parameter | Type | Default | Range |
|---|---|---|---|
width | number | 420 | min 1 |
height | number | 120 | min 1 |
firstOctave | number | 4 | min 0, max 8 |
octaves | number | 2 | min 1, max 4 |
notes | object | null | |
notesParameter | string | "" | |
whiteColor | colour | "token:surface.default" | |
blackColor | colour | "token:stroke.strong" | |
pressedColor | colour | "token:stroke.accent" | |
borderColor | colour | "token:stroke.default" |
plot-axes — Plot axes
Horizontal and vertical axis of a plot box, with tick marks and numbered labels. Any object that shows a value against a scale reads the same way a chart does.
| Parameter | Type | Default | Range |
|---|---|---|---|
x | number | 0 | |
y | number | 0 | |
width | number | 100 | min 1 |
height | number | 100 | min 1 |
minimumX | number | 0 | |
maximumX | number | 10 | |
minimumY | number | 0 | |
maximumY | number | 10 | |
ticksX | number | 5 | min 2, max 41 |
ticksY | number | 5 | min 2, max 41 |
showTicks | boolean | true | |
showLabels | boolean | true | |
showBorder | boolean | false | |
showZeroLines | boolean | true | |
minimumXProperty | string | "" | |
maximumXProperty | string | "" | |
minimumYProperty | string | "" | |
maximumYProperty | string | "" | |
origin | string | "box" | box | zero |
showAxisLines | boolean | true | |
rangeProperty | string | "" | |
color | colour | "token:axis.color" | |
zeroColor | colour | "" | |
labelColor | colour | "token:axis.labelColor" | |
fontFamily | string | "token:font.family" | |
fontSize | number | "token:font.size.tick" | min 1 |
lineWidth | number | "token:axis.strokeWidth" | min 0 |
tickLength | number | "token:axis.tickLength" | min 0 |
plot-crosshair — Plot crosshair
Dashed lines from a point out to both axes, with the value it stands at read on a badge against each one — the way a chart answers where a point is.
| Parameter | Type | Default | Range |
|---|---|---|---|
x | number | 0 | |
y | number | 0 | |
width | number | 100 | min 1 |
height | number | 100 | min 1 |
minimumX | number | 0 | |
maximumX | number | 10 | |
minimumY | number | 0 | |
maximumY | number | 10 | |
valueX | number | 0 | |
valueY | number | 0 | |
rows | object | [] | |
digits | number | 2 | min 0, max 6 |
xUnit | string | "" | |
yUnit | string | "" | |
showBadges | boolean | true | |
color | colour | "token:stroke.default" | |
xColor | colour | "" | |
yColor | colour | "" | |
pointColor | colour | "token:stroke.accent" | |
axisBadgeColor | colour | "token:axis.labelColor" | |
badgeColor | colour | "token:text.secondary" | |
badgeTextColor | colour | "token:text.inverse" | |
fontFamily | string | "token:font.family" | |
fontSize | number | "token:font.size.tick" | min 1 |
plot-grid — Plot grid
Grid inside a plot box: one line at every tick of both axes, drawn the way the chart draws its own.
| Parameter | Type | Default | Range |
|---|---|---|---|
x | number | 0 | |
y | number | 0 | |
width | number | 100 | min 1 |
height | number | 100 | min 1 |
minimumX | number | 0 | |
maximumX | number | 10 | |
minimumY | number | 0 | |
maximumY | number | 10 | |
ticksX | number | 5 | min 2, max 41 |
ticksY | number | 5 | min 2, max 41 |
color | colour | "token:grid.color" | |
lineWidth | number | "token:strokeWidth.default" | min 0 |
pointer-hand — Pointer hand
A clock hand, gauge needle or compass pointer that rotates clockwise around an anchor. Angle 0 points up.
| Parameter | Type | Default | Range |
|---|---|---|---|
centerX | number | 0 | |
centerY | number | 0 | |
angle | number | 0 | |
length | number | 60 | min 0 |
tailLength | number | 0 | min 0 |
width | number | 4 | min 0 |
color | colour | "token:stroke.strong" | |
style | string | "needle" | needle | line | arrow |
dragVariable | variable | "" | |
dragProperty | string | "" | |
degreesPerUnit | number | 6 | |
offsetDegrees | number | 0 | |
wrapAt | number | 0 | min 0 |
pointer-ring — Pointer ring
Directions marked around a dial, one marker per row: a row names an angle, or a pair of values read as a vector — how far across and how far up. Each marker stands where the tick for its direction stands, so it is read against the same scale.
| Parameter | Type | Default | Range |
|---|---|---|---|
centerX | number | 0 | |
centerY | number | 0 | |
radius | number | 80 | min 1 |
length | number | 14 | min 0 |
width | number | 10 | min 0 |
startAngle | number | 90 | |
pointers | object | [] |
protractor — Protractor
A scale bent round a vertex to measure an angle against: a band of degrees numbered at every division, divided ten ways between one number and the next, standing on the arms it is read between. It is laid over whatever is being measured — a vector, a body's path, a drawing — and resting the pointer on it reads the angle from its zero. How far round it goes is its own, so the same object is a half circle, a quadrant or a whole dial, and the numbers the two ends read are its own too, so a protractor can be marked in degrees, in turns, or in whatever the model measures its angles in.
| Parameter | Type | Default | Range |
|---|---|---|---|
startAngle | number | 0 | min -360, max 360 |
endAngle | number | 180 | min -360, max 360 |
angleUnit | string | "degrees" | degrees | radians |
digits | number | 0 | min 0, max 6 |
faceColor | colour | "token:surface.default" | |
borderColor | colour | "token:stroke.default" | |
scaleColor | colour | "token:axis.color" | |
scaleLabelColor | colour | "token:axis.labelColor" | |
readingColor | colour | "token:stroke.accent" | |
hoverX | number | 0 | |
hoverY | number | 0 | |
hovering | number | 0 |
rotating-vector — Rotating vector
Phasor arrow whose angle and length come from model variables, with an optional reference circle and projections. The arrow reaches the pointer that drags it: one drag both turns it and stretches it, writing the angle and the length back together, so where the reader leaves the tip is where the arrow points and how far it goes.
| Parameter | Type | Default | Range |
|---|---|---|---|
angleVariable | variable | "0" | |
lengthVariable | variable | "1" | |
lengthScale | number | 1 | min 0 |
showCircle | boolean | true | |
showProjections | boolean | false | |
backgroundColor | colour | "none" | |
vectorColor | colour | "token:stroke.accent" | |
circleColor | colour | "token:stroke.subtle" | |
circleFillColor | colour | "none" | |
projectionColor | colour | "token:stroke.subtle" |
ruler — Ruler
A scale laid across the board to measure against: a body ruled from one end to the other, cut into as many numbered parts as it is asked for, with the space between each pair of numbers divided ten ways and the halfway mark drawn taller. Resting the pointer on it reads the value it stands at, and pulling one of the numbers stretches the scale under it the way a chart's axis is stretched, so the ruler is set against what it is measuring rather than typed in. Read logarithmically it is a slide rule instead: the decades are evenly spread, numbered 1, 10, 100, and each is divided by the marks for 2 to 9 standing where their logarithms put them.
| Parameter | Type | Default | Range |
|---|---|---|---|
minimumX | number | 0 | |
maximumX | number | 10 | |
scaleType | string | "linear" | linear | logarithmic |
majorTicks | number | 10 | min 1, max 60 |
unit | unit | "" | |
digits | number | 2 | min 0, max 6 |
backgroundColor | colour | "token:surface.default" | |
borderColor | colour | "token:stroke.default" | |
scaleColor | colour | "token:axis.color" | |
scaleLabelColor | colour | "token:axis.labelColor" | |
readingColor | colour | "token:stroke.accent" | |
hoverValue | number | 0 | |
hoverDepth | number | 0 | |
hovering | number | 0 |
seven-segment-display — Seven-segment display
A reading spelled out in seven-segment lamps, the way a digital clock, a meter or a stopwatch shows one. Digits, the colon, the point and the minus sign are drawn as bars; the bars a character does not light are left showing faintly, the way the unlit ones on a real panel are. The text is fitted to the box it is given, so it is placed by handing it a box rather than a font size.
| Parameter | Type | Default | Range |
|---|---|---|---|
x | number | 0 | |
y | number | 0 | |
width | number | 120 | min 0 |
height | number | 40 | min 0 |
text | string | "" | |
color | colour | "token:text.primary" | |
colors | string | "" | |
ghostOpacity | number | 0.12 | min 0, max 1 |
thickness | number | 0.16 | min 0.02, max 0.4 |
digitWidth | number | 0.56 | min 0.2, max 1.5 |
spacing | number | 0.14 | min 0, max 1 |
slant | number | 0 | min -30, max 30 |
speedometer — Speedometer
Sweeping dial with a scale, a needle bound to a model variable and a numeric readout.
| Parameter | Type | Default | Range |
|---|---|---|---|
valueVariable | variable | "0" | |
minimum | number | 0 | |
maximum | number | 100 | |
startAngle | number | 225 | |
endAngle | number | -45 | |
majorTicks | number | 9 | min 2, max 60 |
minorPerMajor | number | 4 | min 0, max 20 |
digits | number | 0 | min 0, max 6 |
unit | unit | "" | |
showReadout | boolean | true | |
faceColor | colour | "token:surface.emphasis" | |
borderColor | colour | "token:stroke.default" | |
needleColor | colour | "token:stroke.warning" | |
labelColor | colour | "token:text.primary" | |
sound | audio | "" |
steering-wheel — Steering wheel
The controls a vehicle is driven with: a wheel turned by a model variable, drawn as a car wheel, a motorbike handlebar or a ship's helm, and the accelerator and brake of that same vehicle under it. The wheel, the pedals, and the brake among the pedals, can each be left out. Dragging the wheel turns it and writes back what it reads; the accelerator and the brake each press a value of its own up from zero, both above zero and both pressed the same way, each read the way the wheel is — a term, or a pair laid down along the bearing the wheel is turned to, forwards for the accelerator and back the other way for the brake.
| Parameter | Type | Default | Range |
|---|---|---|---|
turnedBy | string | "angle" | angle | orientation |
angleVariable | variable | "0" | |
angleUpVariable | variable | "0" | |
accelerationVariable | variable | "0" | |
accelerationUpVariable | variable | "0" | |
brakingVariable | variable | "0" | |
brakingUpVariable | variable | "0" | |
wheelType | string | "car" | car | motor bike | boat |
showWheel | boolean | true | |
showPedals | boolean | false | |
showBrake | boolean | true | |
brakeMaximum | number | 100 | min 0 |
maximum | number | 100 | |
pedalReturnStep | number | 10 | min 0 |
rimColor | colour | "token:stroke.default" | |
gripColor | colour | "token:stroke.subtle" | |
hubColor | colour | "token:surface.muted" | |
restingAngle | number | 0 | |
markColor | colour | "token:stroke.warning" | |
acceleratorColor | colour | "token:stroke.accent" | |
brakeColor | colour | "token:stroke.warning" | |
frameColor | colour | "token:stroke.default" | |
surfaceColor | colour | "token:surface.muted" |
thermometer — Thermometer
A temperature read as the height of a column: a bulb, a stem the liquid rises up, and a scale beside it marked every so many degrees. A dashed line carries the top of the column across to the scale, so the reading is placed against the marks the way a chart places a point against its axes. The column can be dragged to write the temperature back, and the marks and their numbers are the sizes the board's own axes are drawn to, so the scale stretches as the object is resized rather than the writing on it.
| Parameter | Type | Default | Range |
|---|---|---|---|
valueVariable | variable | "0" | |
minimum | number | -20 | |
maximum | number | 120 | |
tickStep | number | 20 | min 0 |
digits | number | 1 | min 0, max 6 |
unit | string | "°C" | °C | °F |
showReadout | boolean | true | |
columnColor | colour | "token:stroke.warning" | |
glassColor | colour | "token:surface.default" | |
borderColor | colour | "token:stroke.default" | |
scaleColor | colour | "token:axis.color" | |
scaleLabelColor | colour | "token:axis.labelColor" | |
readoutColor | colour | "token:text.primary" | |
sound | audio | "" |
tick-ring — Tick ring
Evenly spaced radial tick marks around a centre, with optional longer major ticks.
| Parameter | Type | Default | Range |
|---|---|---|---|
centerX | number | 0 | |
centerY | number | 0 | |
radius | number | 80 | min 1 |
count | number | 12 | min 0, max 720 |
startAngle | number | 90 | |
spanAngle | number | 360 | |
includeEnd | boolean | false | |
length | number | 8 | min 0 |
width | number | 1 | min 0 |
color | colour | "token:stroke.default" | |
majorEvery | number | 0 | min 0 |
majorLength | number | 12 | min 0 |
majorWidth | number | 2 | min 0 |
trigonometric-circle — Trigonometric circle
Circle with a point the reader drags round it, and everything the circle is read for drawn where it is read: the angle swept from the horizontal, the radius out to the point, the two projections that are its cosine and its sine, the tangent taken on the line standing at the radius, and the arc the point has travelled. Each of them names a term of its own — one the model works out for itself moves the point, one the model leaves free is the circle's to write — so the same object shows a model turning a circle and lets a reader turn one for the model. A free row is written both ways: by dragging the point, and by the circle itself on every row of a run, so a sine the model never works out is still plotted and tabulated like one it does. A dragged angle can be made to land on a whole number of parts of the circle rather than wherever the pointer left it, and the angle counts the turns: round one way it grows past a whole turn, round the other it falls through nothing and past a turn the other way, so what the circle hands the model is how far the point has been turned rather than where it stopped.
| Parameter | Type | Default | Range |
|---|---|---|---|
angleVariable | variable | "0.9" | |
radiusVariable | variable | "1" | |
pointXVariable | variable | "0" | |
pointYVariable | variable | "0" | |
tangentVariable | variable | "0" | |
arcVariable | variable | "0" | |
angleUnit | string | "radians" | radians | degrees |
snapDivisions | number | 0 | min 0, max 360 |
dragRadius | boolean | false | |
showGrid | boolean | true | |
showAxes | boolean | true | |
fitView | boolean | true | |
showAngle | boolean | true | |
showRadius | boolean | true | |
showSine | boolean | true | |
showCosine | boolean | true | |
showTangent | boolean | false | |
showArc | boolean | false | |
backgroundColor | colour | "none" | |
circleColor | colour | "token:stroke.default" | |
axisColor | colour | "token:axis.color" | |
gridColor | colour | "token:grid.color" | |
labelColor | colour | "token:text.secondary" | |
radiusColor | colour | "token:stroke.accent" | |
angleColor | colour | "#00695c" | |
sineColor | colour | "token:stroke.warning" | |
cosineColor | colour | "#2f9e44" | |
tangentColor | colour | "#6a1b9a" | |
arcColor | colour | "#f08c02" | |
viewRange | number | 1.6 | min 0.05 |
Design tokens
The board's own colours, widths, fonts, axis and crosshair numbers. Write one as a default with "token:stroke.accent", or read one with the binding { "token": "stroke.accent" } — never the literal value, so a preset restyles every object at once.
| Token | Standard value |
|---|---|
surface.default | "#ffffff" |
surface.emphasis | "#f7f7f7" |
surface.muted | "#eeeeee" |
stroke.default | "#1e1e1e" |
stroke.strong | "#000000" |
stroke.subtle | "#9a9a9a" |
stroke.accent | "#1871c2" |
stroke.warning | "#e03130" |
text.primary | "#1e1e1e" |
text.secondary | "#6b6b6b" |
text.inverse | "#ffffff" |
selection.outline | "#1871c2" |
handle.fill | "#ffffff" |
handle.stroke | "#1871c2" |
strokeWidth.hairline | 0.5 |
strokeWidth.default | 1 |
strokeWidth.strong | 2 |
strokeWidth.heavy | 3 |
radius.small | 2 |
radius.medium | 4 |
radius.large | 8 |
spacing.small | 4 |
spacing.medium | 8 |
spacing.large | 16 |
font.family | "Katex_Main, Inter, serif" |
font.family.sans | "Inter, Assistant, system-ui, sans-serif" |
font.size.small | 9 |
font.size.default | 11 |
font.size.large | 14 |
font.size.tick | 10 |
font.weight.default | 400 |
font.weight.strong | 600 |
axis.color | "#7a7a7a" |
axis.labelColor | "#666666" |
axis.strokeWidth | 1.2 |
axis.tickLength | 4 |
axis.minorTickLength | 2.5 |
axis.minorOpacity | 0.45 |
axis.labelGapX | 1.8 |
axis.labelGapY | 0.7 |
axis.labelRise | 0.3 |
grid.color | "#d3d3d3" |
grid.majorOpacity | 0.75 |
grid.minorOpacity | 0.4 |
crosshair.dash | "4 3" |
crosshair.opacity | 0.25 |
crosshair.strokeWidth | 1 |
badge.opacity | 0.85 |
badge.cornerRadius | 3 |
badge.paddingX | 4 |
badge.paddingY | 2 |
badge.charWidth | 0.58 |
shadow.soft | "0 1px 2px rgba(0,0,0,0.16)" |
opacity.disabled | 0.4 |
opacity.ghost | 0.5 |
duration.fast | 120 |
duration.default | 240 |
size.default.width | 180 |
size.default.height | 180 |
handle.size | 8 |