Cornerstone follows Semantic Versioning, and each release on this page follows the Keep a Changelog convention. Additionally, both components and features carry a status badge that tells you what to expect from their API.

Status What to Expect
Stable A settled API you can build on. Breaking changes land only in major releases, and anything deprecated stays available through the next major version. Safe for production.
Experimental Still taking shape. The API can change in any minor release, so it's ideal for prototyping — but risky for production code you can't easily update.
BreakingAddedChangedRemovedFixed

0.11.0

Added

  • ssr-label on cs-dialog and cs-drawer, the SSR hint for a slotted label, beside ssr-footer. #298

  • agent-review's review config, with the review standards brought up to date. Repository tooling only; nothing that ships changes. #330

  • A Go guide under Frameworks, and the cornerstone skill now ships it as references/frameworks/go.md. #323

  • Connections to the documentation site's Inspiration library glossary. Docs only; nothing that ships changes. #303

  • The docs site's Inspiration page shell, with three draft entries. Docs site only; nothing that ships changes. #305

  • Reasoning and Rule to the documentation site's Inspiration library glossary. Docs only; nothing that ships changes. #301

Changed

  • Dependabot and lockfile-only pull requests need no changeset unless they move a published package's dependency range. Repository process only; nothing that ships changes. #331

  • CI decides which jobs a change needs in one tested module, runs the token checks as one job only when a change can reach them, and checks each pull request's changeset against the changeset rules, read with the parser the release uses. Repository tooling only; nothing that ships changes. #344

  • CI's documentation job caches Chromium by Playwright version, so a lockfile change no longer downloads it again. Repository tooling only; nothing that ships changes. #343

  • CLAUDE.md lists the manual steps for releasing. Repository process only; nothing that ships changes. #335

  • agent-review never approves the release pull request; a maintainer does. Repository tooling only; nothing that ships changes. #336

  • CI deals the browser tests to six shards by each file's measured duration, so the shards finish together. Repository tooling only; nothing that ships changes. #343

  • The root CLAUDE.md says who approves and merges each kind of pull request. Repository process only; nothing that ships changes. #338

Removed

  • The docs site's unused nginx image files. Docs tooling only; nothing that ships changes. #333

Fixed

  • The docs site's Inspiration Screens axe check sets aside cs-page's skip link under region, an axe-core shadow DOM bug now in the accessibility gap register. Docs tooling only; nothing that ships changes. #304

  • A component's show or hide animation, and the cs-after-show or cs-after-hide that follows it, no longer ends early when an animation on content inside the component ends or is cancelled. #324

  • A changelog entry starts with a capital letter once the version step removes its category prefix. #332

  • The docs site's page check skips code, so a ::: directive, ::roadmap or Starlight aside markup shown in a code span or block no longer fails it. Docs tooling only; nothing that ships changes. #296

  • A cs-dropdown-item submenu reopened during its close animation stays on screen instead of being hidden when the animation ends. #342

  • A cs-dropdown reopened during its hide animation listens for Escape and clicks outside again, and fires cs-after-show rather than cs-after-hide. #341

  • cs-option no longer waits on a cs-combobox element that is never registered, a promise that held a callback per option for the life of the page. Its parent lookups now name cs-select alone. #340

  • A loading cs-button keeps its label in the accessibility tree and sets aria-busy; the label is hidden with opacity rather than visibility, so slotted content is no longer hidden from assistive technology. #288

  • cs-input's password toggle is reachable from the keyboard and shows its own focus ring; the field's ring now appears only when the text input itself has focus, not when its inner buttons do. The clear and password-toggle buttons are square, with a pointer target the full height of the field. #289

  • cs-select's clear button spans the full height of the field, so a click near the top or bottom edge clears it; the glyph stays on the same trailing axis. #292

  • cs-switch's focus ring is drawn around the track instead of the thumb. #291

  • Every enabled cs-accordion-item header is in the page's tab sequence instead of a roving tabindex that exposed only one. Arrow keys, Home and End still move between headers. #293

  • Visually hidden content inside a component's shadow root, such as a live region, is anchored at the top-left of its containing block. #297

  • cs-dialog and cs-drawer take their accessible name from the label attribute or slot only when one is present, and from the attribute through aria-label when without-header hides the heading. #298

  • cs-dropdown no longer pulls focus back to its first item when its opening animation ends. Arrow keys pressed while it opens, a focused input inside the menu, native autofocus, and focus moved elsewhere by a cs-show handler are all kept, and Enter selects the item that actually has focus. cs-after-show is no longer emitted when the dropdown closes before it finishes opening. #299

  • <cs-time-input> no longer deactivates its popup when reopened during the close animation, and no longer emits cs-after-show or moves focus into the columns when closed during the open animation. #337

  • cs-tooltip stays open when its cs-hide event is cancelled, so open matches what is on screen and the next hide() works, and moving an open tooltip in the DOM no longer replays its cs-hide and cs-show events. #328

0.10.0

Breaking

  • Every component custom property is renamed to --cs-<component>-<property> or one of seven shared names (--spacing on <cs-card> is now --cs-card-spacing), and none is set on the host, so each can be set on the page, a section or one element. The layout utilities' --min-column-size, --flank-size and --content-percentage become --cs-grid-min-column-size, --cs-flank-size and --cs-flank-content-percentage, and the themes no longer set --cs-tooltip-*, so your own CSS that reads one outside a <cs-tooltip> gets nothing. #262

  • Components no longer set unprefixed custom properties on their host for app CSS to inherit. <cs-page> drops --scroll-margin-top (anchors still clear the header) and stops writing a footer height, and <cs-qr-code>'s --corner-color is now the documented --cs-qr-code-corner-color. #262

Added

  • cs-button takes orientation="vertical" to stack its start slot above the label and end below it, spaced by --cs-button-stacked-gap, --cs-button-stacked-padding-block and --cs-button-stacked-padding-inline. It reads --cs-button-justify-content to align a one-row button's content. Buttons in a horizontal cs-button-group share one height. The Button page gains Stacked, Navigation Bar and Content Alignment examples. #261

  • The docs site now runs axe on every Inspiration Screen state file in light and dark mode after it builds, and fails on any violation, missing file or page error. Docs tooling and an unshipped page only; nothing that ships changes. #257

  • glossary terms for component properties and shared properties. #228

Changed

  • the test suite runs on Playwright 1.55.1 (Chromium 140, Firefox 141, WebKit 26.0) instead of the pinned 1.52.0, which closes GHSA-7mvr-c777-76hp. No package output changes. #282

  • The roadmap lists a fourth 1.0.0 entry criterion, that the known defects in what ships are fixed. Docs site only; the package's output is unchanged. #278

Fixed

  • The tooltip placement example gives each button visible text, so none relies on its tooltip for a name. The accessibility and browser support pages now claim only what the test record shows, and a docs check fails the build when a contrast ratio or colour the accessibility page prints stops matching the shipped themes. #260

  • The Accessibility page scopes its reduced-motion claim to show and hide animations, corrects its focus-indicator contrast, and lists the remaining contrast and motion gaps. #262

  • A failed agent-file step now fails the build. An error while writing the agent skills or llms.txt exits non-zero instead of 0. #277

  • cs-button with with-caret keeps a cs-badge in its end slot, so it shows and its text joins the button's accessible name; the caret still hides anything else there. #261

  • the Accessibility page drops the closed cs-callout SSR gap; docs site only, the package's output is unchanged. #276

  • cs-callout's variant accessibility check is one test per variant instead of all seven in one. #280

  • CI runs the component tests in Playwright's container image instead of installing browser libraries on each shard, so a slow Ubuntu mirror no longer stalls them. No package output changes. #264

  • The badge, button, callout, tag, toast item and toast tests now cover the highlight and information variants. No package output changes. #275

  • the docs and the shipped agent skills now show the highlight and information variants. The Badge, Button, Callout, Tag, Toast and Toast Item examples include both, and the Theming, Color Variants and Native Styles pages list all seven roles. #274

  • the docs home page and the shipped skill's installation reference no longer say the site is being ported. #279

  • the <cs-qr-code> image examples in the docs and agent skill pointed at logos that don't exist, so they drew no image. They now use the Cornerstone mark. #262

  • Every animation that reads --cs-show-duration or --cs-hide-duration now finishes at once when the user prefers reduced motion, including <cs-time-input>'s popup. Anchors in a <cs-page> clear a sticky banner as well as the header, and <cs-skeleton> stays visible in forced colors mode. #262

  • :::note, :::tip, :::caution and :::danger render as styled callouts on the docs site; in the shipped skill, four suggestions now read Tip instead of Info. #279

  • Calling openSubmenu() or closeSubmenu() on <cs-dropdown-item> runs the transition once, so a submenu closed that way animates instead of vanishing. #262

  • Components no longer read unprefixed custom properties a page happens to define, such as --color in <cs-color-picker> and --box-shadow in <cs-input>. A one-row <cs-textarea> is now as tall as an input, and a dropdown submenu closes over --cs-hide-duration instead of the show duration. #262

0.9.0

Added

  • cs-text-truncate-2 through cs-text-truncate-5 cut text to that many lines with an ellipsis, and cs-text-truncate-1 does the same as cs-text-truncate. #256

  • The docs site's component check now also reads the HTML examples under public/assets/examples/, so an unknown cs-* tag in a screen fails the build. Docs tooling only; nothing that ships changes. #237

Changed

  • <cs-badge> no longer announces its text as a live region, so its text now joins the accessible name of the button, link or other control it is in. Apps that need a change announced keep their own live region outside the control. The Badge and Button pages, and so the shipped cornerstone skill, say so. #223

Fixed

  • The accessibility page's Known gaps table now records that cs-callout's variant axe test is skipped under SSR. Docs only; nothing that ships changes. #234

  • The agent skill's SKILL.md now lists the themes and palettes that ship (Cru, FamilyLife and Default) and says the loaded stylesheet picks the theme, not a class. #251

  • cs-zoomable-frame's with-theme-sync docs no longer call the classes it copies theme selectors, and say the iframe must load the host page's theme stylesheet. #254

0.8.1

Added

  • Cru and FamilyLife choices in the docs site's header menu, which the palette and color token pages follow. The shipped skill's Theming and Color tokens pages change to match. #253

  • a FamilyLife theme preview on the Built-in Themes page, under Cru's. Docs site only; the package's output is unchanged. #250

0.8.0

Added

  • a FamilyLife theme, styles/themes/fl.css. Load it after cornerstone.css to switch a site to FamilyLife; Cru stays the default. #239

Fixed

  • The FamilyLife theme now asks for the Akkurat family that FamilyLife's sites load, and sets semibold and bold to 700 so buttons, actions and form labels render in Bold. The theming docs also say which cuts a site supplies. #246

  • Component tests no longer wait a fixed time for an animation or a frame. They finish the animation, or step a faked frame clock, so a busy CI runner can't fail them, and check each animation's configured length against its duration token instead of timing it. Tests only; the published package is unchanged. #235

  • The Cornerstone agents and review standards now say the loaded stylesheet picks the theme, not a cs-theme-* class. #249

  • The shipped theming, color and typography docs and the themes reference now say the loaded stylesheet picks the theme, not a cs-theme-* class, and cover FamilyLife's theme. #247

  • The design skill's theming reference no longer says a cs-theme-* or cs-palette-* class switches or scopes a theme, and it lists FamilyLife's 10 hues. #245

0.7.1

Added

  • a glossary for the documentation site's Inspiration library. Docs only; nothing that ships changes. #214

Changed

  • each release in CHANGELOG.md groups its entries under a heading per category (Added, Fixed, ...) instead of by bump level. #232

0.7.0

Added

  • restart() on <cs-animation>, which rewinds the animation to the start and plays it again, whether it has finished, is paused or is still running. #199

  • <cs-color-picker> swatches accept var(--cs-*) design tokens, with an optional fallback, resolved against the picker each time it opens. #204

  • <cs-page> documents its desktop-navigation-*, mobile-navigation-* and skip-to-content-target slots. The Page docs also cover when each navigation slot shows, presetting --header-height to stop a layout shift, and that there is no rule between regions yet. #198

  • the Button page, and so the shipped cornerstone skill, shows an icon button with a badge in the end slot, the count in the icon's label, and how to announce a count the user changed. #192

  • the installation guide, and so the shipped cornerstone skill's installation.md, shows the .claude/settings.json that installs the Cornerstone plugin for Claude Code. #172

  • a "Porting an existing app from another framework" section to the cornerstone-design agent skill, right after its design-system-first ladder. #190

  • the Details page, and so the shipped cornerstone skill, now notes that open already holds the new state inside a click handler, and shows how to track open and close with cs-show and cs-hide instead. #188

  • a Tailwind CSS guide under Frameworks, for running Cornerstone Components and Tailwind v4 on the same page, and the cornerstone skill now ships it as references/frameworks/tailwind.md. #196

  • the Reducing FOUCE page now warns that cs-cloak on <html> or <body> re-hides the page whenever an undefined custom element appears later, and the Rails page points to it. The cornerstone skill's copies of both pages change too. #187

  • the Page docs now list the layout <cs-page> gives each slot wrapper. They and the cornerstone-design skill's page-layout reference show a rail beside a sidebar in slot="navigation" built from layout utilities. #195

  • the Rails guide and the cornerstone skill's references/frameworks/rails.md now warn that a Stimulus action on a cs-* element must name its event (click->modal#open, not modal#open), with a before/after example. #186

  • code review standards in docs/standards/, and ast-grep rules in the component library's npm run lint. Tooling only; nothing that ships changes. #205

Removed

  • leftover upstream "moved over from Pro" callouts on the Page, Toast and Toast Item pages, and the Pro tier line in the Accordion example. #171

Fixed

  • the button page's Customizing example now builds its pink shadow from the shadow geometry longhands. It appended a colour to --cs-shadow-m, which already ends in one, so the declaration held two colours, was invalid, and the shadow never rendered. #169

  • the <cs-color-picker> label docs no longer say the label is hidden; it is displayed. #204

  • generated brand themes now define --cs-color-shadow, so --cs-shadow-s/-m/-l resolve again. Dialogs, drawers, dropdowns, popovers, selects, cards and toasts had been rendering with no shadow under the Cru theme. #167

  • the cornerstone-design agent skill's links to the documentation site. Fourteen of them pointed under a /docs/ path the site does not have, so each one was a 404. verify:skills now checks absolute docs links as well as relative ones. #185

  • cs-details and the native <details> styles now make the summary border-box, so an icon-only cs-button inside it stays square. #202

  • the divider page and the --spacing description now say that as a direct child of a layout utility such as cs-stack or cs-cluster, --spacing has no effect and the container's cs-gap-* sets the space around the divider. The page's vertical divider example no longer draws its lines with no space around them. #194

  • the documentation site now builds inside a checkout nested in another one, such as a worktree under .claude/worktrees/, and no longer drops ratios like "3:1" from its pages. Docs site only; the package's output is unchanged. #201

  • the agent and design skill maintainer READMEs now say the skills are generated by npm run build, not an Eleventy build, and the root CLAUDE.md and the docs standard no longer say check-docs-url.js catches every literal address. #191

  • check-docs-url.js --fix now re-points today's docs address after a move, and a second run no longer doubles the path. KNOWN_ROOTS lists the current homepage, and the check fails when it is missing. #189

  • <cs-drawer>'s summary and docs now say it slides in from an edge of the viewport, not of a container. #193

  • packages/components/CLAUDE.md names event classes Cs<Name>Event, as the code does, and says to add a changeset instead of editing the changelog page. Contributor guidance only; nothing that ships changes. #222

  • <cs-page> now puts back its measured slot heights, such as --header-height, when a DOM morph (Turbo 8, idiomorph, Alpine) resets its style attribute. #200

  • the cornerstone skill's list of valid <cs-page> slots now includes every slot the page renders, read from the manifest. #198

  • <cs-select>, <cs-tooltip> and <cs-popover> no longer hide their content when reopened during the close animation, and no longer emit cs-after-show when closed during the open animation. Cancelling cs-hide on <cs-select> now keeps it open. #197

0.6.2

Fixed

  • the Support page's "Open an issue" button now links to the template chooser at /issues/new/choose rather than the bare /issues/new. #165

0.6.1

Added

  • A public roadmap at /resources/roadmap, generated from the repository's GitHub milestones. #162

    • One card per planned release, with curated copy and a count of open questions — no percentage, since a release with nothing open has not been scoped rather than finished
    • Only issues carrying the roadmap label render a title; the tracker's decisions stay off the page
    • the Support page claimed the packages are published privately. Both are public on npm; the support model is what is internal

Changed

  • both packages now share a single version number. @cruglobal/cornerstone-components moves from 0.1.3 to align with the design-system package — 0.2 through 0.5 never existed, so no published version is affected. #163

0.1.3

Added

  • A "Why Web Components?" section on the Frameworks page. #137

    • A table of the six platforms Cru builds on, and how far Cornerstone reaches each
    • The three layers: tokens reach everything, components are the web layer, platform-native implementations are a possible third
    • The trade-offs accepted, and the principles the library was specified against
    • Rails and WordPress badges corrected from "Tested" to "Testing"

Fixed

  • Every component's @since now reads 0.1, the version it actually shipped in. #130

    The tag carried Web Awesome's numbers — 1.0 through 3.11 across the 70 components — which reached the Custom Elements Manifest, and from there the Since badge on every reference page.

  • The changelog page lists released versions instead of one ## Unreleased block. #138

    • 0.1.1 and 0.1.2 are generated from CHANGELOG.md; 0.1.0 stays hand-written as the fork
    • Each entry's category renders as its bullet icon, with a legend
    • Issue and pull request references render as badges
    • Duplicate category blocks merged, and version anchors fixed to #v0-1-2

0.1.2

Changed

  • Tooling only — nothing that ships changes. The component test suite is sharded across four CI runners and Playwright's browsers are cached, cutting the gate from ~29 minutes to ~10. #114

Fixed

  • Stop waitForEvent waiting forever. It now takes a timeout, defaulting to five seconds, and resolves on it rather than rejecting — reaching 14 call sites across eight components. #113

0.1.1

Added

  • Publish the component library to npm as @cruglobal/cornerstone-components — public, with provenance — and document how to install it. prepublishOnly is npm run build rather than npm run verify, because the release runner installs no browsers. #110

Fixed

  • Delete the root .npmrc, whose provenance=true made every first publish in this workspace impossible. #112

0.1.0

Breaking

  • The default icon library is now Material Symbols, not Font Awesome. Every icon name changes, and Material Symbols names are snake_case: xmark is close, chevron-down is keyboard_arrow_down, gear is settings, ellipsis is more_horiz. A name that does not exist renders nothing rather than a fallback glyph, so audit names rather than assuming they carried over
    • family now selects the style — sharp (the default), outlined or rounded — in place of Font Awesome’s classic/brands/duotone/sharp-duotone
    • variant now selects the cut — regular (the default) or fill — in place of thin/light/regular/solid. The stroke weight moved to the new weight property
    • Brand logos moved from family="brands" to library="brands"
  • Font Awesome kit codes are gone. setKitCode(), getKitCode() and the data-fa-kit-code attribute are removed, along with the Pro and Pro+ icon families they unlocked. Material Symbols has no paid tier
  • Duotone support is gone. <cs-icon>’s swap-opacity attribute and its --primary-color, --primary-opacity, --secondary-color and --secondary-opacity custom properties are removed. Material Symbols draws a single path, so there is no second layer to colour
  • getIconFolder() is replaced by getIconStyle(), getIconWeight() and getIconFileName(), which map a family to its style folder, snap a weight to a published one, and apply the -fill suffix. Custom resolvers now also receive the weight as a fifth argument
  • setIconPath() expects a different layout. Self-hosted icons are now read from {path}/{weight}/{style}/{name}.svg, mirroring the @material-symbols/svg-{weight} packages, rather than Font Awesome’s {path}/{folder}/{name}.svg
  • Import specifiers no longer contain dist. @cruglobal/cornerstone-components/dist/components/button/button.js is now @cruglobal/cornerstone-components/components/button/button.js. dist is a build directory, not public API
  • The two builds moved and were renamed for what they are. dist/ is now dist/unbundled/ and dist-cdn/ is now dist/bundled/; dist is only a container. A CDN is one way to fetch the bundled build, not a property of it
  • The version resets to 0.1.0. 3.11.0 was Web Awesome’s number, inherited rather than chosen. 0.x states plainly that the cross-cutting API policies still to land can change anything
  • Node 22 or newer is now required, up from >=14.17.0. Node 14, 18 and 20 have all reached end of life
  • The long-form size values are gone. size="small", "medium" and "large" no longer work — use s, m and l. Upstream had already deprecated them with a runtime warning for Shoelace and Web Awesome 2.x users; this package has never been published, so there was nobody left to migrate. The size axis is now closed to xs s m l xl on all 21 components that expose it
  • <cs-dropdown-item> spells its neutral variant neutral. variant="default" is now variant="neutral", matching the five other components with a variant
  • <cs-accordion>’s four events are renamed to cs-accordion-expand, cs-accordion-after-expand, cs-accordion-collapse and cs-accordion-after-collapse. They previously shared cs-collapse and cs-expand with <cs-tree-item> under incompatible contracts — cancelable and carrying detail: { item } on the accordion, neither on the tree item — and only the tree item’s shape was registered, so event.detail.item was typed as non-existent
  • <cs-pagination>’s events follow the after convention used by every other paired event in the library. The cancelable veto is now cs-page-change (was cs-before-page-change) and the completion event is cs-after-page-change (was cs-page-change)

Added

  • Added --icon-scale to <cs-icon>, which scales the artwork inside the canvas without moving the canvas. It defaults to 1.2 — Material Symbols pads each icon into a 24dp box with a 20dp live area, and 24 ÷ 20 cancels that, so icons keep the optical size Font Awesome’s ink-cropped artwork had. It inherits, so an ancestor can retune every icon beneath it; set it to 1 for the native size
  • Added a brands icon library for the logos Material Symbols does not draw — github, discord, bluesky, mastodon, threads, x-twitter, angular, react, svelte, vuejs and font-awesome. The SVGs come from Simple Icons (CC0-1.0) and are inlined, so they resolve with no network request
  • Added a weight property to <cs-icon>, exposing Material Symbols’ 100–700 stroke-weight axis. It defaults to 400, the weight Cru’s brand guidelines specify; values in between snap to the nearest published weight. The inlined system library is baked at the same weight so component chrome matches
  • Added sideEffects: true to package.json, recording that component registration, translations and stylesheets are all side-effectful and must never be tree-shaken
  • Added a bundled/ export subpath, so the bundled build is reachable rather than shipped-but-unimportable
  • Added LICENSE.md and NOTICE to the published package
  • Published to npm as @cruglobal/cornerstone-components — public, with build provenance, released by changesets alongside @cruglobal/cornerstone-design-system

Changed

  • author is now Cru Global, naming the organisation rather than one of its peer brands
  • <cs-slider> now replaces a non-numeric value with the midpoint of min and max, matching <input type="range">; it previously became NaN
  • prepublishOnly now runs npm run build rather than npm run verify. The release runner installs no browsers, so the three-engine Playwright run that ends verify would have failed every publish — and CI has already run that gate on the commit being released
  • cs-intersect now bubbles. It was bubbles: false with composed: true, which cannot do anything — composed only matters for an event that propagates
  • Cornerstone Components now states a conformance target of WCAG 2.2 Level AA, with the floor it meets, how each claim is verified, and a table of seven named gaps. The accessibility page previously named no standard at all
  • Every component with an interactive surface now runs axe in its test suite, across all three engines and both render modes — 59 of 70 components, up from 46. The 11 exempt are utilities that render nothing interactive
  • WebKit now runs in CI. It was excluded whenever CI === 'true', so CI reported green on a suite that was red locally
  • Improved accessibility of <cs-dropdown> by adding aria-posinset and aria-setsize so supportive screen readers can correctly announce the number of dropdown items

Removed

  • Removed 17 event classes that no component dispatched — every one an orphan of a Pro component, left registered in GlobalEventHandlersEventMap and exported as public API. <cs-data-grid>’s thirteen (cs-cell-click, cs-cell-contextmenu, cs-column-move, cs-column-pin, cs-column-resize, cs-column-visibility-change, cs-data-error, cs-data-request, cs-filter-change, cs-row-collapse, cs-row-expand, cs-row-select, cs-sort-change), plus cs-focus-day and cs-view-change, cs-video-change, and cs-create
    • The real event surface is 41 classes, not 58
  • Removed the Pro tier throughout: the free/pro split in the skill verifier and agent-file generator, the Pro components, themes and palettes named in the shipped skills, and the purchase and support links to channels Cru does not run
    • The skills had claimed <cs-toast> and <cs-toast-item> were Pro-only, telling agents not to use two components this library ships
  • Removed dead scripts and files: VERSIONS.txt, scripts/update-root-version.js, vercel.sh, the publish-alpha-cdn and start:alpha scripts, and the unused __WEBAWESOME_VERSION__ build token
  • Removed the Fonticons, Inc. copyright banner from every built file, replacing it with a Cornerstone notice pointing at LICENSE.md and NOTICE
  • Removed the deprecated base CSS part and the label alias, finishing the migration to component-named parts
    • base is gone from the 29 components that still rendered it — style the part named after the component instead (button, details, input-wrapper)
    • <cs-button-group> and <cs-tab-panel> carried base on a <slot>, which parts don’t belong on, and now expose none — style the host element
    • Renamed the 15 forwarded names that embedded it: close-button__base → close-button__button, base__popup → tooltip__popup, and so on
    • Dropped three forwards pointing at parts their child never exposed: <cs-select>’s tag__base, and <cs-page>’s drawer__overlay and drawer__panel
    • The label alias is gone from the six form controls that also exposed form-control-label

Fixed

  • Fixed <cs-dialog> and <cs-drawer> nudging their siblings when opened. The host stayed in normal flow while open, so wherever it sat in a flex or grid container it counted as an item and contributed a gap — in the docs’ header that shifted the search button 12px to the left for as long as the dialog was open. The host is now out of flow, which it can be because the visible panel is a native <dialog> in the top layer. It keeps a full-viewport width rather than collapsing, since RenderedWatcher and the panel’s own max-width both resolve against that box
  • Fixed a long navigation losing its bottom padding in <cs-page>. [part~='navigation'] was height: 100%, which pinned it to the scroll container’s visible height, so a navigation taller than the viewport overflowed that box rather than growing it — and padding on a box that does not grow renders at the box edge, mid-scroll. The top padding showed and the bottom one did not, leaving the last link flush against the bottom of the scroller. It is now min-height: 100%, so a short navigation still fills the column and a long one grows
  • Fixed slotted-content spacing collapsing under a page’s universal margin reset. A slotted element belongs to the outer tree, so a normal document declaration beats the component’s own ::slotted() rule whatever the specificity — any * { margin: 0 }, such as Starlight’s or Tailwind’s Preflight, silently removed the gap. 22 declarations across <cs-badge>, <cs-breadcrumb-item>, <cs-button>, <cs-dialog>, <cs-drawer>, <cs-input>, <cs-option>, <cs-select>, <cs-tab>, <cs-tab-group> and <cs-tree-item> now defend themselves the way <cs-callout> already did
  • Fixed jsdelivr pointing at the unbundled build, which cannot load in a browser because its dependencies stay as bare specifiers
  • Fixed npm run create, whose template imported a base class module that does not exist — every scaffolded component was broken
  • Fixed verify:skills, which had been failing since the monorepo was collapsed
  • Fixed .prettierignore, whose every pattern was packages/**/*/… and so matched nothing — dist, _site and the tsconfigs were silently unignored, and 60 source files had gone unformatted since the rename
  • Removed duplicate marked and @lit/react entries from devDependencies, where marked also disagreed with the dependencies range
  • Fixed five custom properties that named tokens no theme defines, so every style depending on them silently did nothing
    • <cs-input>, <cs-known-date> and native file inputs, textareas and selects now size their value text with the control rather than at the browser’s default
    • <cs-page>’s skip link is rounded again
    • <cs-dialog> and <cs-drawer> space their footer buttons again
  • Fixed a <cs-dropdown> submenu closing while the pointer was still inside it. The 100 ms grace period that lets the pointer travel diagonally from the parent item into the submenu re-checked hover state from values captured before the delay, and entering that branch already proved both were false — so the re-check always passed and the submenu closed regardless. Hover is now read inside the timeout
  • Fixed the icon-button accessibility warning never firing. <cs-button> asked whether the slotted <cs-icon>’s label was undefined, but label defaults to '' and so never is; it now asks for a non-empty string, so an icon-only button with no accessible name warns as intended
    • The three the warning found are fixed: the page-layout example in the design skill, and the search and theme-picker buttons in the documentation site’s header, which carried an aria-label on <cs-button> that never reached the inner <button> and so left both with no accessible name
  • Fixed <cs-toast> hanging off the side of narrow viewports at top-center and bottom-center placements. The host was a fixed 28rem with no max-width, and centered placements offset it by half its own width, so on a 390px viewport 29px of the stack sat off-screen
  • Fixed <cs-carousel>’s loop test, <cs-toast>’s stack-visibility test and <cs-copy-button>’s hover test, which were the inherited failures that turned out to be a coalesced scrollend, a race against teardown, and a too-short wait budget respectively
  • Fixed native table row headers (<th scope="row">) rendering at a smaller font size than the cells beside them, which knocked their text out of vertical alignment. The smaller type is now scoped to column headers
  • Fixed the focus ring on <cs-otp-input> animating its width and offset, which re-ran the animation on every keystroke as the active segment advanced. It now fades in at a fixed size, matching <cs-input> and the other form controls