@@ -66,6 +66,11 @@ import { createGitHubPrDrawer } from './modules/github/pr/drawer/controller/crea
6666import { createLayoutThemeController } from './modules/ui/layout-theme.js'
6767import { createLintDiagnosticsController } from './modules/diagnostics/lint-diagnostics.js'
6868import { createPreviewBackgroundController } from './modules/preview/preview-background.js'
69+ import {
70+ createPreviewFontController ,
71+ defaultPreviewFontCssUrl ,
72+ normalizePreviewFontCssUrl ,
73+ } from './modules/preview/preview-font.js'
6974import { getReactEntryTabCompatibilityError } from './modules/preview/preview-entry-resolver.js'
7075import { createRenderRuntimeController } from './modules/preview/render-runtime.js'
7176import { createTypeDiagnosticsController } from './modules/diagnostics/type-diagnostics.js'
@@ -74,6 +79,8 @@ import { ensureJsxTransformSource } from './modules/preview/jsx-transform-runtim
7479import { createEditorPoolManager } from './modules/editor/editor-pool-manager.js'
7580import { createWorkspaceTabsState } from './modules/workspace/workspace-tabs-state.js'
7681import { createWorkspacesDrawer } from './modules/workspace/workspaces-drawer/drawer.js'
82+ import { createApplyWorkspaceFontCssUrl } from './modules/app-core/workspace-font-css-url-load.js'
83+ import { createPreviewFontSetup } from './modules/app-core/preview-font-setup.js'
7784import {
7885 createDebouncedWorkspaceSaver ,
7986 createWorkspaceStorageAdapter ,
@@ -151,6 +158,8 @@ const workspacesInitialize = document.getElementById('workspaces-initialize')
151158const workspacesShare = document . getElementById ( 'workspaces-share' )
152159const workspacesNew = document . getElementById ( 'workspaces-new' )
153160const workspacesSelect = document . getElementById ( 'workspaces-select' )
161+ const workspacesFontCssUrlInput = document . getElementById ( 'workspaces-font-css-url' )
162+ const workspacesFontCssUrlLoad = document . getElementById ( 'workspaces-font-css-url-load' )
154163const workspacesOpen = document . getElementById ( 'workspaces-open' )
155164const workspacesRename = document . getElementById ( 'workspaces-rename' )
156165const workspacesRemove = document . getElementById ( 'workspaces-remove' )
@@ -349,6 +358,14 @@ const previewBackground = createPreviewBackgroundController({
349358 } ,
350359} )
351360
361+ const previewFont = createPreviewFontSetup ( {
362+ createPreviewFontController,
363+ previewFontCssUrlInput : workspacesFontCssUrlInput ,
364+ defaultPreviewFontCssUrl,
365+ getRenderRuntime : ( ) => renderRuntime ,
366+ queueWorkspaceSave : ( ) => queueWorkspaceSave ?. ( ) ,
367+ } )
368+
352369const layoutTheme = createLayoutThemeController ( {
353370 appThemeButtons,
354371 syncPreviewBackgroundPickerFromTheme : ( ) =>
@@ -757,7 +774,9 @@ const workspaceSyncController = createWorkspaceSyncController({
757774 getActiveWorkspaceRecordId : ( ) => activeWorkspaceRecordId ,
758775 getActiveWorkspaceCreatedAt : ( ) => activeWorkspaceCreatedAt ,
759776 getRenderModeValue : ( ) => renderMode . value ,
777+ getPreviewFontCssUrlValue : ( ) => previewFont . getPreviewFontCssUrl ( ) ,
760778 normalizeRenderMode : mode => normalizeRenderMode ( mode ) ,
779+ normalizePreviewFontCssUrl,
761780} )
762781
763782const getTypecheckSourcePath = ( ) =>
@@ -891,10 +910,15 @@ const {
891910 workspaceTabsState,
892911 resolveWorkspaceActiveTabId,
893912 normalizeRenderMode : mode => normalizeRenderMode ( mode ) ,
913+ normalizePreviewFontCssUrl,
894914 getRenderModeValue : ( ) => renderMode . value ,
915+ getPreviewFontCssUrlValue : ( ) => previewFont . getPreviewFontCssUrl ( ) ,
895916 setRenderModeValue : value => {
896917 renderMode . value = value
897918 } ,
919+ setPreviewFontCssUrlValue : ( value , options ) => {
920+ previewFont . applyPreviewFontCssUrl ( value , options )
921+ } ,
898922 getActiveWorkspaceTab,
899923 onActiveWorkspaceTabChange : ( _tab , { changed } = { } ) => {
900924 syncDiagnosticsDrawerLayout ( )
@@ -948,6 +972,13 @@ const {
948972 onWorkspaceRecordApplied : onWorkspaceRecordAppliedWithStatusMetadata ,
949973} )
950974
975+ const applyWorkspaceFontCssUrl = createApplyWorkspaceFontCssUrl ( {
976+ previewFont,
977+ flushWorkspaceSave,
978+ normalizePreviewFontCssUrl,
979+ defaultPreviewFontCssUrl,
980+ } )
981+
951982const { syncActiveWorkspaceRepositoryScope, forkWorkspaceFromCurrentState } =
952983 createWorkspaceScopeForkActions ( {
953984 toNonEmptyWorkspaceText,
@@ -1201,6 +1232,8 @@ const githubWorkflows = createGitHubWorkflowsSetup({
12011232 workspacesShare,
12021233 workspacesNew,
12031234 workspacesSelect,
1235+ workspacesFontCssUrlInput,
1236+ workspacesFontCssUrlLoad,
12041237 workspacesOpen,
12051238 workspacesRename,
12061239 workspacesRemove,
@@ -1220,6 +1253,7 @@ const githubWorkflows = createGitHubWorkflowsSetup({
12201253 listLocalContextRecords,
12211254 refreshLocalContextOptions,
12221255 applyWorkspaceRecord,
1256+ applyWorkspaceFontCssUrl,
12231257 syncActiveWorkspaceRepositoryScope,
12241258 forkWorkspaceFromCurrentState,
12251259 flushWorkspaceSave,
@@ -1424,6 +1458,7 @@ const runtimeCoreOptions = createRuntimeCoreOptions({
14241458 getRenderRuntime : ( ) => renderRuntime ,
14251459 getPreviewHost : ( ) => previewHost ,
14261460 previewBackground,
1461+ previewFont,
14271462 clearDiagnosticsScope,
14281463 clearConfirmDialog,
14291464 clearConfirmTitle,
@@ -1602,6 +1637,7 @@ bindAppEventsAndStart({
16021637 typeDiagnostics,
16031638 clipboardSupported,
16041639 previewBackground,
1640+ previewFont,
16051641 initializeCodeEditors,
16061642 } ,
16071643} )
0 commit comments