3d870e4370eb
wrap copy actions under a single muted Copy eyebrow — Email/Username/Password buttons replace repetitive Copy email / Copy username / Copy password (inject.ts + marketing card, v3.6.72)
- time
- 2026-05-21 01:53 UTC · 5 months ago
- machine
- koh2
- parent
- 34cda6281b85
↓ peach-browser-3d870e43.tar.gzatlas at this save
files changed4 files
manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/content/inject.ts+24 −7manifest.firefox.json+1 −1
@@ -2,7 +2,7 @@22 "_comment_audio_capture": "Firefox does not honor the Chrome 'audioCapture' optional_permission — getUserMedia in WebExtensions is gated solely by the runtime permission prompt. Microphone access for chirp pairing works from the popup under the existing '<all_urls>' host permission; no manifest entry is required or accepted here.",33 "manifest_version": 3,44 "name": "Peach",5- "version": "3.6.71",5+ "version": "3.6.72",66 "description": "Zero-knowledge password manager",77 "browser_specific_settings": {88 "gecko": {manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach",4- "version": "3.6.71",4+ "version": "3.6.72",55 "description": "Zero-knowledge password manager",66 "action": {77 "default_popup": "src/popup/index.html",package.json+1 −1
@@ -1,6 +1,6 @@11 {22 "name": "peach",3- "version": "3.6.71",3+ "version": "3.6.72",44 "description": "Zero-knowledge password manager",55 "type": "module",66 "scripts": {src/content/inject.ts+24 −7
@@ -820,9 +820,18 @@820820 cursor: default;821821 }822822 .sp-fill-btn:disabled { cursor: default; }823+ .sp-actions-group {824+ margin-top: 6px;825+ display: flex; flex-direction: column; gap: 4px;826+ }827+ .sp-actions-label {828+ font-size: 8px; letter-spacing: 0.18em; text-transform: uppercase;829+ color: var(--peach-text-muted);830+ font-family: "IBM Plex Mono", monospace;831+ text-align: center;832+ }823833 .sp-actions {824834 display: flex; gap: 4px; justify-content: space-between; align-items: center;825- margin-top: 4px;826835 }827836 .sp-action-btn {828837 flex: 1; height: 28px; border: none; border-radius: 6px;@@ -2025,15 +2034,23 @@20252034 });20262035 platter.appendChild(fillBtn);20272036 2037+ const actionsGroup = document.createElement("div");2038+ actionsGroup.className = "sp-actions-group";2039+ const actionsLabel = document.createElement("div");2040+ actionsLabel.className = "sp-actions-label";2041+ actionsLabel.textContent = "Copy";2042+ actionsGroup.appendChild(actionsLabel);2043+20282044 const actions = document.createElement("div");20292045 actions.className = "sp-actions";2046+ actionsGroup.appendChild(actions);20302047 20312048 if (entry.email) {20322049 const copyEmail = document.createElement("button");20332050 copyEmail.className = "sp-action-btn";20342051 copyEmail.type = "button";20352052 copyEmail.title = "Copy email";2036- copyEmail.textContent = "Copy email";2053+ copyEmail.textContent = "Email";20372054 copyEmail.addEventListener("click", async (e) => {20382055 e.stopPropagation();20392056 let alreadyWritten = false;@@ -2056,9 +2073,9 @@20562073 const copyU = document.createElement("button");20572074 copyU.className = "sp-action-btn";20582075 copyU.type = "button";2059- const copyULabel = entry.username?.includes("@") ? "Copy email" : "Copy username";2060- copyU.title = copyULabel;2061- copyU.textContent = copyULabel;2076+ const usernameIsEmail = entry.username?.includes("@") ?? false;2077+ copyU.title = usernameIsEmail ? "Copy email" : "Copy username";2078+ copyU.textContent = usernameIsEmail ? "Email" : "Username";20622079 copyU.disabled = !entry.username;20632080 copyU.addEventListener("click", async (e) => {20642081 e.stopPropagation();@@ -2083,7 +2100,7 @@20832100 copyP.className = "sp-action-btn";20842101 copyP.type = "button";20852102 copyP.title = "Copy password";2086- copyP.textContent = "Copy password";2103+ copyP.textContent = "Password";20872104 copyP.addEventListener("click", async (e) => {20882105 e.stopPropagation();20892106 const resp = await chrome.runtime.sendMessage({@@ -2217,7 +2234,7 @@22172234 // the "2FA" label needed) and made the code one extra click away.22182235 if (entry.hasTotp) void openTOTPTray();22192236 2220- platter.appendChild(actions);2237+ platter.appendChild(actionsGroup);22212238 container.appendChild(platter);22222239 }22232240