Manual
The document
OverviewGrammarDocument headerSyntax cheatsheet Scene Step
Content
Text blocks
Paragraph Heading 1 Heading 2 Heading 3 Heading 4 List
Maths
Equation Maths
Tables & images
Table Image
Formatting
Bold Italics Inline Code Highlight
Text colours
Links & references
Link Footnote Icon Internote Reference
ValueWhere inline content works
Narrative only
Note Definition Example Task Divider
Graph pane
Graph
Curves & areas
Curve Integral
Data marks
Scatter Histogram
Fits
Fit Residuals
Surfaces
Contour Heatmap
Marks
Line Segment Vector Point Polygon Text
Shapes
Circle Square Rectangle Triangle Star Diamond Hexagon
Axis furniture
Axis label Axis Brace
Expressions
Code pane
Code Lines
Animation & interaction
Cues that wrap content
Cue Draw cue Trace cue Highlight cue Spotlight cue Type cue
Cues on a value
Value cue Zoom cue
Anchors & timing Parameter
Advanced features
Data Let Define Preset Include If For Ignore
Reference
All constructs A–ZAttribute types
Concepts
IdentifiersBody & detailDerived attributes
Guidance
The narrative contractWhat earns a place on the canvasParameter or cueHonest numbersCode demonstrates, never computesAuthor-attached data only
?
  1. Animation & interaction
  2. Anchors & timing

Anchors & timing

The clock a scene keeps, the three ways to anchor to it, and the durations and easings every cue takes.

#The timeline

A scene owns a timeline, and step markers (=== in the narrative) carve it into steps. Everything animated anchors to that clock through a cue anchor: a step index (2), an absolute scene time (1500ms), or a step with an offset (2 + 500ms). The scene's own duration, autoplay and loop attributes govern playback.

Everything that happens on that timeline is a cue. Cues divide by where they are written, not by what they are: six wrap the content they act on, and two are written on an attribute's value to move it. Both take the same anchors, the same over: and the same easing:.

#Cues that wrap content

  • cue — fades its content in at in: and out at out:.
  • cue.draw — presence, drawn: strokes draw along their own length; fills arrive as the stroke completes.
  • cue.trace — moves its content along a referenced curve: cue.trace{ point(x: 0; y: 0) }(path: #flight; at: 2).
  • cue.highlight — attention, without changing presence.
  • cue.spotlight — attention by dimming everything else.
  • cue.type — the code pane's typing reveal.
canvas.graph{
    scatter(data: (1, 2.0), (2, 2.4), (3, 3.1))
    cue{
        fit(model: polynomial; degree: 1)
    }(
        in: 1
        in-duration: 800ms
    )
}

#Cues written on a value

Presence is only half of animation; the other half is values that move. The same family covers it, written as a micronode inside an animatable attribute's value rather than around content. The attribute's own value is the base state, and each !cue.to names the value to move to and when:

canvas.graph{
    curve(expression: 100 - 4.9x^2)
}(
    x-domain: [0, 5] !cue.to{[0, 10]}(at: 2)
)

They chain left to right on one attribute — zoom: 5 !cue.to{6.5}(at: 2) !cue.to{8}(at: 4 + 1.5s; over: 800ms) — and any attribute a reference page marks animatable takes them: domains, coordinates, hidden (a reveal that still frames the plot), colours.

!cue.zoom is its graph-domain sibling, and it announces itself: a box is drawn around the smaller of the two windows, held, and only then does the view move — into the box when zooming in, out of it when zooming out. The box never moves in data coordinates. draw: and hold: time the box, colour: paints it, and one chain may mix the two freely.

x-domain: [0, 10] !cue.zoom{[2, 4]}(at: 2; draw: 400ms; hold: 300ms; colour: blue)

#Timing and easing

Every transition takes an easing — smooth by default, linear for constant speed — and a duration: in-duration / out-duration on cues (500ms for fades, 1500ms for draws), over: on the micronodes (1500ms). Durations are written in milliseconds, with ms and s suffixes accepted where a time is written.

Choosing within the family: a wrapping cue changes whether something is there; a cue on a value changes what that value is. A mark that should appear is wrapped in cue; a mark that should move writes !cue.to on its coordinates; a mark that does both is wrapped and carries a chain.
On this page
The timelineCues that wrap contentCues written on a valueTiming and easing
PrivacyTermsContact Support
Anchors & timing · Internote