From dc0a5ccc5ae24bf288a65dd67bea399a579352b2 Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Fri, 25 Sep 2026 15:18:50 +0300 Subject: [PATCH] =?UTF-8?q?test:=20=D0=BB=D0=BE=D0=B2=D0=B8=D1=82=D1=8C=20?= =?UTF-8?q?viewport-=D1=80=D0=B5=D0=B3=D1=80=D0=B5=D1=81=D1=81=D0=B8=D0=B8?= =?UTF-8?q?=20Sections=20(#648)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: #648 User-Visible: no --- demo/smoke_sections_resize.mjs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/demo/smoke_sections_resize.mjs b/demo/smoke_sections_resize.mjs index b443b63c..3b88c41c 100644 --- a/demo/smoke_sections_resize.mjs +++ b/demo/smoke_sections_resize.mjs @@ -126,10 +126,19 @@ const out = await page.evaluate(async () => { // than forcing the private settled state. let editorsContained = true; let editorsSettle = true; + let transitionsUseSlotHeight = true; for (const rows of [10, 6]) { await setRows(rows); for (const mode of ['plan', 'devices', 'decor']) { - await window.__hpTest.setMode(mode); + const entering = window.__hpTest.setMode(mode); + const enteringStage = await waitFor(() => { + const stage = root.querySelector('.stage'); + return card._modeTransitionBusy && stage.style.height.endsWith('px') ? stage : null; + }, `${mode} transition frame at ${rows} rows`); + const enteringHeader = root.querySelector('.hdr').getBoundingClientRect().height; + transitionsUseSlotHeight &&= Number.parseFloat(enteringStage.style.height) + <= rowHeight(rows) - enteringHeader + 1; + await entering; await waitFor(() => card._mode === mode && !card._modeTransitionBusy, `${mode} enter at ${rows} rows`); await settle(); @@ -137,7 +146,15 @@ const out = await page.evaluate(async () => { editorsContained &&= fillsSlot(entered, rowHeight(rows)); editorsSettle &&= !root.querySelector('.stage').hasAttribute('inert') && !root.querySelector('.editorchrome')?.classList.contains('transitioning'); - await window.__hpTest.setMode('view'); + const leaving = window.__hpTest.setMode('view'); + const leavingStage = await waitFor(() => { + const stage = root.querySelector('.stage'); + return card._modeTransitionBusy && stage.style.height.endsWith('px') ? stage : null; + }, `${mode} exit transition frame at ${rows} rows`); + const leavingHeader = root.querySelector('.hdr').getBoundingClientRect().height; + transitionsUseSlotHeight &&= Number.parseFloat(leavingStage.style.height) + <= rowHeight(rows) - leavingHeader + 1; + await leaving; await waitFor(() => card._mode === 'view' && !card._modeTransitionBusy, `${mode} exit at ${rows} rows`); await settle(); @@ -178,6 +195,7 @@ const out = await page.evaluate(async () => { && !Object.prototype.hasOwnProperty.call(defaults, 'max_rows') && card.getCardSize() === 12, gridSignalReflectsForScopedCss: card.getAttribute('layout') === 'grid', + gridUsesContainerOwnedInlineHeight: defaultGeometry.stageStyle === 'auto', defaultTenRowsFillTheSlot: fillsSlot(defaultGeometry, rowHeight(10)), minimumSixRowsStayContained: fillsSlot(minimumGeometry.sample, rowHeight(6)) && minimumGeometry.headerContained && minimumGeometry.menuReachable, @@ -189,6 +207,7 @@ const out = await page.evaluate(async () => { resizePreservesCameraAndIntent: stableView && card._space === stableSpace && stableMode === 'view' && moreInfo === 0, allEditorsStayInsideTheFixedSlot: editorsContained, + editorTransitionFramesUseTheFixedSlot: transitionsUseSlotHeight, editorTransitionsLeaveNoBusyTail: editorsSettle && card._mode === 'view' && !card._modeTransitionBusy, resizeStormSettlesWithoutLoop: fillsSlot(finalGeometry, rowHeight(10))