9.18.0
- Fix PerfCounter min/max initialization - [Bug Fix] by deltakosh (#18721)
- Fix GS Texture leak with resize - [Bug Fix] by CedricGuillemet (#18720)
- Check XRGPUBinding before native fallback - by matthargett (#18711)
plugin-legacy@8.2.2
Please refer to CHANGELOG.md for details.
v0.1.8
- Avatar and AvatarGroup adopt Icon's abbreviated size scale —
sizenow takesxsm/sm/md/lg/xlinstead oftiny/xsmall/small/medium/large. Pixel values are unchanged (20/24/36/48/128px) and the default is nowmd(still 36px, formerlysmall). Avatar's tiers stay larger than Icon's because avatars align with media rather than glyphs. Runastryx upgradeto migrate call sites. (#2672)
- Collapsible: the content area now anchors body typography (font family, size, weight, line-height) instead of inheriting from its surroundings, and exposes a stable
astryx-collapsible-contenttheme target so revealed text can be themed externally. - Collapsible: add an
isDisabledprop to disable a single item. A disabled item's trigger can't be toggled and is dimmed; following the system-wide disabled convention it usesaria-disabled(not the nativedisabledattribute) and drops out of the tab order, staying perceivable to assistive tech. Disabling doesn't collapse an already-open item. Works standalone and inside CollapsibleGroup. @astryxdesign/core'sdocs.mjsnow redirects to the CLI so agents converge on a single documentation entry point (astryx docs/astryx init) instead of a large standalone script. (#4207)- DropdownMenu selectable items: add
DropdownMenuCheckboxItem(independent toggle,role="menuitemcheckbox") andDropdownMenuRadioGroup+DropdownMenuRadioItem(single-select,role="menuitemradio"). The control size derives from the menu's item size and swaps to the row's inline-end on touch. They also work insideContextMenu(re-exported asContextMenuCheckboxItem/ContextMenuRadioGroup/ContextMenuRadioItem). Both menus' keyboard/typeahead/activation now recognize the selectable roles, and the menu context (DropdownMenuContext,useDropdownMenuContext,DropdownMenuSize) is exported for building custom menu items. See #3829. - Icon: add an optional
labelprop for the accessible name. Setting it makes a standalone icon meaningful (role="img"+aria-label, noaria-hidden), collapsing the old three-attribute dance into one prop; omitting it (or passing'') keeps the decorative default (aria-hidden). - "Foolproof init": both
@astryxdesign/coreand@astryxdesign/clinow print a postinstall nudge pointing you tonpx @astryxdesign/cli init,astryxcommands nudge you to finish setup until init has run, andastryx initruns non-interactively (no TTY required) so it works in CI and agent environments. (#4147, #4153, #4154, #4155) - Outline: keyboard navigation, navigate callbacks, and scroll-scoping props (#2527) Layers the public API deferred out of #2746 onto the scroll-spy engine and click-lock that already shipped. No visual change.
- Table: add a tree-data plugin —
useTableTreeStateanduseTableTreeData— for rendering and managing hierarchical (parent/child) rows, expansion state, and flattening. Exported from@astryxdesign/core/Table. (#3789)
AvatarGroupOverflownow grows into a pill for long+Ncounts so the number never clips. The indicator was a fixed-size circle, so wide counts (e.g.+4912) overflowed and crowded the edges. It now uses a minimum width equal to the avatar size plus horizontal padding: short counts (+5) stay a perfect circle, while longer counts grow horizontally into a stadium/pill and remain legible. No new public props.- Carousel now scrolls horizontally when you hold Shift and scroll the mouse wheel. Trackpad users already got horizontal scroll for free; this brings standard mouse (vertical-only wheel) users to parity using the established Shift + wheel convention. Native trackpad horizontal scrolling and the prev/next buttons are unchanged.
- Citation: a non-interactive citation (no
source.url) now keeps the default cursor instead of showing a pointer, so only linked citations look clickable. The pointer cursor is applied alongside the existing hover treatment for both thelabelandnumbervariants (#4134). - Stop suggesting bare
npx astryxbefore the CLI is installed — it resolves to an unrelated package on the npm registry. The CLI now emits an install-aware invocation everywhere it prints a command: - Icon: size variants (
xsm/sm/md/lg) now usereminstead of hardcodedpx, so icons scale in step with text when the document/rootfont-sizechanges — matching the rest of the design system's rem-based type scale. Fixes #4092. - Guard useTableRowExpansionState tree walks against cyclic data (#3971) The
depthMap, flatteneddata, andallExpandableKeyswalks now track the ancestor keys on the current path and skip edges that point back at an ancestor, so self-referential or cyclic row data terminates instead of overflowing the stack. - Route the Table sortable plugin's header-button aria-labels ("Sort by …", "… sorted …", "… priority … of …") through
useTranslator()with new@astryx.table.sort.sortBy/sortedBy/sortedByWithPriority/direction.*catalog keys, so they localize like the sort menu labels already do (#3618, tracker #3636). The direction word resolves through its own key rather than interpolating the raw enum value. English output is unchanged. - Table: the tree row expander's
aria-labelis now localized throughuseTranslator()instead of a hardcoded English string, so expand/collapse controls announce in the app's language. (#4149) - TabList
hasDividerreserves a gap so the hover pill and adjacent buttons no longer touch the underline A divided TabList now reserves 4px between the tabs and the divider rail. The hover highlight sits clear of the underline, and a same-size Button placed alongside the tabs aligns to the tab baseline instead of butting the rail — so amdtab strip pairs with amdbutton. The selected indicator still rests on the rail. Non-divided tab lists are unchanged. TabList inside aToolbarwithdividers={['bottom']}gets the same alignment via the toolbar's own spacing. - TreeList: focusing a parent row no longer leaks the focus-visible outline onto its descendant rows — each row's ring now resolves from its own nearest treeitem instead of matching any focused ancestor (#4130)
- DropdownMenu and DropdownMenuItem: seed playground defaults so the docsite properties-tab preview renders real content instead of an empty trigger.
- Installed / global / dev runs suggest
<pm> astryx <cmd>(e.g.pnpm exec astryx …), unchanged. - One-off runs (launched via
npx/pnpm dlx/yarn dlx/bunx) suggest the scoped package<dlx> @astryxdesign/cli <cmd>, which always resolves to us. - Improved translator context in the shipped English catalog (
packages/core/locales/en.json) descriptions. Sharpened ~172 entries — added screen-reader-only clarifications, ICU-composition examples, polysemy warnings, and set-pairing notes — so translators working in Crowdin get better context. No changes todefaultMessagevalues, keys, or runtime API. - Keyboard navigation — the outline is now a single tab stop (roving tabindex via
useListFocus), seated on the active heading per WAI-ARIA, so tabbing into a table of contents while reading section 7 lands on section 7 rather than sending the reader back to section 1. Arrow keys move between headings, Home/End jump to the ends, and Enter/Space activate. A 40-heading table of contents costs one Tab press instead of 40, and Tab still leaves the outline in one press. onNavigateStart(id)/onNavigateEnd(id)— fire around the smooth scroll started by a click or keyboard activation, so an app can drive an arrival effect.onNavigateEndresolves onscrollendwhere supported and on a settle timeout where it is not (Safari), so it also fires correctly when reduced motion collapses the scroll into an instant jump. It fires exactly once for everyonNavigateStart— including when the user interrupts the scroll — so a "navigating" state can never leak.offset— the height of a fixed header overlaying the top of the scroll root. It shifts both the activation line and the scroll landing by the same amount, so a heading activates exactly where navigating to it puts it: below the header, not hidden underneath it. It composes with each heading's ownscroll-margin-top(the header, then the breathing room below it) rather than replacing it — leaveoffsetat 0 when nothing overlays the content and letscroll-margin-topdo the work, since the browser already honors it.scrollContainerRef— scope scroll tracking to a specific container instead of auto-detecting the nearest scrollable ancestor. Fixes the table of contents whose highlight never moves inside a split pane, modal, or dashboard panel. The default (viewport) path is unchanged.hasScrollOnClick(defaulttrue) — set tofalseto own the scrolling yourself; the outline still updates the active item, the hash, and the navigate callbacks.
- Avatar and AvatarGroup adopt Icon's abbreviated size scale —
sizenow takesxsm/sm/md/lg/xlinstead oftiny/xsmall/small/medium/large. Pixel values are unchanged (20/24/36/48/128px) and the default is nowmd(still 36px, formerlysmall). Avatar's tiers stay larger than Icon's because avatars align with media rather than glyphs. Runastryx upgradeto migrate call sites. (#2672)
astryx init --features agentsnow defaults to creating rootAGENTS.md— the tool-agnostic standard that Codex/Copilot, Cursor, and most agents read — instead of the Claude-specific.claude/CLAUDE.md. Claude output is now opt-in via--agent claude(→.claude/CLAUDE.md), and--agent allstill writes both. Projects with existing agent-doc files are unaffected: init still discovers and updates every file already present, so this only changes the from-scratch default. (#4216)- "Foolproof init": both
@astryxdesign/coreand@astryxdesign/clinow print a postinstall nudge pointing you tonpx @astryxdesign/cli init,astryxcommands nudge you to finish setup until init has run, andastryx initruns non-interactively (no TTY required) so it works in CI and agent environments. (#4147, #4153, #4154, #4155)
- Stop suggesting bare
npx astryxbefore the CLI is installed — it resolves to an unrelated package on the npm registry. The CLI now emits an install-aware invocation everywhere it prints a command: - Extend the v0.1.0 upgrade codemods to cover test files that mock
@xds/coremodules, which were previously left half-migrated and broke after upgrade: astryx upgradenow keeps the managed agent-docs block (<!-- ASTRYX:START --> … <!-- ASTRYX:END -->) in sync with the installed version on every path — including the up-to-date and no-codemods short-circuits that previously returned before any refresh, leaving AI agents reading a stale component index and superseded rules. The block documents the installed library, so it's now refreshed up front (independent of codemods) and reported in the--jsonreceipt asagentDocs. One detection pass covers three cases: a stale block is rewritten (--apply) or reported as a pending change (dry-run, which no longer writes); a project with core installed but no managed block is nudged to runastryx init --features agents; an already-current block stays silent. (#4168, #4169)
- Add a
cli-integrationsCLI docs topic (astryx docs cli-integrations) so the integration-authoring guide (originally written by @ejhammond) is discoverable through the CLI and docsite instead of an unreferenced markdown file. Rewrite the CLI README's Configuration section to match the current strict config schema (integrations,issuesUrl,hooks.postCodemod,experimental.xle) and reframe the Integrations section around the two-file API.
- Installed / global / dev runs suggest
<pm> astryx <cmd>(e.g.pnpm exec astryx …), unchanged. - One-off runs (launched via
npx/pnpm dlx/yarn dlx/bunx) suggest the scoped package<dlx> @astryxdesign/cli <cmd>, which always resolves to us. - migrate-xds-module-specifiers: rewrite the mocked-module path in
vi.mock/vi.doMock/jest.mock/jest.doMock(and baremock) calls, plusimport(...)specifiers used in TS type positions (typeof import('@xds/core/Text')), so the mock still intercepts the renamed@astryxdesign/*import. - drop-xds-prefix-imports: un-prefix partial-mock override keys inside an
@xds/coremock factory (e.g.useXDSTruncation→useTruncation) so the override matches the renamed export instead of silently overriding nothing. Scoped to recognized@xds/coremock factories only; unrelated object keys are untouched.
Thanks to everyone who contributed to this release:
- @AKnassa
- @MeGaurav4
- @cixzhang
- @ejhammond
- @ernestt
- @is-jain
- @joeyfarina
- @josephfarina
- @nynexman4464
Full Changelog: https://github.com/facebook/astryx/compare/v0.1.7...v0.1.8
v16.3.0-canary.94
- [Cache Components] Exclude dynamic params from prerenders when no generateStaticParams values is provided: #95872
- Gate
partialFallbackbehavior behindpartialPrefetchingflag: #96074 - [turbopack] Fix deployment skew protection for component chunks: #96079
- Turbopack: stop copying sourcesContent into every serialized source map: #95934
- Upgrade React from
81e442ea-20260721to711c445b-20260722: #96066 - fix: cache miss in App Shell for cached pages with gSP: #95665
- skill(cc-adoption): add dev-only validation sweep reference: #96057
- Refine Cache Components and Partial Prefetching adoption skills: #95817
- [test] Move the dev-only
use cachetest suite totest/development: #96023 - Fix stale dev
'use cache'for cookieless requests and route handlers: #96022 - [test] Add failing tests for stale route handler and page cached data: #96021
- Add a dedicated HMR message for static params changes: #96020
- Emit the static paths HMR update after updating the cache: #96019
- [test] Add source-mapping coverage of React's fake stack frame scripts in
use cache: #95945 - Fix basePath fallback parameter parsing: #95966
- Restore canary version 16.3.0-canary.93 after v16.3.0-preview.8 preview release
- Always consult
npm_config_user_agentfirst: #95879 - Rewrite next-cache-components-optimizer around a test-driven instant() loop: #94721
Huge thanks to @gnoff, @acdlite, @sampoder, @gaearon, @vercel-release-bot, @lubieowoce, @aurorascharff, @unstubbable, @timneutkens, @eps1lon, and @gaojude for helping!
v7.0.4
- fix(dockview-vue): fix TypeDoc TS2345 failure in registry.mount call by @mathuo in https://github.com/mathuo/dockview/pull/1507
- fix(dockview-vue): forward fallthrough attributes to the root container (#1510) by @mathuo in https://github.com/mathuo/dockview/pull/1511
Full Changelog: https://github.com/mathuo/dockview/compare/v7.0.3...v7.0.4
2.1.0
See the Changelog:
2.1.0 (2026-07-22)
- Fingering: Correct fingering order for multi-voice: Stack Above/Below fingerings in the pitch order of their notes (PR #1685, #1587) (261c3fe)
- Incremental Rendering: Don't jump to top on mobile when scroll-loading more (#1690, #1554) (a98725a)
- Layout: Fix misaligned voices with dotted durations. Align voices when a note's type and dots disagree with its duration (PR #1697) (86b39fc)
- Repetitions: Don't misread texts mentioning D.S. etc. as repetition instructions, e.g. "voice tacet on D.S." (#1687). Only detect an instruction if the whole text is the instruction (4fc125e)
- Repetitions: Fix repetition instructions overlapping chord symbols (harmony) (PR #1699, #1689, #1688) (5348e54)
- Ties: Fix ties being ignored when the notes only differ by enharmonic spelling, e.g. Gb to F# (#1694) (PR #1695). Match tied notes by sounding pitch instead of letter name (0387b6c)
- Octave Shifts: Don't crash on unterminated octave-shift (PR #1696, #1376, #1439) (9c84335)
- Demo: Screen Reader compatible buttons: All buttons are named, switch
to , add name via aria-label for non-conventional buttons (no visual change) (b0d4d22)
- Slurs: Prevent bloated slurs (unnecessarily high arcs): Flatten Slurs against obstacles and over long distances (PR #1693, #1466, #971) (0837928)
v3.12.11
- VCalendar: prevent next day hours when customizing intervals (938c824)
- VCalendar: add missing interval props (#23000) (f29273c), closes #22718
- VImg: handle image ref deferred by Nuxt page transition (1d1ad89), closes #23011
- VOverlay: unnecessary target attribute for CSS transitions (#22190) (eb101e8)
- VSelect: release focus on first click outside (ae77b94), closes #22828
- VSelect: only focus first item when menu is opened with keyboard (23d4649), closes #22283
- VVirtualScroll: trim leading items when appending to bottom (458317f), closes #20959
- VVirtualScroll: recalculate visible items on item resize (#22938) (fede124), closes #22937