Skip to content

Commit ff816c3

Browse files
committed
fix: animate outline and annotation insets with titlebar
1 parent 2d32214 commit ff816c3

2 files changed

Lines changed: 14 additions & 1 deletion

File tree

‎electron/sidebar-smoke.mjs‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,15 @@ export async function verifySidebar(window,recents){
8383
assert.equal(await run(`(()=>{const s=document.querySelector('.sidebar'),f=s.querySelector('.sidebar-navigation-switch');return f.getBoundingClientRect().width+parseFloat(getComputedStyle(f).marginLeft)+parseFloat(getComputedStyle(f).marginRight)<=${expanded+21};})()`),true,'tab switch fits the sidebar during expansion');
8484
await wait(`!!document.querySelector('.sidebar')&&!document.querySelector('.sidebar-motion-enter-active')`);
8585
assert.ok(Math.abs((await run(`document.querySelector('.sidebar').getBoundingClientRect().width`))-expanded-20)<2,'resized sidebar width survives hide/show');
86+
for(const tab of [0,1,2]){
87+
await run(`document.querySelectorAll('.sidebar-navigation-switch button')[${tab}].click()`);
88+
await new Promise(r=>setTimeout(r,220));
89+
const motion=await run(`(async()=>{const app=document.querySelector('.app'),sidebar=document.querySelector('.sidebar');const padding=()=>parseFloat(getComputedStyle(sidebar).paddingTop);const start=padding();app.classList.add('immersive-header-hidden');await new Promise(r=>setTimeout(r,70));const middle=padding();await new Promise(r=>setTimeout(r,160));const hidden=padding();app.classList.remove('immersive-header-hidden');await new Promise(r=>setTimeout(r,70));const returning=padding();await new Promise(r=>setTimeout(r,160));return {start,middle,hidden,returning,end:padding()};})()`);
90+
assert.ok(motion.start>0&&motion.middle>0&&motion.middle<motion.start,'sidebar tab '+tab+' animates while hiding header');
91+
assert.equal(motion.hidden,0);
92+
assert.ok(motion.returning>0&&motion.returning<motion.start,'sidebar tab '+tab+' animates while showing header');
93+
assert.equal(motion.end,motion.start);
94+
}
8695
console.log(JSON.stringify({sidebarModes:true,originalOutlinePageNavigation:true,mergedAnnotations:true,sourceCommentActivation:true,translationAnnotationNavigation:true,footerPlacement:true,thumbnailRestoration:true,outlineCollapse:true,dragAndKeyboardResize:true,fourLineCommentTrim:true,tabAnimation:true}));
8796
}finally{await rm(folder,{recursive:true,force:true});app.quit();}
8897
}

‎src/style.css‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2091,7 +2091,11 @@ body:has(.windows-glass),.desktop.windows-glass.app {background:transparent}
20912091
.sidebar-resize-handle{position:absolute;top:var(--toolbar-height);bottom:0;right:0;width:6px;cursor:col-resize;touch-action:none;z-index:5}
20922092
.sidebar-resize-handle:hover,.sidebar-resize-handle:focus-visible{background:color-mix(in srgb,var(--accent) 35%,transparent);outline:none}
20932093

2094-
.desktop .sidebar.sidebar-resizable{transition:none}
2094+
/* Resizable tabs follow the header inset without animating dragged widths. */
2095+
.desktop .sidebar.sidebar-resizable{transition:padding-top 180ms ease}
2096+
.desktop .sidebar.sidebar-resizable.without-motion{transition:none}
2097+
[data-reduce-motion=true] .desktop .sidebar.sidebar-resizable{transition:none}
2098+
@media(prefers-reduced-motion:reduce){.desktop .sidebar.sidebar-resizable{transition:none}}
20952099

20962100
.reference-return-actions{position:absolute;left:22px;bottom:22px;display:flex;align-items:center;gap:6px;z-index:20}
20972101
.reference-return-actions .reference-return-button{position:static}

0 commit comments

Comments
 (0)