Element explorer
All 1,627 catalogued elements, filterable by surface, tag, role, and interactivity.
This is the raw material the rest of the Coral schema section is built from. Every count elsewhere in this wiki resolves to a subset of these rows.
| Surface | Tag | Role | data-testid | Derived label | Label source | Interactive reason | Disabled |
|---|---|---|---|---|---|---|---|
build.main | a | — | appshell-skip-link | Skip to main content | textContent | href | no |
build.main | button | — | — | Expand navigation | aria-label | native-control | no |
build.main | button | — | nav-home | Home | aria-label | native-control | no |
build.main | button | — | nav-agents | Agents | aria-label | native-control | no |
build.main | button | — | nav-workflows | Workflows | aria-label | native-control | no |
build.main | button | — | env-picker-trigger | Switch environment (current: Cypherdyne (default)) | aria-label | native-control | no |
build.main | div | — | user-pill | D | textContent | — | no |
build.main | button | button | user-pill-avatar | Open account menu for Darbot | aria-label | native-control | no |
build.main | button | — | user-pill-more | More options for Darbot | aria-label | native-control | no |
build.main | div | — | conversational-agent-authoring-page | — | none | — | no |
build.main | header | — | agent-command-bar | Agent toolbar | aria-label | — | no |
build.main | button | — | agent-command-bar.title | Rename agent | aria-label | native-control | no |
build.main | div | tablist | agent-command-bar.tabs | Designer sections | aria-label | — | no |
build.main | i | none | — | — | none | tabindex | no |
build.main | button | tab | — | Build | textContent | native-control | no |
build.main | button | tab | — | Preview | textContent | native-control | no |
build.main | button | tab | — | Evaluate | textContent | native-control | no |
build.main | button | tab | — | Monitor | textContent | native-control | no |
build.main | i | none | — | — | none | tabindex | no |
build.main | button | — | agent-command-bar.save-button | Save | aria-label | native-control | yes |
build.main | button | — | agent-command-bar.share-button | Share | aria-label | native-control | no |
build.main | button | — | agent-command-bar.feedback | Send feedback | aria-label | native-control | no |
build.main | button | — | agent-command-bar.overflow-trigger | More options | aria-label | native-control | no |
build.main | button | — | agent-command-bar.publish-button | Publish | aria-label | native-control | no |
build.main | button | — | agent-command-bar.publish-split-chevron | Customize publish channels | aria-label | native-control | no |
build.main | div | — | agent-details | Raybot | textContent | — | no |
build.main | button | — | agent-icon-button | Edit agent icon | aria-label | native-control | no |
build.main | textarea | — | — | Name your agent | aria-label | native-control | no |
build.main | button | — | — | Edit name | aria-label | native-control | no |
build.main | div | — | agent-instructions-builder | — | none | — | no |
build.main | i | none | — | — | none | tabindex | no |
build.main | button | — | — | Undo | aria-label | native-control | yes |
build.main | button | — | — | Redo | aria-label | native-control | yes |
build.main | button | — | — | Bold | aria-label | native-control | no |
build.main | button | — | — | Italic | aria-label | native-control | no |
build.main | button | — | — | Strikethrough | aria-label | native-control | no |
build.main | span | — | toolbar-group-divider | — | none | — | no |
build.main | button | — | — | Bullet list | aria-label | native-control | no |
build.main | button | — | — | Number list | aria-label | native-control | no |
build.main | span | — | toolbar-group-divider | — | none | — | no |
build.main | button | — | — | Clear formatting | aria-label | native-control | no |
build.main | span | — | toolbar-group-divider | — | none | — | no |
build.main | button | — | — | Blockquote | aria-label | native-control | no |
build.main | button | — | — | Inline code | aria-label | native-control | no |
build.main | button | — | — | Insert link | aria-label | native-control | no |
build.main | i | none | — | — | none | tabindex | no |
build.main | span | textbox | — | Agent instructions | aria-label | role:textbox | no |
build.main | aside | — | agent-side-panel | Agent configuration | aria-label | — | no |
build.main | div | separator | agent-side-panel.drag-handle | Resize panel | aria-label | tabindex | no |
build.main | div | — | sidebar-model-picker | ModelClaude Sonnet 4.6 | textContent | — | no |
build.main | button | combobox | model-selector | Prompt model | aria-label | native-control | no |
build.main | button | — | — | Clear selection | aria-label | native-control | no |
build.main | section | — | agent-side-panel.iq | Microsoft IQ | aria-label | — | no |
build.main | div | — | agent-iq-section | Microsoft IQ | aria-label | — | no |
build.main | button | — | agent-iq-add-button | Add Microsoft IQ | aria-label | native-control | no |
build.main | div | toolbar | agent-iq-list | Microsoft IQ | aria-label | — | no |
build.main | i | none | — | — | none | tabindex | no |
build.main | div | — | agent-iq-pill | raybot-kb | textContent | — | no |
build.main | button | — | — | raybot-kb | textContent | native-control | no |
build.main | button | — | — | Remove raybot-kb | aria-label | native-control | no |
Reading a row
| Column | Meaning |
|---|---|
surface | Which of the sixteen surfaces the element was captured on |
testId | The data-testid, or null |
tag | HTML tag name |
role | ARIA role, explicit or implicit, or null |
label | Derived label, or null |
labelSource | Which heuristic produced the label |
isInteractive | Computed interactivity |
interactiveReason | Which rule made it interactive |
isDisabled | Disabled at capture time |
interactiveReason is the useful column
isInteractive is a boolean, which is not very informative on its own. interactiveReason records
why the element was classified interactive, drawn from:
- Native interactive element type —
button,a[href],input,select,textarea - An explicit ARIA role in the interactive set
- A
tabindexmaking it focusable contenteditable
This distinction matters when deciding how to target something. An element interactive by virtue of
tabindex behaves differently from a native button: keyboard activation may not fire a click
handler, and a naive .click() may do nothing observable.
labelSource is the same idea for labels
A derived label with no recorded provenance is an assertion. labelSource records which heuristic
fired — visible text content, aria-label, aria-labelledby, title, placeholder, or an associated
label element.
This lets you judge a label rather than trust it. A label derived from visible text is strong
evidence. One derived from a title attribute is weaker, because title is frequently stale or
decorative.
Filtering for null label gives you the label gaps.
Element counts do not sum the way you expect
Three overlapping populations, deliberately not nested:
1,627 total elements
1,115 interactive (computed independently of test ids)
983 carrying a data-testid
1,115 + 983 exceeds 1,627 because the sets overlap heavily but neither contains the other. There
are interactive elements with no test id, and test-id-bearing elements that are inert.
Any analysis treating "has a test id" as a proxy for "is interactive" will produce wrong numbers in
both directions. This is honesty note 1 on the confidence model page, and the
element table is where you can see it directly: filter for isInteractive true and testId null,
then invert.
Visibility and occlusion are not in this table
The per-surface surfaces table carries notVisible and
occludedVisibleNotTopmost counts. Those are summarized per surface rather than exposed per element
here.
If you need per-element visibility, it is in the raw surface dumps under coral-schema/surfaces/.
The slim element dataset drops it to keep the payload shippable — elements-slim.json uses
single-character keys (s, t, r, l, i, d) for the same reason.
Using this data outside the site
data/elements.json is plain JSON with no dependency on the site or the object model:
import elements from './data/elements.json';
const untestable = elements.filter(
(e) => e.isInteractive && !e.testId && !e.label,
);
That query returns the elements that are interactive, unlabelled, and untargetable by test id — the hardest things in the application to automate against reliably. It is the most useful single query in the dataset.