slate-react@0.140.1
- #6084
dcae734Thanks @a-y-ibrahim! - Keep the DOM and Slate value in sync when an insertText override rejects native text input, including insertions at decoration boundaries.
v16.4.2
- [lts-active] turbo-tasks snapshot consistency fixes (#99644, #99732, #99649) by @lukesandberg in https://github.com/vercel/next.js/pull/100002
- [lts-active] Turbopack: backport Pages Router dev module graph chaining (#98823, #99910, #100091) by @sokra in https://github.com/vercel/next.js/pull/100008
- [lts-active] fix(next-code-frame): snap visible window to char boundaries by @lukesandberg in https://github.com/vercel/next.js/pull/100212
- [lts-active] [turbopack] Fix two GC paths that leave half-torn-down dependency edges by @lukesandberg in https://github.com/vercel/next.js/pull/100209
- [lts-active] Turbopack: Ignore realpath errors during module resolution, matching node's behavior by @lukesandberg in https://github.com/vercel/next.js/pull/100217
- [lts-active] Backport docs fixes since v16.4.0 by @icyJoseph in https://github.com/vercel/next.js/pull/100246
- [lts-active] Fix Turbopack lazy dynamic-import chunk-list collisions by @lukesandberg in https://github.com/vercel/next.js/pull/100211
- [lts-active] Backport additional documentation fixes since v16.4.0 by @aurorascharff in https://github.com/vercel/next.js/pull/100262
Full Changelog: https://github.com/vercel/next.js/compare/v16.4.1...v16.4.2
Astryx v0.7.1
Astryx 0.7.1 updates the stable package set, including RichText's first stable release.
OLD_VERSION=0.7.0 # replace with the Core version your project uses today
npm install @astryxdesign/core@0.7.1 @astryxdesign/cli@0.7.1 # add each other 0.7.x @astryxdesign/* package you use at 0.7.1
npx @astryxdesign/cli upgrade --from "$OLD_VERSION" --apply --path .
-
Chat: mention people and topics by multi-word names with opt-in
hasMultiWordQueryonChatComposerTrigger(#6128) SethasMultiWordQuery: trueon a trigger whose suggestions contain spaces, and typing@Jordan Lekeeps narrowing the menu instead of closing it at the first space. The query runs until a line break or about 64 characters, typed text is never changed unless a row is picked, and an unmatched multi-word phrase hides the menu unless the trigger setsemptySearchText. Triggers that don't opt in still end their query at a space.For every trigger: while results for the current query are still loading, Enter sends the message as typed and never picks a row from an earlier query. Results that arrive after a send or after the editor clears are dropped, so the menu never reopens over an empty composer. Escape and the arrow keys pass through while the menu is hidden, and IME keystrokes never pick a row.
-
CodeBlockgainsisDiff, a diff layer over anylanguage, and Markdown renders a fenceddiffcode block as tinted diff rows instead of plain text. (#7389) WithisDiff, lines starting with+sit on a success-tinted row,-on an error-tinted row,@@hunk headers (and a---/+++file-header pair directly before one) on a quiet muted row, and the rest of every line keeps the language's syntax highlighting. The glyph renders in its own column so the code's indentation lines up on every row and stays in the copied text. A changed row's margin reads the change: the tint runs under the line-number gutter too and spans the full scroll width of a long line, and the line number and the glyph take the row's marker colour, while the code keeps the syntax theme's colours. These are five new syntax-theme slots —--color-syntax-added,--color-syntax-removed,--color-syntax-diff-header(row paints, defaulting to--color-success-mutedand--color-error-mutedat 25% strength and to--color-background-muted; a defined syntax theme that leaves the header paint unset gets none, its header rows sitting on its own background in its punctuation colour) and--color-syntax-added-marker,--color-syntax-removed-marker(defaulting to--color-text-greenand--color-text-redin the default syntax theme; a defined syntax theme that leaves them unset keeps its own line-number colour) — so existing and custom syntax themes need no change and may override them.Markdown maps a
diff-<lang>code fence to the layer over<lang>(labelled<lang> diff) and adiffcode fence to the layer over plaintext (labelleddiff), so a diff keeps its header, copy button, disclosure, and a viewport name that still saysdiff.A
diffcode fence that should stay plain text can usetext. A customcomponents.coderenderer is unchanged: it keeps receiving the fence's leading word characters inlanguage(difffor bothdiffanddiff-tsx, as today), so an existinglanguage === 'diff'check still matches, and receives nothing new. -
Clearable inputs: the clear button's tooltip now reads just "Clear" (localized) instead of repeating the field's label, so a long label no longer turns into awkward tooltip copy such as "Clear Assigned engineering partner". The button's accessible name is unchanged and still names the field, such as "Clear Search". Applies to every input that renders the shared clear button, including
TextInput,NumberInput, the date and time inputs,FileInput,Selector,MultiSelector,Typeahead, andTokenizer. Override the new@astryx.inputClearButton.tooltipcatalog key to change the wording. (#7476) -
Markdownfenced code blocks wrap long lines instead of scrolling them sideways. A reader on a narrow screen sees the whole line without a horizontal scroll, and whereMarkdownand RichText give a code block the same width, a long line takes the same number of lines in both. Only the appearance changes: the code's text, line numbers, syntax colours and what Copy returns are unchanged, and a code block whose lines no longer overflow also no longer takes the scroll region's Tab stop, as a code block that fits never has. To keep the old sideways-scrolling look, render code yourself through thecomponents.codeprop with aCodeBlockthat leavesisWrappedoff. (#7564) -
Selector, MultiSelector, and ComplexSelector gain a
secondaryvariant: a borderless, neutral-filled trigger matching secondary buttons in navigation and toolbar compositions. Inside anInputGroup, a secondary Selector or MultiSelector keeps its fill and takes the group's row height and connected edges. Existinginput(default) andghostbehavior is unchanged. (#7252)
-
Typeahead,Tokenizer, andPowerSearch: focusing an empty field withhasEntriesOnFocusafter its search source changed now bootstraps entries from the new source. Previously the results cached from the old source were already invalidated but still blocked the bootstrap, so focusing or clicking into the field opened nothing until the user typed. Cached results that are still current are re-shown without a new bootstrap, as before. (#7157) -
BottomSheetreturns focus without a focus ring after a pointer close (a tap in WebKit, or a pointer close of a sheet opened from the keyboard) and keeps the ring after a keyboard close, including on aDropdownMenubottom-sheet trigger the caller renders (renderTrigger). The sheet now asks the browser not to treat that focus as keyboard focus, the way Dialog's focus moves do. (#7388) -
Keep DateInput's calendar selection empty after clearing the field. (#6935)
-
Calendar: PageUp and PageDown move the focused day by a month — into the month the grid shows, on the same day of the month where it exists — instead of by a week; a page from a borrowed adjacent-month day lands on that day of the month now shown rather than on the month's first day. With two months, a page or an arrow crossing a month edge from the first month now lands on the correct day (the second grid no longer overrides the first grid's target). An arrow or page pastmin/maxchanges nothing, and a page into a month with no enabled day keeps focus in the grid. (#7467) -
Calendar: the arrow keys, Home and End no longer land on a borrowed adjacent-month day (shown dimmed, exposed as disabled, and inert to Enter, Space and clicks). An arrow crosses into that month and focuses the real day there, including across the two grids of a two-month view; Home and End stop at the first or last enabled day of the week in the month shown. A month with no enabled day holds no Tab stop. (#7511) -
CalendarwithhasWeekNumbers: the blank cell above the week-number column is now acolumnheadernamed with the locale's own word for the week field (from CLDR, visually hidden), so every cell in the header row has a grid role and assistive technology reads the weekday header row without a stray unnamed cell. (#7509) -
ChatMessageno longer leaves empty space for an avatar, name, or metadata that renders nothing. Booleans and empty strings create no slot, and any other slot content that renders nothing, such as an empty Fragment or a component that returnsnull, collapses its wrapper. A name that renders no text falls back to the translated sender label, while numeric values such as0still render. (#6597) -
CodeBlock's code viewport is a keyboard Tab stop only while its content actually overflows, through the shared scroll capability: a short snippet no longer adds an unexplained stop to the page's Tab order, a wide or capped block still does, and a viewport that stops overflowing keeps focus where it is. Role and accessible name are unchanged. (#7424) -
CommandPaletteInputnow exposes the semantics and name that its visible state promises. (#7321)-
A standalone field with no popup attributes was
role="combobox"witharia-expanded="true"andaria-autocomplete="list"; it is nowrole="searchbox"with no popup state. Passrole="combobox", or your popup's own ARIA attributes, to keep the old semantics. A field that already passes popup attributes (aria-expanded,aria-controls,aria-owns,aria-haspopup, and the like) stays acomboboxand keeps them, and a field insideCommandPaletteis unchanged. -
The field's default accessible name was its placeholder (
Search…, or the caller'splaceholder); it is nowSearch commands, translated. Passlabelto keep a specific name, for examplelabel="Search…"for the old default. A caller whose customplaceholderserved as the name keeps working code and hears the generic name until it passeslabel. -
The CLI's async-search CommandPalette block names its field
Search files. -
endContent={true}no longer renders an empty trailing slot, andendContent={0}renders inside the trailing slot instead of after it.
Also released in
@astryxdesign/cli. -
-
A standalone
CommandPaletteItemnow keeps a caller-supplied id on its rendered option and ignores click callbacks while disabled, so labels and test hooks keep pointing at the option and a disabled command cannot run. (#7324) -
CommandPalettenow keeps dismissal, text entry, result focus, and empty-state announcements aligned with what the reader sees. (#6950)-
While no selectable result exists, the results container no longer exposes an empty
listbox, and the query field reportsaria-expanded="false"with noaria-controlsoraria-activedescendant. It was an expanded combobox controlling an empty listbox. -
Home and End move the caret in the query field, as in any text field; they used to jump to the first and last result. Page Up and Page Down still jump to the first and last result.
-
A search with no results announces the empty message the palette renders (
No resultsby default, or the caller'semptySearchText), once the search settles. It used to announceNo results for <query>, whatever the palette showed. An override of the@astryx.commandPalette.noResultsForcatalog entry no longer has any effect; useemptySearchTextto customize the message.
-
-
ContextMenupaints in Safari when its trigger sits inside a scroll container. The menu is anchored to a box at the pointer, and that box was empty: WebKit counts an empty anchor box inside a scroller as clipped, so the defaultposition-visibility: anchors-visiblehid the open menu. The anchor is now 1px, kept inside the trigger, so the menu still hides while a scroller clips the pointer position and paints again when it scrolls back. A pointer-opened menu now starts 1px lower, below the pixel under the pointer. (#7369) -
ContextMenunow lets Escape dismiss the topmost nested overlay before the menu itself, and preserves consumer trigger handlers while adding its own, so an overlay opened from a menu stays usable and product event logic still runs. (#7167) -
The touch month scroller shared by
DateInputandDateTimeInput: under RTL the horizontal arrows follow the reading direction (ArrowLeft moves to the next day, ArrowRight to the previous), and every keyboard move — arrows and Home/End — now lands on the real day in its own month pane rather than on the dimmed, disabled copy a neighbouring pane shows at its edge. Touch scrolling is unchanged. (#7466) -
DateRangeInput: activating the clear button with the keyboard now returns focus to the range trigger. Previously the button unmounted once the range was cleared and focus fell to<body>, so a keyboard user had to Tab back in from the top of the page. Pointer clears are unchanged. (#7507) -
Dialognow preserves consumeronClickhandlers while retaining its controlled backdrop-dismissal behavior. (#7452) -
DialogHeadernow keeps valid numeric zero content inside itsstartContentandendContentwrappers and theme targets. (#7454) -
Dividernow keeps numeric zero labels inside the labelled separator and omits boolean or empty-string labels without leaving empty label spacing. (#7572) -
DropdownMenuCheckboxItemnow preserves consumer click and pointer-move handlers while keeping its checked-state, disabled, hover-focus, and close-menu behavior. (#7573) -
A
DropdownMenuwithheaderorfooteris now exposed as a modal dialog around its menu, as the APG Dialog pattern requires. The popover is a namedrole="dialog"witharia-modaland therole="menu"inside it; the trigger saysaria-haspopup="dialog"and itsaria-controlsnames the popover holding the dialog. Tab and Shift+Tab wrap through the header, the menu and the footer instead of closing the menu at either end. Escape still closes and returns focus to the trigger. A menu without either prop is unchanged. (#7515) -
A
DropdownMenuwhose trigger the caller renders (renderTrigger) returns focus to it without a focus ring after a pointer pick (a mouse click in Chromium, a click or a tap in WebKit), as the built-in trigger already did: the menu now asks the browser not to treat that focus as keyboard focus, the way Dialog's focus moves do. (#7382) -
DropdownMenuandMoreMenu: a disabled trigger no longer opens the menu. A disabled trigger with a tooltip stays focusable (aria-disabled), and Button swallowed only Enter and Space, so ArrowDown, ArrowUp, a press, or a click could still open the anchored menu; the anchored open path and the bottom-sheet trigger's click now check the trigger's availability first, for the default Button and for a natively oraria-disabledcustom trigger. (#7475) -
FormLayout: below the 480px collapse,direction="horizontal-labels"controls now fill the column the way they do in a verticalFormLayout. Previously each control shrank to its content, so aSelectorwas only as wide as its current value. The two-column layout above 480px is unchanged. (#7501) -
Buttons used as InputGroup addons now share the group's outer shape, with square inner corners where they meet the adjacent input. (#7233) Standalone buttons and buttons rendered inside an input keep their existing shape and behavior.
-
Keep
useHoverCard()trigger refs stable across unchanged rerenders. The hook returned a freshref/interactionRefon every render because its callbacks depended on the wholelayerandtouchobjects, which are rebuilt each render — React detached and re-attached every trigger listener and rewrote the trigger's inlineanchor-nameon each rerender. Hooks now depend on the stable layer and touch members instead, mirroring the Tooltip fix in #5951. (#6472) (#6606) -
MobileNav: return focus to the element that opened the drawer when it closes. The drawer relied entirely on the browser's implicit
<dialog>focus restore, which was reported failing in Safari 26.5.2:document.activeElementbecame<body>after close, stranding keyboard and screen-reader users at the top of the document. MobileNav now captures the opener beforeshowModal()moves focus into the top layer and hands it back as soon as the native dialog has closed, matching whatDialogalready does. The close is deferred until the slide-out has played, so the restore waits for it too; until then the rest of the document is inert and an earlierfocus()would be silently dropped. The restore also covers the AppShell path, where the drawer is torn down by an<Activity>switching tomode="hidden"rather than by the close branch re-running. No API change. Focus is left untouched when there was no real opener (activeElementwas<body>), when the opener has since left the DOM, or when the drawer is reopened before its pending close runs. (#3343) (#4410) -
MultiSelector: activating the clear button with the keyboard now returns focus to the trigger, ashasCleardocuments. Previously the button unmounted once the selection was empty and focus fell to<body>, so a keyboard user had to Tab back in from the top of the page. Pointer clears are unchanged. (#7506) -
NumberInput: the screen-reader "Invalid number" alert now goes through the i18n translator, so anInternationalizationProviderlocale or override can replace it. Adds@astryx.numberInput.invalidNumberto theencatalog. Locales without a translation yet still fall back to English. (#7482) -
astryx.css,reset.css, and every other package stylesheet (richtext.css,lab.css,charts.css) now open with@layer reset, astryx-base, astryx-theme;, the same line theme stylesheets carry. The Astryx layer order holds whichever Astryx stylesheet loads first: loadingreset.cssafterastryx.cssno longer lets the reset override component styles, and theme overrides keep winning. Setups that already declare the order on their own first line are unchanged. (#7585)Also released in
@astryxdesign/richtext. -
plainDateToInstantnow resolves skipped and repeated wall times the way Temporal's default"compatible"disambiguation does. (#7081)-
A skipped wall time moves forward by the length of the gap. In a zone that springs forward from a negative offset at local midnight, such as America/Santiago on September 6, 2026 or America/Havana on March 8, 2026, the start of that day came back as 11:00 PM the day before, so a week or day range landed on the wrong date; it is now the day's first instant (1:00 AM).
-
A repeated wall time resolves to its earlier occurrence in every zone. In zones with a positive offset, such as Europe/Berlin on October 25, 2026, it resolved to the later one.
-
-
Calendar: dates in years 1-99 now show their own year instead of 1900-1999. A value of0001-01-15was captioned "January 1901" with 1901's weekday layout and day labels, whileonChangestill emitted the year-1 ISO date. The shared date helpers behind the caption, day grid, week numbers, day counts, and timezone instants now keep years 1-99 as given. One limitation remains: in a timezone west of UTC, the instant for January 1 of year 1 still comes out a year early, because its timezone offset is read from a 1 BC wall clock without the era. (#7465) -
PowerSearch: pressing Enter on a focused button in the filter editor now activates that button. Enter on Cancel closes the editor without applying the draft, and Enter on Delete removes the filter; before, both applied the draft instead. Enter in a text or number value field still applies the filter; Enter on the date picker's calendar button now opens the calendar. (#7500) -
CommandPaletteListnow preserves a caller-supplied id when used standalone, while a managedCommandPalettestill assigns the ARIA id its search field controls. External labels and test hooks stay attached without breaking the palette's combobox relationship. (#6988) -
reset.cssno longer hideshidden="until-found"content withdisplay: none. The browser's own rendering,content-visibility: hidden, now applies, so find in page and text fragment links can find the content and reveal it, as the HTML Standard specifies. Plainhiddenelements are stilldisplay: none, and a browser without until-found support still hides the content with its own[hidden]rule. (#7520) -
ResizeHandle: on a collapsed pane, the arrow that grows it opens it one step above its minimum, or at itscollapsedSizewhen that is larger (a single step below the collapse threshold used to leave it collapsed); the arrow that shrinks it stays a no-op. Enter and double-click still restore the previous size. (#7512) -
ResizeHandle: Enter and double-click on a collapsed pane restore it to the size it had before it collapsed, not to its minimum, and reopen it even whenminSizeis belowcollapsedSize. The handle usesuseResizable's own collapse and expand transitions;ResizablePropsis unchanged, and a hand-built props object keeps the previous resize-to-minimum behavior. (#7479) -
ResizeHandle: with snap points set, an arrow key moves the pane to the adjacent snap point in its direction (Shift moves two), a point beyond the bounds counting as that bound — a 10px step used to snap straight back to the point it started on. With snap points, a shrink arrow at the lowest point no longer collapses a collapsible pane; Enter, double-click and dragging still do. (#7514) -
ResizeHandle: a separator whose region sets nomaxSizenow reports anaria-valuemax— a measured extent standing in for the missing maximum (the window's extent on the region's axis, or the container's content box while a percentage bound observes it), never below the current size or, while collapsed, the minimum. Pixel-only regions inside a container still report no maximum (measuring one would add an observer).ResizablePropsis unchanged; End still moves only to a configured maximum. (#7481) -
useScrollOverflow(the strip ofTabList, the scroller ofCarousel) measures a resize, and its container at registration, only while the container is rendered. Inside adisplay: noneancestor or acontent-visibility: hiddensubtree the hook keeps its last state instead of reading layout, since a layout read there made the browser render the whole hidden subtree for the answer; the resize observation that comes with the reveal measures again, one frame after the reveal paints. A scroll is measured hidden or not, so a container script scrolled while hidden (a selected tab's reveal) is right at a reveal that brings no resize. Before, a hidden container reported no overflow. (#7518) -
A
secondarySelector, MultiSelector, or ComplexSelector now matches the theme's secondary Button: under butter, chocolate, gothic, stone, and y2k it takes that Button's border, fill, text color, and hover instead of the default borderless neutral fill, so a toolbar mixing secondary buttons and selectors reads as one set of controls. Disabled and read-only triggers keep a still fill on hover, as a disabled Button does, and a Selector or MultiSelector inside an InputGroup keeps the group's neutral fill and edges. The default theme is unchanged, the selector docs now saysecondaryfollows the theme's secondary Button, and themes added with the CLI get the same parity. (#7548)Also released in
@astryxdesign/cli,@astryxdesign/theme-butter,@astryxdesign/theme-chocolate,@astryxdesign/theme-gothic,@astryxdesign/theme-stone,@astryxdesign/theme-y2k. -
Selector: activating the clear button with the keyboard now returns focus to the trigger, ashasCleardocuments. Previously the button unmounted once the value was cleared and focus fell to<body>, so a keyboard user had to Tab back in from the top of the page. Pointer clears are unchanged. (#7455) -
SideNav: the resize handle now names the navigation pane it resizes witharia-controls(the nav gets a generated id when the consumer gives none), as the APG window splitter pattern requires, so assistive technology can relate the separator to the pane. (#7473) -
Slider: End now reachesmaxeven when the step grid does not land on it (formax={100}withstep={3}, End stopped at 99). Arrow and Page key results still snap to the nearest step and then clamp. (#7484) -
Slider: on a horizontal track under RTL the arrow keys now follow the mirrored track — ArrowLeft increases the value and ArrowRight decreases it, matching where the thumb moves on screen. ArrowUp/ArrowDown, PageUp/PageDown, Home/End, and vertical sliders are unchanged. (#7461) -
Stop Tokenizer's
hasCreate"Create X" entry from offering a label that is already tokenized under a different id. The duplicate check compared the typed text against selected ids, but real selections usually carry an opaque id (u1under the label "Alice"), and the search results could not catch the match because they are pre-filtered to remove already-selected items — so typing an existing token's label offered "Create", which committed a second, duplicate token with a new id. The check now also compares against selected labels (case-insensitive), in both the Create entry and the stale-entry commit guard. (#6367) -
Keep Toolbar keyboard navigation and roving tab stops outside nested popover menus, without disabling toolbar navigation inside an outer popover. (#7446)
-
TreeList: each row is now named by its label alone and described by its description (aria-labelledby/aria-describedbyon thetreeitem), so screen readers no longer read the chevron toggle's label or the description as part of a row's name, and link and action rows are named as rows, not only through their inner control. Typeahead matches the label rather than the row's whole text. (#7472)
-
AlertDialog's anatomy lists the dialog surface — the modal panel that holds the title, description, and buttons — andCalendar's anatomy lists the calendar root and the day button, so every part that carries a theming target (alert-dialog,calendar,calendar-day) is named in the component docs. (#7464) -
List
DateInput'scontainerClassName,containerStyle,controlClassName, andcontrolStyleprops in its API reference, alongsidecontainerXstyleandcontrolXstyle. (#7372) -
Grid's
columnsdocs now lead with the shape that reflows: a numericcolumnsis exactly N columns at every width and never reflows, andcolumns={{minWidth, max}}is the form for columns that must survive a phone. Theastryx docs layout/responsivetopic gains a "Columns that reflow" section with a reflowing stat row beside a fixed week row. No behavior changes. (#7340)Also released in
@astryxdesign/cli.
- The core build now fails when StyleX rejects a declaration such as a
border,background, orallshorthand, instead of silently dropping it from the shipped CSS. The emitteddist/is unchanged. No API change. (#6830)
@astryxdesign/richtextis now a stable package, released together with@astryxdesign/coreat the same version. Install it without the@canarytag:npm install @astryxdesign/richtext. It providesRichTextEditor,RichTextView,RichTextEditorToolbar,RichTextEditorAutoLinkPlugin, the headless Markdown serializers (also at@astryxdesign/richtext/markdown), and Markdown plugin support throughcreateRichTextExtension.RichTextViewand coreMarkdownrender the same document the same way, and Markdown that is imported and exported without edits comes back byte for byte.lexicaland the@lexical/*packages remain optional peer dependencies. (#7224)
@astryxdesign/richtext(and the Lab and Charts packages) now declare their stylesheet as a side effect, so a bundler that removes side-effect-free imports keepsimport '@astryxdesign/richtext/richtext.css'instead of dropping it and leaving the editor unstyled. JavaScript modules stay tree-shakable. (#7586)
- The
@astryxdesign/richtextREADME shows the full stylesheet setup: Core'sreset.cssandastryx.css, your theme's CSS, andrichtext.css. It says the package ships prebuilt CSS, so you never compile its source, and thatrichtext.csssits in@layer astryx-base, so theme overrides win oncereset.css(or the layer-order line) loads first. (#7582)
astryx theme build --watchstops as soon as it is interrupted (Ctrl-C or SIGTERM). A change saved while a rebuild was running no longer starts another rebuild after "Stopped watching.", and a rebuild in progress stops with the watcher instead of keeping the process alive. (#7508)
astryx searchandastryx build, and thesearchandbuildAPI functions, read each source directory once per call instead of once per candidate. Results are unchanged. A warmsearchdrops from about 1.9 s to 0.4 s on macOS. (#7421)
-
The generated token docs list the five diff row slots of the syntax vocabulary —
--color-syntax-added,--color-syntax-removed,--color-syntax-diff-header,--color-syntax-added-marker,--color-syntax-removed-marker— with their defaults, soastryx docs tokensdescribes nineteen syntax slots. (#7389) -
The Tailwind and migration setup docs now say that
globals.css(or alayers.cssholding only the@layerline) must be the first import in the root layout or app entry, before theastryx-themesmodule or any component that imports theme CSS; otherwise Tailwind preflight overrides Astryx base styles and theme overrides lose. The Tailwind v3 coexistence snippet moves its@layerline into alayers.cssimported first, because Next.js (webpack or Turbopack) hoists CSS imports above an inline@layerline. (#7534) -
The styling setup docs now load the prebuilt stylesheets on every path. The "StyleX from source" path becomes "StyleX for your own code": it keeps
astryx.cssand points the StyleX compiler at your own and swizzled source only. A new "Other Astryx packages" section lists each package's stylesheet (richtext.css,lab.css,charts.css) and where to import it. Getting started no longer lists the two example setups that compile Astryx source; the remaining examples all loadastryx.css. (#7587)
-
Stone, Y2K, and Gothic set
CodeBlock's diff row slots in their own syntax palettes, so a reader of a diff on those themes gets added and removed rows whose code, line numbers, and+/-glyphs stay readable: every syntax token keeps at least 4.5:1 on the tinted rows in Stone (light and dark) and Y2K (light and dark), and in Gothic the rows take a deep green and a deep red at the background's own luminance, so every token keeps the contrast it has on the plain background. Line numbers and glyphs on changed rows use each theme's own green and red. The CLI's bundled copies of the three themes (astryx theme eject) carry the same palettes. (#7428)Also released in
@astryxdesign/cli(templates).
Thanks to everyone who contributed to this release:
@AKnassa @athz @barm @cixzhang @ernestt @Geervan @harjothkhara @imdreamrunner @korkt-kim @kyu-rong @ManoharPaturi @rubyycheung @vjeux
Full Changelog: https://github.com/facebook/astryx/compare/v0.7.0...v0.7.1
slate-react@0.140.0
-
#6105
a07df52Thanks @janpaepke! - Stop drops from throwing when the browser resolves the drop position outside of the editor.<Editable>resolved the target range from the drop coordinates viacaretRangeFromPoint, which can land on a DOM node outside of the editor even though the event's target is inside it (e.g. when the page scrolled between the lastdragoverand thedrop); the resulting "Cannot resolve a Slate point from DOM point" error escaped the event handler and the drop was lost. The dropped data now goes to the current selection instead (the end of the document without one), and internally dragged content stays where it is.DOMEditor.findEventRangegained asuppressThrowoption for this and returnsnullwhen the range cannot be resolved. -
#6306
c4c990eThanks @dylans! - Expose the placeholder to assistive technology asaria-placeholderon the editor root while it is shown, and mark the visual placeholderaria-hiddenso it isn't read as content.
slate-dom@0.140.0
- #6105
a07df52Thanks @janpaepke! - Stop drops from throwing when the browser resolves the drop position outside of the editor.<Editable>resolved the target range from the drop coordinates viacaretRangeFromPoint, which can land on a DOM node outside of the editor even though the event's target is inside it (e.g. when the page scrolled between the lastdragoverand thedrop); the resulting "Cannot resolve a Slate point from DOM point" error escaped the event handler and the drop was lost. The dropped data now goes to the current selection instead (the end of the document without one), and internally dragged content stays where it is.DOMEditor.findEventRangegained asuppressThrowoption for this and returnsnullwhen the range cannot be resolved.
slate@0.140.0
-
#6304
cbc9586Thanks @dylans! - Insert the empty text required by normalization when fragment replacement leaves an insertion point at a block-leading or trailing inline. Resolve the adjacent text within the block so insertion stays there and works before emptied containers normalize.An invalid
mergeNodescall combining block children with text or inline children now throws with both node paths instead of allowing normalization to discard content. Empty children, text-node merges and the previous-node removal policy keep their existing behavior.
slate-history@0.140.0
- #6308
15064b5Thanks @dylans! - Keep a transform's normalization in the same undo step insideHistoryEditor.withoutMerging. Undo steps now start only when the document is normalized, so undoing them no longer throwsCannot find descendant at pathor restores a selection that points at a missing node.
v2.23.3
- Warn about unregistered render containers only when preload starts by @mvaligursky in #9771
Full Changelog: https://github.com/playcanvas/engine/compare/v2.23.2...v2.23.3
v6.0.9
If you like ReactTooltip, please give the project a star on GitHub 🌟
- docs: add Accessibility section by @moloko in https://github.com/ReactTooltip/react-tooltip/pull/1284
- docs: correct aria-describedby guidance in Accessibility section by @moloko in https://github.com/ReactTooltip/react-tooltip/pull/1285
- Keep escaped anchor selectors updating by @feritcemkahraman in https://github.com/ReactTooltip/react-tooltip/pull/1286
- @feritcemkahraman made their first contribution in https://github.com/ReactTooltip/react-tooltip/pull/1286
Full Changelog: https://github.com/ReactTooltip/react-tooltip/compare/v6.0.8...v6.0.9