964f286213cc

silver platter + button, freeze popup width at init, nowrap action buttons (v2.29.3)

time
2026-05-03 13:59 UTC · 5 months ago
machine
koh2
parent
ce749ba3a1e9
4 files manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/content/inject.ts+15 −3
manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach",4-  "version": "2.29.2",4+  "version": "2.29.3",55   "description": "Zero-knowledge password manager",66   "browser_specific_settings": {77     "gecko": {

view file

manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach",4-  "version": "2.29.2",4+  "version": "2.29.3",55   "description": "Zero-knowledge password manager",66   "action": {77     "default_popup": "src/popup/index.html",

view file

package.json+1 −1
@@ -1,6 +1,6 @@11 {22   "name": "peach",3-  "version": "2.29.2",3+  "version": "2.29.3",44   "description": "Zero-knowledge password manager",55   "type": "module",66   "scripts": {

view file

src/content/inject.ts+15 −3
@@ -790,6 +790,7 @@790790     transition: background 120ms ease, color 120ms ease;791791     font-family: Inter, sans-serif; letter-spacing: 0.04em;792792     display: inline-flex; align-items: center; justify-content: center; gap: 4px;793+    white-space: nowrap; overflow: hidden;793794   }794795   .sp-action-btn:hover:not(:disabled) {795796     background: color-mix(in srgb, var(--peach-text) 5%, transparent);@@ -1650,13 +1651,26 @@16501651 16511652     const domHdr = document.createElement("div");16521653     domHdr.className = "domain-header";1654+    const headText = document.createElement("div");1655+    headText.className = "domain-header-text";16531656     const eyebrow = document.createElement("div");16541657     eyebrow.className = "domain-eyebrow";16551658     eyebrow.textContent = "Saved for this site";16561659     const domName = document.createElement("div");16571660     domName.className = "domain-name";16581661     domName.textContent = options.domain ?? location.hostname.replace(/^www\./, "");1659-    domHdr.append(eyebrow, domName);1662+    headText.append(eyebrow, domName);1663+    domHdr.appendChild(headText);1664+    if (!options.isSignup) {1665+      const addBtn = document.createElement("button");1666+      addBtn.className = "domain-add-btn";1667+      addBtn.type = "button";1668+      addBtn.setAttribute("aria-label", "Create new entry");1669+      addBtn.title = "Create new entry";1670+      addBtn.textContent = "+";1671+      addBtn.addEventListener("click", (e) => { e.stopPropagation(); void showCreateForm(); });1672+      domHdr.appendChild(addBtn);1673+    }16601674     container.appendChild(domHdr);16611675 16621676     const platter = document.createElement("div");@@ -2179,7 +2193,6 @@21792193     const r = anchorEl.getBoundingClientRect();21802194     host.style.top = `${r.bottom + window.scrollY + 5}px`;21812195     host.style.left = `${r.left + window.scrollX}px`;2182-    host.style.width = `${Math.min(Math.max(r.width, 260), 400)}px`;21832196   }21842197   // These bindings are referenced from renderLocked()/dismiss() — they MUST21852198   // be initialized before renderLocked() runs, or the synchronous assignment@@ -3013,7 +3026,6 @@30133026     const r = anchorEl.getBoundingClientRect();30143027     host.style.top = `${r.bottom + window.scrollY + 5}px`;30153028     host.style.left = `${r.left + window.scrollX}px`;3016-    host.style.width = `${Math.min(Math.max(r.width, 320), 400)}px`;30173029   }30183030   const stopObserving = observeAnchorPosition(anchorEl, updatePosition);30193031 

view file