// @vitest-environment jsdom /** * The frame owns the page's scrollbar (2026-09-09): in the solid manner the * page lands inside a ScrollArea's viewport — Base UI's `overflow: scroll` * box — so no page can scroll in a native bar. Whether the bar takes width, * and whether an inner region still scrolls on its own, is measured in * Chrome on Ship's four pages. */ import { afterEach, describe, expect, it } from 'vitest' import { cleanup, render, screen } from '@testing-library/react' import { AppShell } from './AppShell' import { Sidebar } from './Sidebar' afterEach(cleanup) describe('AppShell', () => { it('puts the page inside the frame’s scrolling region in the solid manner', () => { render( Nav}>

Page

, ) const main = screen.getByRole('main') const viewport = main.closest('[style*="overflow: scroll"]') as HTMLElement | null expect(viewport).not.toBeNull() expect(viewport!.contains(screen.getByText('Page'))).toBe(true) expect(main.className).not.toContain('overflow-y-auto') }) it('stands the sidebar on the ground and makes the content a panel in the inset manner, and only there', () => { const frame = (variant: 'solid' | 'inset') => render( Rows}>

Page

, ) const { unmount } = frame('solid') expect(screen.getByRole('navigation').className).toContain('border-r') expect(screen.getByRole('banner').className).toContain('border-b') unmount() frame('inset') expect(screen.getByRole('navigation').className).not.toMatch(/border-r|bg-bg-surface/) expect(screen.getByRole('banner').className).not.toMatch(/border-b|bg-bg-surface/) const panel = screen.getByRole('main').closest('.rounded-lg') expect(panel?.className).toContain('bg-bg-surface') expect(panel?.className).toContain('mr-4') }) it('leaves the floating manner’s card as it was', () => { render( Nav}>

Page

, ) const main = screen.getByRole('main') expect(main.className).toContain('overflow-hidden') expect(main.closest('[style*="overflow: scroll"]')).toBeNull() }) it('carries the Signal canvas on the floating frame, and only there', () => { const { container, unmount } = render( Nav}>

Page

, ) expect((container.firstElementChild as HTMLElement).className).toContain('signal-canvas') unmount() const solid = render( Nav}>

Page

, ) expect(solid.container.querySelector('.signal-canvas')).toBeNull() }) })