xds-handoffs · 2026-05-27

Callout — xds → xds-next

change-recipe kit: @indeed/xds@0.0.1@indeed/xds-next@0.0.1

Stack changes from theme-ui + Emotion + compound data-theme cascade → plain CSS + variant + hue data attributes that rebind four substrate primitives. layout and size retired.

xds — currentxds.goodfun.design/blocks/callout

xds-next — proposednext.xds.goodfun.design/blocks/callout

Recipe view source .md →

Markup

- import { Callout } from "@indeed/xds";
+ import { Callout } from "@indeed/xds-next";

  <Callout
-   variant="expressive"     // basic | expressive | fullColor (unchanged)
-   layout="row"             // RETIRED — block is contained-only in xds-next
-   size="md"                // RETIRED — block is one size
-   icon="trendingUp"        // unchanged
-   data-theme="blue"        // RETIRED — see hue below
+   variant="expressive"
+   hue="blue"               // NEW — six named values: blue | aqua | earth | green | magenta | purple
+   icon="click"             // unchanged
  >
    {/* children: the impact line */}
  </Callout>

CSS / theming

Concernxdsxds-next
Hue sourcedata-theme on ancestor → pulls --expressive-complementary-a-* from themes.cssdata-hue on root → rebinds the four substrate primitives (--color-fg/bg/accent/accent-fg) directly in Callout.module.css
Variant treatmenttheme-ui sx styles per variantCSS-module classes; primitives compose under variant rules
Decorative shape (fullColor)includedretired — flat full-color surface is enough
layout="row"supportedretired — page composes side-by-side itself

What page authors do differently

Migration sketch

- <section data-theme="aqua">
-   <Callout variant="expressive" icon="trendingUp" layout="row" size="md">
-     45% more clicks on Sponsored Jobs.
-   </Callout>
- </section>
+ <Callout variant="expressive" hue="aqua" icon="click">
+   45% more clicks on Sponsored Jobs.
+ </Callout>

Why we changed it