# Elements

Every element is written `kind [positional] { props; children }`. Each page lists an element's own props and events; the props every node takes are on [`node`](/reference/elements/node.html.md). These pages are generated from the schema `strand check` checks against.

## Prop groups

<div class="ref-grid">
<a class="ref-card" href="node.html"><code>node</code><span>What every element accepts.</span></a>
<a class="ref-card" href="surface.html"><code>surface</code><span>What every surface accepts.</span></a>
</div>

## Elements

<div class="ref-grid">
<a class="ref-card" href="arc.html"><code>arc</code><span>An arc or ring gauge: <code>arc { value: cpu.usage; sweep: 270deg; stroke: 4, $accent }</code>.</span></a>
<a class="ref-card" href="bar.html"><code>bar</code><span>A bar, on every monitor with <code>screen</code> in scope.</span></a>
<a class="ref-card" href="box.html"><code>box</code><span>A plain box to style.</span></a>
<a class="ref-card" href="button.html"><code>button</code><span>A button with a label: <code>button "‹" { on click { … } }</code>.</span></a>
<a class="ref-card" href="canvas.html"><code>canvas</code><span>Draws with code: <code>canvas { draw: (c) =&gt; … }</code>.</span></a>
<a class="ref-card" href="center.html"><code>center</code><span>The centre part of a <code>split</code>, truly centred.</span></a>
<a class="ref-card" href="col.html"><code>col</code><span>Lays out its children in a column.</span></a>
<a class="ref-card" href="effect.html"><code>effect</code><span>A built-in effect: <code>effect sparks { … }</code>.</span></a>
<a class="ref-card" href="end.html"><code>end</code><span>The end part of a <code>split</code>.</span></a>
<a class="ref-card" href="file.html"><code>file</code><span>Keeps a file in step with the theme: <code>file "~/.cache/strand/colors.css" { template: "colors.css.tmpl"; run: ["reload-colors"] }</code>.</span></a>
<a class="ref-card" href="graph.html"><code>graph</code><span>A sparkline with its own history: <code>graph cpu.usage { history: 60s }</code>.</span></a>
<a class="ref-card" href="grid.html"><code>grid</code><span>Lays out its children in a grid.</span></a>
<a class="ref-card" href="icon.html"><code>icon</code><span>An icon by name: <code>icon "wifi"</code> looks in the config's <code>icons/</code> folder (<code>wifi.svg</code> or <code>.png</code>, then <code>wifi-symbolic</code>), then the icon theme.</span></a>
<a class="ref-card" href="image.html"><code>image</code><span>A picture by file path (<code>image "art.png"</code>, relative to the config directory) or by icon name, as <code>icon</code> finds it.</span></a>
<a class="ref-card" href="input.html"><code>input</code><span>A text field: <code>input { text: &lt;-&gt; query }</code>.</span></a>
<a class="ref-card" href="letters.html"><code>letters</code><span>Animates each letter of the <code>text</code> it is written in: <code>text "hi" { letters { y: 2 * wave(1s, phase: index * 0.1) } }</code>.</span></a>
<a class="ref-card" href="list.html"><code>list</code><span>Virtualised; arrow keys move the selection.</span></a>
<a class="ref-card" href="lock.html"><code>lock</code><span>The lock screen, on <code>ext-session-lock</code>: on every monitor its <code>screens:</code> picks (every one by default), one instance a monitor sharing the lock's <code>state</code>s, timers and <code>on change</code> handlers.</span></a>
<a class="ref-card" href="lottie.html"><code>lottie</code><span>A Lottie animation: <code>lottie "loader.json" { speed: 1 }</code>.</span></a>
<a class="ref-card" href="merge.html"><code>merge</code><span>Goo merge: children melt together within the given distance.</span></a>
<a class="ref-card" href="meter.html"><code>meter</code><span>A bar filled to its value: <code>meter level</code>, <code>meter memory.used { range: 0, memory.total }</code>.</span></a>
<a class="ref-card" href="osd.html"><code>osd</code><span>An on-screen display: on the focused monitor, in the overlay layer and click-through; with <code>screens: all</code> (or names) on each of those, with <code>screen</code> in scope.</span></a>
<a class="ref-card" href="page.html"><code>page</code><span>A page of <code>pages</code>, shown when its value is <code>current</code>.</span></a>
<a class="ref-card" href="pages.html"><code>pages</code><span>Shows one <code>page</code> at a time, with directional transitions.</span></a>
<a class="ref-card" href="panel.html"><code>panel</code><span>A layer-shell panel: launchers, notification stacks, dashboards.</span></a>
<a class="ref-card" href="particles.html"><code>particles</code><span>Particles: <code>particles { rate: 20; life: 1.2s; sprite: dot(3) }</code>.</span></a>
<a class="ref-card" href="popup.html"><code>popup</code><span>Anchored to its parent element; nests (tray menus).</span></a>
<a class="ref-card" href="row.html"><code>row</code><span>Lays out its children in a row.</span></a>
<a class="ref-card" href="scroll.html"><code>scroll</code><span>Scrolls its content.</span></a>
<a class="ref-card" href="segmented.html"><code>segmented</code><span>One choice of several: <code>segmented { options: Look; value: &lt;-&gt; theme.look }</code>.</span></a>
<a class="ref-card" href="shader.html"><code>shader</code><span>Your own WGSL shader: <code>shader "aurora.wgsl" { u_speed: 0.4 }</code>.</span></a>
<a class="ref-card" href="slider.html"><code>slider</code><span>A slider: <code>slider { value: &lt;-&gt; audio.sink.volume }</code>.</span></a>
<a class="ref-card" href="spacer.html"><code>spacer</code><span>Takes up the space left.</span></a>
<a class="ref-card" href="spectrum.html"><code>spectrum</code><span>An audio spectrum: <code>spectrum audio.sink { bars: 48; style: mirror }</code>.</span></a>
<a class="ref-card" href="split.html"><code>split</code><span>Start, centre and end, with a truly centred middle.</span></a>
<a class="ref-card" href="stack.html"><code>stack</code><span>Stacks its children on top of each other.</span></a>
<a class="ref-card" href="start.html"><code>start</code><span>The start part of a <code>split</code>.</span></a>
<a class="ref-card" href="svg.html"><code>svg</code><span>An SVG whose layers bind by id: <code>svg "icon.svg" { #needle { … } }</code>.</span></a>
<a class="ref-card" href="text.html"><code>text</code><span>Text: <code>text clock.format("%a %d  %H:%M")</code>.</span></a>
<a class="ref-card" href="thumbnail.html"><code>thumbnail</code><span>A live thumbnail of a window (<code>thumbnail w</code>), or a still of a screen, taken each time it is shown (<code>thumbnail screen</code>).</span></a>
<a class="ref-card" href="tooltip.html"><code>tooltip</code><span>A tooltip with content of its own.</span></a>
<a class="ref-card" href="window.html"><code>window</code><span>A window the compositor manages (<code>xdg_toplevel</code>): it tiles, floats, moves, minimises and shows in task bars as an app's window does (a settings window, a picker).</span></a>
</div>
