Skip to main content

Variable: ENTITY_EVALUATION

const ENTITY_EVALUATION: object

Defined in: semantics/taxonomy.ts:366

Which evaluations are legal for each entity.

Design note — Input and Selection carry no evaluations. Form controls are data-entry surfaces, not decision hierarchies: there is no authorial choice between primary/secondary/muted for a text field or a checkbox, and validation outcome is not authorial either — it is a runtime fact emitted by a form library or a validate() callback.

The vocabulary distinction:

  • Evaluation (this matrix) is authorial emphasis/valence.
  • State.invalid (see STATES) is the runtime validation outcome.

This mirrors the Lexicon §10.5 distinction negative ≠ destructive: evaluation lives in the author's pen, state lives in the user's data. By keeping the two separate the system avoids the shape where a developer is tempted to write <TextField evaluation="negative"> to express a validation error — that is a category mistake. The correct expression is <TextField isInvalid />, which flips the invalid state and lets the single neutral chrome become the canonical validation surface.

Adjacent slots (description, icon, validationMessage) may still consume vars.colors.input.{positive|caution|negative} directly when they need valence — those are display of validation context, not the control itself.

Consensus pattern across React Aria (isInvalid), Adobe Spectrum (validationState), Material UI (error), Ant Design (status), and shadcn/ui (aria-invalid): validation is exposed as boolean state on the control, not as a coloring variant.

Type Declaration

Action

readonly Action: readonly ["primary", "secondary", "accent", "muted", "negative"]

Collection

readonly Collection: readonly ["primary", "muted"]

Disclosure

readonly Disclosure: readonly ["primary", "muted"]

Feedback

readonly Feedback: readonly ["primary", "positive", "caution", "negative"]

Input

readonly Input: readonly [] = []

readonly Navigation: readonly ["primary", "secondary", "accent", "muted"]

Overlay

readonly Overlay: readonly ["primary", "secondary", "accent", "muted", "negative"]

Selection

readonly Selection: readonly [] = []

Structure

readonly Structure: readonly ["primary", "muted"]