import { describe, expect, it } from "vitest"; import { act, fireEvent, renderControlsPanelWithSchema, vi, } from "../testing/controls-panel-test-utils"; import { createPersistentTestSchema } from "../../../state/persistence.test-support"; describe("ControlsPanel scroll binding", () => { it.each([true, false])( "commits live viewport position before pagehide storage flush (scroll event: %s)", (emitScroll) => { vi.useFakeTimers(); try { const schema = createPersistentTestSchema(); const { container } = renderControlsPanelWithSchema(schema); const viewport = container.querySelector( '[data-slot="toolcraft-panel-content"]', )!; viewport.scrollTop = 321; if (emitScroll) fireEvent.scroll(viewport); act(() => window.dispatchEvent(new Event("pagehide"))); expect( JSON.parse( window.localStorage.getItem( "toolcraft:persistence-test:state:v2", ) ?? "{}", ), ).toMatchObject({ state: { panels: { controls: { scrollTop: 321 } } }, }); } finally { vi.useRealTimers(); } }, ); });