c8f933fd178b
before settings version-label relocation to bottom corner
- time
- 2026-05-19 23:49 UTC · 5 months ago
- machine
- koh2
- parent
- 7b2b774fc03c
↓ peach-browser-c8f933fd.tar.gzatlas at this save
files changed7 files
manifest.firefox.json+1 −1manifest.json+1 −1package-lock.json+2 −2package.json+1 −1src/popup/components/settings/StackDeck.tsx+2 −9src/popup/styles/settings-stack.css+2 −2src/popup/styles/vars.css+4 −31manifest.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.48",5+ "version": "3.6.49",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.48",4+ "version": "3.6.49",55 "description": "Zero-knowledge password manager",66 "action": {77 "default_popup": "src/popup/index.html",package-lock.json+2 −2
@@ -1,12 +1,12 @@11 {22 "name": "peach",3- "version": "3.6.48",3+ "version": "3.6.49",44 "lockfileVersion": 3,55 "requires": true,66 "packages": {77 "": {88 "name": "peach",9- "version": "3.6.48",9+ "version": "3.6.49",1010 "dependencies": {1111 "@bokuweb/zstd-wasm": "^0.0.27",1212 "@stablelib/blake2s": "^2.0.1",package.json+1 −1
@@ -1,6 +1,6 @@11 {22 "name": "peach",3- "version": "3.6.48",3+ "version": "3.6.49",44 "description": "Zero-knowledge password manager",55 "type": "module",66 "scripts": {src/popup/components/settings/StackDeck.tsx+2 −9
@@ -20,7 +20,6 @@2020 export function StackDeck(props: StackDeckProps) {2121 const [deckOpen, setDeckOpen] = createSignal(true);2222 const [focusHeight, setFocusHeight] = createSignal(DEFAULT_FOCUS_H);23- const [textScale, setTextScale] = createSignal(1);2423 let focusedAt = 0;2524 let deckEl: HTMLDivElement | undefined;2625 @@ -38,10 +37,6 @@3837 3938 const updateFocusHeight = () => {4039 if (!deckEl) return;41- const scale = Number.parseFloat(42- getComputedStyle(document.documentElement).getPropertyValue("--peach-text-scale")43- );44- setTextScale(Number.isFinite(scale) && scale > 0 ? scale : 1);4540 setFocusHeight(deckEl.clientHeight || DEFAULT_FOCUS_H);4641 };4742 updateFocusHeight();@@ -63,8 +58,6 @@6358 const idx = props.cards.findIndex((card) => card.id === props.active);6459 return idx >= 0 ? idx : 0;6560 });66- const scaled = (px: number) => px / textScale();67-6861 return (6962 <section class="stk-shell" aria-label="Settings">7063 <div class="stk-mast">@@ -117,7 +110,7 @@117110 const top = () => {118111 if (active()) return 0;119112 if (!deckOpen()) return focusHeight() + 44 + distance() * 8;120- return scaled(EXPANDED_H - TAB_OVERLAP) + distance() * scaled(TAB_H - TAB_OVERLAP);113+ return EXPANDED_H - TAB_OVERLAP + distance() * (TAB_H - TAB_OVERLAP);121114 };122115 const zIndex = () => (active() ? 99 : 50 - distance());123116 @@ -134,7 +127,7 @@134127 props.onActiveChange(card.id);135128 setDeckOpen(false);136129 }}137- height={active() ? (deckOpen() ? scaled(EXPANDED_H) : focusHeight()) : scaled(TAB_H + 4)}130+ height={active() ? (deckOpen() ? EXPANDED_H : focusHeight()) : TAB_H + 4}138131 >139132 {props.bodies[card.id]}140133 </StackCard>src/popup/styles/settings-stack.css+2 −2
@@ -65,8 +65,8 @@6565 6666 .stk-deck {6767 position: relative;68- height: min(calc(462px / var(--peach-text-scale)), calc(100% - 36px));69- min-height: calc(462px / var(--peach-text-scale));68+ height: min(462px, calc(100% - 36px));69+ min-height: 462px;7070 margin-top: 0;7171 }7272 src/popup/styles/vars.css+4 −31
@@ -233,39 +233,12 @@233233 [data-text-size="medium"] { --peach-text-scale: 1; }234234 [data-text-size="large"] { --peach-text-scale: 1.08; }235235 /* Zoom on html (not body) for both sizes so Chrome auto-resizes the popup236- window in both directions. Zooming body for small left a visible gap at237- the bottom because the window stayed at full height. Small text needs the238- fixed popup surfaces widened before zoom; otherwise the 320px shell paints239- as 294px and leaves unowned backdrop on the right edge. */236+ window in both directions. Keep the fixed 320×520 surfaces at their237+ natural dimensions; pre-expanding them defeats the visible small setting238+ and prevents large from using the enlarged popup surface. */240239 html { background: var(--bg); }241240 html[data-text-size="large"] { zoom: 1.08; }242-html[data-text-size="small"] {243- --peach-popup-scaled-width: 347.826087px; /* 320 / 0.92 */244- --peach-popup-scaled-height: 565.217391px; /* 520 / 0.92 */245- zoom: 0.92;246- width: var(--peach-popup-scaled-width);247- min-width: var(--peach-popup-scaled-width);248- height: var(--peach-popup-scaled-height);249- min-height: var(--peach-popup-scaled-height);250- overflow: hidden;251-}252-253-html[data-text-size="small"] body,254-html[data-text-size="small"] #app,255-html[data-text-size="small"] #pre-lock,256-html[data-text-size="small"] .popup-root,257-html[data-text-size="small"] .peach-shell[data-surface="extension"],258-html[data-text-size="small"] .peach-screen,259-html[data-text-size="small"] .peach-pro-celebration {260- width: var(--peach-popup-scaled-width);261- min-width: var(--peach-popup-scaled-width);262- height: var(--peach-popup-scaled-height);263- min-height: var(--peach-popup-scaled-height);264-}265-266-html[data-text-size="small"] .peach-shell[data-surface="extension"] {267- max-height: var(--peach-popup-scaled-height);268-}241+html[data-text-size="small"] { zoom: 0.92; }269242 270243 /* ─── Reduced motion ───────────────────────────────────────────────────271244 User-explicit setting OR OS-level prefers-reduced-motion both collapse