diff --git a/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap b/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap
index 0fe8c4df2c..0c485b5f27 100644
--- a/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap
+++ b/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap
@@ -1141,7 +1141,7 @@ exports[`preferences - navigation to terminal preferences given in preferences,
class="Select__single-value css-1dimb5e-singleValue"
>
RobotoMono
diff --git a/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx b/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx
index 14bc5efacd..7ff161862e 100644
--- a/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx
+++ b/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx
@@ -13,26 +13,29 @@ import { Select } from "../../../../../../renderer/components/select";
import type { Logger } from "../../../../../../common/logger";
import { action } from "mobx";
import loggerInjectable from "../../../../../../common/logger.injectable";
+import {
+ terminalFontsInjectable,
+} from "../../../../../../renderer/components/dock/terminal/terminal-fonts.injectable";
interface Dependencies {
userStore: UserStore;
logger: Logger;
+ terminalFonts: Map;
}
const NonInjectedTerminalFontFamily = observer(
- ({ userStore, logger }: Dependencies) => {
-
- // fonts must be declared in `fonts.scss` and at `template.html` (if early-preloading required)
- const supportedCustomFonts: SelectOption[] = [
- "RobotoMono", "Anonymous Pro", "IBM Plex Mono", "JetBrains Mono", "Red Hat Mono",
- "Source Code Pro", "Space Mono", "Ubuntu Mono",
- ].map(customFont => {
+ ({ userStore, logger, terminalFonts }: Dependencies) => {
+ const bundledFonts: SelectOption[] = Array.from(terminalFonts.keys()).map(font => {
const { fontFamily, fontSize } = userStore.terminalConfig;
return {
- label: {customFont},
- value: customFont,
- isSelected: fontFamily === customFont,
+ label: (
+
+ {font}
+
+ ),
+ value: font,
+ isSelected: fontFamily === font,
};
});
@@ -50,7 +53,7 @@ const NonInjectedTerminalFontFamily = observer(
themeName="lens"
controlShouldRenderValue
value={userStore.terminalConfig.fontFamily}
- options={supportedCustomFonts}
+ options={bundledFonts}
onChange={onFontFamilyChange as any}
/>
@@ -58,13 +61,10 @@ const NonInjectedTerminalFontFamily = observer(
},
);
-export const TerminalFontFamily = withInjectables(
- NonInjectedTerminalFontFamily,
-
- {
- getProps: (di) => ({
- userStore: di.inject(userStoreInjectable),
- logger: di.inject(loggerInjectable),
- }),
- },
-);
+export const TerminalFontFamily = withInjectables(NonInjectedTerminalFontFamily, {
+ getProps: (di) => ({
+ userStore: di.inject(userStoreInjectable),
+ logger: di.inject(loggerInjectable),
+ terminalFonts: di.inject(terminalFontsInjectable),
+ }),
+});
diff --git a/src/renderer/components/app.scss b/src/renderer/components/app.scss
index f44d1ee165..b8dd5007b1 100755
--- a/src/renderer/components/app.scss
+++ b/src/renderer/components/app.scss
@@ -232,22 +232,6 @@ iframe {
}
}
-#fonts-preloading {
- > span {
- position: absolute;
- visibility: hidden;
- height: 0;
-
- &:before {
- width: 0;
- display: block;
- overflow: hidden;
- content: "text-example"; // some text required to start applying/rendering font in document
- font-family: inherit; // font-family must be specified via style="" (see: template.html)
- }
- }
-}
-
// app's common loading indicator, displaying on the route transitions
#loading {
position: absolute;
diff --git a/src/renderer/components/dock/terminal/create-terminal.injectable.ts b/src/renderer/components/dock/terminal/create-terminal.injectable.ts
index 27c7c0664a..2ff82e2c17 100644
--- a/src/renderer/components/dock/terminal/create-terminal.injectable.ts
+++ b/src/renderer/components/dock/terminal/create-terminal.injectable.ts
@@ -9,7 +9,8 @@ import type { TabId } from "../dock/store";
import type { TerminalApi } from "../../../api/terminal-api";
import terminalSpawningPoolInjectable from "./terminal-spawning-pool.injectable";
import terminalConfigInjectable from "../../../../common/user-store/terminal-config.injectable";
-import terminalCopyOnSelectInjectable from "../../../../common/user-store/terminal-copy-on-select.injectable";
+import terminalCopyOnSelectInjectable
+ from "../../../../common/user-store/terminal-copy-on-select.injectable";
import isMacInjectable from "../../../../common/vars/is-mac.injectable";
import openLinkInBrowserInjectable from "../../../../common/utils/open-link-in-browser.injectable";
import xtermColorThemeInjectable from "../../../themes/terminal-colors.injectable";
diff --git a/src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts b/src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts
new file mode 100644
index 0000000000..eb549af384
--- /dev/null
+++ b/src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts
@@ -0,0 +1,14 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+import { getGlobalOverride } from "../../../../common/test-utils/get-global-override";
+import { preloadAllTerminalFontsInjectable } from "./terminal-fonts.injectable";
+
+export default getGlobalOverride(preloadAllTerminalFontsInjectable, () => {
+ return {
+ id: "",
+ async run() {
+ },
+ };
+});
diff --git a/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts b/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts
new file mode 100644
index 0000000000..1609f8b411
--- /dev/null
+++ b/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts
@@ -0,0 +1,78 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+
+import { getInjectable } from "@ogre-tools/injectable";
+import { beforeFrameStartsFirstInjectionToken } from "../../../before-frame-starts/tokens";
+import RobotoMono from "../../../fonts/Roboto-Mono-nerd.ttf"; // patched font with icons
+import AnonymousPro from "../../../fonts/AnonymousPro-Regular.ttf";
+import IBMPlexMono from "../../../fonts/IBMPlexMono-Regular.ttf";
+import JetBrainsMono from "../../../fonts/JetBrainsMono-Regular.ttf";
+import RedHatMono from "../../../fonts/RedHatMono-Regular.ttf";
+import SourceCodePro from "../../../fonts/SourceCodePro-Regular.ttf";
+import SpaceMono from "../../../fonts/SpaceMono-Regular.ttf";
+import UbuntuMono from "../../../fonts/UbuntuMono-Regular.ttf";
+
+export const terminalFontsInjectable = getInjectable({
+ id: "terminalFontsInjectable",
+
+ instantiate() {
+ return new Map([
+ ["RobotoMono", RobotoMono],
+ ["Anonymous Pro", AnonymousPro],
+ ["IBM Plex Mono", IBMPlexMono],
+ ["JetBrains Mono", JetBrainsMono],
+ ["Red Hat Mono", RedHatMono],
+ ["Source Code Pro", SourceCodePro],
+ ["Space Mono", SpaceMono],
+ ["Ubuntu Mono", UbuntuMono],
+ ]);
+ },
+});
+
+
+export const preloadTerminalFontInjectable = getInjectable({
+ id: "preloadTerminalFontInjectable",
+
+ instantiate(di) {
+ const terminalFonts = di.inject(terminalFontsInjectable);
+
+ return async function (fontFamily: string): Promise {
+ const fontBundledPath = terminalFonts.get(fontFamily);
+ const fontLoaded = document.fonts.check(`10px ${fontFamily}`);
+
+ if (fontLoaded || !fontBundledPath) return;
+
+ const font = new FontFace(fontFamily, `url(${fontBundledPath})`);
+
+ document.fonts.add(font);
+ await font.load();
+ };
+ },
+
+ causesSideEffects: true,
+});
+
+export const preloadAllTerminalFontsInjectable = getInjectable({
+ id: "preloadAllTerminalFontsInjectable",
+
+ instantiate(di) {
+ const terminalFonts = di.inject(terminalFontsInjectable);
+ const preloadFont = di.inject(preloadTerminalFontInjectable);
+
+ return {
+ id: "preload-all-terminal-fonts",
+
+ async run() {
+ await Promise.allSettled(
+ Array.from(terminalFonts.keys()).map(preloadFont),
+ );
+ },
+ };
+ },
+
+ injectionToken: beforeFrameStartsFirstInjectionToken,
+
+ causesSideEffects: true,
+});
diff --git a/src/renderer/components/fonts.scss b/src/renderer/components/fonts.scss
index 40f9e9625b..ebbe2894dc 100644
--- a/src/renderer/components/fonts.scss
+++ b/src/renderer/components/fonts.scss
@@ -44,58 +44,3 @@
font-display: block;
src: url("../fonts/MaterialIcons-Regular.ttf") format("truetype");
}
-
-
-// Terminal fonts (monospaced)
-// Source: https://fonts.google.com/?category=Monospace
-@font-face {
- font-family: "Anonymous Pro";
- src: local("Anonymous Pro"), url("../fonts/AnonymousPro-Regular.ttf") format("truetype");
- font-display: block;
-}
-
-@font-face {
- font-family: "IBM Plex Mono";
- src: local("IBM Plex Mono"), url("../fonts/IBMPlexMono-Regular.ttf") format("truetype");
- font-display: block;
-}
-
-@font-face {
- font-family: "JetBrains Mono";
- src: local("JetBrains Mono"), url("../fonts/JetBrainsMono-Regular.ttf") format("truetype");
- font-display: block;
-}
-
-@font-face {
- font-family: "Red Hat Mono";
- src: local("Red Hat Mono"), url("../fonts/RedHatMono-Regular.ttf") format("truetype");
- font-display: block;
-}
-
-
-@font-face {
- font-family: "Source Code Pro";
- src: local("Source Code Pro"), url("../fonts/SourceCodePro-Regular.ttf") format("truetype");
- font-display: block;
-}
-
-@font-face {
- font-family: "Space Mono";
- src: local("Space Mono"), url("../fonts/SpaceMono-Regular.ttf") format("truetype");
- font-display: block;
-}
-
-@font-face {
- font-family: "Ubuntu Mono";
- src: local("Ubuntu Mono"), url("../fonts/UbuntuMono-Regular.ttf") format("truetype");
- font-display: block;
-}
-
-// Patched RobotoMono font with icons
-// RobotoMono Windows Compatible for using in terminal
-// https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/RobotoMono
-@font-face {
- font-family: "RobotoMono";
- src: local("RobotoMono"), url("../fonts/Roboto-Mono-nerd.ttf") format("truetype");
- font-display: block;
-}
diff --git a/src/renderer/template.html b/src/renderer/template.html
index 5860854d9a..87ea5dca3d 100755
--- a/src/renderer/template.html
+++ b/src/renderer/template.html
@@ -5,17 +5,6 @@
-
-
-
-
-
-
-
-
-
-
-