Skip to content

v0.6.1

Latest

Choose a tag to compare

@cixzhang cixzhang released this 13 Sep 17:52
· 7 commits to main since this release
82c3188

Astryx 0.6.1 — all @astryxdesign/* packages ship at this version.

npx astryx upgrade --apply

@astryxdesign/core

New Features

  • Remove the prefix requirement from theme-local tokens (#6285)
  • Add ScrollableArea and useScrollableArea for accessible, logical-axis native scrolling with explicit overscroll policy. (#6262)
    Scrollable viewports now become keyboard reachable only while content effectively overflows, preserve logical edge state across writing modes, apply contained overscroll only on active axes, avoid capturing Sticky while fitting unless explicitly requested, expose standard container sizing props, and integrate optional content padding plus opt-in full bleed with the shared container geometry system.

Fixes

  • BaseTypeahead: preserve input props and keep results accessible in narrow layouts (#6179)
    BaseTypeahead now forwards its inherited DOM and styling props to the combobox input, preserves native input attributes unless a defined legacy alias overrides them, keeps empty result lists valid for assistive technology, counts visible characters for minQueryLength, and keeps both the popup and long result content within viewport gutters.
  • BottomSheetSwitcher: let the topmost nested layer handle Escape before a non-modal flow. (#6184)
  • BreadcrumbItem preserves valid outside focus on menu light dismiss and labels menus from rich trigger content (#6206)
  • Center: preserve component-owned axis reflection and correct the horizontal-centering example. (#6207)
  • Localize Chart accessibility text and complete its consumer guidance. (#6247)
  • defer clear focus restoration for pointer/touch taps to prevent page scroll jumps while preserving synchronous focus restoration on keyboard activation and properly composing onPointerDown in InputClearButton (#5440)
  • Prefer canonical component target names in maintained themes and new examples while preserving deprecated runtime aliases and released bare prop/state selector classes through the 0.7.0 removal window. Theme discovery labels deprecated targets, theme build warns with each exact canonical replacement, and astryx upgrade --apply provides the forward-compatible bare-selector migration. (#6126)
  • Field inputs no longer paint above the sticky AppShell header while scrolling (#5689). Field now contains its local stacking layers (the input surface's z-index and the attached status layer) behind an isolation: isolate boundary on the field surface, so they cannot compete with page-level stacking; the AppShell header keeps its normal stacking level.
  • TextInput's onEnter no longer fires for the Enter that commits an IME conversion (Japanese/Chinese/Korean input); onKeyDown still receives the raw event. (#6082)

Documentation

  • AspectRatio: show the ratio prop in its JSX form (#6093)
    The best-practice line told readers to express the ratio as a fraction like 16/9 without showing it in JSX, and nothing else in the CLI output gives ratio an example. Rewrites it to ratio={16 / 9} and names the string form as a type error.

@astryxdesign/cli

New Features

  • Load an installed integration even when no astryx.config names it (#6202)
    A package the project declares as a dependency, and that ships a root astryx.integration.* manifest, is now loaded on sight — no config entry required. A scaffold that adds the dependency and writes no config used to leave the integration invisible: its components, templates, docs and codemods all reported as missing, which is indistinguishable from not having installed it at all.

    Only DECLARED dependencies are probed — dependencies, devDependencies and optionalDependencies — and only by key. node_modules is never walked, so a transitive dependency of a dependency cannot contribute; and because the value is never parsed, a dependency that is not a semver range (npm: aliases, workspace:, file:, link:, catalog:) resolves like any other. Identity comes from the resolved package's own name, so an aliased dependency reports the package it actually is, and two dependency keys naming one package load it once.

    An explicit astryx.config entry keeps its precedence and its position, and a dependency whose manifest fails to load is dropped quietly rather than reported as the consuming project's problem.

    astryx doctor gains an implicit-integrations line naming each integration linked this way, the package.json field that declared it, and what it contributes — so an author can answer "why can the CLI see this?" without reading the CLI's source, and an unused-dependency check has something to read that says the dependency is load-bearing. The line is always informational, so the doctor CI gate is unaffected.

  • Replace executable gap-report writers with composable handlers. (#6200)
    Gap reports now fan out to every configured handler — project config first, then each loaded integration in config order — instead of selecting one writer. Each handler gets its own report copy and an abort signal under a 30 s budget. A failed handler cannot stop later handlers, and the aggregate receipt shows every outcome.

    Public types: GapReportHandler replaces GapReportWriter; the handler receives a normalized GapReport event and returns a strict GapReportHandlerReceipt. Project config gains a gapReport field; the integration named export uses the same type.

  • Add integration authoring and packed-package verification. astryx integration add <kind> <name> and the per-kind integrationAddComponent, integrationAddDoc, integrationAddTemplate, integrationAddCodemod, integrationAddAgentDoc, and integrationAddTheme APIs write complete contributions. Existing component, docs, template, and theme commands see the package being authored without publishing it first. astryx integration pack --check proves the same contributions survive the npm tarball and that packed components remain available through their public imports. Doctor now names source-only components, unreachable metadata, codemods outside a version folder, and invalid version folders. (#6245)

  • Remove the prefix requirement from theme-local tokens (#6285)

  • Add upgrade receipts and safe three-way reconciliation for ShadCN-copied compositions. (#6228)

  • Let integration packages contribute source themes (#6245)
    An integration can declare a themes root using the same bundle shape as Astryx's built-in themes. Installed themes now appear in theme list, and theme add can copy one by owner.

Fixes

  • build: recommend template <name> --skeleton in the kit payload when the top page is not a direct match, matching what the renderer already tells a human (#6255)
  • Center: preserve component-owned axis reflection and correct the horizontal-centering example. (#6207)
  • astryx component <Name>'s plain-text output always showed import {Name} from '@astryxdesign/core/...', even for a component owned by an integration package. The JSON response already resolved the import against the correct owner, but the command's text formatter recomputed its own hint via the core-only resolver and ignored that value. (#5294)
    The command now uses the already-resolved import field from the component's detail response, so the plain-text output matches the JSON output and shows the integration's own package.
  • Prefer canonical component target names in maintained themes and new examples while preserving deprecated runtime aliases and released bare prop/state selector classes through the 0.7.0 removal window. Theme discovery labels deprecated targets, theme build warns with each exact canonical replacement, and astryx upgrade --apply provides the forward-compatible bare-selector migration. (#6126)
  • component and search now report the same import specifier for an integration component, resolved once in foundation/discovery/component-discovery.mjs. search previously returned the bare package name, which does not resolve for a package whose components are exported behind subpaths. (#6203)
  • Keep ShadCN composition upgrades safe in JavaScript projects and publish precompiled JSX with strict TypeScript declarations. (#6246)
  • Make generated ShadCN compositions match the exact bytes written by the stock client, include package peer dependencies, and require full-catalog install/build coverage in CI. (#6231)
  • Keep copied integration theme files inside the target project. (#6270)
  • Show all seven dashboard page templates in the templates gallery and playground. (#6264)

@astryxdesign/theme-butter

Fixes

  • Prefer canonical component target names in maintained themes and new examples while preserving deprecated runtime aliases and released bare prop/state selector classes through the 0.7.0 removal window. Theme discovery labels deprecated targets, theme build warns with each exact canonical replacement, and astryx upgrade --apply provides the forward-compatible bare-selector migration. (#6126)

@astryxdesign/theme-neutral

Fixes

  • Prefer canonical component target names in maintained themes and new examples while preserving deprecated runtime aliases and released bare prop/state selector classes through the 0.7.0 removal window. Theme discovery labels deprecated targets, theme build warns with each exact canonical replacement, and astryx upgrade --apply provides the forward-compatible bare-selector migration. (#6126)

@astryxdesign/theme-stone

Fixes

  • Prefer canonical component target names in maintained themes and new examples while preserving deprecated runtime aliases and released bare prop/state selector classes through the 0.7.0 removal window. Theme discovery labels deprecated targets, theme build warns with each exact canonical replacement, and astryx upgrade --apply provides the forward-compatible bare-selector migration. (#6126)

Contributors

Thanks to everyone who contributed to this release:

@andrskr @cixzhang @Cypher-Aura-19 @ernestt @Geervan @josephfarina @kentonquatman @Kyujenius @ManoharPaturi

Full Changelog: v0.6.0...v0.6.1