Changelog
Unreleased
Section titled “Unreleased”7.7.0 (2026-09-18)
Section titled “7.7.0 (2026-09-18)”- 🐛 [main button], [accent button], [icon button], [pill button], [social media button], [media button], [icon] size and variant modifiers no longer style nested elements — eight nested blocks compiled to descendant selectors, so an element within a button or icon carrying
.is-lg,.is-sm,.is-primaryor.is-filledpicked up that component’s padding, gap, size and type tokens. They now match the component itself. Every one renders identically, and an element nested inside one that was leaning on the leak loses those values;.is-lgand.is-smalso gain a class of specificity, matching.is-md, so an override of your own may need one more class to keep winning - 🐛 [media button] the focus ring appears instantly on Lexus — the ring is drawn on the same
outlinethe copper hover ring cross-fades, so it faded in over 200ms where every other brand showed it at once. Focus is now instant on every brand and the hover cross-fade is unchanged. The ring still fades out on blur, where the cross-fade owns the property again - 💄 component sizing and layout spacing now scale with the root font size — icons, control heights, the width caps on text, and the spacing that wasn’t already on a token were fixed
pxand are nowrem, so they grow with a user’s browser font-size preference like the tokens already do. Touch targets keep their 24px / 44px minimum as a floor, and borders, focus rings, shadows and breakpoints staypx. Pixel-identical on the62.5%root; no markup change - 💄 [gradient] the hover slide takes 400ms and the bloom’s size animates with it — the copper radial used to jump to its hover size while only its centre moved over 200ms, so the slide barely read. Position and size now both ease over
--tng-transition-duration-m, on the Lexus secondary and tertiary buttons, the selected EV tab, the AI button and any explicit.tng-gradient-borderor.tng-gradient-fill - 💄 interactive components fade their colours between states — [main button] and the rest of the button family, [chip], [tabs], [list], [segmented control], [date picker], [slider] thumb, [model card], [stepper], [checkbox], [radio], [link], the [toggle] track, [field] label and text, and [media button] now fade the colours that change between their states over 200ms where they used to switch instantly. Focus rings and size or weight changes stay instant, and reduced motion turns the fade off. The radio’s hover state turns its border transparent instead of removing it, so the ring fades out with the fill. Automatic; no markup change. A
transitionyou set on one of these components replaces the fade — see Motions - ✨ [setup] ship the
62.5%root font size the tokens are sized against, as the lowest-priority rule on the page, so a host without the AEM clientlib no longer renders every CDS dimension 1.6× too large. Don’t setfont-sizeonhtmlor:rootyourself - ✨ [divider] add
.is-emphasis— the default 1px line in the scheme’s high-contrast border colour, on.tng-divider,.tng-has-dividersand a.tng-content<hr> - 💄 [typography] the body 4 and body 5 weight ladder shifts down one step — Figma inserted a third weight above
emphasis, so on Toyota.is-4.is-emphasisand.is-5.is-emphasisgo from semibold to medium and plain.is-5goes from medium to regular. Any text on those two steps renders lighter than before. To keep the old weight, add.is-heavy— the new step carries the valueemphasisused to. Lexus and Kinto keep their weights - ✨ [typography]
.is-heavynow works on body 4 and body 5 — it was wired for body 6, 7 and 8 only, because those were the only steps with a heavy token. All five steps now take the modifier - 💄 [tabs] the selected tab’s underline is copper on Lexus — it resolved to the primary accent where Figma specifies the secondary one, so the selected indicator now matches the brand. It stays a flat copper line, not a gradient. A disabled EV tab also picks up its own foreground and border colours instead of borrowing the plain variant’s, and a disabled plain tab on Lexus softens by one step. Toyota and Kinto are unchanged
- ♻️ 💄 [divider] rewire onto the published
divider/*tokens — the component hand-wired its colours from the generic--tng-color-border-*family, so it now reads the--tng-divider-*tokens Figma publishes for it. Toyota and Kinto are pixel-identical; on Lexus.is-primarydividers turn copper (the brand’s secondary accent) instead of red. Flat copper, as the proxy the tokens ship — a gradient divider line needs its own design pass - 💄 [main button], [AI button] large buttons are one weight heavier on Lexus —
--tng-buttons-lg-font-weightmoves from the body 6 default to its emphasis step. Automatic; no markup change - 🗂️ Lexus title 1 and 2 now name a decorative font the system does not ship — Figma points both at
LexusDecorativeType, which is not licensed into this repo. The Playbook maps it to Nobel so those steps render exactly as before; a consumer that loads its own webfonts must either register the face or map--tng-font-font-family-lexus-decorativeto a family it has, or the browser falls back to its default serif - 🗂️ the refreshed tokens also publish a
cards/*family that nothing consumes yet —--tng-cards-*has no unambiguous component here (Model Card owns its own family, and adopting it on Simple Card would change background, border and radius at once), so it is documented as deferred in the CSS rather than wired speculatively - ✨ ♻️ [varia]
--tng-directionis available on every element — the mirror sign was opt-in through.tng-directionand two component selectors; it is now set on[dir]itself, so any rule can multiply by it and the value comes from the nearestdirancestor. That also fixes it resolving to the page’s direction inside a nesteddirsection, or on an element carryingdiritself..tng-directionis dropped with the opt-in — leaving it in your markup is harmless, since the variable it switched on is always there now - 🐛 [touch target] stop the hit area overflowing the page in RTL — every touch target is centred on its element by an
inset-inline-start: 50%plus a pull-back, but the pull-back was hard-coded to the left while the inset flips to the right edge underdir="rtl". It now flips with the direction, so an RTL page no longer scrolls horizontally. Automatic; no markup change
7.6.1 (2026-09-10)
Section titled “7.6.1 (2026-09-10)”- 🐛 [segmented control] size each segment to its own label — segments were split to equal widths, so any label longer than average wrapped onto a second line while the control still had room. Each segment now hugs its own label, and uneven widths are expected. Quarantine
- 🐛 [overflow] stop
.tng-overflow-ellipsisclipping descenders on the block axis — it clipped both axes where an ellipsis only ever acts on the inline one, slicing flat any glyph that overshot the box. Nowoverflow-x: clip; every box keeps its height to the pixel - 🐛 [social follow], [special links] publish the CSS tab both pages were missing — each was authored against a stale
developslug, so the CSS documentation they already carried never rendered and neither page showed its CSS pill
7.6.0 (2026-09-09)
Section titled “7.6.0 (2026-09-09)”- 📝 promote [gradient] out of quarantine —
.tng-gradient-borderand.tng-gradient-fill, their rested-to-hover slide, the branded fallback for non-Lexus brands and the flat-border degradation behind@supports (background-clip: border-area)are now frozen. No CSS change - ✨ ♻️ [tabs], [tab picker] the selected item paints its contrast fill automatically —
.is-selected,aria-selected="true"and a checked nested radio all now carry the fill that had to be opted into per item, so every existing tab strip and tab picker changes appearance..is-filledis soft deprecated: it still forces the fill and renders as before, but selection alone is enough now - 🐛 [slider] keep the first and last scale labels inside the component — each label’s pull is now derived from its value rather than a flat
-50%, so the end labels sit flush with the track instead of overhanging it, and a label can no longer wrap out of its row into the track. Automatic — no markup change - ✨ [checkbox], [toggle] render the native
:indeterminatestate — both controls now draw a hairline dash for it, where checkbox was pixel-identical to unchecked and toggle kept its off cross at half travel. Set the property from JS as before; no markup or class change - 🗂️ [segmented control] document the AEM component on its own React tab — its props and the markup it renders. React only; no CSS change. Quarantine
- 🗂️ [footer navigation] document the footer’s navigation region on its own page — up to four link columns that collapse into per-column accordions on narrow viewports. React only; no CSS change
7.5.0 (2026-09-03)
Section titled “7.5.0 (2026-09-03)”- 🐛 [text-box] stop a Link label losing its underline and descenders —
.tng-linkno longer auto-trims its<span>, which clipped both away on a label that was also a.tng-overflow-ellipsisbox. Link labels are now one line-box taller in Chromium and WebKit, matching what Firefox already drew - ✨ [icons] Toyota’s set is now the base set, resolved per brand at build time — a brand renders Toyota’s drawing of every name it doesn’t draw itself, so Kinto goes from 39 icons to 270 and Lexus gains the 13 it lacked. Lexus’s 32 exclusives stay Lexus-only (ADR 0010)
- ♻️ [icons] 39 icon rules narrow from unscoped to brand-scoped — inside a per-brand sheet (
toyota/assets.cssand friends) the brand-neutral icons (ui-*, the social set,iso, the Kinto service marks) now requiredata-brand, as the other 86% of that sheet already did — so non-breaking in practice. If you load a brand’sassets.cssand render icons outside adata-brandsubtree, set the attribute; the brandless/assets.cssexport still emits its rules unscoped, and grows from 39 names to 270 - 📝 [color] four tabs instead of two — Design keeps the guidance, a new Tokens tab takes the twenty token tables, the CSS tab is renamed Scheme for what it always documented, and a new Accessibility tab states the pairing contract. Design also gains the Lexus copper gradient stops; old
?tab=csslinks still land on the scheme docs - 📝 [scheme] name the two schemes — neutral and contrast — matching
Scheme.Neutral/Scheme.Contrastand the-neutral-*/-contrast-*token families. “Default scheme” was wrong wherever it appeared and is corrected across the site; everyschemeTabsdemo now labels its first tab Neutral - 💥 💄 [asset-download] one glyph per row, and its shape says what the row does — the leading download glyph is dropped and the row’s single trailing glyph now encodes the behaviour:
icon-external-linkwhen the asset opens in a new tab,icon-downloadwhen an<a download>saves it. To migrate: delete the leading<i class="tng-icon icon-download">, and on every downloading row swap the trailingicon-external-linkforicon-download; every row shifts left by the old glyph’s width. Quarantine - 🗂️ [asset-download] document the AEM
StaticAssetDownloadcomponent on its own React tab — its props, the requiredopensInNewWindowLabel, and how it derives the new-tab behaviour from the asset rather than from a prop. React only; no CSS change
7.4.0 (2026-08-31)
Section titled “7.4.0 (2026-08-31)”- 💥 ♻️ [asset-download] one link per row — the trailing Icon Button is removed and its external-link glyph becomes the Link’s own trailing icon, so an asset is one tab stop and one announcement instead of two. To migrate: drop the trailing
<a class="tng-icon-button">and itsaria-label, move its<i>inside the label link, wrap the filename in a<span>, and move.tng-overflow-ellipsisfrom the<a>onto that span. Quarantine - 🐛 [overflow] stop
.tng-overflow-ellipsisclipping descenders and the underline off a label inside a Link, Button, Tag or any other control — the cap-height text-box trim now steps aside for both overflow utilities, which were never usable together - 🐛 [alternate-content] update the module’s asset list to the one-link row — its snippets and demo still carried the trailing Icon Button removed from asset-download, which auto-placed into an implicit grid row. Quarantine
- 🗂️ [social-follow] document the footer’s social follow group on its own page — social media channels rendered as icon buttons alongside app store badges. React only; no CSS change
- 🗂️ [logo] document the brand logo on its own page — the linked brand mark that anchors the header, plus the
BrandLogoSVG it renders. React only; no CSS change - 🐛 [content] stop a long
<pre>line pushing a horizontal scrollbar onto the whole document on Chrome 120 — the rule usedoverflow-inline, which did not ship until Chrome 135, so the declaration was dropped there. Now physicaloverflow-x; no change on current browsers - ♻️ [accordion] restore the panel’s gap and padding on Chrome 120, where the unknown
::details-content(Chrome 131) invalidated the whole rule — a@supportsfallback re-applies both, matching current browsers to the pixel. The expand/collapse animation is still lost there; show/hide, keyboard and screen-reader state are unaffected - 🗂️ every styleguide declaration is now checked against Chrome 120, the retailer-screen floor, by a warn-only
stylelint-browser-compatpass — the 14 findings were reviewed and cleared, so the baseline is clean and any new warning is genuinely new
7.3.0 (2026-08-24)
Section titled “7.3.0 (2026-08-24)”-
📝 promote [skeleton] out of quarantine — the
.tng-skeletonblock /.is-circle/.is-lineshapes, their.is-sm/.is-md/.is-lgline presets, the--tng-skeleton-sizecustom property and the.is-pulse/.is-shimmermotion treatments are now frozen, with visual-regression coverage across brands and schemes. No CSS change; pick one motion treatment per view and keep it consistent -
🔥 [alert] deprecate — Alert has been removed from the Figma library and has no design source, so it will not be developed further. Unusually, there is no replacement to migrate to: nothing else in the system covers a contextual, severity-coded page message. The CSS still ships and won’t be removed until a replacement is named — don’t build new surfaces on it
-
♻️ [asset-download] add
.tng-asset-download-item— put it on every row; styling the bare<li>still works but is soft deprecated. The class also lets a single row render outside the<ul>, without its dividers. Quarantine -
🗂️ the lifecycle badge now says whether a component is usable — Quarantine reads “Usable — may still change” and renders informational rather than warning,
deprecatedreads “migrate away”, and module pages carry a badge -
📝 promote [chip], [chat messages], [label] and [model card] out of quarantine — each has settled markup and class names, a full set of Design / CSS / Accessibility tabs and visual-regression coverage, so the badge now reads Ready to use. No CSS change; the surface these pages already documented is simply frozen now
-
💥 ♻️ [tag] rewire onto the published
tags/*tokens and promote out of quarantine — the component consumed one of the 48 tokens published for it and hand-wired the rest, so every existing tag changes appearance: colours, padding and typography all move, and Lexus tags are noticeably larger. A tag now reads the surroundingtng-schemeand picks its own treatment, so dark surfaces are supported, and.is-primary/.is-secondary/.is-warningcomplete Figma’s set of seven. Breaking:.is-boldis removed (superseded by the scheme behaviour) and.is-erroris renamed.is-danger -
📝 promote [date picker] out of quarantine — the calendar’s class names have been stable since it shipped, and the docs now match them: the CSS tab’s markup carries the
role="grid"/role="gridcell"wrappers the styleguide’sdisplay: contentsrules already expect, the Accessibility tab describes the focus returns the recipe actually performs (Escape to the trigger, selecting a day to the field), and the recipe names every day cell with its full date. No CSS change -
📝 promote [badge] out of quarantine — the Design, CSS and Accessibility tabs now match the CSS the styleguide actually ships (the documented
is-subtlevariant never existed, and the Design tab’s “Subtle / Contrast” emphasis axis isn’t in Figma either), and the component finally has visual-regression coverage across brands, schemes and direction. No CSS change; the badge is simply frozen now -
📝 promote [toggle] out of quarantine — the Design, CSS and Accessibility tabs have been read against the current CSS, the component now has visual-regression coverage across both schemes and both directions, and the badge reads Ready to use. No CSS change. The docs gained the states the page never mentioned —
:indeterminate, and the error treatment that applies to an:invalidinput withoutis-error— and the Size property is now described for what it is: one fixed switch, withis-7sizing the label only -
📝 promote [split-content] out of quarantine — the two-pane layout’s markup and its one
.is-fullmodifier have settled, and the visual-regression coverage now brackets all three breakpoint bands plus RTL, so the badge reads Ready to use. The page was corrected in the same pass: the layout switches on viewport media queries atmd(768px) andxl(1200px), not on a container query at 1440px as it claimed, and themdstep was undocumented. No CSS change -
💄 [asset-download] restyle each row to the updated frame — a leading download glyph, the filename as an underlined
.tng-linkwith the extension inline, the size on a second line, and an optional trailing open-in-browser control. Markup changed; the row is no longer one<a> -
🗂️ [special links] document the footer link group on its own page — one or more Link items with mixed internal and external destinations, the external ones carrying an external-link glyph and an off-screen “Opens in new window”. No CSS change
7.2.0 (2026-08-12)
Section titled “7.2.0 (2026-08-12)”- 🐛 teach
.tng-brandedabout Kinto — the brand-gated block utility only matchedlexusandtoyota, so any.tng-branded[data-brand="kinto"]block (the Icons page’s brand sets, the token lists) stayeddisplay: noneunder Kinto - ✨ [brands] add Kinto as a third brand — set
data-brand="kinto"and load the newkinto/*styleguide and figma-tokens exports. Preview, not certified: unreviewed in design, and it renders the shared icon set only. - 🗂️ [fundamentals] Foundations folds into Fundamentals — typography, motions (was animations), responsiveness, spacing and shape (was radius + stroke) move there, scheme becomes the Color page’s CSS tab, architecture moves to
/cds/architecture, and every old URL redirects - 🗂️ [tab-picker] document the tab picker on its own page — the tab strip’s single-select semantic leaves the Tabs page for
/cds/components/tab-picker, with its own Design, CSS and Accessibility tabs. No CSS change:.tng-tabs/.tng-tabs-itemstill back both - 🗂️ [components] split each component page’s Develop tab into CSS and React, so the tab bar reads Design / CSS / React / Accessibility and either implementation tab is optional. Old
?tab=developlinks resolve to CSS - ♻️ [chip] only apply
cursor: pointerand the hover / active repaints when the chip is a control (button, a, label, input), so a<span>chip can be a static label — non-breaking, every documented chip is a<button> - ♻️ [toggletip] rename Popover to Toggletip, retune the bubble (padding, width, arrow) and add a
role="tooltip"variant for short hover text — non-breaking:.tng-popover*and--tng-popover-*stay as aliases, and the old URL redirects - ⬆️ update figma tokens (14.1.0) — the
buttons/ai-button/Numberradius token is gone upstream; the AI button now takes the shared--tng-buttons-corner-radiuslike the rest of the buttons. It resolves to the same value per brand (Toyotaradius-none, Lexusradius-xl), so there is no visual change — only the removal of--tng-buttons-ai-button-numberfrom the published CSS - ✨ [feature-list] add the feature list — a
.tng-feature-listof label / data pairs for spec sheets and plan summaries, with.is-sm/.is-lgsizes, an optional trailing info icon button, and neutral /.is-contrastschemes. Quarantine
7.1.0 (2026-08-03)
Section titled “7.1.0 (2026-08-03)”- ✨ [grid] add
.tng-debug— an opt-in overlay that paints the 12 columns as hotpink bars so the grid rhythm is visible while building a layout. A single absolutely-positioned::beforedraws one bar per real1frtrack with the 20px gutters left transparent,pointer-events: noneso it never intercepts interaction. Introduces the shared--tng-debug-colorcustom property (the touch-target debug overlay now reads the same tint)
7.0.0 (2026-08-03)
Section titled “7.0.0 (2026-08-03)”- 💥 [responsiveness] restore the v5 breakpoints as the system default — upgrading from v5 is non-breaking.
sm390→576,lg1024→992,xl1440→1200,2xl1920→1600 (mdunchanged). The v6.0.0 realignment shipped ahead of teams being able to migrate, so the grid-aligned tiers now live only behind the opt-in.tng-gridand full-width container primitives (via internal-v2custom-media that isn’t a consumer API); everything else — modal, typography, the default.tng-container, the.hidden-*display utilities — switches on the v5 values again. The major bump is because, relative to the 6.x line, this reverts a breaking change; relative to v5 nothing moves.3xlstays dropped (verified unused). A future major will make the grid-aligned tiers the default (ADR 0009) - ✨ [simple-header-bar] add a full-width header bar — a
message+ CTA + close block that fills the width of wherever it’s placed;is-contraston the root cascades contrast tokens to all three, and the message is atng-text-titlepinned to title-10 (addtng-overflow-ellipsisto truncate). Quarantine - ✨ [ai-button] add the AI (“Concierge”) button — an icon-only circle at rest that auto-expands on hover / focus / active to reveal its label, entirely in CSS (no JS; the label stays in the DOM as the accessible name). Wired to the
--tng-buttons-ai-button-*token scale (rested / hover / active × neutral / contrast); Toyota expands to a sharp-cornered rect, Lexus to a rounded pill with a copper-gradient fill (linear → radial) that flips to the flat primary token on active. Quarantine - ✨ [z-index] add
.zz-top— an “always on top” helper (z-index: calc(infinity)) for the rare element that must sit above every layered surface - 📝 [container] split the docs into Default and Full-width tabs — the default centred/capped wrapper leads; the opt-in
.tng-container-v2frame moves to its own tab, with a caution that it rides the staged grid-aligned tiers - ⬆️ update figma tokens
6.3.2 (2026-07-30)
Section titled “6.3.2 (2026-07-30)”- 🐛 [reset] restore the legacy Bootstrap responsive grid tiers (
.col-sm-*….col-xl-*) inside.tng-legacy-apply. 6.3.1 re-applied only the base.col-1….col-12; because@layerorder is resolved before specificity and media queries, that base.col-12 { max-width: 100% }(in theapply-legacylayer) outranked the clientlib’s@media … { .col-lg-3 { max-width: 25% } }and collapsed every responsive column to full width — a legacy dealer/map grid stacked instead of sitting side by side.apply.cssnow re-declares the.col-{sm,md,lg,xl}-*widths in that same layer so they override the base at each breakpoint
6.3.1 (2026-07-30)
Section titled “6.3.1 (2026-07-30)”- 🐛 [reset] restore the legacy Bootstrap
.col-1….col-12grid inside.tng-legacy-apply. The container/grid reset started reverting those classes (so they can’t leak onto ourcol-*span utilities), but the symmetric re-apply was never added — a legacy component using thecol-*grid collapsed to unstyled columns when wrapped in.tng-legacy-apply.apply.cssnow re-declares the clientlib grid values so nested legacy components keep their original layout
6.3.0 (2026-07-29)
Section titled “6.3.0 (2026-07-29)”- ✨ [media-button] apply the Lexus copper gradient to the progress arc and the hover / active ring. The resting button keeps its flat grey ring; on Lexus the swept progress arc and the ring on hover / active both paint copper, reusing the shared
--tng-color-border-gradient-*tokens the rectangular gradient borders draw from, so arc and ring resolve one colour and share one outer edge (hover recolours the ring without thickening it). The circular ring is alinear-gradientmasked into an annulus — nobackground-clip: border-area— so it renders in every browser; contrast uses the copper-200 → copper-500 stops. Also fixes the recipe’s play / pause toggle so.tng-iconhonours[hidden] - 🗂️ [icon] move
ai-sparklefrom the operations category to technology
6.2.0 (2026-07-17)
Section titled “6.2.0 (2026-07-17)”- ✨ [segmented-control] add a pure-CSS, zero-JS segmented control — a single-select group built on a native
<fieldset>+ same-name<input type="radio">segments, so grouping, single-select, roving arrow-key navigation and the accessible name come from the platform (no ARIA, no JS). The selected / hover / disabled / focus looks key off:has(input:*); ships.is-sm/.is-md/.is-lgsizes, an icon-only.is-iconvariant, neutral /.is-contrastschemes, and equal-width 2–5 segments. Quarantine
6.1.0 (2026-07-16)
Section titled “6.1.0 (2026-07-16)”- ✨ [gradient] add brand-aware gradient strokes & fills — paint a brand’s stroke or fill as a colour gradient instead of a flat swatch, animated rested→hover. Lexus copper auto-applies to secondary / tertiary borders, the selected EV tab, and the slider EV track; the
.tng-gradient-borderhook and.border-secondary/.border-secondary-emphasis/.border-evutilities opt any element in; brands with no bespoke stops get a gradient derived from their secondary accent - 🐛 [field] stop the button-control label floating to the top under load
- 🐛 [typography]
.tng-text-body(and siblings) no longer set a background — the token was never set, so it resolved totransparentand clobbered the.tng-schemebackground - 🔥 [icon] remove the duplicate Lexus
ai-sparkleicon (kept elsewhere in the set) - ⬆️ update figma tokens (14.0.0)
- 📦 [package] figma-tokens is build-time inlined into the CSS and moved to
devDependencies, so the published styleguide is self-contained and no longer pulls@tmedxp/figma-tokensinto consumers’ dependency trees
6.0.0 (2026-07-10)
Section titled “6.0.0 (2026-07-10)”- ✨ [container] add
.tng-container-v2— an opt-in full-width page frame with responsive side margins (20/40/56/80/96px at base/sm/md/lg/xl), no max-width, and the.tng-container-fullbleedhelper to reach the viewport edge. Pair it with the separate.tng-gridprimitive for a full-width, 12-column page layout; the default.tng-containerstays the centred/capped wrapper - 💥 [responsiveness] realign breakpoints to the shared grid tiers —
sm576→390,lg992→1024,xl1200→1440,2xl1600→1920 (mdunchanged); the3xlbreakpoint and its.hidden-3xl*display utilities are dropped - ✨ [tabs] add a tab picker semantic — wrap a native
<input type="radio">in a.tng-tabs-item<label>and the tab strip becomes a single-select radio group; the selected / disabled / focus looks key off:has(input:*)and the radio is visually hidden but stays focusable, so it needs no JS and no ARIA. The existing tab panel is unchanged - ✨ [grid] add
.tng-grid— a fresh, self-contained 12-column grid for laying columns out inside components/cards; children place with thecol-*span utilities. Theis-2-up/is-3-upmodifiers make it responsive (stack on mobile, snap to N-up frommd/lg), and an explicitcol-*on a child opts it out as a full-width feature cell. Supersedes the legacy.tng-simple-grid - ✨ [grid] add
col-*column-span utilities — numericcol-1–col-12plus named fractions (col-half,col-1-third,col-2-third,col-1-fourth,col-3-fourth) for placing children on a.tng-grid; siblings auto-flow, so spans that sum to 12 tile a row with no explicit positioning - ✨ [container] expose
--tng-container-inline-sizeon the.tng-container-v2frame (the content width — viewport minus margins) for descendants that need to fit the page content area, with avar(…, fallback)for when they’re used standalone - 🐛 [field] fix Chrome autofill — the input now fits the control’s border box so the autofill background no longer bleeds past the border
- ♻️ [responsiveness] remove the unused
--tng-viewport-size-*custom properties
Container
Section titled “Container”.tng-container is unchanged — the default centred, max-width-capped wrapper (1140px / 1440px). Alongside it, .tng-container-v2 is a new opt-in full-width page frame: a full-browser-width block whose only job is the responsive side margin — 20 / 40 / 56 / 80 / 96px at base / sm / md / lg / xl — that keeps content off the viewport edges. It has no max-width and draws no columns; the 12-column rhythm lives in the separate .tng-grid primitive you nest inside.
Adopt the full-width grid by opting into .tng-container-v2 and nesting a .tng-grid, placing children with col-* spans:
<div class="tng-container-v2"> <div class="tng-grid"> <div class="col-8">main</div> <div class="col-4">aside</div> </div></div>Edge-to-edge content inside the frame uses the standalone .tng-container-fullbleed helper (it composes onto a child at any depth). The default .tng-container keeps its .is-fullbleed child modifier for the same intent.
Breakpoints & display utilities
Section titled “Breakpoints & display utilities”The breakpoint values were realigned to design’s shared grid tiers (ADR 0003). The two-letter token vocabulary (sm / md / lg / xl / 2xl) is unchanged — only the widths move — so any consumer reading a --tng-breakpoint-* token or a --tng-media-gte-* custom-media picks up the new trigger points automatically, and the display utilities (.hidden-sm, .hidden-lg, …) now switch at the new widths:
| Tier | Old | New |
|---|---|---|
xs |
375px | – (default) |
sm |
576px | 390px |
md |
768px | 768px (unchanged) |
lg |
992px | 1024px |
xl |
1200px | 1440px |
2xl |
1600px | 1920px |
There are no classes to rename, but audit any layout that depends on a specific switch point — a .hidden-lg block now hides from 1024px instead of 992px, and sm-gated styles now begin at 390px instead of 576px.
The 3xl band is gone
Section titled “The 3xl band is gone”2xl (1920px) is now the topmost band. The 3xl breakpoint — its --tng-breakpoint-3xl token, the --tng-media-gte-3xl custom-media, and the .hidden-3xl, .hidden-3xl-only and .hidden-no-3xl display utilities — is removed with no replacement. Because there is no wider band for it to reappear in, .hidden-2xl-only now behaves identically to .hidden-2xl; prefer the latter:
<div class="hidden-2xl-only">…</div><div class="hidden-2xl">…</div>The spacing scale’s 3xl step (.gap-3xl, .pb-3xl, …) is a separate scale and is untouched.
5.8.0 (2026-07-29)
Section titled “5.8.0 (2026-07-29)”- ✨ [media-button] apply the Lexus copper gradient to the progress arc and the hover / active ring. The resting button keeps its flat grey ring; on Lexus the swept progress arc and the ring on hover / active both paint copper, reusing the shared
--tng-color-border-gradient-*tokens the rectangular gradient borders draw from, so arc and ring resolve one colour and share one outer edge (hover recolours the ring without thickening it). The circular ring is alinear-gradientmasked into an annulus — nobackground-clip: border-area— so it renders in every browser; contrast uses the copper-200 → copper-500 stops. Also fixes the recipe’s play / pause toggle so.tng-iconhonours[hidden] - 🗂️ [icon] move
ai-sparklefrom the operations category to technology
5.7.0 (2026-07-17)
Section titled “5.7.0 (2026-07-17)”- ✨ [segmented-control] add a pure-CSS, zero-JS segmented control — a single-select group built on a native
<fieldset>+ same-name<input type="radio">segments, so grouping, single-select, roving arrow-key navigation and the accessible name come from the platform (no ARIA, no JS). The selected / hover / disabled / focus looks key off:has(input:*); ships.is-sm/.is-md/.is-lgsizes, an icon-only.is-iconvariant, neutral /.is-contrastschemes, and equal-width 2–5 segments. Quarantine
5.6.1 (2026-07-16)
Section titled “5.6.1 (2026-07-16)”- 🔥 [icon] remove the duplicate Lexus
ai-sparkleicon (kept elsewhere in the set) - ⬆️ update figma tokens (14.0.0)
5.6.0 (2026-07-15)
Section titled “5.6.0 (2026-07-15)”- ✨ [tabs] add a tab picker semantic — wrap a native
<input type="radio">in a.tng-tabs-item<label>and the tab strip becomes a single-select radio group; the selected / disabled / focus looks key off:has(input:*)and the radio is visually hidden but stays focusable, so it needs no JS and no ARIA. The existing tab panel is unchanged - ✨ [gradient] add brand-aware gradient strokes & fills — paint a brand’s stroke or fill as a colour gradient instead of a flat swatch, animated rested→hover. Lexus copper auto-applies to secondary / tertiary borders, the selected EV tab, and the slider EV track; the
.tng-gradient-borderhook and.border-secondary/.border-secondary-emphasis/.border-evutilities opt any element in; brands with no bespoke stops get a gradient derived from their secondary accent - 🐛 [field] stop the button-control label floating to the top under load
- 🐛 [field] fix autofill
- 🐛 [typography]
.tng-text-body(and siblings) no longer set a background — the token was never set, so it resolved totransparentand clobbered the.tng-schemebackground - 📦 [package] figma-tokens is build-time inlined into the CSS and moved to
devDependencies, so the published styleguide is self-contained and no longer pulls@tmedxp/figma-tokensinto consumers’ dependency trees
5.5.1 (2026-07-03)
Section titled “5.5.1 (2026-07-03)”- 🩹 [reset] target app-root children instead of the root element
- 🩹 [legacy] fix heading selector
5.5.0 (2026-07-01)
Section titled “5.5.0 (2026-07-01)”- ♻️ [package] inline component tokens — per-component entries move to
{brand}/components/*(alsoforms,cards) with the brand’s tokens baked in; the brand-neutralcomponents/*,forms/*,cards/*entries anddependencies.jsonare removed - ♻️ [field] merge
control+fieldinto one component - ♻️ [field] name the component
field; control classes are nowtng-field-control*(oldtng-control*kept as compat aliases) - ⬆️ update figma tokens
5.4.0 (2026-06-25)
Section titled “5.4.0 (2026-06-25)”- ✨ [package] add chunked exports
- ✨ [chat-messages] add component
- ✨ [chip] add suggestion variant
- 💄 [chip] use active tokens
- 🐛 [alert] fix header typography
- 🐛 [carousel] fix control typography
- ⬆️ update figma tokens
5.3.0 (2026-06-23)
Section titled “5.3.0 (2026-06-23)”- ✨ [label] add component
- ✨ [model-card] add component
- ✨ [varia] add
.tng-no-touch-target - ♻️ [list] use label component
- 💄 [date-picker] remove selected hover button token
- ⬆️ update figma tokens
The powertrain subtitle marker now uses the new Label component (.tng-label.is-blue) instead of a bare <em>. The .tng-list-powertrain styles are unchanged, so existing markup keeps working — but new code should reach for the Label component.
<em> <i class="tng-icon icon-plug-droplet"></i> <span>Powertrain</span></em><span class="tng-label is-blue"> <i class="tng-icon icon-plug-droplet" aria-hidden="true"></i> <span>Powertrain</span></span>5.2.2 (2026-06-18)
Section titled “5.2.2 (2026-06-18)”5.2.1 (2026-06-17)
Section titled “5.2.1 (2026-06-17)”5.2.0 (2026-06-17)
Section titled “5.2.0 (2026-06-17)”- ✨ [skeleton] add component
- 💄 [accordion] improve group spacings
- 🐛 [count-indicator] fix RTL icons
- 🐛 add font-family sans-serif fallback
5.1.0 (2026-06-08)
Section titled “5.1.0 (2026-06-08)”- ✨ [frame] support iframe and picture
- ✨ [divider] add edge start/end variants
- 🐛 [content] set default foreground
- 🐛 [toggletip] fix arrow gap
- 🐛 fix flex column children’s inline sizing
- ⬆️ update figma tokens
5.0.0 (2026-05-27)
Section titled “5.0.0 (2026-05-27)”- 💥 ✨ [count-indicator] rework component
- 🐛 [toggletip] simplify contrast surface
- ⬆️ update figma tokens
Count indicator
Section titled “Count indicator”The dots pagination has been removed. The component is now an inline flex wrapper around an optional label pill (.tng-count-indicator-label) and any combination of .tng-icon-button siblings. The internal layout sub-elements — .tng-count-indicator-helper, .tng-count-indicator-dots, .tng-count-indicator-buttons — are gone; mark up the label and icon buttons as direct children of .tng-count-indicator.
<div class="tng-count-indicator"> <div class="tng-count-indicator-helper">1 of 6</div> <div class="tng-count-indicator-dots"> <div class="is-current"></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> <div class="tng-count-indicator-buttons"> <button class="tng-icon-button is-sm" aria-label="Previous"> <i class="tng-icon icon-chevron-left" aria-hidden="true"></i> </button> <button class="tng-icon-button is-sm" aria-label="Next"> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </button> </div> <span class="tng-count-indicator-label">1 of 6</span> <button class="tng-icon-button is-sm" aria-label="Previous"> <i class="tng-icon icon-chevron-left" aria-hidden="true"></i> </button> <button class="tng-icon-button is-sm" aria-label="Next"> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </button></div>The label may sit at the start, in the middle, or at the end of the wrapper; spacing adapts to its position. Its block size tracks the sibling .tng-icon-button size (.is-xs, .is-sm, .is-md, .is-lg), so the label and buttons stay aligned without manual sizing.
4.0.2 (2026-05-22)
Section titled “4.0.2 (2026-05-22)”4.0.1 (2026-05-19)
Section titled “4.0.1 (2026-05-19)”- 🐛 [button] fix primary border
4.0.0 (2026-05-19)
Section titled “4.0.0 (2026-05-19)”- 💥 ⬆️ update figma tokens
- 💥 🚚 [social-media-button] rename from
social-share-button - ✨ [icon-button] add xs size
- ✨ [chip] add on-image variant
- ✨ [border] add soft, primary-emphasis and secondary-emphasis utilities
- ♻️ [stepper] use new tokens
Social media button
Section titled “Social media button”The component class has been renamed to align with the Figma component name.
<button class="tng-social-button tng-social-media-button"> <span class="tng-icon icon-facebook"></span></button>.tng-social-button is kept as a backwards-compatible alias of .tng-social-media-button.
Tokens
Section titled “Tokens”The Figma tokens upgrade renames several token custom properties. Consumers that reference styleguide classes are unaffected; if you read tokens directly:
- Variant / scheme order swapped on icon-button tokens:
--tng-buttons-icon-button-{variant}-{scheme}-*becomes--tng-buttons-icon-button-{scheme}-{variant}-*(e.g.--tng-buttons-icon-button-filled-neutral-rested-fill-color→--tng-buttons-icon-button-neutral-filled-rested-fill-color). disabled-background-coloris nowdisabled-fill-coloron chips and on the secondary main button’s contrast scheme.
3.2.0 (2026-05-11)
Section titled “3.2.0 (2026-05-11)”- ✨ [asset-download] implement
- ✨ [split-content] implement
- ✨ [alternate-content] implement module
- ✨ [divider] add has-edge modifier
- 🐛 [media-button] fix icon sizes
- 🐛 [chip] remove textbox trim
3.1.0 (2026-05-07)
Section titled “3.1.0 (2026-05-07)”- [toggletip] fix chrome
- ✨ [media-button] implement
- 🐛 [content] improve
- ⬆️ update figma tokens
3.0.0 (2026-05-04)
Section titled “3.0.0 (2026-05-04)”- 🐛 remove root container
- 🐛 [content] fix some typography
- 💥 ✨ [divider] remove ev / sizes
- 🐛 [list] fix plain list typography
- ✨ [assets] add assets
- ✨ restructure pages
Divider
Section titled “Divider”EV removed
Section titled “EV removed”The EV styles have been removed.
<div class="tng-divider is-ev"></div>Contrast
Section titled “Contrast”The primary color no longer switches to contrast mode.
Intrinsic sizing has been removed. You have to add your own sizing declaration if you need any size other than 100%.
<header class="tng-stack"> <h2 class="mbe-4xl | tng-text-title is-5">Title Heading</h2> <div class="tng-divider is-primary" style="inline-size: 40px"></div></header>Title Heading
2.3.0 (2026-04-22)
Section titled “2.3.0 (2026-04-22)”- 📝 [size] update stretch to 100%
- 📝 [carousel] update documentation
- 📝 update drafts
- 🔥 clean up badges < 2 months
- ✨ [chip] implement
- 🐛 [carousel] fix prefers-reduced-motion
- 🔥 [carousel] remove recipe custom types
- 🔥 [overflow] remove unneeded property
2.2.4 (2026-04-12)
Section titled “2.2.4 (2026-04-12)”- 🐛 [toggle] input shrink 0
- 🐛 [stepper] fix label
- 🐛 [checkbox] input shrink 0
- 🐛 [radio] input shrink 0
- 🐛 [size] fix size-full on firefox/webkit
- ⬆️ update figma tokens
2.2.3 (2026-04-10)
Section titled “2.2.3 (2026-04-10)”- 🐛 [size] fix size-full on firefox/webkit
- 📝 update DX playbook domains
- ✨ [carousel] implement
- ⚡️ [cds] contain layout paint
2.2.2 (2026-04-08)
Section titled “2.2.2 (2026-04-08)”2.2.1 (2026-04-07)
Section titled “2.2.1 (2026-04-07)”- 📱 [stepper] improve mobile / tablet
- 📝 [icon] fix non-monochrome icon examples
- 📝 [z-index] improve example
- 🐛 [background] fix decorative backgrounds
- ✨ [overflow] hide scroll bars within indicators
- 🐛 [control] fix control button focus outline
2.2.0 (2026-03-26)
Section titled “2.2.0 (2026-03-26)”- 💄 [modal] fix maximum on small viewport
- ✨ [date-picker] implement
2.1.0 (2026-03-25)
Section titled “2.1.0 (2026-03-25)”- ✨ [stepper] implement
- ✨ update figma tokens
- 💄 [tabs] add number label example
- ✨ [overflow] improve indicators
- 🐛 [cds] fix inset demo
- 📝 [count-indicator] review documentation
2.0.0 (2026-03-17)
Section titled “2.0.0 (2026-03-17)”- 🐛 [modal] fix chrome close render flash
- 💄 [control] review
- ✨ [z-index] add above
- ♻️ [focus] review
- 🔥 [control] remove is-valid variant
- ✨ [radio] implement
- ✨ [checkbox] implement
- ✨ [simple-card] implement
- 🚚 align forms with figma
- 💥 🚚 restructure exports
Exports
Section titled “Exports”The exports have a breaking change in this release.
| Export | Before | After |
|---|---|---|
assets.css |
none | Export assets |
styles.css |
Export styles + assets | Export styles |
no-icons.css |
Export styles | none |
Meaning we now have mutually exclusive exports for styles and assets.
1.3.0 (2026-03-05)
Section titled “1.3.0 (2026-03-05)”- 📝 [usage] improve layers documentation
- 🚚 rename
tng-boxtotng-scheme - ♻️ remove
tng-boxreliance - 📝 clean up documentation
- ♻️ [color-utilities] refactor out custom properties
- ✨ [layouts] add flex nowrap
- ♻️ [position] refactor out custom properties
- ♻️ [layouts] refactor out custom properties
- 📝 [modal] remove unused background color
- 🩹 [position] don’t assume size
- ♻️ [spacing] refactor out custom properties
- ♻️ [elevation] refactor out custom property
- 💄 [cds] fix selector
1.2.0 (2026-03-04)
Section titled “1.2.0 (2026-03-04)”- ✨ [platform-badge] add platform badges
- ♻️ [figma] render dedicated text styles variables
- 📝 [figma] fix content
- 🐛 [figma] render box border size
- 🐛 [cds] render dimension fallback
- 💄 [figma] tweak components
- 📝 [figma] review documentation
- 📝 [buttons] align cross-topic button structure
- 👷 [gh] non-prod always builds preview mode
- 🐛 [apply] re-apply revert
1.1.1 (2026-02-25)
Section titled “1.1.1 (2026-02-25)”- 📝 [figma] add radio button documentation
- 📝 [figma] add input field documentation
- 📝 [figma] add sticky bottom bar documentation
- 📝 [figma] group forms documentation
- 📝 [figma] add checkbox documentation
- 📝 [figma] add stepper documentation
- 📝 [figma] add tag documentation
- 📝 [figma] add popover documentation
- 📝 [figma] add tabs documentation
- 📝 [figma] add modal documentation
- 📝 [figma] add list documentation
- 📝 [figma] add slider documentation
- 📝 [figma] add dropdown documentation
- 📝 [figma] add count indicator documentation
- 📝 [figma] add divider documentation
- 📝 [figma] add link documentation
- 📝 [figma] add social media button documentation
- 📝 [figma] add pill button documentation
- 📝 [figma] add icon button documentation
- 📝 [figma] add main button documentation
- 📝 [figma] add backdrop documentation
- 📝 [cds] add agent figma component mapping documentation
- 📝 [figma] review accordion documentation
- 📝 [link] document sizes
- 📝 [figma] review typography documentation
- 📝 [figma] review color documentation
- 🐛 [revert] set
initialfor inherited properties
1.1.0 (2026-02-25)
Section titled “1.1.0 (2026-02-25)”- 📱 [cds] responsive hero
- 💄 [cds] update brand select to buttons
- 🚚 [cds] tweak titles
- 📝 [reset] document
.tng-legacy-apply - 📝 [cds] expand utility documentation
- ✨ [z-index] add semantic stacking
- ✨ [slider] implement slider
- 💄 [cds] fix markdown li max-inline-size
1.0.1 (2026-02-24)
Section titled “1.0.1 (2026-02-24)”- 🩹 [cds] disable RTL / dark mode for now
- 💄 [cds] redesign splash hero
- 🔥 [cds] remove GitHub links
- 🧪 [count-indicator] add visual tests
- 💄 [sticky-bottom-bar] fix documentation demo
- 💄 [cds] increase content width
- 🚚 [cds] pluralize foundations
- 💄 [cds] tweak components
- 💄 [cds] use own tokens
- 🐛 [cds] hide related pages on splash page
- ✨ [cds] switch logos with theme select
- 🚚 [cds] don’t structure content around teams
- 🔥 [cds] remove archive
1.0.0 (2026-02-20)
Section titled “1.0.0 (2026-02-20)”- ♿️ prefer
aria-labeloversr-only - ♿️ improve recipe a11y
- ✨ [checkbox] add fieldset / reset
- 📝 expand a11y documentation
- 📝 [sticky-bottom-bar] add module and recipe
- ✨ [count-indicator] update implementation
- ✨ add
aemglobalCSS layer - 🚚 [count-indicator] rename pagination to count indicator
0.31.0 (2026-02-18)
Section titled “0.31.0 (2026-02-18)”- 💥 ♻️ [list] deprecate internal dividers
- 📝 [usage] add CSS layers caveats
- 📝 [varia] add focus documentation
- 📝 align color utilities
- 💫 document and implement consistent animations
- 🩹 [reset] improve border box
- 💥 ♻️ [accordion] use divider component
- 🐛 [tabs] fix overflow gradient
- 💥 ♻️ [box] refactor surface into box and utlities
- 🔥 [stroke] deprecate
- 🐛 [list] fix padding on interactive control
- ✨ introduce related pages
Surface ➡️ Box
Section titled “Surface ➡️ Box”We used to have a Surface foundations core component that could handle some things like backgrounds and borders. Now we have implemented color utilities for background, border, and foreground.
These utilities include all semantic tokens for backgrounds, surfaces, and fills. Consequently the component needed to be renamed.
Accordion / List Dividers
Section titled “Accordion / List Dividers”The Accordion and List components no longer have their own with dividers variant. All divider responsibility is now handled by the Divider component.
<div class="tng-stack | tng-has-dividers"> <details class="tng-accordion has-divider"> <summary class="tng-accordion-trigger"> <span>Personal information</span> <i class="tng-icon icon-chevron-down" aria-hidden="true"></i> </summary> <p class="tng-text-body"> Your personal information is kept private and secure. </p> </details></div>Deprecate .stroke-…
Section titled “Deprecate .stroke-…”The stroke classes have been removed from the documentation a long time ago but have remained in the styles.
Use (eg.) .border-xs in favour of stroke-xs.
0.30.0 (2026-02-10)
Section titled “0.30.0 (2026-02-10)”- ✨ [dropdown] implement control
- ✨ [field/control] implement
- ♻️ [text-box] remove default display
- 🐛 [modal] fix at maximum sizing
- ✨ [icons] add ISO
List Option
Section titled “List Option”It used to be list options still require a lot of manual styles to position its contents. The List Option now can handle leading/trailing icons and interactive content.
<li class="tng-list-option"> <a href="#"> <i aria-hidden="true" class="tng-icon icon-car is-md"></i> <span>Option</span> <i aria-hidden="true" class="tng-icon icon-chevron-right tng-rtl-flip-x" ></i> </a> <i aria-hidden="true" class="tng-icon icon-chevron-right tng-rtl-flip-x"></i></li>If you want your whole list option to be interface (a / button) make sure to have all icons inside of the element. The list option will delegate its layout rendering to its interactive child.
<li class="tng-list-option"> <a href="#"> <i aria-hidden="true" class="tng-icon icon-car is-md"></i> <span>Option</span> <i aria-hidden="true" class="tng-icon icon-chevron-right tng-rtl-flip-x" ></i> </a> <i aria-hidden="true" class="tng-icon icon-chevron-right tng-rtl-flip-x"></i></li>0.29.2 (2026-02-13)
Section titled “0.29.2 (2026-02-13)”- 🚚 [icons] move ai-search to brandless
0.29.1 (2026-02-11)
Section titled “0.29.1 (2026-02-11)”- 🐛 [modal] fix at maximum sizing
0.29.0 (2026-02-04)
Section titled “0.29.0 (2026-02-04)”- 📱 [modal] improve small viewports
- 📝 [modal] document overflow
- ✨ [list] add select list with links
- 📝 [figma] add accordion component documentation
- 📝 [figma] add foundations typography documentation
- 📝 [figma] add foundations color documentation
- ✨ add token descriptions
0.28.1 (2026-02-02)
Section titled “0.28.1 (2026-02-02)”- 🩹 [button] rename pill active state to selected
- ⬆️ bump figma tokens
0.28.0 (2026-01-30)
Section titled “0.28.0 (2026-01-30)”- ✨ [toggletip] add backdrop
0.27.2 (2026-01-29)
Section titled “0.27.2 (2026-01-29)”0.27.1 (2026-01-29)
Section titled “0.27.1 (2026-01-29)”- 💄 [toggletip] fix close button RTL
0.27.0 (2026-01-28)
Section titled “0.27.0 (2026-01-28)”- ✨ [button] finish pill button
- 💄 [button] fix icon button border color states
- ✨ [icons] add UI pause / spinner
0.26.5 (2026-01-27)
Section titled “0.26.5 (2026-01-27)”- 💄 [button] remove main tertiary inline padding
0.26.4 (2026-01-27)
Section titled “0.26.4 (2026-01-27)”- 🩹 [root] apply automatically to Storybook
- 🐛 [modal] fixed maximized modal
0.26.3 (2026-01-26)
Section titled “0.26.3 (2026-01-26)”- 🐛 [table] fix color
0.26.2 (2026-01-26)
Section titled “0.26.2 (2026-01-26)”- 🐛 [table] fix inline size
- 📝 [teams] update teams
- 💄 [teams] spruce up page
0.26.1 (2026-01-22)
Section titled “0.26.1 (2026-01-22)”- 🐛 [modal] remove aria-modal true(scroll lock)
0.26.0 (2026-01-16)
Section titled “0.26.0 (2026-01-16)”- 🐛 [modal] fix touch target interop
- 📝 [RTL] document flip X utility
- 🐛 [modal] fix and automate scroll lock
- 🐛 [modal] fix backdrop
- ✨ [varia] add focus-within utility
- 🐛 [toggle] fix RTL
- ✨ [varia] add touch target
- 📝 update glossary
0.25.1 (2026-01-15)
Section titled “0.25.1 (2026-01-15)”- 👷 [icons] fix ICONS type array literal
- 🐛 [icons] fix categories
- 👷 [icons] expose categories
- 📝 [icons] document import path change
- 💫 [modal] fix close transition
0.25.0 (2026-01-14)
Section titled “0.25.0 (2026-01-14)”- 🐛 [accordion] fix webkit render
- 🩹 [icons] optimize
- 👷 [icons] provide build without inlined icons
- 🚚 group form components
0.24.0 (2026-01-14)
Section titled “0.24.0 (2026-01-14)”0.23.0 (2026-01-13)
Section titled “0.23.0 (2026-01-13)”- 💄 [table] fix overflow breaking
- 💄 [table] fix font size
- 💄 [table] fix header alignment
- 📝 demo Georgian unicode range
- 🐛 [icon] fix operations view on / off
- 🚚 [icons] move to shared
- 🐛 [icons] fix rating star color
- 🔥 [slot] make default variant implicit
- 💥 [toggletip] remove header element
- 💥 ⬆️ bump figma tokens
- 🐛 [modal] fix scroll to top
- 🐛 [modal] fix Safari
- 📝 [toggletip] document different parts
- 🐛 [toggletip] move shadow to outer element
- 🧪 [toggletip] add title
The import paths for icons have changed.
import { ICONS, type Icon } from '@tmedxp/styleguide/toyota/icons';import { ICONS, type Icon } from '@tmedxp/styleguide/toyota';Or you can get the full namespace from either the root or the brand entry point.
import { Toyota } from '@tmedxp/styleguide';import * as Toyota from '@tmedxp/styleguide/toyota';let Toyota.ICONS: Toyota.Icon[];Popover
Section titled “Popover”The header element is not necessary anymore. The title can exists on its own and should be placed after the close icon, if present.
<div class="tng-popover-bubble"> <div class="tng-popover-header"> <div class="tng-text-title">${lorem0}</div> </div> <button class="tng-icon-button is-ghost" aria-label="Close"> <i class="tng-icon icon-close" aria-hidden="true"></i> </button> <div class="tng-text-title">${lorem0}</div> <p class="tng-text-body">${lorem2}</p></div>0.22.0 (2025-12-15)
Section titled “0.22.0 (2025-12-15)”- ✨ update divider implementation
- 🚚 [utilities] rename visibility to display
- 🐛 [typography] fix selection psuedo element
0.21.0 (2025-12-10)
Section titled “0.21.0 (2025-12-10)”- 💄 [typography] update heading inferred sizes
- 🐛 [icons] fix branded icons
- ✨ add tabs component
- 🧪 [visual test] add dir support
- 🐛 [rtl] fix issues
- ✨ add RTL toggle
- 💥 🚚 rename
with-*tohas-* - 📝 [text box] document
Breaking
Section titled “Breaking”- List component modifier renamed
with-dividertohas-divider.
0.20.0 (2025-12-08)
Section titled “0.20.0 (2025-12-08)”- ✨ add accordion component
- ✨ update reset / root rendering
- 🐛 [content] fix heading typography
- ✨ implement energy labels
- 💄 implement text box
- 💥 🚚 [core] rename LexusType back to Nobel
- ♻️ replace content hr with divider
- 💥 ✨ rework typography
Breaking
Section titled “Breaking”Typography
Section titled “Typography”- Typography has converged all its classes under
tng-text-bodyandtng-text-titleand switched to an ordinal scale. - Lexus font family has been renamed from “Lexus Type” back to “Nobel”. Make sure to update your
@font-facedirectives.
0.19.0 (2025-12-03)
Section titled “0.19.0 (2025-12-03)”0.18.0 (2025-12-03)
Section titled “0.18.0 (2025-12-03)”- ✨ implement modal
- 📝 fix maximum positioning demo
- 💥 ♻️ rebrand placeholder as slot
- ✨ add select list
- 📝 add checkbox list recipe
- 🐛 fix col/row gap usage
- ♻️ rework focus reusage
- 💥 render tokens reference per brand
- 💥 update typography
- 🎨 fix icons format
- 👷 auto deploy releases to prev
- 🐛 [icon] rotate toyota trade-cycle-management
- 🐛 fix icons reference UI and copy
- ✨ add CloseWatcher to tooltip recipe
- 💄 add visual link button tests
- ✨ setup visual regression testing
Breaking
Section titled “Breaking”- Figma tokens update (
^6 && ^7) has some small structural changes. tng-placeholderhas been renamed totng-slot.
0.17.0 (2025-11-24)
Section titled “0.17.0 (2025-11-24)”- ✨ add explicit default classes
- 💥 ♻️ prefix internal components
- 🐛 [button] fix lexus borders
- 💥 ✨ [popover] add border
- 🐛 [popover] fix contrast styles
- 🐛 [popover] fix typography
- 🐛 [link] remove default padding
Breaking
Section titled “Breaking”Popover
Section titled “Popover”The HTML structure for popover has been updated.
Before
Section titled “Before”<div class="tng-popover"> <div class="arrow"></div> <div class="header"> <!-- --> </div> <p class="tng-text-body"> <!-- --> </p></div><div class="tng-popover"> <div class="tng-popover-arrow"></div> <div class="tng-popover-header"> <!-- --> </div> <div class="tng-popover-bubble"> <p class="tng-text-body"> <!-- --> </p> </div></div>0.16.0 (2025-11-20)
Section titled “0.16.0 (2025-11-20)”- 📝 document primitive tokens
- ✨ finish icon button
- 💥 ✨ finish link / link button
- 📝 [button] expand overflow documentation
- ✨ finish social media button
- 🚚 merge recipes into components
- ✨ [button] add overflow constraints
Breaking
Section titled “Breaking”tng-text-link has been renamed to tng-link.
0.15.0 (2025-11-19)
Section titled “0.15.0 (2025-11-19)”- 🚚 rename modules to recipes
- 🐛 [content] fix blockquote contrast scheme
- ✨ implement toggletip
- ♻️ move schemes to mixin
- 📝 add teams structure
- 🩹 [alert] simplify demo
- 🧑💻 [surface] add release note
0.14.1 (2025-11-17)
Section titled “0.14.1 (2025-11-17)”0.14.0 (2025-11-14)
Section titled “0.14.0 (2025-11-14)”- 🧑💻 add token values to reference
- 💥 🧑💻 merge border utilities
- ♻️ update tokens reference
- 🚚 move changelog into reference guide
- 💥 ♻️ merge box and scheme into surface
- 💥 ✨ add margin utilities
Breaking
Section titled “Breaking”Border
Section titled “Border”stroke-<size> has been renamed to border-<size>.
Surface
Section titled “Surface”tng-box and tng-scheme have been merged into tng-surface.
- There’s no default padding anymore, add
p-mdto add the old default. - There’s no default text styling mixin anymore. Add
tng-text-bodyor which-ever typography class you want to the element or any of its children.
Margin
Section titled “Margin”We have added margin utilities analog to the existing padding utilities.
- Margin can be applied to the Wrapper layout component.
- Padding can be applied to the Surface (previously Box) core component.
- The
is-centeredvariant is removed from the Wrapper layout component. You can use the margin utilitymi-autonow.
0.13.0 (2025-11-13)
Section titled “0.13.0 (2025-11-13)”- 📝 split AEM / React documentation
- ✨ rework tokens
Breaking
Section titled “Breaking”Renamed tokens
Section titled “Renamed tokens”- All primitive font tokens (
--tng-font-*) have been heavily restructured. - All semantic color tokens (
--tng-(border|foreground|surface)-*) have been heavily restructured. - All component tokens (
--tng-(buttons)-*) have been heavily restructured. is-dangeris renamed tois-errorto match the terminology of the tokens.(is|on)-inverseis renamed to(is|on)-contrastto match the terminology of the tokens.
0.12.2 (2025-11-06)
Section titled “0.12.2 (2025-11-06)”- 📝 explicit icon scheme support
- 💄 improve list styles
- 🚸 enhance animations on no preferred motion
- ♻️ tweak styleguide export
0.12.1 (2025-11-05)
Section titled “0.12.1 (2025-11-05)”- 🐛 fix icons export types
0.12.0 (2025-11-04)
Section titled “0.12.0 (2025-11-04)”- ✨ align font families, subfamiles and weights document icon differences
0.11.0 (2025-10-30)
Section titled “0.11.0 (2025-10-30)”- 📝 Updated and restructured documentation
- 🚚 Rename CSS layer
tng.modulestotng.userstyles - ✨ add list component
- ✨ Added icons from scratch from Figma