@@ -32,6 +32,17 @@ const setStylesEditorSource = async (page: Page, source: string) => {
3232const getCollapseButton = ( page : Page , panelName : 'component' | 'styles' | 'preview' ) =>
3333 page . locator ( `#collapse-${ panelName } ` )
3434
35+ const getToolsButton = ( page : Page , panelName : 'component' | 'styles' ) =>
36+ page . locator ( `#tools-${ panelName } ` )
37+
38+ const ensurePanelToolsVisible = async ( page : Page , panelName : 'component' | 'styles' ) => {
39+ const button = getToolsButton ( page , panelName )
40+ const isPressed = await button . getAttribute ( 'aria-pressed' )
41+ if ( isPressed !== 'true' ) {
42+ await button . click ( )
43+ }
44+ }
45+
3546const expectCollapseButtonState = async (
3647 page : Page ,
3748 panelName : 'component' | 'styles' | 'preview' ,
@@ -263,9 +274,43 @@ test('does not persist panel collapse state across reload', async ({ page }) =>
263274 } )
264275} )
265276
277+ test ( 'gear tools toggles default inactive and switch active/inactive per panel' , async ( {
278+ page,
279+ } ) => {
280+ await waitForInitialRender ( page )
281+
282+ const componentPanel = page . locator ( '#component-panel' )
283+ const stylesPanel = page . locator ( '#styles-panel' )
284+ const componentTools = getToolsButton ( page , 'component' )
285+ const stylesTools = getToolsButton ( page , 'styles' )
286+
287+ await expect ( componentPanel ) . toHaveClass ( / p a n e l - - t o o l s - h i d d e n / )
288+ await expect ( stylesPanel ) . toHaveClass ( / p a n e l - - t o o l s - h i d d e n / )
289+ await expect ( componentTools ) . toHaveAttribute ( 'aria-pressed' , 'false' )
290+ await expect ( stylesTools ) . toHaveAttribute ( 'aria-pressed' , 'false' )
291+
292+ await componentTools . click ( )
293+ await expect ( componentPanel ) . not . toHaveClass ( / p a n e l - - t o o l s - h i d d e n / )
294+ await expect ( componentTools ) . toHaveAttribute ( 'aria-pressed' , 'true' )
295+ await expect ( componentTools ) . toHaveAttribute ( 'title' , 'Hide component tools' )
296+
297+ await componentTools . click ( )
298+ await expect ( componentPanel ) . toHaveClass ( / p a n e l - - t o o l s - h i d d e n / )
299+ await expect ( componentTools ) . toHaveAttribute ( 'aria-pressed' , 'false' )
300+ await expect ( componentTools ) . toHaveAttribute ( 'title' , 'Show component tools' )
301+
302+ await stylesTools . click ( )
303+ await expect ( stylesPanel ) . not . toHaveClass ( / p a n e l - - t o o l s - h i d d e n / )
304+ await expect ( stylesTools ) . toHaveAttribute ( 'aria-pressed' , 'true' )
305+ await expect ( stylesTools ) . toHaveAttribute ( 'title' , 'Hide styles tools' )
306+ } )
307+
266308test ( 'renders in react mode with css modules' , async ( { page } ) => {
267309 await waitForInitialRender ( page )
268310
311+ await ensurePanelToolsVisible ( page , 'component' )
312+ await ensurePanelToolsVisible ( page , 'styles' )
313+
269314 await page . getByLabel ( 'ShadowRoot (open)' ) . uncheck ( )
270315 await page . locator ( '#render-mode' ) . selectOption ( 'react' )
271316 await page . locator ( '#style-mode' ) . selectOption ( 'module' )
@@ -326,21 +371,21 @@ test('jsx syntax errors affect status but not diagnostics toggle severity', asyn
326371test ( 'requires render button when auto render is disabled' , async ( { page } ) => {
327372 await waitForInitialRender ( page )
328373
374+ await ensurePanelToolsVisible ( page , 'component' )
375+ await ensurePanelToolsVisible ( page , 'styles' )
376+
329377 const autoRenderToggle = page . getByLabel ( 'Auto render' )
330378 const renderButton = page . getByRole ( 'button' , { name : 'Render' } )
331379 const styleMode = page . locator ( '#style-mode' )
332- const styleWarning = page . locator ( '#style-warning' )
333380
334- await expect ( styleWarning ) . toHaveText ( '' )
335381 await autoRenderToggle . uncheck ( )
336382 await expect ( renderButton ) . toBeVisible ( )
337383
338384 await styleMode . selectOption ( 'module' )
339- await expect ( styleWarning ) . toHaveText ( '' )
340385
341386 await renderButton . click ( )
342387 await expect ( page . locator ( '#status' ) ) . toHaveText ( 'Rendered' )
343- await expect ( styleWarning ) . toContainText ( 'CSS Modules are compiled in-browser' )
388+ await expect ( page . locator ( '#preview-host pre' ) ) . toHaveCount ( 0 )
344389} )
345390
346391test ( 'persists layout and theme across reload' , async ( { page } ) => {
@@ -361,30 +406,30 @@ test('persists layout and theme across reload', async ({ page }) => {
361406test ( 'renders with less style mode' , async ( { page } ) => {
362407 await waitForInitialRender ( page )
363408
409+ await ensurePanelToolsVisible ( page , 'styles' )
410+
364411 await page . getByLabel ( 'ShadowRoot (open)' ) . uncheck ( )
365412 await page . locator ( '#style-mode' ) . selectOption ( 'less' )
366413 await expect ( page . locator ( '#status' ) ) . toHaveText ( 'Rendered' )
367- await expect ( page . locator ( '#style-warning' ) ) . toContainText (
368- 'Less is compiled in-browser via @knighted/css/browser.' ,
369- )
370414 await expectPreviewHasRenderedContent ( page )
371415} )
372416
373417test ( 'renders with sass style mode' , async ( { page } ) => {
374418 await waitForInitialRender ( page )
375419
420+ await ensurePanelToolsVisible ( page , 'styles' )
421+
376422 await page . getByLabel ( 'ShadowRoot (open)' ) . uncheck ( )
377423 await page . locator ( '#style-mode' ) . selectOption ( 'sass' )
378424 await expect ( page . locator ( '#status' ) ) . toHaveText ( 'Rendered' )
379- await expect ( page . locator ( '#style-warning' ) ) . toContainText (
380- 'Sass is compiled in-browser via @knighted/css/browser.' ,
381- )
382425 await expectPreviewHasRenderedContent ( page )
383426} )
384427
385428test ( 'style compilation errors populate styles diagnostics scope' , async ( { page } ) => {
386429 await waitForInitialRender ( page )
387430
431+ await ensurePanelToolsVisible ( page , 'styles' )
432+
388433 await page . locator ( '#style-mode' ) . selectOption ( 'sass' )
389434 await setStylesEditorSource ( page , '.card { color: $missing; }' )
390435
@@ -443,6 +488,8 @@ test('clearing styles keeps diagnostics error state but resets status styling',
443488} ) => {
444489 await waitForInitialRender ( page )
445490
491+ await ensurePanelToolsVisible ( page , 'component' )
492+
446493 await setComponentEditorSource (
447494 page ,
448495 [ "const count: number = 'oops'" , 'const App = () => <button>ready</button>' ] . join (
@@ -477,6 +524,8 @@ test('clear component diagnostics removes type errors and restores rendered stat
477524} ) => {
478525 await waitForInitialRender ( page )
479526
527+ await ensurePanelToolsVisible ( page , 'component' )
528+
480529 await setComponentEditorSource (
481530 page ,
482531 [ "const count: number = 'oops'" , 'const App = () => <button>ready</button>' ] . join (
@@ -507,6 +556,8 @@ test('clear component diagnostics removes type errors and restores rendered stat
507556test ( 'clear all diagnostics removes style compile diagnostics' , async ( { page } ) => {
508557 await waitForInitialRender ( page )
509558
559+ await ensurePanelToolsVisible ( page , 'styles' )
560+
510561 await page . locator ( '#style-mode' ) . selectOption ( 'sass' )
511562 await setStylesEditorSource ( page , '.card { color: $missing; }' )
512563
0 commit comments