Releases
v2.12.0
Compare
Sorry, something went wrong.
No results found
2.12.0 (2026-08-21)
Features
Bug Fixes
Calendar: correct the size scale (#394 ) (7ca3e74 )
CommandPalette: cut search highlights on grapheme clusters, not code points (#371 ) (54b93e3 )
CommandPalette: keep astral characters intact when truncating search results (#365 ) (01252a6 ), closes #339
CommandPalette: weigh the grapheme-snap ceiling against the value (#388 ) (c909bc7 )
components: resolve theme props consistently in form controls (#397 ) (6b7920f )
ContentSearch: stop sanitizeSnippet rebuilding tags from its input (#405 ) (fe4a466 )
ContentSearch: stop escaping content that its sink escapes anyway (#414 ) (9096fda )
docs: move the AI providers onto the provider spec ai@7 expects (#438 ) (e3f48be )
Editor: ignore updates without document changes (#355 ) (e198cf7 )
icons: make the dictionary's promises true, and enforce both of them (#382 ) (924c3a8 )
icons: route components through the dictionary (#399 ) (4295af8 ), closes #380
locale: use the endonym for Hindi and close the Chinese bracket (#367 ) (b084ccb )
Modal: return focus to the trigger after closing (#458 ) (3caa3c0 ), closes #159
Range: bind form aria attributes on thumbs instead of root (#431 ) (6ac1671 )
theme: blank top-level base in applyUnstyled (#368 ) (c64c2b0 )
theme: keep variants when replacing slot classes in app config (#407 ) (65ff532 )
Theme: merge class from props with the component class (#403 ) (612b898 )
theme: replace deprecated bare tailwind aliases (#455 ) (3b1b017 )
theme: respect reduced motion on movement transitions (#384 ) (c10cfb3 )
utils: stop dotted-path walkers writing through the prototype chain (#424 ) (901bc8a )
Docs
ComponentCode: fix number input after clearing (#370 ) (0bf9ec4 )
contributing: add Telegram release post guidelines (#460 ) (c7dbeb1 )
correct commands, install tab, branding and component count (#426 ) (de72464 ), closes #94
FormField: document the label slot (#461 ) (32b76b1 ), closes #48
mcp: add x-mcp-tools header to specify available tools (#373 ) (28e4250 )
mcp: rank component search by intent and compact the metadata (#389 ) (e66d494 )
mcp: resolve examples by their prerendered name (#393 ) (1f4399f )
playgrounds: position markup with logical properties (#416 ) (0ea7203 )
release: document the CI approval and the revert: subject (#440 ) (4211cab )
rtl: align table examples to the end, mirror the trailing slot (#413 ) (8d794ca )
rtl: position examples with logical properties (#401 ) (47f8c9a ), closes #400
showcase: widen the screenshotOptions schema (#432 ) (807d52e )
skills: position recipe markup with logical properties (#415 ) (cc58a1e )
sync: check dependency parity with upstream, not just the queue (#429 ) (848bc19 )
sync: correct four false claims about search.ts and its coverage (#409 ) (fe077e9 )
sync: correct three claims left stale by closing #380 (#402 ) (bf3444d )
sync: record that upstream's Slider is this fork's Range (#423 ) (844830f )
sync: record the b24ui-only useTokenSearch divergence as a porting invariant (#366 ) (7ce6238 )
sync: register new components in every docs and playground registry (#447 ) (a9d1b95 )
table: pin TanStack Table links to v8 (#445 ) (fc562bc )
tabs: improve content section (#383 ) (1c1a61a )
use logical properties so the tree indent and timeline flip under RTL (#386 ) (171dc14 )
Tests
CommandPalette: cover the b24ui-only useTokenSearch argument (#369 ) (531921a )
CommandPalette: cover the gaps an independent review pass found (#390 ) (18dc2ff )
CommandPalette: drive real fuse.js at the mark-insertion boundary (#385 ) (fc89b5f )
CommandPalette: pin the CRLF conjunction and the malformed-region guard (#412 ) (73b9044 )
locale: guard message keys, placeholders and codes across locales (#372 ) (f958a55 )
pin the suite timezone to UTC (#418 ) (24f17f9 ), closes #84
Table: give the date column something to assert (#448 ) (8163f55 )
Table: make the status column's colour branches reachable (#452 ) (2c8661b )
Chore
deps: align dependencies with upstream, including two majors (#425 ) (e5c7e65 )
deps: declare TypeScript instead of deriving it (#453 ) (5b7ae68 )
deps: narrow tailwind source scope in docs and playgrounds (#417 ) (72a5957 )
deps: update @nuxtjs/mdc to ^0.23.1 (#360 ) (27b4db3 )
deps: update all non-major dependencies (#357 ) (575e44b )
deps: update dependency reka-ui to v2.10.3 (#428 ) (c602ea0 )
deps: update nuxt framework to ^4.5.2 (#359 ) (770b965 )
deps: update tiptap to ^3.29.2 (#358 ) (b5355a5 )
remove dead code (#395 ) (c4d291c )
sync: derive icon-map.json from the shared icon keys, and guard it (#378 ) (af5dd57 )
sync: make the manual sync the only sync (#377 ) (c1cfa78 )
sync: reconcile 0fabbe5 and repair the cursor (#408 ) (a56a173 )
sync: reconcile 3dbca02 with its merged PR (#374 ) (e7f1774 )
sync: reconcile 7c74269 with its merged PR (#398 ) (b58b080 )
sync: reconcile the 14ac2438 entry with #443 (#444 ) (53613e9 )
sync: reconcile the 545f9e37 and be58f3f5 entries with #445 (#446 ) (fa9cca4 )
sync: reconcile the a4fe7d86 and 08e75317 entries with #419 (#422 ) (0fbc91c )
sync: reconcile the cf5f15e3 and f6d188bd entries with #432 (#433 ) (28677ed )
sync: reconcile the e2a253ec, d4f2ca02 and a7f26a32 entries with #455 (#456 ) (593911f )
sync: record CLAUDE.md and the bench scaling as skipped (#439 ) (167cd6f )
sync: record the two calendar-template commits as not applicable (#404 ) (9ea693d )
sync: record the volta.net and triadtrainer showcase entries as no-ops (#442 ) (b6252d8 )
sync: record three upstream commits that do not apply (#361 ) (c31d250 )
theme: sort the prose code icon map into upstream's order (#419 ) (ef8ba7b )
CI
release: restore the revert and feature changelog sections (#435 ) (cbd7c00 )
You can’t perform that action at this time.