@@ -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'
@@ -151,6 +156,8 @@ const workspacesInitialize = document.getElementById('workspaces-initialize')
151156const workspacesShare = document . getElementById ( 'workspaces-share' )
152157const workspacesNew = document . getElementById ( 'workspaces-new' )
153158const workspacesSelect = document . getElementById ( 'workspaces-select' )
159+ const workspacesFontCssUrlInput = document . getElementById ( 'workspaces-font-css-url' )
160+ const workspacesFontCssUrlLoad = document . getElementById ( 'workspaces-font-css-url-load' )
154161const workspacesOpen = document . getElementById ( 'workspaces-open' )
155162const workspacesRename = document . getElementById ( 'workspaces-rename' )
156163const workspacesRemove = document . getElementById ( 'workspaces-remove' )
@@ -349,6 +356,20 @@ const previewBackground = createPreviewBackgroundController({
349356 } ,
350357} )
351358
359+ const previewFont = createPreviewFontController ( {
360+ previewFontCssUrlInput : workspacesFontCssUrlInput ,
361+ getDefaultPreviewFontCssUrl : ( ) => defaultPreviewFontCssUrl ,
362+ onFontConfigChange : ( { fontCssUrl, fontFamily } ) => {
363+ if ( renderRuntime && typeof renderRuntime . updatePreviewFont === 'function' ) {
364+ renderRuntime . updatePreviewFont ( { fontCssUrl, fontFamily } )
365+ }
366+
367+ if ( typeof queueWorkspaceSave === 'function' ) {
368+ queueWorkspaceSave ( )
369+ }
370+ } ,
371+ } )
372+
352373const layoutTheme = createLayoutThemeController ( {
353374 appThemeButtons,
354375 syncPreviewBackgroundPickerFromTheme : ( ) =>
@@ -757,7 +778,9 @@ const workspaceSyncController = createWorkspaceSyncController({
757778 getActiveWorkspaceRecordId : ( ) => activeWorkspaceRecordId ,
758779 getActiveWorkspaceCreatedAt : ( ) => activeWorkspaceCreatedAt ,
759780 getRenderModeValue : ( ) => renderMode . value ,
781+ getPreviewFontCssUrlValue : ( ) => previewFont . getPreviewFontCssUrl ( ) ,
760782 normalizeRenderMode : mode => normalizeRenderMode ( mode ) ,
783+ normalizePreviewFontCssUrl,
761784} )
762785
763786const getTypecheckSourcePath = ( ) =>
@@ -891,10 +914,15 @@ const {
891914 workspaceTabsState,
892915 resolveWorkspaceActiveTabId,
893916 normalizeRenderMode : mode => normalizeRenderMode ( mode ) ,
917+ normalizePreviewFontCssUrl,
894918 getRenderModeValue : ( ) => renderMode . value ,
919+ getPreviewFontCssUrlValue : ( ) => previewFont . getPreviewFontCssUrl ( ) ,
895920 setRenderModeValue : value => {
896921 renderMode . value = value
897922 } ,
923+ setPreviewFontCssUrlValue : ( value , options ) => {
924+ previewFont . applyPreviewFontCssUrl ( value , options )
925+ } ,
898926 getActiveWorkspaceTab,
899927 onActiveWorkspaceTabChange : ( _tab , { changed } = { } ) => {
900928 syncDiagnosticsDrawerLayout ( )
@@ -1201,6 +1229,8 @@ const githubWorkflows = createGitHubWorkflowsSetup({
12011229 workspacesShare,
12021230 workspacesNew,
12031231 workspacesSelect,
1232+ workspacesFontCssUrlInput,
1233+ workspacesFontCssUrlLoad,
12041234 workspacesOpen,
12051235 workspacesRename,
12061236 workspacesRemove,
@@ -1220,6 +1250,14 @@ const githubWorkflows = createGitHubWorkflowsSetup({
12201250 listLocalContextRecords,
12211251 refreshLocalContextOptions,
12221252 applyWorkspaceRecord,
1253+ applyWorkspaceFontCssUrl : async fontCssUrl => {
1254+ previewFont . applyPreviewFontCssUrl ( fontCssUrl , {
1255+ emitChange : true ,
1256+ syncInputValue : true ,
1257+ } )
1258+ await flushWorkspaceSave ( { preserveRecordId : true } )
1259+ return true
1260+ } ,
12231261 syncActiveWorkspaceRepositoryScope,
12241262 forkWorkspaceFromCurrentState,
12251263 flushWorkspaceSave,
@@ -1424,6 +1462,7 @@ const runtimeCoreOptions = createRuntimeCoreOptions({
14241462 getRenderRuntime : ( ) => renderRuntime ,
14251463 getPreviewHost : ( ) => previewHost ,
14261464 previewBackground,
1465+ previewFont,
14271466 clearDiagnosticsScope,
14281467 clearConfirmDialog,
14291468 clearConfirmTitle,
@@ -1602,6 +1641,7 @@ bindAppEventsAndStart({
16021641 typeDiagnostics,
16031642 clipboardSupported,
16041643 previewBackground,
1644+ previewFont,
16051645 initializeCodeEditors,
16061646 } ,
16071647} )
0 commit comments