Tiles that fly out from the centre onto an ellipse as p goes 0 to 1, then swing round it as step goes 0 to 1: the ring of app icons around a product shot. Tiles are text (a letter, a glyph or a short label), never brand logos, so there is nothing to license. Place it over the same box as the thing it surrounds. Uses CSS cos() and sin(), so it needs a current browser. Plain HTML and CSS, no script; standalone it renders the tiles in place.
| Surface | Note |
|---|---|
| Prints the final state (type fully revealed, numbers at their values, shapes drawn); no motion | |
| google-chat | Inline CSS functions and custom properties are not supported |
| Field | Type | Required |
|---|---|---|
| items | array (max 12) of string or {text}; text max 8 characters (one or two reads as a glyph, longer as a small label), or max 24 with shape pill. | required |
| shape | "pill". Rectangular pill tiles that size to their label (text up to 24 characters, one line, no wrapping) instead of square tiles. Anything else keeps the square tile and the 8-character limit. Tile height is 55% of size, so size sets the pill height; allow room around the ring for long labels. | optional |
| size | integer. Tile px, 24-160. Default 64. | optional |
| rx | integer. Horizontal radius, percent of the placed box, 5-60. Default 40. | optional |
| ry | integer. Vertical radius, percent of the placed box, 5-60. Default 36. | optional |
| start | integer. Angle of the first tile in degrees, -360 to 360. Default -90 (top). | optional |
| spin | integer. Degrees the ring turns as step goes 0 to 1, -360 to 360. Default 40. | optional |
| fill | "#rrggbb". Tile colour. Default "#ffffff". | optional |
| ink | "#rrggbb". Tile text colour. Default "#111827". | optional |
| ring | bool. A faint dashed ellipse behind the tiles. Default true. | optional |
{
"type": "motion_orbit",
"items": [
{
"label": "Item 1"
},
{
"label": "Item 2"
}
]
}
{
"identifier": "urn:air:a2uicatalog.ai:atom:motion_orbit",
"displayName": "Motion Orbit",
"type": "application/vnd.a2ui.atom+json",
"url": "https://a2uicatalog.ai/atoms/motion_orbit",
"capabilities": [
"web",
"google-meet-stage",
"google-apps-script-web",
"mcp-apps",
"android"
],
"description": "Tiles that fly out from the centre onto an ellipse as p goes 0 to 1, then swing round it as step goes 0 to 1: the ring of app icons around a product shot. Tiles are text (a letter, a glyph or a short label), never brand logos, so there is nothing to license. Place it over the same box as the thing it surrounds. Uses CSS cos() and sin(), so it needs a current browser. Plain HTML and CSS, no script; standalone it renders the tiles in place.",
"representativeQueries": [
"show a tiles that fly out onto an ellipse and orbit a centre as progress advances",
"tiles that fly out from the centre onto an ellipse as p goes 0 to 1, then swing round it as step goe",
"render a motion orbit"
]
}
The renderer is an open-source Google Apps Script web app. Deploy your own instance in 4 commands — you own the URL, no dependency on the demo endpoint.
git clone https://github.com/a2uicatalog/a2ui
cd a2ui/apps-script-surface/gas-wired-renderer
clasp push && clasp deploy
Full deploy guide →