c43cfea9877d
fix note date grid placement, notesOnly toggle DOM node theft, toolbar onPointerDown (v2.39.7)
- time
- 2026-05-13 16:16 UTC · 5 months ago
- machine
- koh2
- parent
- deb44debe166
↓ peach-browser-c43cfea9.tar.gzatlas at this save
files changed6 files
manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/popup/components/NoteToolbar.tsx+8 −8src/popup/styles/popup.css+1 −0src/popup/views/Vault.tsx+6 −6manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach",4- "version": "2.39.6",4+ "version": "2.39.7",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.39.6",4+ "version": "2.39.7",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.39.6",3+ "version": "2.39.7",44 "description": "Zero-knowledge password manager",55 "type": "module",66 "scripts": {src/popup/components/NoteToolbar.tsx+8 −8
@@ -45,16 +45,16 @@4545 {/* Mobile: sits above keyboard when keyboard is visible */}4646 <Show when={props.keyboardVisible}>4747 <div class={props.class ?? "peach-note-toolbar-mobile"}>48- <button class="peach-note-toolbar-btn" onTouchEnd={(e) => { e.preventDefault(); applyBold(props.exec); }}>B</button>49- <button class="peach-note-toolbar-btn peach-note-toolbar-btn--italic" onTouchEnd={(e) => { e.preventDefault(); applyItalic(props.exec); }}>I</button>50- <button class="peach-note-toolbar-btn" onTouchEnd={(e) => { e.preventDefault(); applyUnderline(props.exec); }}>U</button>48+ <button class="peach-note-toolbar-btn" onPointerDown={(e) => { e.preventDefault(); applyBold(props.exec); }}>B</button>49+ <button class="peach-note-toolbar-btn peach-note-toolbar-btn--italic" onPointerDown={(e) => { e.preventDefault(); applyItalic(props.exec); }}>I</button>50+ <button class="peach-note-toolbar-btn" onPointerDown={(e) => { e.preventDefault(); applyUnderline(props.exec); }}>U</button>5151 <div class="peach-note-toolbar-divider" />52- <button class="peach-note-toolbar-btn" onTouchEnd={(e) => { e.preventDefault(); applyHeading(props.exec); }}>H</button>53- <button class="peach-note-toolbar-btn" onTouchEnd={(e) => { e.preventDefault(); applyQuote(props.exec); }}>"</button>54- <button class="peach-note-toolbar-btn" onTouchEnd={(e) => { e.preventDefault(); applyBullet(props.exec); }}>•</button>55- <button class="peach-note-toolbar-btn" onTouchEnd={(e) => { e.preventDefault(); applyNumbered(props.exec); }}>1.</button>52+ <button class="peach-note-toolbar-btn" onPointerDown={(e) => { e.preventDefault(); applyHeading(props.exec); }}>H</button>53+ <button class="peach-note-toolbar-btn" onPointerDown={(e) => { e.preventDefault(); applyQuote(props.exec); }}>"</button>54+ <button class="peach-note-toolbar-btn" onPointerDown={(e) => { e.preventDefault(); applyBullet(props.exec); }}>•</button>55+ <button class="peach-note-toolbar-btn" onPointerDown={(e) => { e.preventDefault(); applyNumbered(props.exec); }}>1.</button>5656 <div class="peach-note-toolbar-spacer" />57- <button class="peach-note-toolbar-btn" onTouchEnd={(e) => { e.preventDefault(); props.onDismissKeyboard?.(); }}>⌨</button>57+ <button class="peach-note-toolbar-btn" onPointerDown={(e) => { e.preventDefault(); props.onDismissKeyboard?.(); }}>⌨</button>5858 </div>5959 </Show>6060 </Show>src/popup/styles/popup.css+1 −0
@@ -8387,6 +8387,7 @@83878387 white-space: nowrap;83888388 text-align: right;83898389 flex-shrink: 0;8390+ grid-column: 5;83908391 }83918392 83928393 /* Swipe underlays */src/popup/views/Vault.tsx+6 −6
@@ -17,9 +17,9 @@1717 // a black square on freshly-imported entries the browser hasn't visited1818 // yet (Chrome's `_favicon/` cache is empty for unvisited domains).1919 const fallback = props.isPasskey20- ? PASSKEY_ICON20+ ? <PasskeyIcon />2121 : props.isNote22- ? NOTE_ICON22+ ? <NoteIcon />2323 : <InitialsChip title={props.title ?? props.domain ?? ""} />;2424 const [failed, setFailed] = createSignal(false);2525 return (@@ -79,21 +79,21 @@7979 );8080 }8181 82-const LOGIN_ICON = (82+const LoginIcon = () => (8383 <svg width="11" height="12" viewBox="0 0 11 12" fill="none" stroke="currentColor" stroke-width="0.9" stroke-linecap="round" aria-hidden="true">8484 <rect x="2" y="5" width="7" height="5" rx="1.2" />8585 <path d="M3.5 5V3.75A2 2 0 0 1 5.5 1.75A2 2 0 0 1 7.5 3.75V5" />8686 </svg>8787 );8888 89-const PASSKEY_ICON = (89+const PasskeyIcon = () => (9090 <svg width="11" height="12" viewBox="0 0 11 12" fill="none" stroke="currentColor" stroke-width="0.9" stroke-linecap="round" aria-hidden="true">9191 <circle cx="4" cy="4.5" r="3" />9292 <path d="M6.5 7l3.5 3.5M8.5 8.5L10 10" />9393 </svg>9494 );9595 96-const NOTE_ICON = (96+const NoteIcon = () => (9797 <svg width="11" height="12" viewBox="0 0 11 12" fill="none" stroke="currentColor" stroke-width="0.9" stroke-linecap="round" aria-hidden="true">9898 <rect x="1.5" y="1.5" width="8" height="9" rx="1.5" />9999 <path d="M3.5 4.5h4M3.5 6.5h4M3.5 8.5h2" />@@ -491,7 +491,7 @@491491 aria-label="Notes only"492492 title="Show notes only"493493 >494- {NOTE_ICON}494+ <NoteIcon />495495 </button>496496 <Show when={props.onOpenTrash}>497497 <button