@@ -21,6 +21,7 @@ import {
2121 setJsxSourceValue ,
2222 updateRenderModeEditability as updateRenderModeEditabilityValue ,
2323} from './modules/app-core/runtime-editor-utils.js'
24+ import { createSourceSetters } from './modules/app-core/source-setters.js'
2425import { createRuntimeCoreSetup } from './modules/app-core/runtime-core-setup.js'
2526import {
2627 createWorkspaceContextSnapshotGetter ,
@@ -61,6 +62,7 @@ import { createGitHubPrDrawer } from './modules/github/pr/drawer/controller/crea
6162import { createLayoutThemeController } from './modules/ui/layout-theme.js'
6263import { createLintDiagnosticsController } from './modules/diagnostics/lint-diagnostics.js'
6364import { createPreviewBackgroundController } from './modules/preview/preview-background.js'
65+ import { getReactEntryTabCompatibilityError } from './modules/preview/preview-entry-resolver.js'
6466import { createRenderRuntimeController } from './modules/preview/render-runtime.js'
6567import { createTypeDiagnosticsController } from './modules/diagnostics/type-diagnostics.js'
6668import { collectTopLevelDeclarations } from './modules/preview/jsx-top-level-declarations.js'
@@ -80,6 +82,7 @@ import { createEnsureWorkspaceTabsShape } from './modules/workspace/workspace-ta
8082import {
8183 createWorkspaceRecordId ,
8284 getDirtyStateForTabChange ,
85+ getAllowedEntryTabFileNames ,
8386 getPathFileName ,
8487 getTabKind ,
8588 getTabTargetPrFilePath ,
@@ -211,7 +214,6 @@ const defaultComponentTabPath = 'src/components/App.tsx'
211214const defaultStylesTabPath = 'src/styles/app.css'
212215const defaultComponentTabName = 'App.tsx'
213216const defaultStylesTabName = 'app.css'
214- const allowedEntryTabFileNames = new Set ( [ 'app.tsx' , 'app.js' ] )
215217const editorKinds = [ 'component' , 'styles' ]
216218const editorPanelsByKind = {
217219 component : componentEditorPanel ,
@@ -237,6 +239,7 @@ let previewHost = document.getElementById('preview-host')
237239let jsxCodeEditor = null
238240let cssCodeEditor = null
239241let diagnosticsFlowController = null
242+ let runtimeCore = null
240243let getJsxSource = ( ) => jsxEditor . value
241244let getCssSource = ( ) => cssEditor . value
242245let renderRuntime = null
@@ -282,6 +285,16 @@ let draggedWorkspaceTabId = ''
282285let dragOverWorkspaceTabId = ''
283286let suppressWorkspaceTabClick = false
284287const clipboardSupported = Boolean ( navigator . clipboard ?. writeText )
288+ const { setJsxSource, setCssSource } = createSourceSetters ( {
289+ setJsxSourceValue,
290+ setCssSourceValue,
291+ getJsxCodeEditor : ( ) => jsxCodeEditor ,
292+ getCssCodeEditor : ( ) => cssCodeEditor ,
293+ setSuppressEditorChangeSideEffects : nextValue =>
294+ ( suppressEditorChangeSideEffects = nextValue ) ,
295+ jsxEditor,
296+ cssEditor,
297+ } )
285298
286299const showAppToast = message => {
287300 if ( ! ( appToast instanceof HTMLElement ) ) {
@@ -695,6 +708,7 @@ const ensureWorkspaceTabsShape = createEnsureWorkspaceTabsShape({
695708 defaultStylesTabPath,
696709 defaultJsx,
697710 normalizeEntryTabPath,
711+ getAllowedEntryTabFileNames,
698712 getPathFileName,
699713 getTabTargetPrFilePath,
700714 normalizeWorkspacePathValue,
@@ -791,7 +805,7 @@ const {
791805 workspaceTabsShell,
792806 workspaceTabAddWrap,
793807 setWorkspaceTabRenameState : value => ( workspaceTabRenameState = value ) ,
794- allowedEntryTabFileNames ,
808+ getAllowedEntryTabFileNames ,
795809 getPathFileName,
796810 normalizeEntryTabPath,
797811 normalizeModuleTabPathForRename,
@@ -1191,8 +1205,8 @@ const githubWorkflows = createGitHubWorkflowsSetup({
11911205 githubPrContextClose,
11921206 } ,
11931207 actions : {
1194- applyRenderMode,
1195- applyStyleMode,
1208+ applyRenderMode : options => runtimeCore ?. applyRenderMode ( options ) ,
1209+ applyStyleMode : options => runtimeCore ?. applyStyleMode ( options ) ,
11961210 confirmAction : options => confirmAction ( options ) ,
11971211 setStatus,
11981212 showAppToast,
@@ -1325,8 +1339,12 @@ const runtimeCoreOptions = createRuntimeCoreOptions({
13251339 getStyleEditorLanguage,
13261340 workspaceTabsState,
13271341 queueWorkspaceSave,
1342+ getRenderModeCompatibilityError : mode =>
1343+ normalizeRenderMode ( mode ) === 'react'
1344+ ? getReactEntryTabCompatibilityError ( getEntryWorkspaceTab ( ) )
1345+ : null ,
13281346} )
1329- const runtimeCore = createRuntimeCoreSetup ( runtimeCoreOptions )
1347+ runtimeCore = createRuntimeCoreSetup ( runtimeCoreOptions )
13301348
13311349diagnosticsFlowController = runtimeCore . diagnosticsFlowController
13321350renderRuntime = runtimeCore . renderRuntime
@@ -1349,36 +1367,8 @@ const maybeRender = () => diagnosticsFlowController.maybeRender()
13491367const maybeRenderFromComponentEditorChange = ( ) =>
13501368 diagnosticsFlowController . maybeRenderFromComponentEditorChange ( )
13511369
1352- function setJsxSource ( value ) {
1353- setJsxSourceValue ( {
1354- value,
1355- jsxCodeEditor,
1356- setSuppressEditorChangeSideEffects : nextValue =>
1357- ( suppressEditorChangeSideEffects = nextValue ) ,
1358- jsxEditor,
1359- } )
1360- }
1361-
1362- function setCssSource ( value ) {
1363- setCssSourceValue ( {
1364- value,
1365- cssCodeEditor,
1366- setSuppressEditorChangeSideEffects : nextValue =>
1367- ( suppressEditorChangeSideEffects = nextValue ) ,
1368- cssEditor,
1369- } )
1370- }
1371-
13721370const confirmAction = options => runtimeCore . confirmAction ( options )
13731371
1374- function applyRenderMode ( { mode, fromActivePrContext : _fromActivePrContext = false } ) {
1375- runtimeCore . applyRenderMode ( { mode, fromActivePrContext : _fromActivePrContext } )
1376- }
1377-
1378- function applyStyleMode ( { mode } ) {
1379- runtimeCore . applyStyleMode ( { mode } )
1380- }
1381-
13821372bindAppEventsAndStart ( {
13831373 editorUi : {
13841374 renderMode,
@@ -1405,8 +1395,8 @@ bindAppEventsAndStart({
14051395 statusNode,
14061396 } ,
14071397 sourceActions : {
1408- applyRenderMode,
1409- applyStyleMode,
1398+ applyRenderMode : options => runtimeCore . applyRenderMode ( options ) ,
1399+ applyStyleMode : options => runtimeCore . applyStyleMode ( options ) ,
14101400 updateRenderButtonVisibility : ( ) => ( renderButton . hidden = autoRenderToggle . checked ) ,
14111401 clearDiagnosticsScope,
14121402 clearComponentLintDiagnosticsState,
0 commit comments