Skip to main content

Element Mapping Reference

When you convert a site, the Site Converter doesn't screenshot the source — it recognizes each block and rebuilds it as a native UnysonPlus shortcode. This section documents what the deterministic converter recognizes, what it becomes, and — per shortcode — how each option is filled, so you can spot options that aren't mapped or are only reproduced via CSS.

How to read it:

  • Priority — relative evaluation order (higher runs first). Specialized structural recognizers take the high numbers and are tried first; text primitives run later (lower numbers); anything no recognizer claims falls back to code_block, the universal fallback, so nothing is ever lost.

  • The curated shortcodes below have their own page with a full option-by-option coverage table; the rest of the registry is listed in the Recognizers table with its rule and target.

  • Coverage counts only design options (native + via-css + gap + unmapped); auto plumbing is excluded.

  • ⚠️ Gaps vs ⚪ Default — a gap is an option a source realistically expresses that the converter doesn't derive yet (a real to-do). Default means there's no reliable source signal, or it's an intentional UnysonPlus-specific choice — those are correct left unmapped. The goal is faithful reproduction, not maxing the native %.

  • Native — Set as the native option from the source.

  • 🟡 Via CSS — Reproduced via scoped CSS / the styler; the native option is left empty (candidate to promote to a native mapping).

  • ⚠️ Gap — A source signal exists, but the converter does not derive this yet — a mapping worth adding (a real TODO, not a limitation).

  • Unmapped — Left at default — no reliable source signal, or an intentional/UnysonPlus-specific choice with nothing to translate.

  • ⚙️ Auto — Plumbing (unique id, custom attrs). Excluded from the coverage percentage.

Nothing is dropped silently

Two backstops guarantee no source content is lost:

  • code_block fallback — anything no recognizer claims is preserved verbatim as a code_block, so it still renders while staying hand-editable.
  • Safety net + drop report — after mapping, a salvage pass (salvage_dropped()) rescues any real text node that fell through, and the converter writes a conversion-drops.json coverage report into the bundle: what was rescued (real content the net had to recover) vs. decorative (safely skipped). The golden-fixture regression tests assert a drop budget so a recognizer change can't quietly start losing content.

Generated from the converter's recognizer + block-builder registries (with a PHP↔JS parity twin in the to-pages path). This set is expanding — more shortcodes are added as they're documented. Converting a source? See also Theme Settings Mapping (the design system side) and How It Works.

Coverage at a glance

ShortcodeBecomesNativeVia CSSGapsDefaultCoverage
Code Blockcode_block✅ 1🟡 0⚠️ 0⚪ 811%
Special Headingspecial_heading✅ 18🟡 0⚠️ 3⚪ 1156%
Instagraminstagram✅ 3🟡 0⚠️ 0⚪ 633%
WooCommerce Productswc_products✅ 4🟡 0⚠️ 2⚪ 927%
Postsposts✅ 7🟡 0⚠️ 2⚪ 4713%
Avataravatar✅ 1🟡 0⚠️ 0⚪ 156%
Gallerygallery✅ 2🟡 0⚠️ 5⚪ 813%
Media Videomedia_video✅ 1🟡 0⚠️ 1⚪ 417%
Media Imagemedia_image✅ 1🟡 0⚠️ 0⚪ 910%
Image Boximage_box✅ 11🟡 0⚠️ 5⚪ 1634%
Icon Boxicon_box✅ 13🟡 0⚠️ 3⚪ 854%
Newsletternewsletter✅ 8🟡 0⚠️ 2⚪ 1040%
Text Blocktext_block✅ 5🟡 0⚠️ 4⚪ 731%
Countercounter✅ 12🟡 0⚠️ 1⚪ 471%
Feature Listfeature_list✅ 9🟡 0⚠️ 0⚪ 950%
Buttonbutton✅ 9🟡 0⚠️ 2⚪ 364%
Testimonialstestimonials✅ 3🟡 0⚠️ 0⚪ 2013%
Badgebadge✅ 11🟡 0⚠️ 5⚪ 1437%
Accordionaccordion✅ 17🟡 0⚠️ 1⚪ 1061%
Tabletable✅ 3🟡 0⚠️ 5⚪ 1314%

Recognizers

The complete recognizer registry, in evaluation order (higher runs first). Linked rows have a full per-option coverage page; the rest document the recognizer rule and its target shortcode.

PriorityRecognizerMatches whenBecomesFallback
99code (universal fallback)Anything the converter can’t map to a more specific element — the genuinely bespoke markup. This is the universal fallback, so nothing is ever lost.Code Blockcode_block— (this is the fallback).
99pricing_tableA row of ≥2 price cards (each with a plan name, a currency-prefixed amount, and a feature list / CTA).pricing_tableDegrades to a card_grid of columns, then code_block.
98stepsAn ordered how-it-works / process sequence (numbered badges + title + blurb per step).stepsDegrades to card_grid, then code_block.
97timelineA vertical timeline (dated / connector-line entries down a spine).timelineDegrades to card_grid, then code_block.
96progressLabeled progress / skill bars (a track with a percentage-width fill).progressDegrades to text_block, then code_block.
95tabsA tabbed panel (a tab strip whose buttons toggle sibling panels).tabsDegrades to stacked sections, then code_block.
94lottieA <lottie-player> / dotlottie element or a .json/.lottie animation source.lottieDegrades to media_image (poster), then code_block.
94instagram_feedAn Instagram feed embed / grid of Instagram post tiles.instagramDegrades to a gallery, then code_block.
93svg_drawAn inline <svg> with strokeable paths meant to draw-on (line-art / signature / illustration).svg_drawDegrades to media_image, then code_block.
92testimonialsA group of ≥2 quote/review cards (quote text + author, often an avatar or star rating).testimonialsDegrades to card_grid, then code_block.
91image_gridA grid of ≥3 image tiles with no per-tile text (a photo gallery / masonry). Recovers a 25/50/25-style column ratio from the tile widths.galleryDegrades to stacked media_image, then code_block.
91counter_gridA stats row of ≥2 big-number + label pairs (animated counters).counterDegrades to card_grid, then code_block.
90card_gridA row of ≥2 feature cards (icon + title + copy). Each cell becomes an icon_box, carrying its per-card icon colour + badge.icon_boxDegrades to stacked text_blocks, then code_block.
89accordionAn FAQ / disclosure list (clickable summary rows revealing collapsible panels).accordionDegrades to stacked heading + text, then code_block.
88tableA real <table> (or an ARIA grid) of rows and cells.tableDegrades to code_block (markup preserved).
85card_grid_csA card grid detected from computed styles rather than utility classes (CSS-first sites).icon_boxDegrades to stacked text_blocks, then code_block.
84avatar_groupA cluster of overlapping/adjacent avatar images (a people / social-proof row).avatarDegrades to a gallery, then code_block.
82layout_rowA generic multi-column flex/grid row that no specialized recognizer claimed — split into native columns.row / columnsDegrades to stacked blocks, then code_block.
81call_to_actionA CTA band (heading + supporting line + one or more buttons on a distinct background).call_to_actionDegrades to heading + button blocks, then code_block.
80headingA semantic heading tag (<h1><h6>), or a text node the heuristics score as a heading. Level ≤ 2 becomes a page Title (larger Display type); level ≥ 3 a section heading.Special Headingspecial_headingDegrades to text_block, then code_block.
79text_listA <ul>/<ol> of text items (often check/tick-marked) — a feature / benefit list.feature_listDegrades to text_block, then code_block.
76badgeA small pill/label chip (padded, rounded-full, short text — a tag or status badge).badgeDegrades to text_block, then code_block.
75badge_verbatimA compound chip (inline + inner span) or an unusually-styled chip best preserved exactly as authored.code_blockKept verbatim (this IS the preservation path).
70instagramAn Instagram feed embed — a grid of Instagram posts tied to a @username.InstagraminstagramDegrades to code_block.
70pillA short eyebrow/kicker pill that sits above a heading — pulled in as the heading's overline where possible.special_heading (overline)Degrades to text_block, then code_block.
68wc_productsA product grid on a WooCommerce-style page — repeating product cards (image, title, price, add-to-cart).WooCommerce Productswc_productsDegrades to code_block.
66postsA blog/post grid — repeating cards each with an image, title, and meta (a "latest articles" section).PostspostsDegrades to code_block.
65avatarAn overlapping avatar stack — a row of small round profile images with a "+N" counter (a "trusted by" / "join N customers" cluster).AvataravatarDegrades to code_block.
64galleryAn image gallery / grid — three or more images in a repeating grid or collage (fewer than three falls back to code).GallerygalleryDegrades to code_block (fewer than 3 images).
62videoA <video> or a video embed (YouTube / Vimeo) that isn’t a full-screen section background.Media Videomedia_videoDegrades to code_block.
60imageA content <img> (not a background image, an icon, or part of a decomposed composite).Media Imagemedia_imageDegrades to code_block.
60buttonAn <a>/<button> styled as a call-to-action (utility-class button).buttonDegrades to a text link inside text_block, then code_block.
58image_boxAn image paired with a title + text (a media card / feature block — image beside or above a heading and copy).Image Boximage_boxDegrades to code_block.
55floating_cardA floating badge/card overlaid on a hero image (an icon + title + subtitle chip), or an icon + title + text card.Icon Boxicon_boxDegrades to code_block.
55newsletterAn email sign-up form — an email field + a subscribe button (often with a name field, on a call-to-action band).NewsletternewsletterDegrades to code_block.
55button_csA button detected from computed styles (padding + background + radius) rather than classes.buttonDegrades to a text link, then code_block.
50textA paragraph / body-copy block (typically <p> or a text container) that isn't a heading, button, or other recognized primitive. Short ALL-CAPS or eyebrow-classed text is refined to an overline instead.Text Blocktext_blockDegrades to code_block.
50counterA big animated stat — a number (often with a prefix/suffix like $ or %) shown as a "count-up" figure with a small label.CountercounterDegrades to code_block.
45listA <ul> or <ol> list — bulleted, numbered, or an icon list.Feature Listfeature_listDegrades to code_block (an empty list).
45videoA <video> / <source> (mp4/webm/ogv/mov) or a section whose background is a video. Backgrounds are sideloaded to the media library so the source stays editable in the Background → Video picker.media_video / section background videoDegrades to a poster media_image, then code_block.
40buttonA <button>, or an <a> styled as a button (a btn / button / cta class, or button-like padding + fill).ButtonbuttonDegrades to code_block.
40imageAn <img> / <picture> / a CSS background-image on a content block.media_imageDegrades to code_block.
35testimonialsA review / quote block — a customer quote with a name, role, avatar, and often a star rating; one or several as a set.TestimonialstestimonialsDegrades to code_block.
35image_wrapperAn image wrapped in a link / figure / decorative frame — unwrapped to the image with its frame preserved.media_imageDegrades to code_block.
30badgeA small pill / chip / label — a short rounded element with sub-tag text, a leading/trailing icon, and an optional link (an eyebrow, a status badge, a "what’s new" chip).BadgebadgeDegrades to code_block.
30image_overlayAn image with text/controls overlaid (a captioned hero tile / media card).media_image + icon_boxDegrades to stacked image + text, then code_block.
25accordionA toggle / disclosure group — a set of clickable headers each revealing a panel of content (an FAQ, a details list).AccordionaccordionDegrades to code_block.
25logo_stripA row of ≥2 brand marks — <img> logos, inline <svg> logos, OR icon-font + label pairs (as-seen-in / partner strip).logo_gridDegrades to a gallery, then code_block.
20tableA <table> with at least one row and column.TabletableDegrades to code_block.