Patch Changes
-
bc3a591: Fix the grab hanging on "Grabbing…" when the app saturates the dev server's connection pool. Source resolution (bundle and source-map fetches via bippy, plus Next.js server-frame symbolication) now runs through a concurrency-capped, abortable queue with a timeout, so it no longer queues indefinitely behind the app's own requests. Requires bippy ≥0.5.42 so an aborted source-map fetch no longer poisons bippy's cache and later grabs recover.
Also fixes:
- A click immediately after keyboard navigation selecting a stale element instead of the one under the pointer.
- The page jumping when focus is restored after a grab (focus now restores with
preventScroll). - Being unable to select page content while a modal sets
body { pointer-events: none }(e.g. Radix), via a hit-test override.
Plus activation and drag performance: animations freeze via the Web Animations API instead of a universal-selector recalc, activation batches its layout reads before writes, the React-update freeze walks fibers iteratively, and drag de-duplication is O(n·d) instead of O(n²).
-
e56fcc1: Style mode now resolves committed values to the project's design tokens when copying. Tokens are derived from the CSS custom properties already defined in the page's cascade, so this works for any library that exposes design tokens as CSS variables (shadcn/ui, Radix, Chakra, MUI, Tailwind v4
@theme, Panda, vanilla-extract, …) rather than a single hard-coded framework. When a tweaked color matches a token, or a length matches a token whose name shares the property's family (spacing/size/radius/font-size/…), the copied CSS annotates the declaration with a/* var(--token) */hint and the prompt nudges the agent to prefer the token over the raw value.Arrow-key stepping in the Style panel now snaps a px property through that token scale (e.g.
←/→walk the spacing tokens) instead of always nudging ±1px.Shiftkeeps the coarse raw step (×10) andAlt/Optiondoes a fine raw ±1px step — both opt out of snapping so values can land between tokens. A value sitting outside the scale falls back to a raw step so stepping never dead-ends. When a framework exposes spacing as a single base unit instead of discrete tokens (Tailwind v4's--spacing), stepping walks that base-unit grid.Color tokens are resolved through the browser's own rasterizer, so modern wide-gamut values that
getComputedStylereturns —lab(),lch(),oklab(),oklch(),color()— are matched too (these are what Tailwind v4 / shadcn themes compile to), not just hex/rgb/hsl. -
853ec52: Fix theme detection mis-classifying an undeclared light page as dark for visitors on a dark OS. When a page has no theme marker, no
color-scheme, and no painted background, detection now derives the real backdrop from the CSSCanvassystem color instead of guessing fromprefers-color-scheme.Canvashonors the root element's usedcolor-scheme, so it stays light under the defaultnormal(regardless of the OS) and only tracks the OS preference when the page opts into a dark-capable scheme such aslight dark- matching exactly what the browser paints behind the page.- @react-grab/cli@0.1.48