1 hours ago
slate

slate-react@0.140.1

Patch Changes

  • #6084 dcae734 Thanks @a-y-ibrahim! - Keep the DOM and Slate value in sync when an insertText override rejects native text input, including insertions at decoration boundaries.
2 hours ago
next.js

v16.4.2

What's Changed

Full Changelog: https://github.com/vercel/next.js/compare/v16.4.1...v16.4.2

3 hours ago
cytoscape.js

v3.34.4

Release version v3.34.4

4 hours ago
astryx

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 .

@astryxdesign/core

New Features

  • Chat: mention people and topics by multi-word names with opt-in hasMultiWordQuery on ChatComposerTrigger (#6128) Set hasMultiWordQuery: true on a trigger whose suggestions contain spaces, and typing @Jordan Le keeps 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 sets emptySearchText. 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.

  • CodeBlock gains isDiff, a diff layer over any language, and Markdown renders a fenced diff code block as tinted diff rows instead of plain text. (#7389) With isDiff, 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-muted and --color-error-muted at 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-green and --color-text-red in 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 a diff code fence to the layer over plaintext (labelled diff), so a diff keeps its header, copy button, disclosure, and a viewport name that still says diff.

    A diff code fence that should stay plain text can use text. A custom components.code renderer is unchanged: it keeps receiving the fence's leading word characters in language (diff for both diff and diff-tsx, as today), so an existing language === '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, and Tokenizer. Override the new @astryx.inputClearButton.tooltip catalog key to change the wording. (#7476)

  • Markdown fenced 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 where Markdown and 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 the components.code prop with a CodeBlock that leaves isWrapped off. (#7564)

  • Selector, MultiSelector, and ComplexSelector gain a secondary variant: a borderless, neutral-filled trigger matching secondary buttons in navigation and toolbar compositions. Inside an InputGroup, a secondary Selector or MultiSelector keeps its fill and takes the group's row height and connected edges. Existing input (default) and ghost behavior is unchanged. (#7252)

Fixes

  • Typeahead, Tokenizer, and PowerSearch: focusing an empty field with hasEntriesOnFocus after 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)

  • BottomSheet returns 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 a DropdownMenu bottom-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 past min/max changes 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)

  • Calendar with hasWeekNumbers: the blank cell above the week-number column is now a columnheader named 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)

  • ChatMessage no 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 returns null, collapses its wrapper. A name that renders no text falls back to the translated sender label, while numeric values such as 0 still 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)

  • CommandPaletteInput now exposes the semantics and name that its visible state promises. (#7321)

    • A standalone field with no popup attributes was role="combobox" with aria-expanded="true" and aria-autocomplete="list"; it is now role="searchbox" with no popup state. Pass role="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 a combobox and keeps them, and a field inside CommandPalette is unchanged.

    • The field's default accessible name was its placeholder (Search…, or the caller's placeholder); it is now Search commands, translated. Pass label to keep a specific name, for example label="Search…" for the old default. A caller whose custom placeholder served as the name keeps working code and hears the generic name until it passes label.

    • The CLI's async-search CommandPalette block names its field Search files.

    • endContent={true} no longer renders an empty trailing slot, and endContent={0} renders inside the trailing slot instead of after it.

    Also released in @astryxdesign/cli.

  • A standalone CommandPaletteItem now 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)

  • CommandPalette now 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 reports aria-expanded="false" with no aria-controls or aria-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 results by default, or the caller's emptySearchText), once the search settles. It used to announce No results for <query>, whatever the palette showed. An override of the @astryx.commandPalette.noResultsFor catalog entry no longer has any effect; use emptySearchText to customize the message.

  • ContextMenu paints 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 default position-visibility: anchors-visible hid 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)

  • ContextMenu now 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 DateInput and DateTimeInput: 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)

  • Dialog now preserves consumer onClick handlers while retaining its controlled backdrop-dismissal behavior. (#7452)

  • DialogHeader now keeps valid numeric zero content inside its startContent and endContent wrappers and theme targets. (#7454)

  • Divider now keeps numeric zero labels inside the labelled separator and omits boolean or empty-string labels without leaving empty label spacing. (#7572)

  • DropdownMenuCheckboxItem now preserves consumer click and pointer-move handlers while keeping its checked-state, disabled, hover-focus, and close-menu behavior. (#7573)

  • A DropdownMenu with header or footer is now exposed as a modal dialog around its menu, as the APG Dialog pattern requires. The popover is a named role="dialog" with aria-modal and the role="menu" inside it; the trigger says aria-haspopup="dialog" and its aria-controls names 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 DropdownMenu whose 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)

  • DropdownMenu and MoreMenu: 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 or aria-disabled custom trigger. (#7475)

  • FormLayout: below the 480px collapse, direction="horizontal-labels" controls now fill the column the way they do in a vertical FormLayout. Previously each control shrank to its content, so a Selector was 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 fresh ref/interactionRef on every render because its callbacks depended on the whole layer and touch objects, which are rebuilt each render — React detached and re-attached every trigger listener and rewrote the trigger's inline anchor-name on 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.activeElement became <body> after close, stranding keyboard and screen-reader users at the top of the document. MobileNav now captures the opener before showModal() moves focus into the top layer and hands it back as soon as the native dialog has closed, matching what Dialog already 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 earlier focus() would be silently dropped. The restore also covers the AppShell path, where the drawer is torn down by an <Activity> switching to mode="hidden" rather than by the close branch re-running. No API change. Focus is left untouched when there was no real opener (activeElement was <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, as hasClear documents. 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 an InternationalizationProvider locale or override can replace it. Adds @astryx.numberInput.invalidNumber to the en catalog. 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: loading reset.css after astryx.css no 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.

  • plainDateToInstant now 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 of 0001-01-15 was captioned "January 1901" with 1901's weekday layout and day labels, while onChange still 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)

  • CommandPaletteList now preserves a caller-supplied id when used standalone, while a managed CommandPalette still assigns the ARIA id its search field controls. External labels and test hooks stay attached without breaking the palette's combobox relationship. (#6988)

  • reset.css no longer hides hidden="until-found" content with display: 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. Plain hidden elements are still display: 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 its collapsedSize when 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 when minSize is below collapsedSize. The handle uses useResizable's own collapse and expand transitions; ResizableProps is 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 no maxSize now reports an aria-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). ResizableProps is unchanged; End still moves only to a configured maximum. (#7481)

  • useScrollOverflow (the strip of TabList, the scroller of Carousel) measures a resize, and its container at registration, only while the container is rendered. Inside a display: none ancestor or a content-visibility: hidden subtree 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 secondary Selector, 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 say secondary follows 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, as hasClear documents. 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 with aria-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 reaches max even when the step grid does not land on it (for max={100} with step={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 (u1 under 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-describedby on the treeitem), 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)

Documentation

  • AlertDialog's anatomy lists the dialog surface — the modal panel that holds the title, description, and buttons — and Calendar'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's containerClassName, containerStyle, controlClassName, and controlStyle props in its API reference, alongside containerXstyle and controlXstyle. (#7372)

  • Grid's columns docs now lead with the shape that reflows: a numeric columns is exactly N columns at every width and never reflows, and columns={{minWidth, max}} is the form for columns that must survive a phone. The astryx docs layout/responsive topic 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.

Other Changes

  • The core build now fails when StyleX rejects a declaration such as a border, background, or all shorthand, instead of silently dropping it from the shipped CSS. The emitted dist/ is unchanged. No API change. (#6830)

@astryxdesign/richtext

New Features

  • @astryxdesign/richtext is now a stable package, released together with @astryxdesign/core at the same version. Install it without the @canary tag: npm install @astryxdesign/richtext. It provides RichTextEditor, RichTextView, RichTextEditorToolbar, RichTextEditorAutoLinkPlugin, the headless Markdown serializers (also at @astryxdesign/richtext/markdown), and Markdown plugin support through createRichTextExtension. RichTextView and core Markdown render the same document the same way, and Markdown that is imported and exported without edits comes back byte for byte. lexical and the @lexical/* packages remain optional peer dependencies. (#7224)

Fixes

  • @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 keeps import '@astryxdesign/richtext/richtext.css' instead of dropping it and leaving the editor unstyled. JavaScript modules stay tree-shakable. (#7586)

Documentation

  • The @astryxdesign/richtext README shows the full stylesheet setup: Core's reset.css and astryx.css, your theme's CSS, and richtext.css. It says the package ships prebuilt CSS, so you never compile its source, and that richtext.css sits in @layer astryx-base, so theme overrides win once reset.css (or the layer-order line) loads first. (#7582)

@astryxdesign/cli

Fixes

  • astryx theme build --watch stops 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)

Performance

  • astryx search and astryx build, and the search and build API functions, read each source directory once per call instead of once per candidate. Results are unchanged. A warm search drops from about 1.9 s to 0.4 s on macOS. (#7421)

Documentation

  • 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, so astryx docs tokens describes nineteen syntax slots. (#7389)

  • The Tailwind and migration setup docs now say that globals.css (or a layers.css holding only the @layer line) must be the first import in the root layout or app entry, before the astryx-themes module 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 @layer line into a layers.css imported first, because Next.js (webpack or Turbopack) hoists CSS imports above an inline @layer line. (#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.css and 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 load astryx.css. (#7587)

Themes (@astryxdesign/theme-*)

Fixes

  • 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).

Contributors

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

4 hours ago
slate

slate-react@0.140.0

Patch Changes

  • #6105 a07df52 Thanks @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 via caretRangeFromPoint, 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 last dragover and the drop); 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.findEventRange gained a suppressThrow option for this and returns null when the range cannot be resolved.

  • #6306 c4c990e Thanks @dylans! - Expose the placeholder to assistive technology as aria-placeholder on the editor root while it is shown, and mark the visual placeholder aria-hidden so it isn't read as content.

4 hours ago
slate

slate-dom@0.140.0

Minor Changes

  • #6105 a07df52 Thanks @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 via caretRangeFromPoint, 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 last dragover and the drop); 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.findEventRange gained a suppressThrow option for this and returns null when the range cannot be resolved.
4 hours ago
slate

slate@0.140.0

Patch Changes

  • #6304 cbc9586 Thanks @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 mergeNodes call 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.

4 hours ago
slate

slate-history@0.140.0

Patch Changes

  • #6308 15064b5 Thanks @dylans! - Keep a transform's normalization in the same undo step inside HistoryEditor.withoutMerging. Undo steps now start only when the document is normalized, so undoing them no longer throws Cannot find descendant at path or restores a selection that points at a missing node.
7 hours ago
engine

v2.23.3

Fixes

  • 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

7 hours ago
react-tooltip

v6.0.9

If you like ReactTooltip, please give the project a star on GitHub 🌟

What's Changed

New Contributors

Full Changelog: https://github.com/ReactTooltip/react-tooltip/compare/v6.0.8...v6.0.9