Tooltip changelog
v1.24.5 (2026-10-23)
Release current/outgoing content from the shared Portal synchronously when its source unmounts, preventing a truncated Text tooltip from reading destroyed derived data after notifications are cleared. If only an outgoing source unmounts, finish that handoff and retain the live target. Ordinary leave, normal switching, rebound, and notification queue behavior remain unchanged.
v1.24.4 (2026-10-23)
Clamp continuous-switch timeline progress to 0–1. If an animation-frame timestamp precedes the timeline start, retain a valid starting position instead of passing negative progress through a fractional power and producing NaN coordinates. Normal timing, easing, rebound, joined content, and the public API remain unchanged.
2026-10-23: Short title/status, shortcut and member-count groups in complex Test content use Frame single-line composition and Text truncation with full-text access. These Text instances explicitly disable duplicate automatic tooltips, retaining complete accessible text and the original prose so an inner short label does not replace the shared tooltip. Large-type diagnostics and positioning/continuous-switching protocols remain unchanged; documentation and examples only.
v1.24.3 (2026-10-12)
Fixed a null-value error when Frame delayed reading cleared properties during shared-overlay close. Exit timing, prop forwarding, and subsequent display remain intact.
v1.24.2 (2026-09-27)
Scaling the entire Button content no longer incorrectly closes motion. Actual trigger or ancestor motion and descendant size changes still close it immediately.
2026-09-21: Unified the usage guide, source property table, and Site / AI reading entry points. Documentation only; component behavior is unchanged.
v1.24.1 (2026-09-21)
Ordinary transitions now start immediately with cubic ease-out. Their baseline tightened to 120–180ms, content lag fell to 0.02, the speed-adjusted minimum fell to 60ms, and ending margin fell to 20ms.
v1.24.0 (2026-09-20)
Continuous switching shortens its timeline based on smoothed pointer speed during display, retaining same-frame synchronization and interruption handoff. Slow movement is not lengthened, and stale samples do not affect the next switch.
v1.23.1 (2026-09-20)
Continuous switching now judges distance from shell centers relative to each viewport axis, fixing jumps between horizontally adjacent tooltips in short viewports and inconsistent decisions when switching in either direction between long and short copy.
v1.23.0 (2026-09-20)
Added maxWidth, default 360px. Body text wraps automatically, with a 16px visible-area safety margin on every side.
After measurement, chooses direction and a minimum-overflow fallback. It responds to visualViewport changes, allows hover scrolling for over-height content, and closes on Escape.
v1.22.4 (2026-09-19)
Added a fully transparent gradient paint surface to the standalone Backdrop. This fixes embedded browsers where the filter had a computed value but underlying text remained sharply visible. The 20px blur and existing transparent color are preserved.
v1.22.3 (2026-08-24)
A warm Tooltip switch now performs real size measurement and positioning immediately after the new Snippet commits, instead of waiting for ResizeObserver’s next frame.
The per-frame timeline now starts directly after prepare-state commit, removing an extra
requestAnimationFrame. Local Chromium measurement moved the moving state from about33msto about4ms; animation duration and curve are unchanged.
v1.22.2 (2026-08-21)
Narrowed the rapid-retarget window to the actual position/content handoff. The tail of an explicit width rebound after content alignment no longer misclassifies the next switch as a rapid retarget.
Fixed repeated switching between “Copy” and “Download” with E1 rebound enabled compressing reverse content motion to
90msand visually losing its continuous clipped reveal.
v1.22.1 (2026-08-21)
Fixed long-to-short content appearing left-aligned inside a still-wide shell when the switch did not meet the content-concatenation threshold.
Unjoined incoming content now remains centered or anchored to the trigger-side edge according to final placement throughout width and height transitions. Its offset naturally reaches zero as the shell settles.
v1.22.0 (2026-08-21)
Restored
rapidRetargetenabled by default. When new targets interrupt continuous motion, it takes over the currently visible shell and primary content layer with90–160mscubic ease-out and0.02content lag.With
rapidRetarget={false}, handoff is still live but uses the ordinary180–360mssinusoidal coordinated timeline. Explicit width rebound keeps its independent1000mscurve.
v1.21.1 (2026-08-21)
Changed the default of
widthReboundfromtruetofalse; continuous Tooltip switching no longer overshoots width by default.Explicit
widthRebound={true}still preserves the original width spring, bidirectional rebound, and continuous clipping in full.
v1.21.0 (2026-08-21)
Added
widthRebound, enabled by default. When false, continuous switching uses the same coordinated curve for width and position, without overshooting target width.Disabling rebound changes only the width curve. Continuous movement, content joining, clipped reveal, live retargeting, and final reduced-motion state remain unchanged.
Removed the test-only motion tuner and the runtime path reading its CSS parameters. E1 / E2 became a left-right comparison with and without rebound.
v1.20.1 (2026-08-21)
Cleaning the old content layer at
450msno longer zeros incoming offset in the same frame, preventing a next-frame width spring from writing a compensating offset that shakes text back and forth.Incoming content keeps its final viewport position after its own movement finishes until the width spring ends and the shell aligns naturally.
v1.20.0 (2026-08-21)
Removed the rapid-retarget-specific
90–160msduration, cubic ease-out,0.02content lag, and runtime state.Changing targets during motion still takes over the current image, but now shares the ordinary continuous-switch
180–360mssinusoidal coordinated timeline and0.08content lag.
v1.19.9 (2026-08-21)
Rapid retargeting now takes over the content layer with the larger actually visible area inside the current clipping window. Unmeasured, unpositioned, or unrevealed intermediate Tooltips are no longer promoted to old content.
When cancelling an old timeline, content-layer offsets immediately freeze relative to the current shell, eliminating a jump from reusing the preceding offset on the first retarget frame.
v1.19.8 (2026-08-21)
Content movement returned to its original
180–360msalignment duration; the old layer still survives until450ms. Separating movement speed from clipping survival removes content jitter during E1 rapid retargeting.Added a
1.5pxvisible minimum for small bidirectional width rebounds. When the natural rebound of about3%exceeds it, the original amplitude remains, preventing subpixel, invisible rebound after an E1 retarget.
v1.19.7 (2026-08-21)
For E1 long-to-short paths such as “Archive → Download”, the continuous clipped-content strip lasts until the first width rebound point at
450ms, rather than only until the earlier position timeline ends.The joined old/new content and rounded clipping persist throughout primary width contraction. After the content strip ends, only the real width rebound of about
3%remains, so short content does not land early in an overly wide empty shell.
v1.19.6 (2026-08-21)
Width completely left the
isRetargetingbranch: every target change responds from currently visible width with the same1000ms/3%curve.Width no longer inherits accumulated speed from the previous segment, avoiding progressively faster visual width changes as E1 is swept continuously. Rapid retargeting of position and content is unchanged.
v1.19.5 (2026-08-21)
Following beUI fast continuous switching, width retargeting no longer has a shorter independent duration. Stable and retargeted changes share
1000msspring parameters.Retargeting inherits current width velocity rather than resetting it to zero. When the target reverses, inertia continues briefly before naturally slowing, reversing, and rebounding.
v1.19.4 (2026-08-21)
Reduced bidirectional width overshoot further, from about
5%to about3%.Slowed the stable width spring from
900msto1000msand fast retargeting from560msto640ms.
v1.19.3 (2026-08-21)
Reduced bidirectional width overshoot from about
7%to about5%for a subtler rebound.Slowed stable width elasticity from
800msto900msand fast retargeting from480msto560ms.
v1.19.2 (2026-08-21)
Raised width overshoot from about
4%to about7%so rebound remains noticeable even for common text-width differences.Clarified the bidirectional rule: expanding first exceeds target width then shrinks back; contracting first goes below target then expands back. Browser regression checks verified maxima and minima frame by frame.
v1.19.1 (2026-08-21)
Separated width rebound from the old
180–360msposition timeline. Stable switches use elasticity near the reference effect for800ms, peaking around360ms; fast retargeting uses480ms.Position, content, and old-content cleanup still finish on the prior timeline rather than slowing with width rebound. Width changes anchor the side near the trigger according to placement.
v1.19.0 (2026-08-21)
Continuous-switch Tooltip shell width now uses an independent underdamped curve: it approaches the target quickly, overshoots by about
4%, then rebounds to target width.Rebound reuses the existing
180–360ms/90–160mstimeline without extending position, content, or overall animation. Height and position curves are unchanged.
v1.18.0 (2026-08-21)
Increased the projected gap between old and new content in the continuous clipped-content strip from
4pxto16px.Content joining is still allowed only when the shortest distance between the two target Tooltip rectangles is at most
4px. For farther targets, only the shell moves; no content strip is created.
v1.17.0 (2026-08-21)
Tooltip Foreground scales from
0.94to1over110msand slides in2pxfrom the trigger direction according to final placement. Exact values follow the Tooltip preset catalog.Top / bottom / left / right enter from below / above / right / left respectively. Transform origin is centered on the side near the trigger. Portal, size shell, and Backdrop remain stable.
Under
prefers-reduced-motion: reduce, Foreground opacity, scale, and translation are skipped and the final stable state appears immediately.
v1.16.0 (2026-08-21)
Slowed continuous clipped reveal to about
0.75of its initial version’s speed, preferring durations rounded to tens of milliseconds.Stable segments changed to
180–360msand retargets to90–160ms. Shell, size, and content still start and finish in the same frames, with content phase lag unchanged.
v1.15.0 (2026-08-21)
Consolidated shared Overlay store, motion dismissal, reduced-motion, and window-position listeners into the sole Portal host. Nonhost Tooltips no longer run reactive logic when another tooltip switches.
Positioning requests from scroll, resize, ResizeObserver, and Overlay updates are now coalesced once per frame, avoiding repeated layout reads in the same frame.
The Portal host now registers motion-aware dismissal according to the active Overlay’s
dismissOnMotionsetting. Public Prop and interaction semantics are unchanged.
v1.14.1 (2026-08-21)
When Tooltip wraps an inner layer of Link / Button composition, it now uses the nearest interactive ancestor for hover and positioning.
Fixed the SidebarItem Link path where hiding a collapsed label left the Tooltip placeholder at zero width, preventing icon hover from showing a tooltip.
v1.14.0 (2026-08-21)
Stable switches changed to
140–280ms, in-flight retargets to70–120ms; SidebarItem moves of roughly 40px settle at about140ms.Content phase lag for stable / retargeted segments narrowed to
0.08 / 0.02.Added a complex continuous-switch test with nested Frame, Text, Badge, Kbd, and Snippets of differing widths and heights.
The light appearance still uses transparent Black/4 plus
20pxbackdrop blur; color variation from the host background is part of the frosted-glass look.
v1.13.0 (2026-08-21)
Changing targets during animation now enters a
90–160msfast-retarget segment and continues from the current image with cubic ease-out. It no longer restarts the full sinusoidal timeline with a slow initial ramp.Content phase lag in retarget segments narrowed to
0.04; the first stable switch retains its full200–320mscoordinated motion.The trigger depends only on the current animation phase; it adds no pointermove listener, burst timer, or playback queue.
v1.12.0 (2026-08-21)
Rebuilt continuous handoff frame by frame from the reference video. Shell and content now use a bounded coordinated
200–320mstimeline, removing independent pixel speeds and a long ending tail.Shell position and size accelerate and decelerate smoothly. Content follows with a slight phase lag and finishes in the same frame as the shell.
Removed the
180msburst jump. Every warm target commits immediately; in-flight motion retargets from the current image, so fast pointer sweeps neither queue nor accumulate duration.Removed complementary layer masks that cut into the incoming content’s first glyph. Actual text rectangles maintain
4pxspacing, clipped only by the rounded shell.Kept the old continuous-motion preset exported as a deprecated compatibility alias so stale module-graph requests during dev-server HMR do not fail on a missing export.
v1.11.0 (2026-08-21)
Moved the default deceleration start to
90%of the timeline and final speed to0.05px/ms.Continuous clipping is now triggered by switch cadence rather than instantaneous pointer speed: the first adjacent switch always animates, later targets within an
180msburst jump directly, and full motion resumes after settling.Removed the document
pointermovehot path. Burst jumps no longer read old content and layer rectangles or create continuous animation frames.
v1.10.0 (2026-08-20)
Removed the fixed
100msintent delay between visible Tooltips. Fast sweeps now respond immediately and skip continuous clipping; slow entry still runs the full motion.Changed content speed to a piecewise model:
0.3px/msthrough the first75%of the timeline, then linearly decelerating through the final25%to0.1px/ms.The test tuner now directly controls when deceleration starts and the final speed.
v1.9.0 (2026-08-20)
Content speed uses the user-adjusted
0.3px/ms. The test added a live motion console for shell speed, content speed, and all four cubic-bezier control points.Added
100msswitch-intent confirmation between visible Tooltips. Briefly passing over a new trigger cancels the pending timer without starting clipped continuous motion.
v1.8.5 (2026-08-20)
Changed content-strip movement from linear progress to cubic ease-out while shell movement remains linear.
Kept the user-adjusted content duration speed of
0.4px/ms; shell remains0.5px/ms.
v1.8.4 (2026-08-20)
Separated shell and joined-content-strip speeds into independent presets: shell stays at
0.5px/ms, content strip slows to0.3px/ms.Both still start in the same frame, each calculating duration from its own distance and speed.
v1.8.3 (2026-08-20)
Shell and joined-content strip now start in the same frame instead of running in “shell first, content second” phases.
Both consume the same linear pixel speed,
TOOLTIP_CONTINUOUS_MOVE_SPEED_PX_PER_MS. Each duration depends on its own travel distance, so longer moves last longer and the two may finish at different times.Shell width and height during continuous switching joined the same per-frame geometry timeline, avoiding fixed size transitions changing actual shell-center speed.
v1.8.2 (2026-08-20)
Changed continuous clipping into a two-phase “join content strip → move shell → align content strip” switch, reproducing the reference video’s staged shell/content movement.
Old and new content keep exactly
4pxprojected spacing along any two-dimensional movement vector. They join only when the shortest distance between target Tooltip rectangles is no more than4px.When target Tooltips are more than
4pxapart, content joining and independent content translation are skipped; only the shell moves. Continuous interruption still starts from its live visible position.
v1.8.1 (2026-08-20)
Completed content progression during clipped switching to match the reference video: old content exits briefly along motion direction, while new content settles from the opposite direction.
Content translation follows any two-dimensional movement vector and caps short movements automatically. Interruptions continue from live content-layer rectangles without snapping back.
Complementary masks now use content rectangles at their actual moving positions and still prevent intersecting regions from painting over each other.
v1.8.0 (2026-08-20)
Continuous Tooltip switching became the default capability, without requiring extra enhancement registration.
Nearby shared shells can move in any two-dimensional direction. Removed the
48pxcross-axis limit while retaining the far-distance direct-position threshold ofmin(240px, 25% of viewport short side).During a switch, old and new content remain fixed at their respective viewport positions and are revealed by the moving rounded shell. Added convergence rules for interruptions and reduced motion.
Fixed overlapping text when target rectangles intersected and both old and new content were clipped into the shared shell at once. Their intersection now uses complementary clipping regions that advance along motion direction.
Fixed Button hover pseudo-element inset/radius transitions being mistaken for trigger-anchor motion, which had closed a warm Tooltip immediately.
v1.7.6 (2026-08-12)
Fixed a shared Tooltip occasionally disappearing and reappearing when moving between adjacent Test Footer buttons at different speeds. The shared-shell hold changed from fixed 80ms to the shared 300ms skip delay, and hide now respects the actual
delayMs.
v1.7.5 (2026-08-12)
Split the visible Tooltip into stable Backdrop and separate Foreground. Backdrop renders full
blur(20px)on the first frame; Foreground background color and content regain opacity plus slight scale. One invisible prepaint frame remains; on exit Foreground keeps its fast opacity + scale.
v1.7.4 (2026-08-12)
A Test Footer retest still showed blurred pixels appearing after the Tooltip. Removed entrance transform and added an invisible prepaint frame before
data-ready=true. The frosted layer useswill-changeprecomposition only while Tooltip is mounted; exit motion is unchanged.
v1.7.3 (2026-08-12)
Fixed background blur sharpening only after Tooltip appeared. Filter calculation was not delayed; the entrance preset removed Portal opacity and extra delay, leaving only a slight scale so full frosted glass appears with Tooltip in the same frame.
v1.7.2 (2026-08-12)
Fixed decorative
animationstartevents from an animated Logo / Icon descendant of a trigger incorrectly closing Tooltip. Motion protection still closes for the trigger itself, its ancestors, and descendant geometry transitions.
v1.7.1 (2026-08-12)
Fixed a Styles root-isolation selector accidentally matching Tooltip Portal, which prevented
blur(1.25rem)from sampling app content. Tooltip’s default light variant is unchanged.
v1.7.0 (2026-07-28)
Added
dismissOnMotion, enabled by default. Tooltip unmounts before the first frame of displacement when the trigger or an ancestor starts geometric motion, avoiding Portal repositioning jumps.Motion listeners start and stop on demand and are shared within one document; there are no per-frame layout reads or permanent Observers.
v1.6.17 (2026-07-28)
Changed Tooltip’s default appearance from
darktolight;variant="dark"remains available explicitly.
v1.6.16 (2026-06-30)
Removed an inner Frame’s
whileActive={true}placeholder that never reached Active or produced visuals. Tooltip presets still own lifecycle motion and expliciteffectiveSizeMotionstill owns size motion; runtime appearance is unchanged.
v1.6.14 (2026-06-06)
Position calculations now use measured target width and height rather than current Portal DOM height, fixing too little space between a top-placed Tooltip and its button on first appearance.
v1.6.13 (2026-06-06)
Changed the size shell’s centering offset from animatable
translateto statictransform: translateX/Y(-50%); width and height still transition through the Frame size-motion bridge.Fixed a stale size-offset animation after repeated rapid switches in the E1 example, which left the Tooltip shell off-center from its current trigger button.
v1.6.15 (2026-06-18)
Appearance/disappearance motion now references
TOOLTIP_APPEAR_MOTION/TOOLTIP_DISAPPEAR_MOTION; the motion preset catalog defines exact values.Tooltip enables lifecycle entry/exit motion by default. Enhanced capabilities still control smooth movement and size motion.
Changed the shared first-hover delay for Tooltip / Popover to
450ms.
v1.6.12 (2026-06-06)
Removed the all-property transition from
whileActiveon the Tooltip Portal layer so top / left do not animate implicitly during a cross-row snap.Near-target smooth movement is now owned by Tooltip Portal CSS with
150ms ease-out; the size shell still uses the Frame size-motion bridge.
v1.6.11 (2026-06-06)
Added same-row/same-axis limits for near-target movement: top / bottom placement snaps when vertical difference exceeds
48px, and left / right snaps when horizontal difference exceeds48px.Fixed the E1 example looking misaligned with the current trigger while Tooltip moved rapidly from a lower-row button to an upper-row button.
v1.6.10 (2026-06-06)
Shortened Tooltip appearance from
150msto100ms; disappearance, width change, near-target movement, and hover-delay timing are unchanged.
v1.6.9 (2026-06-06)
Modeled Tooltip entry/exit on HeroUI Tooltip: entry fades over
150ms, scales withscale(0.9 -> 1), and slides4pxopposite final placement; exit fades over100mswithscale(1 -> 0.95).Only lifecycle visibility motion changed; width transitions, near-target movement, and hover delay stayed the same.
v1.6.8 (2026-06-06)
Changed Tooltip entry/exit to Frame fade-only lifecycle motion: entry fades in and exit fades out without default
scaleIn, avoiding apparent size changes.Halved visibility-motion duration from the default
300msfade to150ms; first-hover delay and warmup / cooldown timing are unchanged.A new display first measures and positions invisibly, then starts fade-in on the next frame. Size motion starts only after fade-in ends, preventing transitions from page top-left, a stale position, or stale width.
v1.6.7 (2026-06-06)
Connected the shared Tooltip Portal to Frame lifecycle motion using default
whileAppearon entry andwhileDisappearon exit.In uncontrolled hover mode, clearing Overlay state preserves the previous
renderedOverlaysnapshot until Frame’s default exit motion finishes, then unmounts the shell.
v1.6.6 (2026-06-06)
On reappearance after hiding, Tooltip clears the previous
coords,measuredSize,lastPositionTooltipId, and movement state, preventing a flight from the old position to the current trigger.Each new display measures and positions invisibly, then appears at the correct current hover trigger on its first frame. Initial size writes do not animate width/height; later switches within the same visible shell do.
v1.6.5 (2026-06-06)
Changed positioning to an anchor-center model: top / bottom use the trigger’s horizontal center as Portal coordinate, while left / right use its vertical center.
Shell width/height, centering offset, and near-target movement now share
150msFrame motion timing, avoiding misalignment with the current trigger center during size animation.Dynamic coordinates and measured sizes are written as
px, avoiding anchor drift when the root font size is not16pxandgetBoundingClientRect()coordinates would be converted to rem.
v1.6.4 (2026-06-06)
Doubled the speed of shell widening/narrowing. The size shell still uses Frame’s default
MORPH_MOTION, but halves duration to150msbefore injecting it into the Frame size-motion bridge.
v1.6.3 (2026-06-06)
Changed size animation to morph the shell itself:
snowui-tooltip-size-shellowns the visible outline;snowui-tooltip-inneronly measures and lays out content. This avoids an apparent mask revealing a long shell.
v1.6.2 (2026-06-06)
Made width and height explicit on the Tooltip size shell. A shared ResizeObserver measures natural content size, then writes dimensions; transitions consume the Frame size-motion bridge.
v1.6.1 (2026-06-06)
Added movement rules when shared Portal changes trigger: nearby targets move smoothly through the Frame control-motion bridge, while far targets position directly at the new trigger.
E1 example buttons now show distinct Tooltip content to verify the shared shell, content update, and movement.
v1.6.0 (2026-06-06)
Uncontrolled hover mode now uses one page-level shared Portal. Quickly switching Tooltip triggers reuses one shell and updates only content, position, and size.
The Tooltip content shell consumes the Frame size-motion bridge, so copy-driven width and height changes use Frame’s default size-motion timing.
v1.5.0 (2026-06-02)
Added a shared warmup / cooldown coordinator following Radix Tooltip’s
delayDuration/skipDelayDurationsemantics.Changed first-hover delay to
600ms. After any Tooltip has appeared, switching to another within300msdisplays immediately.Controlled
openmode remains driven directly by external state and does not participate in shared delay state.
v1.4.7 (2026-05-15)
Removed Tooltip’s custom
Idle/Activescale-and-fade entry and adopted Frame’s defaultwhileAppear, displaying immediately like Popover.
v1.4.6 (2026-03-07)
Freed the
whileLoadkeyword. Tooltip now usesloadingto disable triggering and forwardswhileLoadto Frame for loading-state motion.
v1.4.5 (2026-03-06)
Changed the outer Tooltip Portal to Frame, so
loopMotionapplies to the visible overlay root. The inner content layer keeps its defaultIdle -> Activeentry combination.
v1.4.4 (2026-03-03)
Tooltip entry now uses the shared Frame state-motion chain (
Idle -> Activeautomatically). Its local0.5shover delay is unchanged.
v1.4.3 (2026-02-26)
Removed compatibility reads of Tooltip’s
themeprop; appearance is controlled only byvariant.
v1.4.2 (2026-02-26)
Renamed the appearance prop from
themetovariant(dark | light).
v1.4.1 (2026-02-26)
Removed Tooltip shadow (
box-shadow).
v1.4.0 (2026-02-26)
Updated Tooltip styling to the Figma specification for padding, gap, radius, font, and backdrop-filter.
Added the
themeprop (dark | light), defaulting todark.darkuses a layeredStatic Black/80% + Static White/10%background withStatic White/100%text.lightuses aBlack/4%background andBlack/100%text.
v1.3.1 (2026-02-26)
After hover entry, Tooltip appears with a fade after
0.5s; it hides immediately on exit without fade-out.
v1.3.0 (2026-02-26)
Removed the
contentprop; use Tooltip child content for the message.
v1.2.1 (2026-02-25)
Fixed role detection: Text truncation visibility rules apply only with
as="tooltip".
v1.2.0 (2026-02-03)
Initial version with Portal mode and role-based composition.