Changelog
Unreleased
Section titled βUnreleasedβ7.11.2 (2026-10-28)
Section titled β7.11.2 (2026-10-28)β- π [link]
.is-neutrallinks keep one colour on hover, press and visit β no markup change
7.11.1 (2026-10-26)
Section titled β7.11.1 (2026-10-26)β- π [reset] the reset reaches React fragments rendered directly under the AEM Headless root, such as a top-level
<dialog>β no markup change
7.11.0 (2026-10-20)
Section titled β7.11.0 (2026-10-20)β- β¨ [playground] type CDS markup, watch it render, and share the URL β every HTML code sample opens there from beside its copy button
- π [divider]
.is-primaryis a copper gradient on Lexus β no markup change - β¨ [icons] ten Kinto-only icons, such as
icon-business,icon-deliveryandicon-wall-box, render on Kinto only - π [icons] Kinto draws its own version of 14 icons, following its Figma variants β no class changes
- β¨ [icons] new
icon-bookmark-filled,icon-ui-arrow-upandicon-hybrid-electric-car-hev-sm, andicon-power-onrenders on every brand - π [icons] icons that drifted from Figma are redrawn, so arrows, chevrons, socials and more change size or weight β no class changes
- π the reset adds reseter.css defaults β borderless iframes, collapsed tables, dotted
abbr[title]andsub/supthat keep line height - π
[hidden]always hides, images keep their aspect ratio, and smooth scrolling respects reduced motion - β¨ [date & author] new
.tng-date-authorcomponent, in quarantine β add.is-verticalto stack the date and author
7.10.0 (2026-10-16)
Section titled β7.10.0 (2026-10-16)β- π [alternate content], [sticky bottom bar] leave quarantine β both are ready to use
- β¬οΈ
--tng-typography-title-<bp>-{1,2}-font-{family,weight}are renamed-{default,emphasis}-font-{family,weight}β update any direct reference - β¨ [card] new
.tng-cardbase card, in quarantine β compose cards from it with layouts and utilities, as its Modules show - β¨ [varia]
.text-start,.text-centerand.text-endalign text along the writing direction - β¨ [breadcrumb] new
.tng-breadcrumbcomponent, in quarantine β add.is-collapsedto shorten a deep trail behind an ellipsis - β¨ [icon button]
.tng-labelled-icon-buttonputs a label beside an icon button β wrap both and pointaria-labelledbyat the label - π [icon button] filled icon buttons draw a 1px border in every state β visible on Lexus, with a copper gradient on hover; no markup change
- π [typography] Lexus title 1 and 2 with
.is-emphasisswitch from the decorative face to Nobel - π [tabs], [tab picker] the selected underline is a copper gradient on Lexus for every selected item, not only EV β no markup change
- π [chat messages] the bot sparkle takes its chat-message token β copper on Lexus β and neutral user text is a shade lighter
- π [accent button] a disabled
.is-bz4xaccent button on a contrast surface takes its own fill on Lexus and Kinto β no markup change
7.9.0 (2026-10-07)
Section titled β7.9.0 (2026-10-07)β- β¨ [chip] a chip can trigger a dropdown β
aria-expanded="true"matches.is-activeand a trailingicon-chevron-downflips while open - π [chip]
.is-suggestionfollows the contrast scheme β inside.is-contrastit takes the--tng-suggestion-contrast-*colours - π [simple card] corners take
--tng-cards-corner-radiusβ square on Toyota, 8px on Lexus, 10px on Kinto - π move [simple card] into quarantine β its Figma component awaits design feedback, so its look may still change
- π [tabs] a selected tab keeps its look on hover β and Kintoβs selected label is teal as designed
- π [tabs] selected tabs in the contrast scheme drop the light fill β the underline alone marks the selection
- π colour and opacity fades use a
linearcurve, as the Motions page prescribes - π [tabs] the selected EV tab keeps its fill on Lexus β the gradient underline no longer wipes it
- π move [pill button] into quarantine β Figma marks it deprecated, so expect a migration once GDI decide
- π [pill button]
.on-overlaypills look the same inside.is-contrast - π [radio] the selected dot takes its fill token instead of the border colour, so it looks slightly different
- π [link] visited links show their visited colour β darker on Toyota and Kinto
- π [toggle] a disabled toggle in the contrast scheme no longer looks rested
- π [pill button]
.on-overlay.is-ctadraws its 1px border again - π [overflow] scroll-indicator fades point the right way in RTL
- β»οΈ [toggle] the thumb no longer transitions
background-colorβ a thumb colour you vary per state yourself now changes instantly - π [media button] the progress ring no longer animates under reduced motion β it steps to each value instead
- β¬οΈ the shipped CSS keeps native nesting β 70 KB smaller per bundle, and needs Chrome 120+, Safari 17.2+ or Firefox 117+
7.8.1 (2026-09-24)
Section titled β7.8.1 (2026-09-24)β- π [background]
.fill-softis no longer scheme-aware β it referenced a contrast token Figma never published, so it rendered transparent inside.is-contrastand now paints the neutral soft fill in every scheme - π [tabs] the selected tabβs underline is back β its colour referenced a token Figma never published, so outside the EV variant the border resolved to none on every brand
- π [count indicator] the label now reads its own font-weight token instead of silently inheriting one, so the count renders lighter on Lexus and heavier on Kinto
- π [spacing], [layout], [position] the spacing, gap and inset scale demos now print the value each size resolves to for the selected brand
7.8.0 (2026-09-23)
Section titled β7.8.0 (2026-09-23)β- π [overflow] the vertical scroll chevrons now centre correctly in RTL
- π [toggletip] the arrow now meets the bubble in RTL, on all four placements and on
.tng-popover-arrow - π [radio] the selected dot now stays centred in the button in RTL
- π [position] the centred placements β
.at-center,.at-top,.at-bottom,.at-golden-ratio,.at-pretty-centerβ now centre in RTL, so every RTL page using one moves, Modal included - β¬οΈ
--tng-color-{surface,fill,border}-dim-*and the overlay start colours now hold their colour directly, so redefining a--tng-color-opacity-*primitive no longer retints them - β¨ [setup] the Lexus decorative face now ships β
LexusDecorativeTypejoins the font-face stylesheet, so Lexus title 1 and 2 change appearance; it carries AβZ and space only, so keep it to short, all-alphabetic display strings - π [radio] the button now centres on a wrapping labelβs first line rather than the whole label, so every radio shifts by 1β2px and rows at the larger type sizes grow
- π [checkbox] the box now centres on a wrapping labelβs first line rather than the whole label, so every checkbox shifts by 1β2px and rows at the larger type sizes grow
- π [list] markers now hang in a 1.5em gutter so a wrapped item indents under its text, and every list indents by 1.5em where it previously started flush
- β¨ [link] add
.is-defaultfor the default variant; a link has no default size and inherits the font size of its content, correcting the pageβsis-mdclaim - β¨ [alert], [badge], [tag], [label], [divider], [slot], [platform badge], [radio], [segmented control] every default variant and size now has a class you can write β
.is-default,.is-block,.is-smand.is-md, all optional, nothing renders differently - β»οΈ [main button], [accent button], [icon button] the default-variant fallback moves to
:where(:not(β¦)), so an override on the component class alone now wins where it used to tie
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)β- π [toggletip] fix contrast background
- π [accordion] improve group spacings
- β¬οΈ update figma tokens
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.
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.
<div class="tng-divider is-primary"></div>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.
<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β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.
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