Pricing

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 about 33ms to about 4ms; 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 90ms and 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 rapidRetarget enabled by default. When new targets interrupt continuous motion, it takes over the currently visible shell and primary content layer with 90–160ms cubic ease-out and 0.02 content lag.

  • With rapidRetarget={false}, handoff is still live but uses the ordinary 180–360ms sinusoidal coordinated timeline. Explicit width rebound keeps its independent 1000ms curve.

v1.21.1 (2026-08-21)

  • Changed the default of widthRebound from true to false; 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 450ms no 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–160ms duration, cubic ease-out, 0.02 content lag, and runtime state.

  • Changing targets during motion still takes over the current image, but now shares the ordinary continuous-switch 180–360ms sinusoidal coordinated timeline and 0.08 content 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–360ms alignment duration; the old layer still survives until 450ms. Separating movement speed from clipping survival removes content jitter during E1 rapid retargeting.

  • Added a 1.5px visible minimum for small bidirectional width rebounds. When the natural rebound of about 3% 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 isRetargeting branch: every target change responds from currently visible width with the same 1000ms / 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 1000ms spring 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 about 3%.

  • Slowed the stable width spring from 900ms to 1000ms and fast retargeting from 560ms to 640ms.

v1.19.3 (2026-08-21)

  • Reduced bidirectional width overshoot from about 7% to about 5% for a subtler rebound.

  • Slowed stable width elasticity from 800ms to 900ms and fast retargeting from 480ms to 560ms.

v1.19.2 (2026-08-21)

  • Raised width overshoot from about 4% to about 7% 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–360ms position timeline. Stable switches use elasticity near the reference effect for 800ms, peaking around 360ms; fast retargeting uses 480ms.

  • 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–160ms timeline 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 4px to 16px.

  • 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.94 to 1 over 110ms and slides in 2px from 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.75 of its initial version’s speed, preferring durations rounded to tens of milliseconds.

  • Stable segments changed to 180–360ms and retargets to 90–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 dismissOnMotion setting. 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 to 70–120ms; SidebarItem moves of roughly 40px settle at about 140ms.

  • 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 20px backdrop 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–160ms fast-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 full 200–320ms coordinated 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–320ms timeline, 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 180ms burst 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 4px spacing, 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 to 0.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 180ms burst jump directly, and full motion resumes after settling.

  • Removed the document pointermove hot 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 100ms intent 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/ms through the first 75% of the timeline, then linearly decelerating through the final 25% to 0.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 100ms switch-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 remains 0.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 to 0.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 4px projected spacing along any two-dimensional movement vector. They join only when the shortest distance between target Tooltip rectangles is no more than 4px.

  • When target Tooltips are more than 4px apart, 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 48px cross-axis limit while retaining the far-distance direct-position threshold of min(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 uses will-change precomposition 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 animationstart events 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 dark to light; 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 explicit effectiveSizeMotion still 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 translate to static transform: 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 whileActive on 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 exceeds 48px.

  • 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 150ms to 100ms; 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 with scale(0.9 -> 1), and slides 4px opposite final placement; exit fades over 100ms with scale(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 300ms fade to 150ms; 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 whileAppear on entry and whileDisappear on exit.

  • In uncontrolled hover mode, clearing Overlay state preserves the previous renderedOverlay snapshot 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 150ms Frame 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 not 16px and getBoundingClientRect() 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 to 150ms before 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-shell owns the visible outline; snowui-tooltip-inner only 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 / skipDelayDuration semantics.

  • Changed first-hover delay to 600ms. After any Tooltip has appeared, switching to another within 300ms displays immediately.

  • Controlled open mode 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/Active scale-and-fade entry and adopted Frame’s default whileAppear, displaying immediately like Popover.

v1.4.6 (2026-03-07)

  • Freed the whileLoad keyword. Tooltip now uses loading to disable triggering and forwards whileLoad to Frame for loading-state motion.

v1.4.5 (2026-03-06)

  • Changed the outer Tooltip Portal to Frame, so loopMotion applies to the visible overlay root. The inner content layer keeps its default Idle -> Active entry combination.

v1.4.4 (2026-03-03)

  • Tooltip entry now uses the shared Frame state-motion chain (Idle -> Active automatically). Its local 0.5s hover delay is unchanged.

v1.4.3 (2026-02-26)

  • Removed compatibility reads of Tooltip’s theme prop; appearance is controlled only by variant.

v1.4.2 (2026-02-26)

  • Renamed the appearance prop from theme to variant (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 theme prop (dark | light), defaulting to dark.

  • dark uses a layered Static Black/80% + Static White/10% background with Static White/100% text.

  • light uses a Black/4% background and Black/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 content prop; 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.