c24fc253fd97
move passkey delete to trash icon next to title (matches login entry pattern), remove buried bottom button, bump v2.10.4
- time
- 2026-04-28 21:33 UTC · 6 months ago
- machine
- koh2
- parent
- cdb8aed8a54a
↓ peach-browser-c24fc253.tar.gzatlas at this save
files changed4 files
manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/popup/views/PasskeyEntry.tsx+43 −34manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach",4- "version": "2.10.3",4+ "version": "2.10.4",55 "description": "Zero-knowledge password manager",66 "browser_specific_settings": {77 "gecko": {manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach",4- "version": "2.10.3",4+ "version": "2.10.4",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": "2.10.3",3+ "version": "2.10.4",44 "description": "Zero-knowledge password manager",55 "type": "module",66 "scripts": {src/popup/views/PasskeyEntry.tsx+43 −34
@@ -55,10 +55,49 @@5555 {entry().title}5656 </div>5757 58- <div class="peach-entry-name-wrap" style="position:relative;z-index:1;">59- <h1 class={`peach-entry-name ${titleSizeClass(entry().title)}`} aria-label={entry().title}>60- <span class="peach-entry-name-text">{entry().title}</span>61- </h1>58+ <div class="peach-entry-header" style="position:relative;z-index:1;">59+ <div class="peach-entry-header-name">60+ <h1 class={`peach-entry-name ${titleSizeClass(entry().title)}`} aria-label={entry().title}>61+ <span class="peach-entry-name-text">{entry().title}</span>62+ </h1>63+ </div>64+ <Show65+ when={deleteConfirmPending()}66+ fallback={67+ <button68+ class="peach-entry-trash-btn"69+ onClick={() => setDeleteConfirmPending(true)}70+ aria-label="Remove passkey"71+ title="Remove passkey"72+ >73+ <svg width="12" height="13" viewBox="0 0 12 13" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round">74+ <path d="M1 3h10M4 3V2h4v1M2 3l.7 8.5a1 1 0 0 0 1 .9h4.6a1 1 0 0 0 1-.9L10 3" />75+ <path d="M4.5 6l.3 3.5M7.5 6l-.3 3.5" />76+ </svg>77+ </button>78+ }79+ >80+ <div class="peach-entry-trash-confirm">81+ <span class="peach-entry-trash-confirm-label">remove?</span>82+ <button83+ class="peach-btn peach-btn--sm peach-btn--danger"84+ style="font-size:10px;padding:2px 8px;min-height:22px;"85+ onClick={() => {86+ setDeleteConfirmPending(false);87+ void props.onDelete();88+ }}89+ >90+ yes91+ </button>92+ <button93+ class="peach-btn peach-btn--ghost peach-btn--sm"94+ style="font-size:10px;padding:2px 8px;min-height:22px;"95+ onClick={() => setDeleteConfirmPending(false)}96+ >97+ no98+ </button>99+ </div>100+ </Show>62101 </div>63102 64103 <div class="peach-domain" style="position:relative;z-index:1;">@@ -113,36 +152,6 @@113152 ? "This passkey is held by your platform authenticator. Peach stores only the metadata."114153 : "The private key is stored encrypted in your Peach vault and is never shown in the UI."}115154 </div>116- <Show117- when={deleteConfirmPending()}118- fallback={119- <button120- class="peach-btn peach-btn--ghost peach-btn--sm peach-passkey-delete-btn"121- onClick={() => setDeleteConfirmPending(true)}122- >123- remove passkey124- </button>125- }126- >127- <div class="peach-passkey-delete-confirm">128- <span class="peach-passkey-delete-confirm-copy">Remove this passkey?</span>129- <button130- class="peach-btn peach-btn--ghost peach-btn--sm"131- onClick={() => setDeleteConfirmPending(false)}132- >133- cancel134- </button>135- <button136- class="peach-btn peach-btn--ghost peach-btn--sm peach-passkey-delete-btn--confirm"137- onClick={() => {138- setDeleteConfirmPending(false);139- void props.onDelete();140- }}141- >142- remove143- </button>144- </div>145- </Show>146155 </div>147156 </>148157 )}