Skip to content

Commit ee39d8a

Browse files
fix: custom element preview host for better style encapsulation.
1 parent 352d139 commit ee39d8a

2 files changed

Lines changed: 37 additions & 1 deletion

File tree

playwright/rendering-modes.spec.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,42 @@ test('react mode executes default React import without TDZ runtime failure', asy
167167
await expect(page.locator('#preview-host pre')).toHaveCount(0)
168168
})
169169

170+
test('react mode mounts into internal non-div host to avoid div selector bleed', async ({
171+
page,
172+
}) => {
173+
await waitForInitialRender(page)
174+
175+
await ensurePanelToolsVisible(page, 'component')
176+
await ensurePanelToolsVisible(page, 'styles')
177+
await openWorkspaceTab(page, 'App.tsx')
178+
await page.getByRole('combobox', { name: 'Render mode' }).selectOption('react')
179+
180+
await setWorkspaceTabSource(page, {
181+
fileName: 'app.css',
182+
kind: 'styles',
183+
source: ['div { border: 1px dotted green; }'].join('\n'),
184+
})
185+
186+
await setComponentEditorSource(
187+
page,
188+
[
189+
"import React from 'react'",
190+
'export const App = () => (',
191+
' <>',
192+
' <div>inner</div>',
193+
' <button type="button">btn</button>',
194+
' </>',
195+
')',
196+
].join('\n'),
197+
)
198+
199+
await expect(page.getByRole('status', { name: 'App status' })).toHaveText('Rendered')
200+
201+
await expect(getPreviewFrame(page).locator('body > knighted-preview-root')).toHaveCount(
202+
1,
203+
)
204+
})
205+
170206
test('clearing component source reports clear action without error status', async ({
171207
page,
172208
}) => {

src/modules/preview-runtime/iframe-preview-executor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ import { jsx as __knightedDomJsxRuntime } from '${runtimeSpecifiers.jsxDom}'
6464
if (!output) {
6565
throw new Error('Expected a function or const named App.')
6666
}
67-
const host = document.createElement('div')
67+
const host = document.createElement('knighted-preview-root')
6868
document.body.append(host)
6969
const root = createRoot(host)
7070
root.render(output)

0 commit comments

Comments
 (0)