[DRAFT] Auro Component Custom Styling Audit & Testing Plan #642
sun-mota
started this conversation in
Technical Research Documents
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Auro Component Custom Styling Audit & Testing Plan
Context
40
auro-*components for the Alaska Airlines design system (31 standalone repos + 9 inauro-formkit). Each uses a layered CSS architecture inside Shadow DOM:tokens.scss— sets default--ds-auro-{component}-*CSS custom properties on:hostcolor.scss— applies those vars to internal elements; overrides for variants/statesstyle.scss— structural/layout styles@csspartJSDoc annotations — expose internals for::part()external stylingFull scan of all 40 components was run on latest
origin/main(pulled 2026-07-23).Custom Property Audit
All
--ds-auro-*custom properties across all components. Sourced fromtokens.scssandcolor.scssonorigin/main(2026-07-23). Components prefixedauro-formkit/live inauro-formkit/components/; their standalone repos are legacy.Bug markers:⚠️ = bypassed, missing from source, or possible duplicate — ❌ = no token exists where one is needed
inv: ✓ =appearance="inverse"support exists incolor.scss::part(...)rows: shadow parts exposed via@csspart— these are the selectors consumers can target with::part()from outside the shadow DOMCoverage gap: a color on an internal element is fully locked from consumers if it has neither a
--ds-auro-*token nor a::part()exposure — the Suggested Change column flags where this appliesRows are sorted by priority: confirmed bugs first, then verify items, then clean properties.
auro-button--ds-auro-button-text-colorflatvariant ·color.scssL133–160, L279–308 · flat setscolor:directly on.auro-button; all other variants go through:hostcustom property · consumer overrides of this token have no effect on flat buttons · also insrc/styles/color-css.js.auro-button { color: ... }with:host([variant='flat']) { --ds-auro-button-text-color: ... }on:host; use:host([variant='flat']:not([disabled]):is([data-hover],[data-active]))for state overridesauro-button--ds-auro-button-tap-colortokens-css.js·color.scssuses it with no fallback → mobile tap highlight is browser-defaulted when built from SCSS--ds-auro-button-tap-color: transparenttostyles/tokens.scssunder:hostauro-buttontokens-css.js)appearance="inverse"intokens-css.js· only has[onDark]selectors which never match (HTML lowercases attributes) · all inverse token defaults broken for consumers importing this file directly:host([onDark])→:host([ondark]), :host([appearance="inverse"])and:host(:not([onDark]))→:host(:not([ondark]):not([appearance="inverse"]))auro-accordion--ds-auro-accordion-trigger-icon-colorcolor.scssL28 ·[auro-icon]inside:host([disabled])uses--ds-basic-color-texticon-disableddirectly instead of this token:host([disabled]), set--ds-auro-accordion-trigger-icon-color: var(--ds-basic-color-texticon-disabled, ...)and remove the direct[auro-icon] { color: ... }ruleauro-accordion--ds-auro-accordion-disabled-icon-color; the icon color in disabled state is hardwired to a global design token--ds-auro-accordion-disabled-icon-colortotokens.scss, or repurpose--ds-auro-accordion-trigger-icon-colorin the disabled rule — either unlocks the color for consumersauro-tabsstyle.scssL57, L64 andtab-style.scssL46, L55 · focus indicator and slider use--ds-advanced-color-state-focusedand--ds-advanced-color-state-focused-inversedirectly · no--ds-auro-tabs-*tokens exist at all--ds-auro-tabs-focus-color,--ds-auro-tabs-focus-inverse-colortokens; use in bothstyle.scssandtab-style.scssauro-formkit/auro-datepickercolor-cell.scssL28 · selected cell uses--ds-advanced-color-state-selecteddirectly--ds-auro-calendar-cell-selected-border-colortotokens.scssauro-formkit/auro-datepickercolor-cell.scssL49–55 · cell border and box-shadow use--ds-basic-color-border-default,--ds-basic-color-surface-default,--ds-advanced-color-shared-background-muteddirectly--ds-auro-calendar-cell-border-default-colorand--ds-auro-calendar-cell-shadow-colortokensauro-panecolor.scssL30 · focused state uses--ds-advanced-color-state-focuseddirectly · no--ds-auro-pane-focus-border-colortoken--ds-auro-pane-focus-border-colortotokens.scssauro-formkit/auro-dropdownclassic/bibStyles.scssL100 · uses--ds-color-background-primarydirectly--ds-auro-dropdownbib-background-colorto cover the classic theme variantauro-slideshowstyle.scssL60 · focus ringbox-shadowuses--ds-advanced-color-state-focused-inversedirectly--ds-auro-slideshow-focus-colortokenauro-cardstyle.scssL85, L111 · uses--ds-elevation-100/200directly · no--ds-auro-card-boxshadowtoken--ds-auro-card-boxshadowtotokens.scss; wrap elevation tokenauro-drawerdrawerContentStyles.scssL23 · uses--ds-elevation-200directly--ds-auro-drawer-boxshadowtokenauro-toaststyle.scssL16 · uses--ds-elevation-200directly--ds-auro-toast-boxshadowtokenauro-slideshow::part(prev-button · next-button · play-pause-button)auro-slideshowstyle.scssuses--ds-advanced-color-button-primary-background-*global tokens directly for nav dots · consumers cannot override dot colors--ds-auro-slideshow-dot-color,--ds-auro-slideshow-dot-active-color,--ds-auro-slideshow-dot-hover-colortokens totokens.scss; use them instyle.scssinstead of global tokensauro-formkit/auro-select::part(dropdownTrigger · dropdownChevron · dropdownSize)dropdown,wrapper,displayValueinstead — likely renamed in a refactor without updating@csspart@csspartannotations inauro-select.jsto match actual part names:dropdown,wrapper,displayValueauro-formkit/auro-dropdown::part(helpText · trigger)@csspartout of sync with actual templatepart="helpText"andpart="trigger"to the template elements, or remove the annotations from@csspartinauro-dropdown.jsauro-card::part(link)::part(link)part="link"to the anchor element inauro-card.jstemplate, or remove@csspart linkannotationauro-hyperlink::part(targetIcon)::part(targetIcon)part="targetIcon"to the icon element inauro-hyperlink.jstemplate, or remove@csspart targetIconannotationauro-formkit/auro-input::part(iconContainer)@csspartout of syncpart="iconContainer"to the icon container inbase-input.jstemplate, or remove@csspart iconContainerannotationauro-button::part(link)buttonHrefis set but not declared in@csspart@csspart link - Apply CSS to the anchor element when component is used as a hyperlinktoauro-button.jsauro-drawer::part(drawer-backdrop)@csspartdeclaration · part was deprecated and removed from template; annotation should be deleted@csspart {deprecated} drawer-backdropannotation fromauro-drawer.jsauro-drawer--auro-drawer-backdrop-background@csspropbut uses--auro-*prefix instead of--ds-auro-*· inconsistent with every other component token · consumers may not find it--ds-auro-drawer-backdrop-backgroundand deprecate the old name with an aliasauro-backgroundstyleMapin JS, not via CSS custom properties on:host· different model from all other components; consumers must use JS props, not CSS overrides--ds-auro-background-container-color(already exists) as the CSS-native path alongside the JS prop APIauro-badgestyle.scssL63 · uses--ds-color-text-primary-defaultdirectly to reset text color in a specific compound state · bypasses the--ds-auro-badge-text-colortoken for this edge case--ds-auro-badge-text-colorso consumers can override it uniformly in all statesauro-tokenlist--ds-auro-tokenlist-*override path if UI customization is ever neededauro-tokenlistdoes not support custom stylingauro-formkit/auro-radio--ds-auro-radio-group-help-text-coloris absent from formkit; confirm if intentionally removed--ds-auro-radio-group-help-text-colortoken to formkitradio/src/styles/tokens.scssauro-tail--ds-auro-tail-border-color-default--ds-auro-tail-border-colorauro-tail--ds-auro-tail-border-w-default--ds-auro-tail-border-widthauro-accordion::part(accordion · trigger · chevron · content)auro-accordion--ds-auro-accordion-content-border-colorauro-accordion--ds-auro-accordion-group-border-colorauro-accordion--ds-auro-accordion-trigger-border-colorauro-accordion--ds-auro-accordion-trigger-colorauro-alert::part(alert · alert-content)auro-alert--ds-auro-alert-border-colorauro-alert--ds-auro-alert-container-colorauro-alert--ds-auro-alert-icon-colorauro-alert--ds-auro-alert-text-colorauro-avatar--ds-auro-avatar-tail-container-gradient-color-oneauro-avatar--ds-auro-avatar-tail-container-gradient-color-twoauro-background--ds-auro-background-container-colorauro-badge--ds-auro-badge-border-colorauro-badge--ds-auro-badge-boxshadow-colorauro-badge--ds-auro-badge-container-colorauro-badge--ds-auro-badge-text-colorauro-banner--ds-auro-banner-disclaimer-text-colorauro-banner--ds-auro-banner-icon-container-colorauro-banner--ds-auro-banner-text-colorauro-banner--ds-auro-banner-title-text-colorauro-banner--ds-auro-banner-wrapper-border-colorauro-banner--ds-auro-banner-wrapper-container-colorauro-button::part(button · loader · text)::part(link)also exists in template whenbuttonHrefis set but is NOT declared in@csspart— undocumented public partauro-button--ds-auro-button-border-colorauro-button--ds-auro-button-border-inset-colorauro-button--ds-auro-button-container-colorauro-button--ds-auro-button-container-imageauro-button--ds-auro-button-loader-colorauro-card::part(content · imageWrapper · image · header · description · cta)::part(link)declared in@csspartbut missing from template — consumers cannot style itauro-card--ds-auro-card-border-colorauro-card--ds-auro-card-link-border-colorauro-carousel::part(wrapper)auro-carousel--ds-auro-carousel-gradient-color-oneauro-carousel--ds-auro-carousel-gradient-color-twoauro-formkit/auro-checkbox::part(checkbox · checkbox-input · checkbox-label)auro-formkit/auro-checkbox--ds-auro-checkbox-border-colorauro-formkit/auro-checkbox--ds-auro-checkbox-checkmark-colorauro-formkit/auro-checkbox--ds-auro-checkbox-container-colorauro-formkit/auro-checkbox--ds-auro-checkbox-group-text-colorauro-formkit/auro-checkbox--ds-auro-checkbox-label-colorauro-formkit/auro-checkbox--ds-auro-checkbox-outline-colorauro-formkit/auro-counter--ds-auro-counter-background-colorauro-formkit/auro-counter--ds-auro-counter-border-colorauro-formkit/auro-counter--ds-auro-counter-control-background-colorauro-formkit/auro-counter--ds-auro-counter-control-border-colorauro-formkit/auro-counter--ds-auro-counter-description-text-colorauro-formkit/auro-counter--ds-auro-counter-divider-colorauro-formkit/auro-counter--ds-auro-counter-error-icon-colorauro-formkit/auro-counter--ds-auro-counter-icon-colorauro-formkit/auro-counter--ds-auro-counter-label-text-colorauro-formkit/auro-counter--ds-auro-counter-outline-colorauro-formkit/auro-counter--ds-auro-counter-placeholder-text-colorauro-formkit/auro-counter--ds-auro-counter-quantity-text-colorauro-formkit/auro-counter--ds-auro-counter-text-colorauro-formkit/auro-datepicker::part(dropdown · trigger · input · calendarWrapper · calendar · helpTextSpan · helpText)auro-formkit/auro-datepicker--ds-auro-calendar-cell-border-colorauro-formkit/auro-datepicker--ds-auro-calendar-cell-container-colorauro-formkit/auro-datepicker--ds-auro-calendar-cell-in-range-colorauro-formkit/auro-datepicker--ds-auro-calendar-cell-price-text-colorauro-formkit/auro-datepicker--ds-auro-calendar-cell-text-colorauro-formkit/auro-datepicker--ds-auro-calendar-mobile-header-container-colorauro-formkit/auro-datepicker--ds-auro-calendar-mobile-header-divider-colorauro-formkit/auro-datepicker--ds-auro-calendar-mobile-header-text-colorauro-formkit/auro-datepicker--ds-auro-calendar-month-container-colorauro-formkit/auro-datepicker--ds-auro-calendar-month-divider-colorauro-formkit/auro-datepicker--ds-auro-calendar-month-header-colorauro-formkit/auro-datepicker--ds-auro-calendar-nav-btn-border-colorauro-formkit/auro-datepicker--ds-auro-calendar-nav-btn-chevron-colorauro-formkit/auro-datepicker--ds-auro-calendar-nav-btn-container-colorauro-formkit/auro-datepicker--ds-auro-datepicker-border-colorauro-formkit/auro-datepicker--ds-auro-datepicker-error-icon-colorauro-formkit/auro-datepicker--ds-auro-datepicker-label-text-colorauro-formkit/auro-datepicker--ds-auro-datepicker-outline-colorauro-formkit/auro-datepicker--ds-auro-datepicker-placeholder-colorauro-formkit/auro-datepicker--ds-auro-datepicker-placeholder-text-colorauro-formkit/auro-datepicker--ds-auro-datepicker-range-input-divider-colorauro-dialog::part(close-button · dialog-overlay · dialog · dialog-header · dialog-content · dialog-footer)auro-dialog--ds-auro-dialog-boxshadow-colorauro-dialog--ds-auro-dialog-container-colorauro-dialog--ds-auro-dialog-overlay-modal-background-colorauro-dialog--ds-auro-dialog-overlay-open-background-colorauro-dialog--ds-auro-dialog-text-colorauro-drawer::part(drawer-wrapper · drawer-header · drawer-content · drawer-footer · close-button)::part(drawer-backdrop)declared as deprecated and removed from template — stale@csspartdeclaration should be cleaned upauro-drawer--ds-auro-drawer-container-colorauro-drawer--ds-auro-drawer-text-colorauro-drawer--ds-auro-floater-backdrop-modal-background-colorauro-drawer--ds-auro-floater-container-background-colorauro-drawer--ds-auro-floater-container-text-colorauro-formkit/auro-dropdown::part(bibContainer · chevron · size)::part(helpText)and::part(trigger)declared in@csspartbut missing from templateauro-formkit/auro-dropdown--ds-auro-dropdown-label-text-colorauro-formkit/auro-dropdown--ds-auro-dropdown-trigger-background-colorauro-formkit/auro-dropdown--ds-auro-dropdown-trigger-border-colorauro-formkit/auro-dropdown--ds-auro-dropdown-trigger-container-colorauro-formkit/auro-dropdown--ds-auro-dropdown-trigger-hover-background-colorauro-formkit/auro-dropdown--ds-auro-dropdown-trigger-outline-colorauro-formkit/auro-dropdown--ds-auro-dropdown-trigger-text-colorauro-formkit/auro-dropdown--ds-auro-dropdownbib-background-colorauro-formkit/auro-dropdown--ds-auro-dropdownbib-boxshadow-colorauro-formkit/auro-dropdown--ds-auro-dropdownbib-container-colorauro-formkit/auro-dropdown--ds-auro-dropdownbib-text-colorauro-flight::part(durationContainer · flightType · arrivalContainer · departureContainer · arrivalTime · departureTime · arrivalStation · departureStation · flightContainer)auro-flight--ds-auro-flight-cancelled-station-text-colorauro-flight--ds-auro-flight-footer-text-colorauro-flight--ds-auro-flight-header-days-changed-text-colorauro-flight--ds-auro-flight-header-text-colorauro-flight--ds-auro-flight-main-cancelled-station-text-colorauro-flight--ds-auro-flight-main-station-text-colorauro-flight--ds-auro-flight-main-time-text-colorauro-flight--ds-auro-flight-station-text-colorauro-flight--ds-auro-flight-time-text-colorauro-flightline--ds-auro-flightline-destination-line-colorauro-flightline--ds-auro-flightline-layover-duration-colorauro-flightline--ds-auro-flightline-layover-marker-border-colorauro-flightline--ds-auro-flightline-layover-marker-container-colorauro-flightline--ds-auro-flightline-segment-iata-text-colorauro-flightline--ds-auro-flightline-segment-line-colorauro-hyperlink::part(link)::part(targetIcon)declared in@csspartbut missing from template — consumers cannot style the external link iconauro-hyperlink--ds-auro-hyperlink-{type}-{state}-{prop}-{theme}{type}: default/nav/cta/cta-secondary/cta-tertiary ·{state}: default/hover/focus/visited ·{prop}: color/container-color/border-color/outline-color ·{theme}: -default/-inverseauro-icon::part(label)auro-icon--ds-auro-alaska-colorauro-icon--ds-auro-icon-colorauro-icon--ds-auro-icon-sizeauro-formkit/auro-input::part(wrapper · label · helpText · input · accentIcon · accent-left · accent-right · displayValue · inputHelpText)::part(iconContainer)declared in@csspartbut not in templateauro-formkit/auro-input--ds-auro-input-border-colorauro-formkit/auro-input--ds-auro-input-caret-colorauro-formkit/auro-input--ds-auro-input-container-colorauro-formkit/auro-input--ds-auro-input-error-icon-colorauro-formkit/auro-input--ds-auro-input-label-text-colorauro-formkit/auro-input--ds-auro-input-outline-colorauro-formkit/auro-input--ds-auro-input-placeholder-text-colorauro-formkit/auro-input--ds-auro-input-text-colorauro-loader::part(element)auro-loader--ds-auro-loader-background-colorauro-loader--ds-auro-loader-border-colorauro-loader--ds-auro-loader-colorauro-lockup--ds-auro-lockup-alaska-logo-colorauro-lockup--ds-auro-lockup-divider-colorauro-lockup--ds-auro-lockup-subtitle-colorauro-lockup--ds-auro-lockup-title-colorauro-formkit/auro-menu--ds-auro-menu-divider-colorauro-formkit/auro-menu--ds-auro-menu-loader-colorauro-formkit/auro-menu--ds-auro-menu-loader-text-colorauro-formkit/auro-menu--ds-auro-menuoption-container-border-colorauro-formkit/auro-menu--ds-auro-menuoption-container-colorauro-formkit/auro-menu--ds-auro-menuoption-icon-colorauro-formkit/auro-menu--ds-auro-menuoption-text-colorauro-nav--ds-auro-anchorlink-border-colorauro-nav--ds-auro-anchorlink-default-marker-colorauro-nav--ds-auro-anchorlink-text-colorauro-nav--ds-auro-anchorlink-text-hover-colorauro-nav--ds-auro-anchornav-label-colorauro-nav--ds-auro-anchornav-mobile-background-gradientauro-nav--ds-auro-anchornav-selected-marker-colorauro-nav--ds-auro-breadcrumb-chevron-colorauro-nav--ds-auro-breadcrumb-icon-colorauro-nav--ds-auro-breadcrumb-last-link-text-colorauro-pane--ds-auro-pane-border-colorauro-pane--ds-auro-pane-boxshadow-colorauro-pane--ds-auro-pane-container-colorauro-pane--ds-auro-pane-date-text-colorauro-pane--ds-auro-pane-day-of-week-text-colorauro-pane--ds-auro-pane-price-empty-text-colorauro-pane--ds-auro-pane-price-text-colorauro-popover--ds-auro-popover-boxshadow-colorauro-popover--ds-auro-popover-container-colorauro-popover--ds-auro-popover-text-colorauro-formkit/auro-radio::part(radio-group · radio · radio-input · radio-label)auro-formkit/auro-radio--ds-auro-radio-btn-border-colorauro-formkit/auro-radio--ds-auro-radio-btn-fill-colorauro-formkit/auro-radio--ds-auro-radio-btn-inset-colorauro-formkit/auro-radio--ds-auro-radio-group-label-colorauro-formkit/auro-radio--ds-auro-radio-label-colorauro-formkit/auro-radio--ds-auro-radio-tap-colorauro-formkit/auro-select::part(helpText)::part(dropdownTrigger),::part(dropdownChevron),::part(dropdownSize)declared in@csspartbut missing from template — template exposesdropdown,wrapper,displayValueinsteadauro-formkit/auro-select--ds-auro-select-background-colorauro-formkit/auro-select--ds-auro-select-border-colorauro-formkit/auro-select--ds-auro-select-error-icon-colorauro-formkit/auro-select--ds-auro-select-label-text-colorauro-formkit/auro-select--ds-auro-select-outline-colorauro-formkit/auro-select--ds-auro-select-placeholder-text-colorauro-formkit/auro-select--ds-auro-select-text-colorauro-sidenav--ds-auro-sidenav-text-colorauro-sidenav--ds-auro-sidenavitem-border-bottom-colorauro-sidenav--ds-auro-sidenavitem-border-left-colorauro-sidenav--ds-auro-sidenavitem-icon-colorauro-sidenav--ds-auro-sidenavsection-border-colorauro-sidenav--ds-auro-sidenavsection-icon-colorauro-sidenav--ds-auro-sidenavsection-text-colorauro-sidenav--ds-auro-sidenavsection-trigger-background-hover-colorauro-sidenav--ds-auro-sidenavsection-trigger-border-colorauro-skeleton--ds-auro-skeleton-container-colorauro-skeleton--ds-auro-skeleton-container-gradient-color-oneauro-skeleton--ds-auro-skeleton-container-gradient-color-twoauro-table--ds-auro-table-alt-row-container-colorauro-table--ds-auro-table-border-colorauro-tail--ds-auro-tail-badge-offset-xauro-tail--ds-auro-tail-badge-offset-yauro-tail--ds-auro-tail-badge-wauro-tail--ds-auro-tail-badge-w-lgauro-tail--ds-auro-tail-border-colorauro-tail--ds-auro-tail-border-color-whiteauro-tail--ds-auro-tail-border-displayauro-tail--ds-auro-tail-border-paddingauro-tail--ds-auro-tail-border-radius-fullauro-tail--ds-auro-tail-border-widthauro-tail--ds-auro-tail-container-gradientauro-tail--ds-auro-tail-container-wauro-tail--ds-auro-tail-container-w-lgauro-tail--ds-auro-tail-gradient-oaauro-tail--ds-auro-tail-group-border-colorauro-tail--ds-auro-tail-group-diag-w-*auro-tail--ds-auro-tail-group-horiz-border-w-*auro-tail--ds-auro-tail-group-horiz-overlap-*auro-tail--ds-auro-tail-href-label-gapauro-tail--ds-auro-tail-href-label-gap-lgauro-tail--ds-auro-tail-tail-drop-shadowauro-tail--ds-auro-tail-tail-offset-yauro-tail--ds-auro-tail-tail-offset-y-lgauro-tail--ds-auro-tail-tail-outline-colorauro-tail--ds-auro-tail-tail-outline-wauro-tail--ds-auro-tail-tail-wauro-tail--ds-auro-tail-tail-w-lgauro-tail--ds-auro-tail-z-index-badgeauro-tail--ds-auro-tail-z-index-borderauro-tail--ds-auro-tail-z-index-group-backauro-tail--ds-auro-tail-z-index-group-frontauro-toast::part(type-icon · close-button)auro-toast--ds-auro-toast-close-button-hover-container-colorauro-toast--ds-auro-toast-container-colorauro-toast--ds-auro-toast-icon-colorauro-toast--ds-auro-toast-text-colorauro-backtotop::part(button · icon)auro-backtotopauro-button+auro-iconauro-formkit/auro-comboboxauro-dropdown+auro-input; override their tokens directlyauro-datetimeauro-headerauro-layoverauro-tabs::part(tabgroup__root · tabgroup__tabs · tabgroup__panels · slider-positioner · slider)auro-tabs--ds-advanced-color-*global tokens directlyDeprecated
@importSCSS syntax (LOW/MAINTENANCE)SCSS
@importis deprecated and will be removed. These components still use it instead of@use:@importauro-cardcolor.scss,style.scss,tokens.scssauro-flighttokens.scss, + 3 color files, + 3 style filesauro-panecolor.scss,tokens.scss,style.scssNo CSS custom property tests (GAP)
Zero tests across all 40 components verify
--ds-auro-*token values, variant overrides,::part()reachability, orappearance="inverse"behavior. See Testing Plan below.Naming Consistency Audit
Part name conventions — mixed camelCase and kebab-case
No single convention is followed across components. This makes the
::part()API harder to predict and document.helpText,bibContainer,calendarWrapper,displayValue,accentIcon,iconContainer,imageWrapper,targetIcon,inputHelpText,dropdownTrigger/Chevron/Size,flightContainer,arrivalContainerauro-formkit/auro-input,auro-formkit/auro-dropdown,auro-formkit/auro-datepicker,auro-flight,auro-card,auro-hyperlinkclose-button,alert-content,radio-input,radio-label,checkbox-input,dialog-header/content/footer,drawer-header/content/footer,prev-button,next-button,play-pause-button,type-icon,accent-left/rightauro-dialog,auro-drawer,auro-alert,auro-formkit/auro-radio,auro-formkit/auro-checkbox,auro-toast,auro-slideshow__)tabgroup__root,tabgroup__tabs,tabgroup__panelsauro-tabsbutton,trigger,wrapper,label,input,content,chevron,sliderShared part names used consistently (good):
helpText(4×),trigger(3×),close-button(3×),wrapper(2×),label(2×),input(2×),chevron(2×),button(2×) — these cross-component names match.Suggestion: Adopt kebab-case as the system-wide standard for multi-word part names (aligns with HTML attribute conventions and CSS
::part()usage patterns). Migrate camelCase parts during next breaking change window.Variant name conventions — camelCase vs kebab-case, missing prefixes
auro-iconvsauro-badgeauro-iconusesfareBasicEconomy,fareBusiness,fareEconomy,fareFirst,farePremiumEconomy(camelCase);auro-badgeusesfare-business,fare-economy,fare-first,fare-premium,fare-saver(kebab-case) — same domain, two different conventionsauro-iconvsauro-badgeauro-iconusestierOneWorldEmerald/Ruby/Sapphire;auro-badgeusesoneworld— completely different names for overlapping conceptsauro-iconvsauro-badge,auro-toastauro-iconusesstatusError,statusInfo,statusSuccess,statusWarning;auro-badgeandauro-toastuseerror,success,info,warning— same semantics, different prefixesdisabledas a variantauro-iconvariant="disabled"to style a disabled-looking icon, butdisabledis a native HTML attribute on other components — conceptually inconsistenttransparent-inversecombined variantauro-badgetransparent+ inverse into one variant string; other components handle inverse viaappearance="inverse"attribute separately — inconsistent patternSuggestion: Standardize on kebab-case for all multi-word variant values. Align fare/status/tier naming across
auro-iconandauro-badge— pick one convention per domain and document it in the design token naming guide.Testing Plan
Framework (no new deps)
@open-wc/testing—fixture,html,expect,elementUpdatedauro test)test/auro-{component}.style.test.jsTest Patterns
Pattern A — Default token custom properties are set
Pattern B — Variant overrides the intermediate custom property
Pattern C — Regression for Bug 2: flat variant respects external token override
Pattern D —
::part()shadow parts are reachablePattern E —
appearance="inverse"applies inverse token defaults (canonical dark mode API)Pattern F — Disabled state override
Priority order for implementation
auro-button— all patterns A–F (has the most bugs; flat variant, tokens-css.js, appearance=inverse)auro-accordion— Pattern A + F (disabled icon direct color bug)auro-radio— Pattern A (verify whether--ds-auro-radio-group-help-text-coloris missing from formkit)Test file location
auro-{component}/test/auro-{component}.style.test.jsRun with:
cd auro-{component} && auro testShared Test Helper
To avoid copy-pasting
getComputedStyleboilerplate across 45 test files, create a shared utility inauro-libraryor as a local helper per repo:test/styleTestUtils.js(copy into each component'stest/directory, or add to@aurodesignsystem/auro-library)Usage in a component test:
All reactions