Skip to content
Under development. UEEE and these docs are still evolving and may change.

Field types

A data-ueee slot is plain text by default. Add a data-ueee-type — and, optionally, a few constraints — to say what kind of value it holds. The editor uses that to validate input, and the published page uses it to render (e.g. markdown for richtext).

Everything here is optional. A slot with no type is a text field, and any value ueee doesn’t recognise quietly falls back to text — nothing in this markup can break a page. Like all ueee markers, these attributes are stripped from the production HTML.

AttributeApplies toMeaning
data-ueee-typeany leaftext (default), richtext, number, url, image, select
data-ueee-requiredanypresent = the value may not be empty
data-ueee-maxlengthtext, richtextmaximum number of characters
data-ueee-min / data-ueee-maxnumbernumeric bounds
data-ueee-optionsselectcomma-separated list of allowed values
data-ueee-patterntexta regular expression the value must match
data-ueee-labelanyfriendly name shown in the editor (defaults to the path)
  • text — the default. A single-line value.
  • richtext — multi-line markdown. Rendered to HTML (and sanitized) on the published page; edited as markdown source in the browser, so it round-trips cleanly.
  • number — a numeric value. Saved to your content as a real number, not a string.
  • url — a link. Validated as a URL; usually paired with data-ueee-attr="href".
  • image — a media reference. Pair with data-ueee-attr="src" and point it at a /media/... URL from your library.
  • select — one of a fixed set, listed in data-ueee-options.
<section data-ueee-parent="hero">
<!-- text is the default: no type needed -->
<h1 data-ueee="title" data-ueee-required data-ueee-maxlength="60">Welcome</h1>
<!-- markdown -->
<div data-ueee="tagline" data-ueee-type="richtext">A better way to ship.</div>
<!-- image: a /media URL in src -->
<img data-ueee="image" data-ueee-type="image"
data-ueee-attr="src" src="/placeholder.jpg" alt="">
<!-- url: written into href, validated -->
<a data-ueee="ctaUrl" data-ueee-type="url"
data-ueee-attr="href" href="#">Get started</a>
</section>
<div data-ueee-parent="plan">
<span data-ueee="price" data-ueee-type="number" data-ueee-min="0">29</span>
<span data-ueee="tier" data-ueee-type="select"
data-ueee-options="starter,pro,enterprise">pro</span>
</div>

On Save, ueee checks every field against its constraints — required, length, numeric range, pattern, and select options. If a value doesn’t fit, the save is blocked and the editor jumps to the first field that needs fixing, with the reason in the status bar.

None of this is required, and none of it can break a page:

  • No data-ueee-type → the slot is a text field.
  • An unknown or misspelled type → text.
  • A non-numeric bound or an empty options list → that one constraint is ignored.