Skip to content

Components

Every page, whether it is written in YAML, built fluently in code or derived from a class, is a tree of components from one catalogue. In YAML the type: of a node is the component’s name; in Java the same name is a record in io.mateu.uidl.data with a builder; C# and Python have the same names. The catalogue’s JSON Schema, specs-schema.json, is generated from those records, so the schema, the visual editor’s palette and the renderers cannot disagree.

This page lists the catalogue by role, one line per component, with a link to its page where there is one. Annotated view models produce the same components: a field becomes a FormField, a List<Row> a grid, a @Section a card, a @Button method a Button.

Containers that arrange other components.

ComponentWhat it is for
VerticalLayout / HorizontalLayoutstack children down or across; the everyday containers
FormLayoutresponsive columns of fields (FormRow, FormItem, FormSection, FormSubSection structure it)
ContentLayoutthe content-page grammar: a main region, an aside (side, width, sticky) and a full-width footer
Carda framed group with a title; what a @Section becomes
TabLayout / AccordionLayout / Detailsgroups the user switches between, or expands
SplitLayout / MasterDetailLayouttwo resizable panes; a list with its detail
DashboardLayout + DashboardPanela responsive grid of titled tiles (dashboard)
FoldoutLayout + FoldoutPanelan overview with lateral fold-out panels (foldout)
HeroSectiona large title band with optional image and calls to action (welcome page)
BoardLayout, ResponsiveGridrows and columns of tiles
CarouselLayout, Scroller, Container, FullWidth, Divcarousels, scroll areas, plain wrappers
ComponentWhat it is for
Forma page or region with a header, fields and buttons
FormFieldone input, bound to state.<id>; its data type and stereotype pick the widget (see below)
CustomFielda field whose value is a component, so any component can sit in a form row
Button / ButtonGrouprun an action, navigate, or open a menu
DropZonea target that rows can be dragged onto (drag to a destination)
AddOnPicker, PaymentPicker, ResourceGridtask-specific pickers (add-on picker, payment picker, resource grid)
MessageInputa chat-style input (AI chat)

Read-only presentation of values and records.

ComponentWhat it is for
Text, Markdown, Image, Icontext in five sizes, formatted text, pictures and icons
Avatar, AvatarGroup, Badgepeople and status chips
EntityHeadera record’s banner: title, badges, facts, a metric (entity header)
KPI, MetricCard, Scoreboard, Statkey numbers, alone or as a band (stat)
Meter, TaskProgressa value against a limit; done/total progress (meter, task progress)
BulletedList, StatusList, Checklist, Separatorlists of items, of statuses, of tasks; a divider (status list, checklist)
Timeline, CommentThread, FileListactivity, conversation, attachments (timeline, comment thread, file list)
Ledger, ProcessMonitor, RecordMergea folio breakdown, process health, merging two records (ledger, process monitor, record merge)
CalloutCard, OfferCard, ComparisonCard, PricingTable, FeatureGrid, Testimonials, Faqmarketing-style and landing blocks (callout card, offer card, comparison card, pricing table, feature grid, testimonials, FAQ)
OrgCharta hierarchy of people or units (org chart)
ComponentWhat it is for
Listing + GridColumnthe searchable, filterable, paginated collection: table, list, cards, tree or master-detail (filters and listing)
Grid, GridGroupColumna plain or editable table, with grouped headers (editable table)
VirtualLista long, lazily rendered list
TaskQueuecounted buckets of actionable cards (task queue)
Kanbancards in columns (kanban)
Calendarmonth, week, day and list views of events (calendar)
MatrixGridrows × dates with collapsible sections and in-place editing (matrix grid)
PlanningBoardresources × days tape chart, drag to move (planning board)
Gantttasks on a timeline (Gantt)
ComponentWhat it is for
Menu entries: RouteLink, RuleLink, Menu, RemoteMenuthe app menu; see navigation and menus
MenuBar, ContextMenua bar of menus; a menu on right-click (or left-click) around another component
Directorya categorised directory of links, for landing pages
Breadcrumbs, Anchor, Tabwhere you are; a link; one tab of a TabLayout
ProgressStepswhere you are in a process (progress steps)
ComponentWhat it is for
Noticean inline message strip inside the body, with an optional action (notice)
Notificationa toast (actions usually return a Message instead)
ProgressBarprogress of a step or a job
EmptyState, Skeletonnothing to show yet; still loading (empty states and skeletons)
NotFounda route that does not exist (not found)
Tooltip, CookieConsenthints; the consent banner

Page banners are page metadata rather than components; see page anatomy.

ComponentWhat it is for
Dialog, ConfirmDialoga modal question; a confirmation
Drawera side or bottom panel over the page (drawer)
Popoverdetails on hover or click (hover details)
ActionPanela categorised “I want to…” overlay (action panel)
ComponentWhat it is for
Chart, TrendChart, Funnel, Heatmapbar, line, pie and friends; a dependency-free trend line; a funnel; a calendar heatmap (trend chart, funnel, heatmap)
Mapa street map with clickable markers
Bpmn, Workflowa BPMN diagram; a workflow-definition editor
Chat, MessageLista conversation (AI chat)

These carry no look of their own; they assemble or delegate.

ComponentWhat it is for
Partiala named piece of layout spliced in by reference (partials)
ComponentRefa named business component bound to a data source (business components)
CustomComponenta rendering the catalogue does not have, registered per renderer (custom components)
Elementany HTML element or web component by tag name (custom web components)
MicroFrontend, EmbeddedViewanother Mateu UI, or another view, embedded as an island
FutureComponent, Slotteda component that arrives later; a child placed in a named slot
State, AppState, Data, AppDatanot visual: values an action returns to update a state scope

The full, always-current list is the generated schema, specs-schema.json.

A FormField (or an annotated field) is drawn according to two properties:

  • dataType: what the value is: string, integer, number, bool, date, time, dateTime, dateRange, money, status, file, array, range, component, menu, action, actionGroup.
  • stereotype: how to edit or show it: regular, textarea, richText, html, markdown, email, password, select, combobox, listBox, radio, checkbox, toggle, multiSelect, treeSelect, choice, searchable, slider, stars, color, icon, link, money, badge, plainText, bulletedList, grid, image, uploadableImage, fileUpload, signature, camera, dateRange, numberRange, popover, button, primary.

In code, both are inferred from the Java, C# or Python type (a LocalDate is a date picker, a small enum is a radio group, a List<Row> is a grid) and overridden with @Stereotype or a shorthand annotation (@Badge, @UploadableImage, @Signature, @TreeSelect…). See field stereotypes and field annotations.

To name a domain concept once (OrderStatus, Money, Email) and reuse it on every field and column, declare a field type in types.yaml (fieldType: OrderStatus) or, for annotated classes, a semantic annotation.

A component on the wire says what to show; each renderer decides how, with its own widgets:

RendererPaints components withDetails
Vaadin (web)Vaadin web components, plus Mateu’s own design-neutral elements for the restVaadin
Redwood (web)Oracle JET and Redwood components, inside a Visual Builder appRedwood, Redwood coverage
React Native (mobile)native viewsThe Mateu app
IntelliJ (desktop)Swing components in tool windows and editor tabsIntelliJ

A renderer that has no view for a component shows a visible unsupported placeholder instead of silently dropping it, which is what the conformance suite counts. What a renderer must implement, and the Core / Standard / Full conformance levels, are in the renderer contract. Which feature works where is in the parity matrix.