/** * @oxpulse/chat-widget — ReactionTrigger (reactions quick-bar redesign, * heart-first amendment 2026-07-14, reuse-update pass). * * Wired to a single heart button per bubble: * - Tap/click (no preceding hold) → onToggle() — instant add/remove/ * replace-to-heart, handled by the caller. * - Touch/pen: press-and-hold ≥400ms → onOpenBar() — reveals the full * ReactionQuickBar. Movement >10px cancels (scroll wins) and suppresses * the trailing click too (a drag gesture is not a tap). Long-press * timing/gating ported from oxpulse-chat web's * `web/src/lib/chat/list/usePopover.svelte.ts` (LONG_PRESS_MS=400, * POINTER_CANCEL_PX=10, mouse excluded from this path). * - Mouse: no long-press — instead a hover-intent ≥400ms scoped to THIS * button (not the bubble) reveals the bar (TG-desktop pattern). Leaving * before 400ms cancels; once opened there is no auto-hide-on-leave — * ReactionQuickBar owns its own dismissal (Escape/outside-click/select). * - ArrowUp → onOpenBar() (keyboard/SR path to the full bar). * - Enter/Space → native