Skip to content

Display blocks ​

Show information: text, images, charts, cards, indicators. They do not take input.

This page is generated from the block registry, so it lists exactly what the Page Designer accepts. 80 blocks.

BlockWhat it is for
core.activity-feedA reverse-chronological "who did what" feed.
core.agendaAgenda list of dated items; fires selected.
core.alertMessage box with a title, severity and icon; can be dismissed (dismissed).
core.approval-historyHistory of an approval's decisions.
core.approval-stampStamp that shows an approval status (such as Approved or Rejected) with text and rotation.
core.approval-timelineTimeline of an approval's stages and decisions; fires select.
core.audio-playerPlays an audio clip inline — voicemail recordings, podcast-style briefings, recorded call snippets — using the browser's native HTML5 <audio> element, with no third-party player dependency.
core.avatarRender a user/entity avatar — an image (src) or fallback initials — and emit a click event for opening a related menu/dropdown.
core.avatar-groupRow of overlapping avatars, collapsed after a maximum with a +n count.
core.badgeRender a small notification/count badge overlaid on an icon (e.g.
core.barcodeRenders a scannable linear (1D) barcode encoding a bound string value — e.g.
core.boxplot-chartBox plot showing spread and outliers for each group.
core.calendarDisplays a month-grid calendar with bindable dated events, for use cases like a company holiday calendar, a leave calendar, or a shift schedule.
core.call-logList of calls with outcome and time.
core.captionSmall caption text with alignment; accepts a translation key.
core.carouselRotating slides, optionally advancing on a timer; fires changed.
core.chartRender a multi-series chart (categories on one axis, one or more named numeric series) from authored or bound JSON data.
core.chipRender a compact pill/tag with a label, optional delete affordance, and click/delete events — also covers the platform taxonomy's "Tag" entry (same pill, no separate block type).
core.clockLive clock, optionally with the date.
core.cohort-chartCohort retention table with periods as columns and cohorts as rows.
core.commentsA comment thread with a compose box.
core.communication-timelineTimeline of messages and calls with a contact; fires select.
core.conversion-funnelFunnel showing drop-off between conversion stages.
core.dashboard-headerBanner for the top of a dashboard with a title, subtitle and gradient.
core.distanceShows the distance between two coordinates in a chosen unit.
core.donut-chartShows parts-of-a-whole as a ring (pie with a hole), leaving the center free for a total/label — the common "status breakdown" visualization.
core.emojiSingle emoji at a chosen size; fires clicked.
core.file-previewPreview of a file by URL, name and type; fires opened.
core.funnel-chartShows a sequence of decreasing stages (e.g.
core.gaugeShows a single numeric value against a min/max range as a dial — useful for a single KPI read at a glance (e.g.
core.headingRender a semantic heading (h1–h6) with the accessibility role of a heading.
core.heatmapShows a row × column grid of values as color intensity — useful for attendance patterns, activity density, or any two-dimensional value matrix.
core.hero-headerA branded gradient banner with a title/subtitle — a mobile-specific widget ("wave header is also should be a block") for a page's top welcome/branding band.
core.histogram-chartHistogram of numeric values in a chosen number of bins.
core.html-viewerDisplays a read-only block of HTML content — e.g.
core.iconRender a single named icon glyph.
core.iframeEmbeds an external URL in a sandboxed frame.
core.imageRender a single image from a URL, with optional alt text and fixed width/height.
core.image-galleryDisplays a browsable set of images with optional captions — a single carousel-style widget for product photos, employee ID cards, document attachments, or any bound array of images, instead of authoring N separate core.image blocks.
core.json-viewerDisplays a formatted, read-only dump of a JSON value — useful for debugging screens, "raw data" inspector panels, webhook payload previews, or any place an author wants to show structured data verbatim rather than through custom formatted fields.
core.kpi-cardShows a single headline metric with an optional label and a trend indicator against a previous value — the standard "big number" dashboard tile.
core.kpi-comparisonSide-by-side comparison of several KPI values.
core.labelRender a single line (or short run) of static, expression-derived, or bound text — the simplest text-display primitive in the widget catalog.
core.linkRender a hyperlink with configurable target text, destination, and open-target behavior, and emit a click event.
core.location-pickerMap for choosing a location with markers (optionally clustered), zoom and height; fires mapClicked and polygonDrawn.
core.mapAn interactive map with markers.
core.markdown-viewerDisplays read-only, formatted markdown content — release notes, help text, policy documents authored in markdown — as rendered rich text, without an edit surface (contrast with core.markdown-editor).
core.notificationsA notification list with read/unread state.
core.org-chartRenders a company/team hierarchy from a flat manager-reference list.
core.paragraphRender a block of body text with paragraph semantics.
core.pareto-chartPareto chart: bars sorted by size with a cumulative line.
core.pdf-viewerEmbeds a PDF document inline on a Page/Form/Container/Dashboard — e.g.
core.pending-approvalNotice that an approval is pending, with content, icon and colour.
core.pie-chartShows parts-of-a-whole as a full pie, with each slice sized by its share of the total.
core.progress-barRender a horizontal (linear) progress indicator for a 0–100 value, with an optional caption — the linear counterpart to core.progress-ring.
core.progress-ringRender a circular ("donut") progress indicator for a 0–100 value, with an optional caption.
core.qr-codeRenders a scannable QR code encoding a bound string value — e.g.
core.radar-chartCompares one or more series across several shared axes (dimensions) on a polar grid — useful for multi-factor comparisons like skill assessments or vendor scorecards.
core.ranking-listRanked list of items by value, limited to a number of rows, in a chosen variant and format.
core.receipt-previewPreview of a point-of-sale receipt with lines, subtotal, discount, tax and total.
core.sales-funnelFunnel of sales stages with counts.
core.sales-territory-mapMap for sales territories with markers (optionally clustered), zoom and height; fires mapClicked and polygonDrawn.
core.sankey-chartSankey diagram of flows between nodes.
core.shopping-cartMini cart preview with a link to checkout; fires checkoutClicked.
core.sla-indicatorIndicator of time left to a due date, warning before the threshold and marking escalation.
core.sparklineShows a compact, axis-free line trend from a series of numbers — a small inline visual, typically paired with a KPI value in a dashboard card.
core.statSingle figure with a label, number or currency format and an optional count-up animation.
core.status-displayColoured status label with text and variant.
core.target-vs-actualShows an actual value against its target, with number or currency format.
core.territory-mapMap for territories with markers (optionally clustered), zoom and height; fires mapClicked and polygonDrawn.
core.timelineShows a chronological sequence of events.
core.tooltipRender an inline help-icon trigger that shows a hint/explanation text — a leaf hint affordance, not a children-wrapping overlay around other content.
core.tree-viewA generic expandable/selectable tree — for core.org-chart's people-hierarchy card visualization, this widget is the generic-node-tree alternative.
core.treemap-chartTreemap where area shows the size of each node.
core.video-playerPlays a video inline — training clips, product demos, recorded meetings — using the browser's native HTML5 <video> element, with no third-party player dependency.
core.warehouse-mapMap for warehouse locations with markers (optionally clustered), zoom and height; fires mapClicked and polygonDrawn.
core.waterfall-chartWaterfall chart showing how steps add up to a total.
core.workflow-historyHistory of a workflow's events.
core.workflow-statusA read-only visual indicator of a workflow instance's current step.
core.workflow-timelineTimeline of the steps a workflow has taken; fires select.

core.activity-feed ​

A reverse-chronological "who did what" feed.

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","actor":"Jane Doe","action":"updated...
json
{ "blockType": "core.activity-feed", "instanceId": "onboarding-activity", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "items": {"source":"binding","binding":{"scope":"page","key":"recentActivity"}} } }
  • Purely presentational, read-only — for interactive comment threads, use core.comments instead.

core.agenda ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"title":"Team Sync","date":"2026-09-05"},{"ti...
primaryPathstringstatictitle
secondaryPathstringstaticdescription
datePathstringstaticdate

Events: selected

core.alert ​

PropertyTypeSet fromDefault
titlestringstatic, expression, binding
messagestringstatic, expression, bindingThis is an informational message.
severitystringstatic, expression, bindinginfo
dismissiblebooleanstatictrue
iconstringstatic

Events: dismissed

core.approval-history ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","actor":"Jane Doe","action":"approve...

core.approval-stamp ​

PropertyTypeSet fromDefault
statusstringstatic, expression, bindingapproved
textstringstatic, expression, binding
rotationnumberstatic-8

core.approval-timeline ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","label":"Requested — Sam Patel","tim...

Events: select

core.audio-player ​

Plays an audio clip inline — voicemail recordings, podcast-style briefings, recorded call snippets — using the browser's native HTML5 <audio> element, with no third-party player dependency.

PropertyTypeSet fromDefault
urlstringstatic, expression, binding
fileIdstringstatic, expression, binding
allowDownloadbooleanstatictrue
adaptivebooleanstatictrue
autoplaybooleanstaticfalse
loopbooleanstaticfalse

Events: played, paused, ended

json
{
  "instanceId": "audio-voicemail-playback",
  "blockType": "core.audio-player",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "url": { "source": "binding", "value": { "scope": "block", "key": "selectedVoicemailUrl" } }
  }
}
  • Reserve autoplay: true for genuinely user-initiated contexts (e.g. opening a specific voicemail record) — most browsers will still require a prior user gesture.
  • Wire ended for "did the user listen through" tracking rather than paused.
  • Prefer core.video-player instead when a poster/visual thumbnail matters to the UX — core.audio-player has no visual surface beyond the native controls bar.

core.avatar ​

Render a user/entity avatar — an image (src) or fallback initials — and emit a click event for opening a related menu/dropdown.

PropertyTypeSet fromDefault
srcstringstatic, expression, binding
initialsstringstatic, expression, binding
altstringstatic, expression

Events: clicked

json
{
  "instanceId": "avt-current-user",
  "blockType": "core.avatar",
  "blockVersion": "1.0.0",
  "properties": {
    "src": { "source": "binding", "binding": { "scope": "session", "key": "user.photoUrl" } },
    "initials": { "source": "expression", "expression": "session.user.firstName[0] + session.user.lastName[0]" },
    "alt": { "source": "expression", "expression": "session.user.fullName" }
  },
  "events": {
    "clicked": {
      "source": "action-chain",
      "actions": [{ "type": "ui.openMenu", "menuId": "account-menu" }]
    }
  }
}
  • Always author initials as a fallback alongside src, so the avatar degrades gracefully when the image URL is broken/unset.
  • Author alt with the person/entity's name, not a generic string like "avatar".
  • Wire clicked only when there is a real menu/action to open — a purely decorative avatar (e.g. inside a read-only list row) can leave the event unwired.

core.avatar-group ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"initials":"AB","alt":"Alex Brown"},{"initial...
maxnumberstatic5

core.badge ​

Render a small notification/count badge overlaid on an icon (e.g. an unread-count indicator).

PropertyTypeSet fromDefault
contentstringstatic, expression, binding
iconstringstaticnotifications
colorstringstaticerror
json
{
  "instanceId": "badge-unread-notifications",
  "blockType": "core.badge",
  "blockVersion": "1.0.0",
  "properties": {
    "content": { "source": "binding", "binding": { "scope": "session", "key": "notifications.unreadCount" } },
    "icon": { "source": "static", "value": "notifications" },
    "color": { "source": "static", "value": "error" }
  }
}
  • Keep content short (a count or a single short word) — the badge is a small overlay, not a text container.
  • Reserve color: "error" (the default) for genuinely urgent/attention-needed counts; use info/primary for neutral counts.
  • Author an a11yLabelKey describing what the count means (e.g. "unread notifications") since the raw number alone is a weak accessible name.

core.barcode ​

Renders a scannable linear (1D) barcode encoding a bound string value — e.g. a SKU, order number, or asset serial.

PropertyTypeSet fromDefault
valuestringstatic, expression, binding
heightnumberstatic60
moduleColorstringstatic#000000
backgroundColorstringstatic#ffffff
json
{
  "instanceId": "barcode-asset-tag",
  "blockType": "core.barcode",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "value": { "source": "binding", "value": { "scope": "record", "key": "assetSerial" } },
    "height": { "source": "static", "value": 50 }
  }
}
  • Keep encoded values to printable ASCII (letters, digits, common punctuation) — Code Set B is the only mode supported.
  • Use core.qr-code instead when the payload needs to carry more data (e.g. a full URL) than a linear barcode comfortably encodes.
  • Ensure sufficient height and contrasting moduleColor/backgroundColor for reliable scanning, especially on printed labels.

core.boxplot-chart ​

PropertyTypeSet fromDefault
boxesjsonstatic, expression, binding[{"category":"Team A","min":42,"q1":58,"median"...
labelstringstatic, expression, binding

core.calendar ​

Displays a month-grid calendar with bindable dated events, for use cases like a company holiday calendar, a leave calendar, or a shift schedule.

PropertyTypeSet fromDefault
eventsjsonstatic, expression, binding[{"date":"2026-07-05","title":"Team Sync"},{"da...
initialMonthstringstatic

Events: dateSelected, monthChanged

json
{
  "instanceId": "cal-company-holidays",
  "blockType": "core.calendar",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "events": { "source": "binding", "value": { "scope": "page", "key": "companyHolidays" } },
    "initialMonth": { "source": "static", "value": "2026-07" }
  }
}
  • Supply events via a binding or expression bound to a real data source rather than a large static list, so the calendar reflects live data.
  • Use initialMonth to land the calendar on a business-relevant month (e.g. the current payroll or leave cycle) rather than always defaulting to "now".
  • Listen to dateSelected to drive a detail panel or side list showing that day's full event detail, since the calendar cell itself only shows compact event titles.

core.call-log ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","actor":"Jane Doe","action":"called"...

core.caption ​

PropertyTypeSet fromDefault
textstringstatic, expression, binding
textKeystringstatic
alignstringstaticleft
PropertyTypeSet fromDefault
slidesjsonstatic, expression, binding[{"image":"data:image/svg+xml,%3Csvg xmlns='htt...
autoAdvanceMsnumberstatic0

Events: changed

core.chart ​

Render a multi-series chart (categories on one axis, one or more named numeric series) from authored or bound JSON data.

PropertyTypeSet fromDefault
seriesjsonstatic, expression, binding[{"name":"Sales","points":[12,19,14,22,18]},{"n...
categoriesjsonstatic, expression, binding["Mon","Tue","Wed","Thu","Fri"]
labelstringstatic, expression, binding
kindstringstaticline
stackedbooleanstaticfalse
orientationstringstaticvertical
legendbooleanstatic
json
{
  "instanceId": "chart-monthly-sales",
  "blockType": "core.chart",
  "blockVersion": "1.0.0",
  "properties": {
    "categories": { "source": "static", "value": ["Jan", "Feb", "Mar", "Apr"] },
    "series": {
      "source": "static",
      "value": [
        { "name": "Revenue", "color": "#2E7D32", "points": [12000, 15500, 14200, 18300] }
      ]
    },
    "label": { "source": "static", "value": "Monthly Revenue" }
  }
}
  • Keep categories and every series' points array the same length — the adapter aligns by index, not by any label matching.
  • Author explicit per-series color for brand consistency instead of relying on theme-default fallback across many series.
  • Bind series/categories to a real query/aggregation result rather than hand-authoring large static JSON blocks.

core.chip ​

Render a compact pill/tag with a label, optional delete affordance, and click/delete events — also covers the platform taxonomy's "Tag" entry (same pill, no separate block type).

PropertyTypeSet fromDefault
labelstringstatic, expression, binding
labelKeystringstatic
colorstringstaticdefault
variantstringstaticfilled
deletablebooleanstaticfalse

Events: clicked, deleted

json
{
  "instanceId": "chip-status-open",
  "blockType": "core.chip",
  "blockVersion": "1.0.0",
  "properties": {
    "label": { "source": "static", "value": "Open" },
    "color": { "source": "static", "value": "info" },
    "variant": { "source": "static", "value": "filled" },
    "deletable": { "source": "static", "value": false }
  }
}
  • Set deletable: true only for chips representing a removable selection/filter, not for static status indicators.
  • Choose color semantically (e.g. error for blocked/critical, success for completed) rather than for decoration alone.
  • Use variant: "outlined" for lower-emphasis tags (e.g. secondary metadata) and filled (default) for primary status chips.

core.clock ​

PropertyTypeSet fromDefault
showDatebooleanstatic

core.cohort-chart ​

PropertyTypeSet fromDefault
periodLabelsjsonstatic, expression, binding["Month 0","Month 1","Month 2","Month 3"]
cohortsjsonstatic, expression, binding[{"label":"Jan Cohort","values":[100,62,48,40]}...
labelstringstatic, expression, binding

core.comments ​

A comment thread with a compose box.

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","author":"Jane Doe","text":"Looks go...

Events: commentSubmitted

json
{ "blockType": "core.comments", "instanceId": "leave-request-comments", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "items": {"source":"binding","binding":{"scope":"page","key":"comments"}} } }
  • Wire commentSubmitted to a callApi action that appends the comment server-side, then refetches items.

core.communication-timeline ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","label":"Email sent","timestamp":"20...

Events: select

core.conversion-funnel ​

PropertyTypeSet fromDefault
stagesjsonstatic, expression, binding[{"label":"Visitors","value":12000},{"label":"S...
heightnumberstatic

core.dashboard-header ​

PropertyTypeSet fromDefault
titlestringstatic, expression, bindingSales Overview
subtitlestringstatic, expression, bindingLast updated a few minutes ago
colorFromstringstatic#2563EB
colorTostringstatic#1E40AF
heightnumberstatic140

core.distance ​

PropertyTypeSet fromDefault
fromLatitudenumberstatic, binding37.7749
fromLongitudenumberstatic, binding-122.4194
toLatitudenumberstatic, binding34.0522
toLongitudenumberstatic, binding-118.2437
unitstringstatickm

core.donut-chart ​

Shows parts-of-a-whole as a ring (pie with a hole), leaving the center free for a total/label — the common "status breakdown" visualization.

PropertyTypeSet fromDefault
seriesjsonstatic, expression, binding[{"label":"Completed","value":62},{"label":"In ...
labelstringstatic, expression, binding
innerRadiusPercentnumberstatic60
heightnumberstatic
showLegendbooleanstatictrue
json
{
  "contractVersion": 1,
  "instanceId": "onboarding-status-donut",
  "blockType": "core.donut-chart",
  "blockVersion": "1.0.0",
  "properties": {
    "series": {
      "source": "binding",
      "binding": { "scope": "page", "key": "onboardingTaskStatusCounts" }
    },
    "label": { "source": "static", "value": "Onboarding Tasks" },
    "innerRadiusPercent": { "source": "static", "value": 65 }
  }
}
  • Use the freed center (via a low innerRadiusPercent) to show a total or
  • Keep slice count small (3–6 typical) for a status breakdown.
  • Prefer semantic colors (green=completed, red=blocked, etc.) via explicit

core.emoji ​

PropertyTypeSet fromDefault
valuestringstatic, expression, binding🙂
sizenumberstatic24
labelstringstatic, expression

Events: clicked

core.file-preview ​

PropertyTypeSet fromDefault
fileUrlstringstatic, expression, binding
fileNamestringstatic, expression, binding
mimeTypestringstatic, expression, binding
fileSizenumberstatic, expression, binding

Events: opened

core.funnel-chart ​

Shows a sequence of decreasing stages (e.g. a conversion or hiring pipeline) as progressively narrower bands, unlike a pie's parts-of-a-whole framing.

PropertyTypeSet fromDefault
stagesjsonstatic, expression, binding[{"label":"Visitors","value":1000},{"label":"Si...
heightnumberstatic
json
{
  "contractVersion": 1,
  "instanceId": "hiring-pipeline-funnel",
  "blockType": "core.funnel-chart",
  "blockVersion": "1.0.0",
  "properties": {
    "stages": {
      "source": "binding",
      "binding": "page.hiringPipelineCounts"
    }
  }
}
  • Author stages in the actual pipeline order (largest/first stage first)
  • Use consistent, semantically meaningful color per stage when the same
  • Bind stages to a live aggregated query (already reduced to

core.gauge ​

Shows a single numeric value against a min/max range as a dial — useful for a single KPI read at a glance (e.g. capacity, score, completion).

PropertyTypeSet fromDefault
valuenumberstatic, expression, binding
minnumberstatic0
maxnumberstatic100
labelstringstatic, expression, binding
heightnumberstatic
colorstringstatic
json
{
  "contractVersion": 1,
  "instanceId": "headcount-gauge",
  "blockType": "core.gauge",
  "blockVersion": "1.0.0",
  "properties": {
    "value": { "source": "binding", "binding": "page.currentHeadcount" },
    "min": { "source": "static", "value": 0 },
    "max": { "source": "static", "value": 250 },
    "label": { "source": "static", "value": "Headcount Capacity" }
  }
}
  • Always author min/max to match the real domain of value (e.g.
  • Set label so the dial is self-explanatory when placed on a dashboard
  • Prefer a binding source for value when it reflects a live metric

core.heading ​

Render a semantic heading (h1–h6) with the accessibility role of a heading.

PropertyTypeSet fromDefault
textstringstatic, expression, binding
textKeystringstatic
levelstringstatich2
json
{
  "instanceId": "hdg-page-title",
  "blockType": "core.heading",
  "blockVersion": "1.0.0",
  "properties": {
    "text": { "source": "static", "value": "Employee Directory" },
    "level": { "source": "static", "value": "h1" }
  }
}
  • Choose level to reflect real document structure (one h1 per page, nested h2/h3 sections) rather than for visual size alone — use theming/typography for pure visual sizing.
  • Prefer core.heading over a styled core.label whenever the text is structurally a section/page title, so screen readers see correct heading semantics.
  • Keep heading text authored via text (or a bound/expression value) short and scannable; use core.paragraph for supporting body copy underneath.

core.heatmap ​

Shows a row × column grid of values as color intensity — useful for attendance patterns, activity density, or any two-dimensional value matrix.

PropertyTypeSet fromDefault
rowsjsonstatic, expression, binding["Mon","Tue","Wed"]
columnsjsonstatic, expression, binding["AM","PM"]
cellsjsonstatic, expression, binding[{"row":"Mon","column":"AM","value":12},{"row":...
json
{
  "contractVersion": 1,
  "instanceId": "attendance-heatmap",
  "blockType": "core.heatmap",
  "blockVersion": "1.0.0",
  "properties": {
    "rows": {
      "source": "static",
      "value": ["Mon", "Tue", "Wed", "Thu", "Fri"]
    },
    "columns": {
      "source": "static",
      "value": ["Morning", "Afternoon", "Evening"]
    },
    "cells": {
      "source": "binding",
      "binding": "page.weeklyAttendanceDensity"
    }
  }
}
  • Ensure every cells entry's row/column exactly matches an entry in
  • Bind cells to an aggregated query (already reduced to row/column/value
  • Keep both axes to a reasonable size (a handful of rows/columns) so

core.hero-header ​

A branded gradient banner with a title/subtitle — a mobile-specific widget ("wave header is also should be a block") for a page's top welcome/branding band.

PropertyTypeSet fromDefault
titlestringstatic, expression, bindingWelcome back
subtitlestringstatic, expression, binding
colorFromstringstatic#2563EB
colorTostringstatic#1E40AF
heightnumberstatic220
json
{
  "instanceId": "hero-mobile-home",
  "blockType": "core.hero-header",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "title": { "source": "expression", "expression": "'Welcome back, ' + session.user.firstName" },
    "subtitle": { "source": "static", "value": "Here's what's happening today." }
  }
}
  • Reserve for a page's/dashboard's top-of-page branding band, not repeated throughout a page.
  • Keep title short — this is a banner, not a paragraph block (use core.paragraph for body copy).
  • Stay within the declared 120–480 height range when authoring — it is a validated constraint, not a runtime clamp.

core.histogram-chart ​

PropertyTypeSet fromDefault
valuesjsonstatic, expression, binding[12,15,14,18,22,25,19,21,30,28,17,16,24,26,20]
binCountnumberstatic6
labelstringstatic, expression, binding

core.html-viewer ​

Displays a read-only block of HTML content — e.g. a rendered email template preview, a legal clause, or any HTML string produced upstream — without letting the author edit it in place (contrast with core.rich-text, which is the editable counterpart).

PropertyTypeSet fromDefault
valuestringstatic, expression, binding

Sample HTML content.

json
{
  "instanceId": "html-viewer-email-preview",
  "blockType": "core.html-viewer",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "value": { "source": "binding", "value": { "scope": "page", "key": "renderedEmailPreviewHtml" } }
  }
}
  • Never assume upstream content is pre-sanitized — this block re-sanitizes regardless, so authoring against it is safe by default, but don't rely on it as your only defense if the value also flows elsewhere unsanitized.
  • Use core.html-viewer only for genuinely HTML-shaped content; for hand-authored formatted text, prefer core.markdown-viewer, which is easier for a non-technical author to hand-edit.
  • Don't expect <script>/<iframe>/embedded media to survive — the allow-list strips them; this block is for formatted text, not for embedding executable or third-party widget content (use core.iframe for that instead).

core.icon ​

Render a single named icon glyph.

PropertyTypeSet fromDefault
iconstringstatic, expression, bindingstar
colorTokenstringstatic
badgebooleanstaticfalse
json
{
  "instanceId": "icn-star",
  "blockType": "core.icon",
  "blockVersion": "1.0.0",
  "properties": {
    "icon": { "source": "static", "value": "star" }
  }
}
  • Use a name from the render adapter's actual icon set (e.g. MUI icon names for the reference adapter) — an unresolvable name degrades silently at render, not at validation time.
  • Author an a11yLabelKey when the icon conveys meaning on its own (e.g. an unlabeled status flag); leave it unset for purely decorative icons next to already-labeled text.
  • Prefer core.badge instead of composing core.icon + core.label when the intent is a notification-count affordance.

core.iframe ​

Embeds an external URL in a sandboxed frame.

PropertyTypeSet fromDefault
urlstringstatic, expression, binding
heightstringstatic480px
json
{ "blockType": "core.iframe", "instanceId": "external-report", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "url": {"source":"static","value":"https://example.com/dashboard"}, "height": {"source":"static","value":"600px"} } }
  • Only embed trusted URLs — an iframe has no content sanitization of its own.

core.image ​

Render a single image from a URL, with optional alt text and fixed width/height.

PropertyTypeSet fromDefault
srcstringstatic, expression, binding
altstringstatic, expression
widthstringstatic
heightstringstatic
shapestringstaticnone
tooltipstringstatic
transformstringstatic
filterstringstaticnone
json
{
  "instanceId": "img-logo",
  "blockType": "core.image",
  "blockVersion": "1.0.0",
  "properties": {
    "src": { "source": "static", "value": "https://cdn.example.com/tenant/logo.png" },
    "alt": { "source": "static", "value": "Company logo" },
    "width": { "source": "static", "value": "160px" },
    "height": { "source": "static", "value": "48px" }
  }
}
  • Always author alt (even an empty string for purely decorative images) — it is the widget's sole accessible-name source.
  • Prefer binding src to a stable, tenant-hosted URL (e.g. a File Management attachment) rather than an external third-party host.
  • Set both width and height when the layout needs a stable image footprint to avoid content reflow while the image loads.

Displays a browsable set of images with optional captions — a single carousel-style widget for product photos, employee ID cards, document attachments, or any bound array of images, instead of authoring N separate core.image blocks.

PropertyTypeSet fromDefault
imagesjsonstatic, expression, binding[{"src":"data:image/svg+xml,%3Csvg xmlns='http:...

Events: changed

json
{
  "instanceId": "gallery-product-photos",
  "blockType": "core.image-gallery",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "images": {
      "source": "static",
      "value": [
        { "src": "https://cdn.example.com/products/sku-1001-front.jpg", "alt": "Front view", "caption": "Front" },
        { "src": "https://cdn.example.com/products/sku-1001-side.jpg", "alt": "Side view", "caption": "Side" }
      ]
    }
  }
}
  • Always supply alt text per image — the widget carries no fallback alt-text generation.
  • Bind images to a real Data Source query result rather than authoring large static arrays inline.
  • Use caption for short, human-readable context (e.g. "Front", "Damage close-up") — it is rendered as-is, not sanitized as markup (it flows through as plain data, same as any other JSON property value).

core.json-viewer ​

Displays a formatted, read-only dump of a JSON value — useful for debugging screens, "raw data" inspector panels, webhook payload previews, or any place an author wants to show structured data verbatim rather than through custom formatted fields.

PropertyTypeSet fromDefault
valuejsonstatic, expression, binding
json
{
  "instanceId": "json-viewer-webhook-payload",
  "blockType": "core.json-viewer",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "value": { "source": "binding", "value": { "scope": "page", "key": "lastWebhookPayload" } }
  }
}
  • Use for developer/admin-facing debug and inspector screens, not as an end-user data display — it shows raw keys, not translated/business-friendly labels.
  • Prefer purpose-built display blocks (grid, cards, labels) for anything an end user is meant to read routinely; reserve core.json-viewer for "show me the raw thing" contexts.
  • Bind to a scoped/filtered slice of data rather than an entire record tree when only part of it is relevant.

core.kpi-card ​

Shows a single headline metric with an optional label and a trend indicator against a previous value — the standard "big number" dashboard tile.

PropertyTypeSet fromDefault
valuenumberstatic, expression, binding128400
previousValuenumberstatic, expression, binding
labelstringstatic, expression, bindingMonthly Revenue
labelKeystringstatic
formatstringstaticnumber
currencyCodestringstaticUSD
iconstringstatic, expression, binding
colorTokenstringstatic
trendFormatstringstaticpercent
trendLabelstringstatic, expression, binding
json
{
  "contractVersion": 1,
  "instanceId": "headcount-kpi",
  "blockType": "core.kpi-card",
  "blockVersion": "1.0.0",
  "properties": {
    "value": { "source": "binding", "binding": { "scope": "page", "key": "currentHeadcount" } },
    "previousValue": { "source": "binding", "binding": { "scope": "page", "key": "previousMonthHeadcount" } },
    "labelKey": { "source": "static", "value": "hcm.headcount.kpi.total" },
    "format": { "source": "static", "value": "number" },
    "icon": { "source": "static", "value": "users" },
    "colorToken": { "source": "static", "value": "info" }
  }
}
  • Set format/currencyCode to match the metric's real domain (e.g.
  • Supply previousValue whenever a trend is meaningful — omitting it
  • Pair with a core.sparkline in the same card/container for a headline

core.kpi-comparison ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"label":"This Quarter","value":482000,"format...
labelstringstatic, expression, binding

core.label ​

Render a single line (or short run) of static, expression-derived, or bound text — the simplest text-display primitive in the widget catalog.

PropertyTypeSet fromDefault
textstringstatic, expression, binding
textKeystringstatic
formatstringstaticnone
currencyCodestringstaticUSD
hiddenbooleanstatic, expression, bindingfalse
json
{
  "instanceId": "lbl-welcome",
  "blockType": "core.label",
  "blockVersion": "1.0.0",
  "properties": {
    "text": { "source": "static", "value": "Welcome back!" }
  }
}
  • Prefer textKey over text for any label that needs translation; author text as a static fallback for untranslated tenants.
  • Use binding/expression sources for record-derived text rather than composing strings in a parent container's own static text.
  • For headings, prefer core.heading (which carries a semantic level and role: heading) rather than styling a core.label to look like one.

Render a hyperlink with configurable target text, destination, and open-target behavior, and emit a click event.

PropertyTypeSet fromDefault
textstringstatic, expression, binding
textKeystringstatic
hrefstringstatic, expression, binding
targetstringstatic_self

Events: clicked

json
{
  "instanceId": "lnk-view-profile",
  "blockType": "core.link",
  "blockVersion": "1.0.0",
  "properties": {
    "text": { "source": "static", "value": "View full profile" },
    "href": { "source": "expression", "expression": "'/hcm/employees/' + employee.id" },
    "target": { "source": "static", "value": "_self" }
  }
}
  • Use _blank only for links leaving the current tenant application (external docs, third-party portals); keep in-app navigation on _self.
  • Build href from an expression/binding for record-scoped deep links rather than hardcoding a static path with a placeholder id.
  • Wire clicked to an action chain only when there is real side-effecting behavior to run (analytics, audit log) beyond native browser navigation — the navigation itself does not require an action chain.

core.location-picker ​

PropertyTypeSet fromDefault
latitudenumberstatic, binding37.7749
longitudenumberstatic, binding-122.4194
zoomnumberstatic, binding13
markersjsonstatic, expression, binding[{"lat":37.7749,"lng":-122.4194,"label":"HQ"}]
heightnumberstatic220
clusterMarkersbooleanstaticfalse
clusterGridFactornumberstatic1
pickModebooleanstatictrue
polygonsjsonstatic, expression, binding[]
drawPolygonbooleanstaticfalse

Events: mapClicked, polygonDrawn

core.map ​

An interactive map with markers.

PropertyTypeSet fromDefault
latitudenumberstatic, binding37.7749
longitudenumberstatic, binding-122.4194
zoomnumberstatic, binding13
markersjsonstatic, expression, binding[{"lat":37.7749,"lng":-122.4194,"label":"HQ"}]
heightnumberstatic300
clusterMarkersbooleanstaticfalse
clusterGridFactornumberstatic1
pickModebooleanstaticfalse
polygonsjsonstatic, expression, binding[]
drawPolygonbooleanstaticfalse

Events: mapClicked, polygonDrawn

json
{ "blockType": "core.map", "instanceId": "map-1", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "latitude": {"source":"static","value":40.7128}, "longitude": {"source":"static","value":-74.0060}, "zoom": {"source":"static","value":11}, "markers": {"source":"static","value":[{"lat":40.7128,"lng":-74.0060,"label":"NYC Office"}]} } }
  • Bind markers to real location data rather than hardcoding.

core.markdown-viewer ​

Displays read-only, formatted markdown content — release notes, help text, policy documents authored in markdown — as rendered rich text, without an edit surface (contrast with core.markdown-editor).

PropertyTypeSet fromDefault
valuestringstatic, expression, binding# Sample Heading This is sample markdown c...
json
{
  "instanceId": "markdown-viewer-release-notes",
  "blockType": "core.markdown-viewer",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "value": { "source": "binding", "value": { "scope": "page", "key": "releaseNotesMarkdown" } }
  }
}
  • Prefer core.markdown-viewer over core.html-viewer for author-hand-edited content — markdown source is easier for a non-technical author to write/review than raw HTML.
  • Don't rely on advanced markdown features (tables, footnotes, nested blockquotes) — the in-house converter only supports the subset listed in Description.
  • Pair with core.markdown-editor for the editable counterpart in an authoring screen; use core.markdown-viewer for the read-only display context (e.g. a detail page).

core.notifications ​

A notification list with read/unread state.

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","title":"New comment on your report"...

Events: select

json
{ "blockType": "core.notifications", "instanceId": "notif-bell", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "items": {"source":"binding","binding":{"scope":"session","key":"notifications"}} } }
  • Wire select to also call a mark-as-read API for durable persistence — the local readIds state doesn't survive a full page reload without one.

core.org-chart ​

Renders a company/team hierarchy from a flat manager-reference list.

PropertyTypeSet fromDefault
peoplejsonstatic, expression, binding[{"id":"ceo","label":"Alex Morgan","title":"CEO...

Events: select

json
{ "blockType": "core.org-chart", "instanceId": "company-org-chart", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "people": {"source":"binding","binding":{"scope":"page","key":"employees"}} } }
  • Bind people to a real employee query mapped to {id, label, title, managerId}.

core.paragraph ​

Render a block of body text with paragraph semantics.

PropertyTypeSet fromDefault
textstringstatic, expression, binding
json
{
  "instanceId": "para-intro",
  "blockType": "core.paragraph",
  "blockVersion": "1.0.0",
  "properties": {
    "text": { "source": "static", "value": "This page summarizes your team's onboarding progress for the current quarter." }
  }
}
  • Use for plain-text body copy only; reach for the rich-text widget when authors need bold/lists/links inline.
  • Keep bound/expression text values reasonably sized — this widget renders the whole string as one block, with no truncation/clamping property of its own.
  • Pair with a preceding core.heading for scannable page structure rather than relying on visual size alone.

core.pareto-chart ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"label":"Shipping Delay","value":42},{"label"...
labelstringstatic, expression, binding

core.pdf-viewer ​

Embeds a PDF document inline on a Page/Form/Container/Dashboard — e.g. a payslip, an invoice, a signed contract — using the browser's own native PDF rendering, with no PDF-parsing dependency of this platform's own.

PropertyTypeSet fromDefault
urlstringstatic, expression, binding
heightstringstatic600px
json
{
  "instanceId": "pdf-payslip-viewer",
  "blockType": "core.pdf-viewer",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "url": { "source": "binding", "value": { "scope": "page", "key": "selectedPayslipUrl" } },
    "height": { "source": "static", "value": "700px" }
  }
}
  • Bind url to tenant-controlled document storage (e.g. the DMS module's file URLs), never to arbitrary user-supplied links.
  • Set an explicit height sized to the expected document — the widget does not auto-fit content height.
  • Pair with a "no document selected" empty state upstream (the widget already shows one when url is blank, but a surrounding page can also gate visibility).

core.pending-approval ​

PropertyTypeSet fromDefault
contentstringstatic, expression, bindingPending Approval
iconstringstaticpending-actions
colorstringstaticwarning

core.pie-chart ​

Shows parts-of-a-whole as a full pie, with each slice sized by its share of the total.

PropertyTypeSet fromDefault
seriesjsonstatic, expression, binding[{"label":"Direct","value":40},{"label":"Referr...
labelstringstatic, expression, binding
json
{
  "contractVersion": 1,
  "instanceId": "recruitment-source-pie",
  "blockType": "core.pie-chart",
  "blockVersion": "1.0.0",
  "properties": {
    "series": {
      "source": "binding",
      "binding": "page.candidateSourceBreakdown"
    },
    "label": { "source": "static", "value": "Candidates by Source" }
  }
}
  • Keep the slice count small (roughly 3–8) — a pie is for comparing a few
  • Only set explicit color per slice when a specific palette (e.g. brand
  • Always set label when the chart appears without surrounding context

core.progress-bar ​

Render a horizontal (linear) progress indicator for a 0–100 value, with an optional caption — the linear counterpart to core.progress-ring.

PropertyTypeSet fromDefault
valuenumberstatic, expression, binding
labelstringstatic, expression, binding
colorstringstatic, expression, binding
json
{
  "instanceId": "bar-upload-progress",
  "blockType": "core.progress-bar",
  "blockVersion": "1.0.0",
  "properties": {
    "value": { "source": "binding", "binding": { "scope": "block", "key": "upload.percentComplete" } },
    "label": { "source": "static", "value": "Uploading..." }
  }
}
  • Always author label — as a progressbar-role element it needs a real accessible name, not just visual context.
  • Bind value to an already-computed 0–100 percentage; the widget does not itself normalize a raw fraction/ratio.
  • Prefer core.progress-bar over core.progress-ring inside narrow horizontal spaces (table rows, list items, form footers).

core.progress-ring ​

Render a circular ("donut") progress indicator for a 0–100 value, with an optional caption.

PropertyTypeSet fromDefault
valuenumberstatic, expression, binding
labelstringstatic, expression, binding
json
{
  "instanceId": "ring-onboarding-progress",
  "blockType": "core.progress-ring",
  "blockVersion": "1.0.0",
  "properties": {
    "value": { "source": "static", "value": 65 },
    "label": { "source": "static", "value": "Onboarding" }
  }
}
  • Always author label for dashboard tiles — it is both the visible caption and the accessible name source.
  • Bind value to an already-computed 0–100 percentage; the widget does not itself normalize a raw ratio or fraction.
  • Use core.progress-bar instead when horizontal space is more available than vertical (e.g. inside a table row or narrow card).

core.qr-code ​

Renders a scannable QR code encoding a bound string value — e.g. an employee badge ID, an asset tag, or a URL.

PropertyTypeSet fromDefault
valuestringstatic, expression, binding
sizenumberstatic200
ecLevelstringstaticM
moduleColorstringstatic#000000
backgroundColorstringstatic#ffffff
json
{
  "instanceId": "qr-employee-badge",
  "blockType": "core.qr-code",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "value": { "source": "binding", "value": { "scope": "record", "key": "employeeId" } },
    "size": { "source": "static", "value": 120 },
    "ecLevel": { "source": "static", "value": "Q" }
  }
}
  • Use a higher ecLevel ("Q" or "H") for badges/labels that may get scratched, printed small, or partially obscured.
  • Keep encoded value short (IDs, short URLs) — QR codes for very long text become dense and harder to scan reliably.
  • Bind value to a stable identifier (not a mutable display name) when the QR code is meant for long-term physical use (e.g. printed badges).

core.radar-chart ​

Compares one or more series across several shared axes (dimensions) on a polar grid — useful for multi-factor comparisons like skill assessments or vendor scorecards.

PropertyTypeSet fromDefault
axesjsonstatic, expression, binding["Speed","Quality","Cost","Support","Scale"]
seriesjsonstatic, expression, binding[{"name":"Product","values":[80,60,70,90,50]}]
maxValuenumberstatic
json
{
  "contractVersion": 1,
  "instanceId": "competency-radar",
  "blockType": "core.radar-chart",
  "blockVersion": "1.0.0",
  "properties": {
    "axes": {
      "source": "static",
      "value": ["Communication", "Technical Skill", "Leadership", "Reliability", "Collaboration"]
    },
    "series": {
      "source": "binding",
      "binding": "form.employeeCompetencyScores"
    },
    "maxValue": { "source": "static", "value": 100 }
  }
}
  • Keep every series' values array the same length as axes, in the same
  • Set an explicit maxValue (e.g. 100 for percentage-scored data) rather
  • Give each series a distinct color when comparing more than one, so

core.ranking-list ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"label":"Priya Sharma","value":128400},{"labe...
variantstringstaticranking
limitnumberstatic
formatstringstaticnumber
currencyCodestringstaticUSD

core.receipt-preview ​

PropertyTypeSet fromDefault
storeNamestringstatic, bindingStore
saleNumberstringstatic, binding
linesjsonstatic, binding[]
subtotalnumberstatic, binding0
discountTotalnumberstatic, binding0
taxTotalnumberstatic, binding0
grandTotalnumberstatic, binding0
footerMessagestringstatic, bindingThank you!

core.sales-funnel ​

PropertyTypeSet fromDefault
stagesjsonstatic, expression, binding[{"label":"Leads","value":850},{"label":"Qualif...
heightnumberstatic

core.sales-territory-map ​

PropertyTypeSet fromDefault
latitudenumberstatic, binding37.7749
longitudenumberstatic, binding-122.4194
zoomnumberstatic, binding13
markersjsonstatic, expression, binding[{"lat":37.7749,"lng":-122.4194,"label":"Territ...
heightnumberstatic300
clusterMarkersbooleanstaticfalse
clusterGridFactornumberstatic1
pickModebooleanstaticfalse
polygonsjsonstatic, expression, binding[{"points":[{"lat":37.85,"lng":-122.55},{"lat":...
drawPolygonbooleanstaticfalse

Events: mapClicked, polygonDrawn

core.sankey-chart ​

PropertyTypeSet fromDefault
nodesjsonstatic, expression, binding[{"name":"Visitors"},{"name":"Signups"},{"name"...
linksjsonstatic, expression, binding[{"source":"Visitors","target":"Signups","value...
labelstringstatic, expression, binding

core.shopping-cart ​

PropertyTypeSet fromDefault
previewItemsjsonstatic, binding[{"name":"Sample product","price":19.99,"quanti...
checkoutRoutestringstatic/checkout

Events: checkoutClicked

core.sla-indicator ​

PropertyTypeSet fromDefault
dueAtstringstatic, expression, binding
escalatedbooleanstatic, expression, bindingfalse
warningThresholdMinutesnumberstatic60

core.sparkline ​

Shows a compact, axis-free line trend from a series of numbers — a small inline visual, typically paired with a KPI value in a dashboard card.

PropertyTypeSet fromDefault
pointsjsonstatic, expression, binding[5,9,4,12,8,15,10]
colorstringstatic#3b82f6
json
{
  "contractVersion": 1,
  "instanceId": "attrition-trend-sparkline",
  "blockType": "core.sparkline",
  "blockVersion": "1.0.0",
  "properties": {
    "points": {
      "source": "binding",
      "binding": "page.monthlyAttritionRateSeries"
    },
    "color": { "source": "static", "value": "#c62828" }
  }
}
  • Pair a sparkline next to a core.kpi-card to show recent trend alongside
  • Use a semantic color (e.g. red for a rising cost/attrition metric,
  • Keep points reasonably short (weeks, not years, of daily data) since the

core.stat ​

PropertyTypeSet fromDefault
valuenumberstatic, expression, binding42
labelstringstatic, expression, bindingActive Users
labelKeystringstatic
variantstringstaticmetric
formatstringstaticnumber
currencyCodestringstaticUSD
animationDurationMsnumberstatic800

core.status-display ​

PropertyTypeSet fromDefault
textstringstatic, expression, bindingActive
textKeystringstatic
statusstringstatic, expression, bindingneutral
variantstringstaticfilled

core.target-vs-actual ​

PropertyTypeSet fromDefault
targetnumberstatic, expression, binding100000
actualnumberstatic, expression, binding82000
labelstringstatic, expression, binding
formatstringstaticnumber
currencyCodestringstaticUSD

core.territory-map ​

PropertyTypeSet fromDefault
latitudenumberstatic, binding37.7749
longitudenumberstatic, binding-122.4194
zoomnumberstatic, binding13
markersjsonstatic, expression, binding[{"lat":37.7749,"lng":-122.4194,"label":"Territ...
heightnumberstatic300
clusterMarkersbooleanstaticfalse
clusterGridFactornumberstatic1
pickModebooleanstaticfalse
polygonsjsonstatic, expression, binding[{"points":[{"lat":37.85,"lng":-122.55},{"lat":...
drawPolygonbooleanstaticfalse

Events: mapClicked, polygonDrawn

core.timeline ​

Shows a chronological sequence of events.

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","label":"Order placed","timestamp":"...

Events: select

json
{ "blockType": "core.timeline", "instanceId": "onboarding-timeline", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "items": {"source":"binding","binding":{"scope":"page","key":"onboardingSteps"}} } }
  • Use status to communicate progress visually (done/active/pending/error).

core.tooltip ​

Render an inline help-icon trigger that shows a hint/explanation text — a leaf hint affordance, not a children-wrapping overlay around other content.

PropertyTypeSet fromDefault
textstringstatic, expression, binding
iconstringstaticinfo
json
{
  "instanceId": "tip-field-help",
  "blockType": "core.tooltip",
  "blockVersion": "1.0.0",
  "properties": {
    "text": { "source": "static", "value": "Your Employee ID is assigned automatically and cannot be changed." },
    "icon": { "source": "static", "value": "info" }
  }
}
  • Place adjacent to (not nested around) the control it explains — core.tooltip has no children slot.
  • Keep text concise; it is a hover/focus hint, not a substitute for core.paragraph body copy.
  • Choose icon to match severity/intent (info for neutral help, warning for cautionary hints).

core.tree-view ​

A generic expandable/selectable tree — for core.org-chart's people-hierarchy card visualization, this widget is the generic-node-tree alternative.

PropertyTypeSet fromDefault
nodesjsonstatic, expression, binding[{"id":"root","label":"Documents","children":[{...

Events: select

json
{ "blockType": "core.tree-view", "instanceId": "org-structure-tree", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "nodes": {"source":"binding","binding":{"scope":"page","key":"orgUnitTree"}} } }
  • Use for Org Structure Manager-style hierarchies (a real, shipped HCM screen uses this pattern).

core.treemap-chart ​

PropertyTypeSet fromDefault
nodesjsonstatic, expression, binding[{"name":"Engineering","value":42},{"name":"Sal...
labelstringstatic, expression, binding

core.video-player ​

Plays a video inline — training clips, product demos, recorded meetings — using the browser's native HTML5 <video> element, with no third-party player dependency.

PropertyTypeSet fromDefault
urlstringstatic, expression, binding
fileIdstringstatic, expression, binding
allowDownloadbooleanstatictrue
adaptivebooleanstatictrue
posterstringstatic, expression, binding
autoplaybooleanstaticfalse
loopbooleanstaticfalse

Events: played, paused, ended

json
{
  "instanceId": "video-onboarding-welcome",
  "blockType": "core.video-player",
  "blockVersion": "1.0.0",
  "contractVersion": 1,
  "properties": {
    "url": { "source": "static", "value": "https://cdn.example.com/onboarding/welcome.mp4" },
    "poster": { "source": "static", "value": "https://cdn.example.com/onboarding/welcome-poster.jpg" },
    "autoplay": { "source": "static", "value": false }
  }
}
  • Always set poster for above-the-fold videos so the layout doesn't jump once metadata loads.
  • Wire ended (not paused) when you need a "the user actually finished this" signal, since paused also fires on manual pause partway through.
  • Avoid loop: true combined with autoplay: true for long-form content — reserve looping for short ambient/background clips.

core.warehouse-map ​

PropertyTypeSet fromDefault
latitudenumberstatic, binding37.7749
longitudenumberstatic, binding-122.4194
zoomnumberstatic, binding13
markersjsonstatic, expression, binding[{"lat":37.78,"lng":-122.42,"label":"Warehouse ...
heightnumberstatic300
clusterMarkersbooleanstaticfalse
clusterGridFactornumberstatic1
pickModebooleanstaticfalse
polygonsjsonstatic, expression, binding[{"points":[{"lat":37.79,"lng":-122.43},{"lat":...
drawPolygonbooleanstaticfalse

Events: mapClicked, polygonDrawn

core.waterfall-chart ​

PropertyTypeSet fromDefault
stepsjsonstatic, expression, binding[{"label":"Starting Revenue","value":100,"isTot...
labelstringstatic, expression, binding

core.workflow-history ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","actor":"Sam Patel","action":"submit...

core.workflow-status ​

A read-only visual indicator of a workflow instance's current step.

PropertyTypeSet fromDefault
stepsjsonstatic, expression, binding[{"id":"1","label":"Submitted","status":"done"}...
json
{ "blockType": "core.workflow-status", "instanceId": "leave-request-status", "blockVersion": "1.0.0", "contractVersion": 1,
  "properties": { "steps": {"source":"binding","binding":{"scope":"page","key":"workflowSteps"}} } }
  • Read-only status display; use core.approval-panel if the user needs to act on the workflow.

core.workflow-timeline ​

PropertyTypeSet fromDefault
itemsjsonstatic, expression, binding[{"id":"1","label":"Submitted","timestamp":"202...

Events: select