From a94cd307ba4f854fa25fc722b6058e256f9b851c Mon Sep 17 00:00:00 2001 From: Barack Sokullu Date: Wed, 26 Aug 2026 23:58:44 +0300 Subject: [PATCH 1/2] Refine selected-text chat shortcut --- src/chrome/src/content/selection-shortcut.js | 30 +++++++----- src/chrome/src/selection-shortcut-i18n.js | 46 +++++++++---------- src/firefox/src/content/selection-shortcut.js | 30 +++++++----- src/firefox/src/selection-shortcut-i18n.js | 46 +++++++++---------- test/fixtures/run.mjs | 9 ++++ test/run.js | 8 +++- 6 files changed, 97 insertions(+), 72 deletions(-) diff --git a/src/chrome/src/content/selection-shortcut.js b/src/chrome/src/content/selection-shortcut.js index e27c63483..e67685088 100644 --- a/src/chrome/src/content/selection-shortcut.js +++ b/src/chrome/src/content/selection-shortcut.js @@ -161,13 +161,13 @@ host.lang = localization.locale; if (ancestor?.closest?.('input, textarea')) return null; const rects = Array.from(range.getClientRects()).filter((rect) => rect.width > 0 && rect.height > 0); - const rect = rects.at(-1) || range.getBoundingClientRect(); + const visibleRects = collectVisibleHighlightRects(rects); + const rect = visibleRects[0] || rects[0] || range.getBoundingClientRect(); if (!rect || (!rect.width && !rect.height)) return null; - const highlightRects = collectVisibleHighlightRects(rects); return { text, rect: serializeRect(rect), - rects: (highlightRects.length ? highlightRects : [rect]).map(serializeRect), + rects: (visibleRects.length ? visibleRects : [rect]).map(serializeRect), }; } @@ -194,12 +194,12 @@ host.lang = localization.locale; } .shortcut { position:fixed; width:${BUTTON_SIZE}px; height:${BUTTON_SIZE}px; display:grid; - place-items:center; padding:0; border:1px solid rgba(108,99,255,.34); - border-radius:14px; background:var(--bg); color:var(--accent); - box-shadow:0 10px 26px rgba(35,30,95,.22),0 2px 7px rgba(35,30,95,.12); + place-items:center; padding:0; border:1px solid rgba(23,23,34,.14); + border-radius:14px; background:#fff; color:#171722; + box-shadow:0 9px 20px rgba(23,23,34,.16),0 2px 5px rgba(23,23,34,.1); cursor:pointer; pointer-events:auto; transition:transform 130ms ease,box-shadow 130ms ease; } - .shortcut:hover { transform:translateY(-1px) scale(1.03); box-shadow:0 13px 30px rgba(35,30,95,.27),0 3px 8px rgba(35,30,95,.14); } + .shortcut:hover { transform:translateY(-1px) scale(1.03); box-shadow:0 12px 25px rgba(23,23,34,.2),0 3px 7px rgba(23,23,34,.12); } .shortcut-icon { display:block; font:700 25px/1 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; transform:translateY(-1px); @@ -256,7 +256,8 @@ host.lang = localization.locale; width:auto; margin-left:auto; padding:5px 8px; color:var(--muted); font-size:12px; line-height:1.25; } - .shortcut:focus-visible,.action:focus-visible,.hide:focus-visible,.send:focus-visible,textarea:focus-visible,.context-option input:focus-visible { + .shortcut:focus-visible { outline:3px solid rgba(23,23,34,.24); outline-offset:2px; } + .action:focus-visible,.hide:focus-visible,.send:focus-visible,textarea:focus-visible,.context-option input:focus-visible { outline:3px solid rgba(108,99,255,.34); outline-offset:2px; } .toast { @@ -275,10 +276,10 @@ host.lang = localization.locale; @media (prefers-reduced-motion:reduce) { .shortcut { transition:none; } } - -