xds-handoffs · 2026-05-27
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.
- 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>
| Concern | xds | xds-next |
|---|---|---|
| Hue source | data-theme on ancestor → pulls --expressive-complementary-a-* from themes.css | data-hue on root → rebinds the four substrate primitives (--color-fg/bg/accent/accent-fg) directly in Callout.module.css |
| Variant treatment | theme-ui sx styles per variant | CSS-module classes; primitives compose under variant rules |
Decorative shape (fullColor) | included | retired — flat full-color surface is enough |
layout="row" | supported | retired — page composes side-by-side itself |
data-theme ancestor. Set hue on the block instead. Lets the same page mix Callouts of different hues.layout="row". If you need a row layout, wrap two Callouts in your own flex container.size="md". No size axis.- <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>
themes.css cascade required, no theme-ui runtime.