v0.1.9
v0.1.9 is an all-patch release — no breaking changes, so no codemods required.
- Avatar: add a
tooltip?: string | booleanprop for a name-on-hover tooltip. Omitting it (ortrue) shows the avatar'snameon hover and keyboard focus; a string shows that text instead (no need to wrap inTooltip);falsedisables it. Avatar owns the tooltip via the existing Tooltip hook, so there's no extra wrapper DOM. Because this adds a default tooltip to every existing named Avatar, settooltip={false}when you supply your ownTooltip/HoverCardoverlay. The rootaria-label(alt || name) is unchanged; the default name tooltip is visual-only (noaria-describedbydouble-announce), while a custom string tooltip is exposed as a description. Decorative avatars (noname/alt) get no tooltip. (#4164) - BreadcrumbItem gains a
menuprop that turns a crumb into a menu trigger for switching between sibling destinations. It accepts the same item API as DropdownMenu/MoreMenu/ContextMenu (aDropdownMenuOption[]array or composed item children), so existing menu-item definitions drop into a breadcrumb with no rewrite. The item components are also re-exported underBreadcrumb*aliases. - Calendar: make the today/selected day-cell ring precisely themeable. The day cell now reflects a compound
markerstate (today-only/today-in-range) that maps 1:1 to the treatment actually drawn, sodefineTheme({components: {'calendar-day': {'marker:today-only': {...}}}})targets exactly those states without over-matching or needing a:not()exclusion. Default rendering is unchanged. - Calendar: add a dedicated
astryx-calendar-navtheme target for the prev/next month-nav buttons, so consumers can theme the nav controls (color, radius, per-direction, disabled edge) without reaching every Button via the globalastryx-buttonhandle. Reflectsnav(prev/next) and thedisabledstate as data attributes. - ChatComposer: make custom inputs first-class.
useChatComposerContext()and its types are now public, so any input in theinputslot can readvalue/onChange/onSubmit/canSend/placeholder/isDisabledand drive the shell's send button. Inputs can register a focus control oninputControlRefso click-to-focus works for any input shape (not justcontenteditable/textarea); the shell keeps a DOM-query fallback for uninstrumented inputs. - ChatComposerInput: add an
onKeyDownseam so consumers can host platform- or app-specific key handling — e.g.preventDefault()Enter to insert a newline on a touch keyboard, or submit on Cmd/Ctrl+Enter. Enter also no longer submits mid-IME-composition. - CommandPalette: add a dedicated
astryx-command-palette-group-headingtheme target on the group heading, so consumers can theme just the heading (e.g. its padding or typography) viadefineThemeinstead of a fragile structural selector. The group root keeps its ownastryx-command-palette-grouptarget. - DateInput gains a
formatprop for the committed date value, reusing Timestamp'sformatvocabulary so the same literal renders the same date shape in both components. Named values aredate_long(the default, "March 21, 2026"),date("Mar 21, 2026"),date_weekday("Wed, Mar 21, 2026"), andsystem_date("2026-03-21"); a(value) => stringfunction is also accepted for custom output. Thedate_longdefault is byte-identical to DateInput's previous long-month rendering, so existing usage is unchanged. This also extends Timestamp with two new shared members,date_longanddate_weekday, giving the two components full value parity on the date-only formats. Formatting applies only to the committed value, never to text being typed. - Add an
elevationprop to configurable surfaces — Card, ClickableCard, SelectableCard, Button, IconButton, ButtonGroup, and Banner take the full'none' | 'low' | 'med' | 'high'scale; ChatComposer takes'none' | 'low'. Defaults preserve today's appearance (noneeverywhere except ChatComposer'slow), so nothing changes unless you opt in. (#4146) - OverflowList: add
maxVisibleItemsto cap the number of visible items (the ceiling partner tominVisibleItems) andmaxRowsfor bounded multi-row wrapping — items wrap onto up to N rows, then collapse into the overflow indicator. Both props are optional and default to off, so single-line behavior is unchanged. See #4176. - Add
useTableRowStatus, a plugin that prepends a narrow column signaling per-row status. - Thumbnail: add
showRemoveOnprop —'hover'(default) reveals the remove button on hover or keyboard focus and keeps it visible on touch;'always'shows it at rest. - Table tree: add an optional expand-all/collapse-all header control (#4142)
useTableTreeStatenow returns an aggregateisAllExpandedstate (true/false/'indeterminate') and threadsexpandAll/collapseAllintotreeConfig.useTableTreeDatagains ahasExpandAllControlprop: when set, it renders an expand-all/collapse-all toggle in the tree column header, wired to that state, so consumers no longer need to hand-roll external buttons. Flat data stays a full no-op. This is the first affordance folded in fromuseTableRowExpansionas part of converging the two tree plugins. - TreeList: add a dedicated
astryx-tree-list-chevrontheme target for the expand/collapse toggle, so consumers can theme the chevron (color, per open/closed state) viadefineThemeinstead of reaching it through the functional[data-tree-toggle]attribute. Reflects the open/closed state as adata-stateattribute (expanded/collapsed); the functionaldata-tree-togglehook is unchanged. - TreeList: add a stable
astryx-tree-list-guidetheme target on the hierarchy guide (connector) line elements, so consumers can recolor or hide the guides throughdefineTheme(e.g.backgroundColor, ordisplay: 'none'to hide them) instead of hiding the built-in connectors and reimplementing them with unlayered CSS. - TreeList: add a dedicated
astryx-tree-list-item-labeltheme target on the item's label text, so consumers can theme just the label (e.g. bold the selected item's label) viadefineThemeinstead of a fragilebutton:not([data-tree-toggle]) > spanstructural selector. Reflects the row'sselectedstate as adata-selectedattribute on the label. - CLI: full API coverage for the
build,swizzle,layout, andvalidatecommands — each is now scriptable through the./apibarrel with the CLI as a thin parse → API call → render wrapper.buildgains--jsonoutput. Behavior is unchanged for existing command usage. (#4302)
- AvatarStatusDot: pair each variant with a distinct built-in shape — success stays a filled dot, neutral renders as a ring, error gets a minus bar — so status no longer relies on colour alone (WCAG 2.1 SC 1.4.1, #4143). A rendered
iconreplaces the shape glyph at sizes where icons fit; themes can target the new stableastryx-avatar-status-dot-glyphclass and itsdata-shapeattribute — a stroked inline<svg>painted from the dot'scurrentColor. - Button: link-rendered buttons (
href) now exposearia-busywhile loading, matching the<button>branch. Previously an interruptible loading link showed the spinner and announced "Loading" but carried no machine-readable busy state. - Calendar only marks in-month date cells as today, preventing duplicate today indicators in multi-month views.
- Carousel: slides now expose APG slide semantics (role=group, aria-roledescription="slide", "Slide N of M" labels) instead of anonymous divs.
- Honor
prefers-reduced-motionin ChatToolCalls (chevron rotation, expand/collapse), ChatLayoutScrollButton (pill show/hide), and ChatDictationButton (equalizer bars). - Chat/useChatStreamScroll: the scroll-follow spring now respects
prefers-reduced-motion— locked following,scrollToBottom(), andlock()fall back to the existing instant jump, so the transcript still tracks the bottom without animated travel. Follow-up promised in #3800. - Chat: the composer drawer toggle now references its disclosed content via aria-controls, so assistive tech can navigate from the toggle to the drawer.
- ChatSendButton now forwards
className,style, and pass-through attributes (data-*,aria-*, and other rest props) to the rendered button. Previously these were silently dropped. (#4190) - Chat: tool-call error details are now exposed to screen readers and keyboard users instead of living only in a hover-only title attribute.
- CheckboxInput: the indeterminate mark now uses the
--radius-fulltoken instead of a hardcoded radius, for token consistency. No visual change. - CheckboxList: items with rich (non-string) labels can now provide an accessibleLabel so their checkbox no longer announces as the literal "Checkbox".
- CodeBlock: collapsed code regions are now inert, so keyboard focus can no longer land on the invisible scroll container while collapsed.
- CommandPalette: forward BaseProps pass-through attributes (className, style, xstyle, data-, aria-) to the underlying Dialog. Previously these were silently dropped.
- CommandPalette: the search input (role=combobox) now has an accessible name by default, from the new label prop or the visible placeholder. Previously screen readers announced a nameless combobox.
- DateTimeInput: ArrowDown (and Alt+ArrowDown) in the date field now opens the calendar popover from the keyboard, matching DateInput and the advertised combobox pattern.
- Dialog: modals are now automatically labelled by their DialogHeader title via aria-labelledby, matching AlertDialog. Unnamed open dialogs warn in development.
- Dialog: the entry animation is disabled under prefers-reduced-motion, matching the Layer animation guards.
- Fix Divider rest-prop spread order so consumer-passed HTML attributes cannot overwrite the component's
role="separator"oraria-orientation. - FieldLabel now forwards className, style, xstyle, and pass-through attributes (data-, aria-, event handlers) to the rendered element. Previously these were accepted by the type but silently dropped.
- Field/FieldStatus: status and error messages are now announced through persistent live regions, so they are reliably read by screen readers regardless of when they appear.
- FileInput: the trigger's accessible name now includes the selected filenames, so screen-reader users can review what is attached when refocusing the control.
- Prevent PowerSearch edit popover from closing when selecting multi-select options via Enter (#4245)
- Selector/MultiSelector: PageUp/PageDown now jump the active option to the first/last match while searching, complementing Home/End which stay on text-caret movement.
- HoverCard: popups now expose a named dialog when the new label prop is set, and honest group semantics otherwise. Previously every hover card announced as an unnamed dialog.
- Item: aria-selected is now emitted only when the item's role permits it (option, tab, treeitem, grid cells), removing invalid ARIA from plain list items.
- MobileNav: the toggle button now exposes
aria-expandedand references the nav drawer viaaria-controls, so screen-reader users can tell whether the drawer is open and what the button controls. (#3721) - MultiSelector: searching within the options popover now announces the number of matching results ("3 results" / "No results found") to screen readers, mirroring Selector and Typeahead. Previously filtering happened silently.
- SideNav/TopNav: collapsed heading popovers no longer wrap their menus in a modal dialog, and the heading button is no longer an invalid child of the menu.
- Slider now clamps controlled values to its minimum and maximum before positioning the thumb and exposing ARIA values.
- Slider: required sliders now convey the required state to screen readers through the thumb's accessible description (aria-required is invalid on the slider role).
- Make the CLI's
.mjssources fully strict-typecheckable (checkJs + JSDoc) Annotated the entire CLI package sotsconfig.strict.json(fullstrictcheckJsoversrc,bin,scripts,docs, and the emittedtemplates) reports zero errors — down from 1717. Fixes are JSDoc-only: no runtime logic changed,.mjsstays.mjs. Strict checking also surfaced and corrected several type-contract drifts: theupgrade.runresponse type (declared adepsUpdatedfield the command never emits, and omitted the realintegrations/filesChanged/transformsApplied/errors), registered the emittedtheme.list/theme.add/layout.*response types in the--jsonenvelope union, and addedcategory?toReferenceSectionin core's docs types (reference docs already emit it). - Table: the selection plugin accepts getRowLabel so row checkboxes announce which row they select, instead of an undifferentiated "Select row".
- Text: an explicit
sizenow overrides the font-size of a themedtype. Thesizeclass lived in a lower cascade layer (astryx-base) than a theme's per-type font-size rule (astryx-theme), so<Text type="supporting" size="xsm">silently kept the type's size. Themes now re-emit the size classes in the theme layer sosizewins as documented. - Thumbnail: replace the hover box-shadow on interactive tiles with the same
::afteroverlay treatment ClickableCard and SelectableCard use. All three now tint on hover with--color-overlay-hover(and--color-overlay-pressedon press), so interactive feedback is consistent across the card family. - Thumbnail/TopNavMegaMenuFeaturedCard: images without alt text are now explicitly decorative instead of silently empty-alt, matching Avatar's handling.
- Thumbnail: the overlaid remove button now uses a fixed
--color-overlayscrim with an--color-on-darkicon instead of adapting to the image's luminance, so it has reliable contrast on any image. - Tokenizer: adding and removing tokens (including Backspace on an empty input) is now announced to screen readers. Previously tokens appeared and disappeared silently.
- TopNav: TopNavMegaMenu triggers now expose aria-controls, and the panel is a labeled group instead of an invalid modal-dialog-wrapped menu.
- TopNav: TopNavMenu popups now expose proper menu semantics (no modal dialog wrapper) with the full APG keyboard pattern (roving tabindex, arrow keys, typeahead).
- Align two
--jsoncontract shapes with what the CLI actually emits - Register all emitted response types in the
--jsonenvelope union Three response types were defined, exported, and emitted by commands but never added toCLIAnyResponse— the union thatjsonOut()type-checks payloads against:component.full,component.detail.blocks, andupgrade.status. Because their discriminators were missing from the map,jsonOut('upgrade.status', …)(and the two component variants) were rejected by the type-checker, and their payload shapes weren't actually being validated.build.helphad no response type at all. Added aBuildHelpResponsetype and wired all four into the union so every--jsonenvelope the CLI can emit is now type-checked against a declared shape. - Type
detectPackageManagerhonestly soastryx doctor's "no lockfile" branch is reachabledetectPackageManagerreturns'npx'as the sentinel for "nothing detected", but its return type only listed'yarn' | 'pnpm' | 'bun' | 'npm'. Type-checkers therefore treateddoctor'spm !== 'npx'guard as a dead comparison — the "No lockfile detected — defaulting to npm/npx" message looked unreachable and was at risk of being "cleaned up". The return type is nowPackageManager | 'npx'and detection narrows via a shared type predicate, so the guard is honest and the branch is preserved. - Drop the dead
cwdparameter fromgetLatestVersioncheckForUpdatecalledgetLatestVersion(cwd)and the JSDoc advertised acwdparameter, but the function takes no arguments — it only reads the$ASTRYX_LATEST_VERSIONenv var, so the passedcwdwas silently ignored. Removed the phantom parameter and its doc so the signature matches the behavior. No functional change to the update-nudge output. - Scope the
sourceresolve condition to @astryxdesign packages in withAstryxwithAstryxset webpack'sconditionNamesto['source', …]globally, which resolved any dependency shipping asourceexport to its raw TypeScript — not just Astryx packages. Third-party deps that ship asourceexport (e.g.lexical, pulled in by the new RichTextEditor lab component) were then fed untranspiled.tsthrough Next's babel and failed on syntax likedeclareclass fields.
- docs(Tokenizer, PowerSearch): document and test the existing startIcon prop Both components have shipped a working
startIcon?: ReactNode | IconTypeprop for a while (PowerSearchforwards it verbatim to the internalTokenizer, and it's already exercised in Storybook), but neither's.doc.mjsdocumented it and neither had test coverage — so it was invisible toastryx component <Name> --dense, the docsite props table, and anyone (human or AI) relying on those as the source of truth. No behavior change; adds the missing props-table entries (en/zh/dense) and colocated tests confirming the icon renders and forwards correctly.
- Compact per-row status signal (error, warning, unread, etc.) without a dedicated status column: a colored status dot by default, or an icon when provided.
getStatus(item)maps a row to{color, icon?, label?}, ornullfor no indicator.coloraccepts a semantic status name (success/error/warning/accent/red/green/etc.) mapped to a theme token, or a raw CSS color as an escape hatch.iconrenders the status as a shape signifier instead of the dot, which is more accessible than color alone when multiple statuses coexist.labelsupplies the accessible name.- Memoize
getStatuswithuseCallbackfor a stable plugin identity. swizzle.copypayloads always includepackageandusesStyleX(both covered by tests), butSwizzleCopyResponse.datadidn't declare them — the call site cast the payload toRecord<string, unknown>to sidestep the mismatch. Added both fields to the type and dropped the loose cast so the payload is type-checked.- The error
suggestionsshape was declared as{name, reason}(reason required) in the JSON envelope / API error contract, but some call sites emit bare{name}(e.g. candidate component names on swizzle). Introduced a single canonicalSuggestiontype (reason?optional) and referenced it everywhere so the contract matches the emitted data.
@AKnassa, @bhamodi, @cixzhang, @ejc3, @freddymeta, @HelloOjasMutreja, @humbertovirtudes, @josephfarina, @kentonquatman, @Kevinjohn, @potatowagon, @saadpocalypse, @yyq1025
Full Changelog: https://github.com/facebook/astryx/compare/v0.1.8...v0.1.9
shadcn@4.16.0
-
#11307
431da7169cae753643e67e56e168b93ec31dfe90Thanks @shadcn! - make addRegistryItems accept explicit registry configuration instead of loading components.json -
#11304
bf906bb8aeebc64d374afb54497b822d587ac6d7Thanks @shadcn! - add getRegistriesConfig and registries in package.json support
v3.13.0
- VBtnGroup: add
sizeprop to align with standalone buttons (eada595), closes #16054 - VDataTable: add aria-sort to sortable headers (25c0f0f), closes #20974 #22575
- VDataTable: add aria-labels for selection controls (db186fc), closes #9956 #21543 #22791
- VDataTable: add mobile header slot (#21429) (541cb4e), closes #19730
- VSelect/VAutocomplete/VCombobox: new events for multi-selection (#23038) (cdd14a9), closes #4054 #5682
- VSkeletonLoader: add
chip-grouptype (07ceb33), closes #20695 - VSkeletonLoader: add prop & reintroduce (#23037) (e098eec), closes #20942 #17506
- v-tooltip: correctly handle
trueandundefined(db4f890), closes #20463 - VDataTable: hide empty header cell in mobile view (516d347)
- VDataTable: respect disableSort prop for sortable header (#22684) (a5a2d08), closes #22523
- VStepperVerticalItem: unnecessary error color to step content (e5141c0)
- VStepperWindow/VTouch: guard against double teardown (#23030) (37ef495)
💎 Version 6.6.0
The headline is a new premium chart type, unit: one mark per unit of value, drawn as dot clusters, pictograms, waffles, or beeswarms, with a keyed tween that re-forms the marks whenever the data, grouping, or filter changes. It ships with six layouts, per-mark data, and a waffle alias, and it is the first premium chart type (it renders in trial mode with a watermark until a key is set). This release also adds signature verification to the license manager and fixes a zoom-out edge case. Existing configs render unchanged.
chart.type: 'unit' renders a discrete mark for every unit of value instead of a single bar or slice, so "37 of 200" reads as a countable quantity. It is a non-axis chart (dispatched like pie or treemap) and is tree-shakeable via import 'apexcharts/unit'. On every update each mark tweens from its old position to its new one, so re-grouping, filtering, or a changing count re-forms the marks rather than redrawing from scratch.
new ApexCharts(el, {
chart: { type: 'unit' },
series: [276, 266, 3],
labels: ['For', 'Against', 'Abstain'],
plotOptions: { unit: { layout: 'grouped' } },
})
Six layouts via plotOptions.unit.layout:
grouped(default): one phyllotaxis blob per category, laid out in a row.packed: one shared blob, coloured by group and sorted so the minority nests in the centre.columns: each category is a vertical bar built from stacked dots (a waffle column).grid: one waffle lattice, a part-to-whole square "pie" (grid.totalrounds it to a fixed cell budget, e.g. 100 for a percentage waffle).gridwithsplit: true: small multiples, one mini-waffle per category over a faint track, in a trellis.scatter: marks on real value axes, as a 1D beeswarm (laned by category, deterministic anti-overlap packing), a 2D value-value plot (scatter.y: 'value'), or area-scaled bubbles (scatter.sizeRange). The layout draws its own axes with a homegrown nice-number scale.
Also included:
- Shapes:
circle,square, andimage(isotype pictogram, withimage.tintto recolour a monochrome icon to its category colour). - Per-mark data: alongside flat counts, an object form
series: [{ name, data: [{ value, x, z, name, fillColor, id }, ...] }]gives each mark its own colour, position, size, and tooltip content. - Transitions (
transition):group(default, per-category),flow(the anonymous crowd migrates and recolours across a regroup, the circles-to-bars effect), andidentity(a specific mark persists across any regroup or relayout, keyed byid/name). - Sizing: numeric or
autodot size, opt-insizeByValuebubbles,unitValuewaffle scaling (1 mark = N units), and amaxUnitssafety cap. - Labels and chrome: per-cluster
clusterLabels(a curved arc over a blob or a straight label above / below a bar,position: 'top' | 'bottom'), per-mark tooltips, legend click to hide and show a category with an animated re-flow, and the standardfill.opacityso overlapping bubbles read through each other.
Nine interactive demos ship under samples/*/unit and samples/*/waffle: a workforce dot cluster, a population age-slider, a pictogram population, a team roster, a life-expectancy beeswarm, a cost-of-living bubble scatter, a scrollytelling marathon storyboard, a startup-funding walkthrough, an electricity-mix waffle, and an urbanisation small-multiple waffle.
chart.type: 'waffle' is a thin alias of unit: it presets the grid layout with square cells, so a part-to-whole waffle is one line of config. With grid.total: 100 the values are largest-remainder rounded to exactly 100 cells, so the grid always reads as percentages. The original type is preserved on chart.requestedType, and an explicit layout or shape still wins.
new ApexCharts(el, {
chart: { type: 'waffle' },
series: [35, 23, 15, 9, 8, 6, 4],
labels: ['Coal', 'Gas', 'Hydro', 'Nuclear', 'Wind', 'Solar', 'Other'],
plotOptions: { unit: { grid: { columns: 10, total: 100 } } },
})
- Zoom-out never stalls on the last category. While zooming out, the high edge is now rounded up instead of down, so the visible span grows by at least one whole category per step rather than appearing stuck at the edge.
plotOptions.unit is fully typed across all layouts and their option groups (grid, scatter, clusterLabels, sizeByValue, image, columns, tooltip), and chart.type accepts 'unit' and 'waffle', with chart.requestedType carrying the original alias.
- No breaking API changes, and no renamed or removed options.
unit(and itswafflealias) is the first premium chart type: it renders fully in trial mode with anAPEXCHARTSwatermark until a key is set. Every other chart type stays free and is never watermarked.- The unit chart is opt-in and additive; charts of every other type render unchanged.
- New unit regression tests (packing determinism, layout geometry, keyed transitions, scatter axes and bubbles, waffle cell allocation, legend toggle, and premium gating) run alongside the existing interaction and end-to-end suites.
v2.23.0
- fix: parse final font-face declarations without semicolons by @RexSkz in https://github.com/zumerlab/snapdom/pull/475
- fix: entry keyframe animations blank out the captured element by @mcdyzg in https://github.com/zumerlab/snapdom/pull/476
⚡ perf
- perf: replace Safari's 3x pre-capture warmup with a verified draw at raster time
6ee4680
🛠 fix
- fix: keep Safari toSvg/toImg vector at scale instead of rasterizing to PNG
dbbff09 - fix(styles): disable animations on clones so entry keyframes don't blank the capture
#476 - fix: I freeze nowrap box widths and isolate measure mounts in shadow DOM
#474 - fix: freeze the image the browser actually shows (srcset descriptors, type filters, content:url)
6ac87ef - fix: parse final font-face declarations without semicolons
#475 - fix: stop concurrent captures from sharing session maps and counter state
d1379a6 - fix: realm-safe element guards — pseudos and per-node handlers now survive iframe-content captures
5e9d8e1 - fix: collect svg defs referenced from the root svg's own attributes
441e3cf - fix: prefetch mask and border-image URLs in preCache, drop the dead warm call
423acd5 - fix: first-letter materialization no longer false-positives on margined elements
52a6fff
- @RexSkz made their first contribution in https://github.com/zumerlab/snapdom/pull/475
- @mcdyzg made their first contribution in https://github.com/zumerlab/snapdom/pull/476
Full Changelog: https://github.com/zumerlab/snapdom/compare/v2.22.0...v2.23.0
@astrojs/cloudflare@14.1.5
-
#17376
0216368Thanks @astrobot-houston! - Fixes a bug where an explicitcache: { enabled: false }in your wrangler config was overridden and forced totruewhen a Workers cache provider was configured -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3
astro@7.1.4
-
#17488
d4f266dThanks @emerson-d-lopes! - Fixes duplicate CSS files being emitted in server output when a prerendered page and a server-rendered page share the same styles (e.g. a shared layout importing Tailwind). The prerender and SSR environments each emitted their own copy of the same stylesheet (index.X.cssand_..Y.css); the SSR build now reuses the CSS asset filename from the prerender build when the stylesheet is backed by the same CSS source modules, so only a single file is emitted. -
#17472
4dc590cThanks @astrobot-houston! - Adds the missingbackgroundprop to the<Image />and<Picture />component types. The prop already worked at runtime, but was absent from the types, causingastro checkto report thatbackgrounddoes not exist on the component props -
#17292
0fc519dThanks @astrobot-houston! - Fixes missing scoped styles for child components insideclient:onlyislands in production builds -
#17421
f1448deThanks @iamkaleemsajjad-hue! - Fixes session runtime errors being silently swallowed byconsole.errorinstead of routing through Astro's logger -
#17421
f1448deThanks @iamkaleemsajjad-hue! - Fixes a session being left in a partial state after a storage failure duringsession.regenerate(), preventing unnecessary storage reads on subsequent operations -
#17517
82bf7e2Thanks @Hashim1999164! - Prevents a visible terminal window from popping up on Windows when the dev server runs in background mode. The detached child process is now spawned withwindowsHide: true, so console-subsystem grandchildren (such asworkerd.exe) no longer get a new focus-stealing window allocated by Windows Terminal. -
#17510
eaa1fb0Thanks @astrobot-houston! - Fixes theglob()loader watcher so negation patterns like!docs/drafts/**correctly exclude files during development, matching the behavior of the initial scan. Previously, negations were treated as independent matchers, causing unrelated files (including.astro/data-store.json) to be ingested as collection entries -
#17511
704e570Thanks @astrobot-houston! - Fixes TypeScript path aliases fromtsconfig.jsonnot resolving inastro.config.ts
create-astro@5.2.3
- #17423
08e8adbThanks @astrobot-houston! - Fixescreate-astrosilently writing template files to the wrong directory on Linux when the path contains non-ASCII characters.
@astrojs/markdoc@2.0.5
-
#17460
3b93a1aThanks @astrobot-houston! - Fixes customtransformfunctions being dropped when a tag or node also specifies a customrendercomponent. User-written transforms are now always preserved; only Markdoc's built-in transforms are removed so the custom component wins. -
#17191
fc3fb2bThanks @eldardada! - Fixes customtransformfunctions being incorrectly dropped for tags and nodes whose names require bracket access (e.g.side-note). The check that detects whether a transform respects a customrendercomponent now recognizes bracket notation, optional chaining and whitespace, not only dot notation.
@astrojs/mdx@7.0.4
- #17514
41a00ddThanks @gtritchie! - Fixes a bug where the integration was emitting React-cased attribute names.