Skip to the text
RoswaalTechnical specification
Draft 0.1
Try Roswaal

Part I · Principles

8 Accessibility

Reading a graph without colour, contrast in every theme, targets a finger can hit, screen readers, and motion.

Normative · Levels 3 and 4Draft 0.112 requirements · Roswaal meets 7

§8.1 and §8.2 hold every renderer (level 3); the rest hold every editor (level 4). Where this page and another disagree, this one wins.

8.1 Reading without colour

8.1-R1

A renderer MUST NOT rely on colour alone to tell any two things on the canvas apart.

Roswaal meets

Every colour has a second cue:

  • A node's category: the glyph in its tab (§5.4).
  • A pin's kind: flow pins are triangles, and a data pin's shape is its family (§5.5).
  • A pin's type: the chip on an output, and the full name on request (§5.5).
  • A step and a value: their shapes (§5.3).
  • An error and a warning: the error's count is a number in an oval, the warning's mark a single sign in a circle, and the note says which it is in words.
  • A selected node and the anchor: the ring's weight (§5.8).

8.2 Contrast in every theme

8.2-R1

A theme MUST be refused if any of these is lower than its minimum, using the WCAG 2 contrast ratio:

Roswaal meets
ColourAgainstAt least
Body textThe window, and panels4.5 : 1
Secondary textThe window, and panels3 : 1
Faint textThe window, and panels2 : 1
A node's bodyThe canvas1.12 : 1
Code coloursA text field3 : 1, and 2 : 1 for comments

These are the checks validateTheme in core/theme.ts makes of every theme Roswaal ships or loads.

8.2-R2

A theme MUST say whether it is dark, and the claim MUST match its window colour, because the overlays worked out from it (§5.7) depend on it.

Roswaal meets

Not yet checked

The specification will also require profile colours, the pin and category colours, to stand apart from both the node body and the canvas in light and dark themes. Roswaal does not check them yet.

8.3 Hit targets

Starting a wire takes aim, and a pin's target MAY be little more than the pin, so the rest of the node can still be grabbed. Roswaal's is the 16-unit slot plus 3 units around it.

8.3-R1

Landing a wire takes no aim: while a wire is in flight every pin's target MUST grow. Roswaal's grows to 9 units around the slot, 34 across.

Roswaal meets
8.3-R2

On a touch screen, every control SHOULD be at least 44 by 44 CSS pixels at the zoom the graph is shown at, as WCAG 2.5.5 asks, and where a control cannot be, the editor SHOULD offer a way to zoom to one that is.

On a touch screen Roswaal's toolbar buttons grow to 38 pixels, and its pins do not grow at all.

Not yet in Roswaal

8.4 Keyboard and screen readers

8.4-R1

Every action of chapter 4 MUST be possible from the keyboard alone: moving between nodes and between a node's pins, making and removing a wire, opening the node list and placing a node, moving a node, and editing its values.

Nothing on Roswaal's canvas is reached by the keyboard yet.

Not yet in Roswaal
8.4-R2

A node MUST have an accessible name: its title, its kind, and its problems. A pin MUST have one: its name, its side, its type, and what it is wired to.

Roswaal's nodes and pins have no accessible names; its menus, dialogs and panels have roles and labels.

Not yet in Roswaal
8.4-R3

Changes a person makes SHOULD be announced: a wire made, a node placed or deleted, a problem found or fixed.

Roswaal announces only compiling and its toasts.

Not yet in Roswaal
8.4-R4

Focus MUST be visible on the canvas, on a node and on a pin.

Roswaal draws no focus ring on its canvas.

Not yet in Roswaal

Where Roswaal falls short

Until §8.4 is met, Roswaal does not conform at level 4.

8.5 Motion

8.5-R1

Where the system asks for reduced motion, an editor MUST drop animation that is not needed to understand a change, such as controls fading in on hover.

Roswaal meets
8.5-R2

A renderer MUST NOT make anything flash more than three times a second.

Roswaal meets
8.5-R3

An editor MUST NOT move the view without being asked, except to show something the person asked to see.

Roswaal meets