From 8ce344512ca89561f87979858d9256cc82fbb0da Mon Sep 17 00:00:00 2001 From: Tilman Vatteroth Date: Mon, 14 Dec 2020 23:58:46 +0100 Subject: [PATCH] Use fira code in editor (#695) Signed-off-by: Tilman Vatteroth --- CHANGELOG.md | 2 + package.json | 2 +- public/locales/en.json | 30 ++++++++-- .../editor/editor-pane/editor-pane.scss | 14 ++++- .../editor/editor-pane/editor-pane.tsx | 3 +- .../editor-preference-boolean-property.tsx | 45 ++++++++++++++ .../editor-preference-input.tsx | 40 +++++++++++++ .../editor-preference-ligatures-select.tsx | 28 +++++++++ .../editor-preference-number-property.tsx | 34 +++++++++++ .../editor-preference-property.ts | 13 ++++ .../editor-preference-select-property.tsx | 45 ++++++++++++++ .../editor-preference-select.tsx | 60 ------------------- .../editor-preferences/editor-preferences.tsx | 53 ++++++++-------- .../flow/flowchart/flowchart.tsx | 2 +- src/redux/editor/methods.ts | 17 ++++-- src/redux/editor/reducers.ts | 17 +++++- src/redux/editor/types.ts | 8 ++- src/style/index.scss | 1 - yarn.lock | 10 ++-- 19 files changed, 311 insertions(+), 113 deletions(-) create mode 100644 src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-boolean-property.tsx create mode 100644 src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-input.tsx create mode 100644 src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-ligatures-select.tsx create mode 100644 src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-number-property.tsx create mode 100644 src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-property.ts create mode 100644 src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-select-property.tsx delete mode 100644 src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-select.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index e0efca84b..8fd9c5d84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ SPDX-License-Identifier: CC-BY-SA-4.0 - Code blocks with 'vega-lite' as language are rendered as [vega-lite diagrams](https://vega.github.io/vega-lite/examples/). - Markdown files can be imported into an existing note directly from the editor. - The table button in the toolbar opens an overlay where the user can choose the number of columns and rows +- A toggle in the editor preferences for turning ligatures on and off. ### Changed @@ -70,6 +71,7 @@ SPDX-License-Identifier: CC-BY-SA-4.0 - Use KaTeX instead of MathJax. ([Why?](https://community.codimd.org/t/frequently-asked-questions/190)) - The dark-mode is also applied to the read-only-view and can be toggled from there. - Access tokens for the CLI and 3rd-party-clients can be managed in the user profile. +- Change editor font to "Fira Code" --- diff --git a/package.json b/package.json index 316f29865..810926e47 100644 --- a/package.json +++ b/package.json @@ -49,9 +49,9 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "4.2.1", "fast-deep-equal": "3.1.3", + "firacode": "5.2.0", "flowchart.js": "1.15.0", "fontsource-source-sans-pro": "3.1.5", - "fontsource-source-code-pro": "3.1.5", "fork-awesome": "1.1.7", "highlight.js": "10.4.1", "i18next": "19.8.4", diff --git a/public/locales/en.json b/public/locales/en.json index 4a4b54314..d1d6abf66 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -389,11 +389,29 @@ }, "preferences": { "title": "Preferences", - "theme": "Editor theme", - "keyMap": "Keymap", - "indentWithTabs": "Tab character", - "indentUnit": "Tab size (when using spaces)", - "spellcheck": "Spell checking" + "theme": { + "label": "Editor theme", + "one-dark": "Dark", + "neat": "Light" + }, + "keyMap": { + "label": "Keymap", + "sublime": "Sublime", + "emacs": "Emacs", + "vim": "Vim" + }, + "indentWithTabs": { + "label": "Tab character", + "on": "Tabs", + "off": "Spaces" + }, + "indentUnit": "Number of spaces per tab", + "spellcheck": { + "label": "Spell checking" + }, + "ligatures": { + "label": "Show ligatures" + } } }, "embeddings": { @@ -413,6 +431,8 @@ } }, "common": { + "yes": "Yes", + "no": "No", "import": "Import", "export": "Export", "refresh": "Refresh", diff --git a/src/components/editor/editor-pane/editor-pane.scss b/src/components/editor/editor-pane/editor-pane.scss index 65a889181..73e23de4e 100644 --- a/src/components/editor/editor-pane/editor-pane.scss +++ b/src/components/editor/editor-pane/editor-pane.scss @@ -11,11 +11,23 @@ @import '../../../../node_modules/codemirror/theme/neat'; @import './one-dark'; @import 'hints'; +@import '../../../../node_modules/firacode/distr/fira_code.css'; .CodeMirror { - font-family: "Source Code Pro", "Twemoji Mozilla", Consolas, monaco, monospace; + font-family: "Fira Code", "Twemoji Mozilla", Consolas, monaco, monospace; letter-spacing: 0.025em; line-height: 1.25; font-size: 18px; height: 100%; } + +.no-ligatures .CodeMirror { + //These two properties must be set separately because otherwise node-scss breaks. + .CodeMirror-line, .CodeMirror-line-like { + font-feature-settings: inherit; + } + .CodeMirror-line, .CodeMirror-line-like { + font-variant-ligatures: none; + } +} + diff --git a/src/components/editor/editor-pane/editor-pane.tsx b/src/components/editor/editor-pane/editor-pane.tsx index 5277d768c..77cdcd86d 100644 --- a/src/components/editor/editor-pane/editor-pane.tsx +++ b/src/components/editor/editor-pane/editor-pane.tsx @@ -69,6 +69,7 @@ export const EditorPane: React.FC = ({ onContentC const [editor, setEditor] = useState() const [statusBarInfo, setStatusBarInfo] = useState(defaultState) const editorPreferences = useSelector((state: ApplicationState) => state.editorConfig.preferences, equal) + const ligaturesEnabled = useSelector((state: ApplicationState) => state.editorConfig.ligatures, equal) const lastScrollPosition = useRef() const [editorScroll, setEditorScroll] = useState() @@ -163,7 +164,7 @@ export const EditorPane: React.FC = ({ onContentC editor={editor} /> = ({ property }) => { + const preference = useSelector((state: ApplicationState) => state.editorConfig.preferences[property]?.toString() || '', equal) + + const { t } = useTranslation() + const selectItem = useCallback((event: ChangeEvent) => { + const selectedItem: boolean = event.target.value === 'true' + + mergeEditorPreferences({ + [property]: selectedItem + } as EditorConfiguration) + }, [property]) + + const i18nPrefix = `editor.modal.preferences.${property}` + + return ( + + + + + ) +} diff --git a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-input.tsx b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-input.tsx new file mode 100644 index 000000000..3a6177a50 --- /dev/null +++ b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-input.tsx @@ -0,0 +1,40 @@ +/* + * SPDX-FileCopyrightText: 2020 The HedgeDoc developers (see AUTHORS file) + * + * SPDX-License-Identifier: AGPL-3.0-only + */ +import React from 'react' +import { Form } from 'react-bootstrap' +import { Trans, useTranslation } from 'react-i18next' + +export enum EditorPreferenceInputType { + SELECT, + BOOLEAN, + NUMBER +} + +export interface EditorPreferenceInputProps { + property: string + type: EditorPreferenceInputType + onChange: React.ChangeEventHandler + value?: string | number | string[] +} + +export const EditorPreferenceInput: React.FC = ({ property, type, onChange, value, children }) => { + useTranslation() + return ( + + + + + + {children} + + + ) +} diff --git a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-ligatures-select.tsx b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-ligatures-select.tsx new file mode 100644 index 000000000..06bc51a14 --- /dev/null +++ b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-ligatures-select.tsx @@ -0,0 +1,28 @@ +/* + * SPDX-FileCopyrightText: 2020 The HedgeDoc developers (see AUTHORS file) + * + * SPDX-License-Identifier: AGPL-3.0-only + */ +import React, { ChangeEvent, useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import { useSelector } from 'react-redux' +import { ApplicationState } from '../../../../../redux' +import { setEditorLigatures } from '../../../../../redux/editor/methods' +import { EditorPreferenceInput, EditorPreferenceInputType } from './editor-preference-input' + +export const EditorPreferenceLigaturesSelect: React.FC = () => { + const ligaturesEnabled = useSelector((state: ApplicationState) => Boolean(state.editorConfig.ligatures).toString()) + const saveLigatures = useCallback((event: ChangeEvent) => { + const ligaturesActivated: boolean = event.target.value === 'true' + setEditorLigatures(ligaturesActivated) + }, []) + const { t } = useTranslation() + + return ( + + + + + ) +} diff --git a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-number-property.tsx b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-number-property.tsx new file mode 100644 index 000000000..556d06c78 --- /dev/null +++ b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-number-property.tsx @@ -0,0 +1,34 @@ +/* +SPDX-FileCopyrightText: 2020 The HedgeDoc developers (see AUTHORS file) + +SPDX-License-Identifier: AGPL-3.0-only +*/ + +import { EditorConfiguration } from 'codemirror' +import equal from "fast-deep-equal" +import React, { ChangeEvent, useCallback } from 'react' +import { useSelector } from 'react-redux' +import { ApplicationState } from '../../../../../redux' +import { mergeEditorPreferences } from '../../../../../redux/editor/methods' +import { EditorPreferenceInput, EditorPreferenceInputType } from './editor-preference-input' +import { EditorPreferenceProperty } from './editor-preference-property' + +export interface EditorPreferenceNumberProps { + property: EditorPreferenceProperty +} + +export const EditorPreferenceNumberProperty: React.FC = ({ property }) => { + const preference = useSelector((state: ApplicationState) => state.editorConfig.preferences[property]?.toString() || '', equal) + + const selectItem = useCallback((event: ChangeEvent) => { + const selectedItem: number = Number.parseInt(event.target.value) + + mergeEditorPreferences({ + [property]: selectedItem + } as EditorConfiguration) + }, [property]) + + return ( + + ) +} diff --git a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-property.ts b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-property.ts new file mode 100644 index 000000000..5d95f786f --- /dev/null +++ b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-property.ts @@ -0,0 +1,13 @@ +/* +SPDX-FileCopyrightText: 2020 The HedgeDoc developers (see AUTHORS file) + +SPDX-License-Identifier: AGPL-3.0-only +*/ + +export enum EditorPreferenceProperty { + KEYMAP = 'keyMap', + THEME = 'theme', + INDENT_WITH_TABS = 'indentWithTabs', + INDENT_UNIT = 'indentUnit', + SPELL_CHECK = 'spellcheck' +} diff --git a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-select-property.tsx b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-select-property.tsx new file mode 100644 index 000000000..4c693e446 --- /dev/null +++ b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-select-property.tsx @@ -0,0 +1,45 @@ +/* +SPDX-FileCopyrightText: 2020 The HedgeDoc developers (see AUTHORS file) + +SPDX-License-Identifier: AGPL-3.0-only +*/ + +import { EditorConfiguration } from 'codemirror' +import equal from "fast-deep-equal" +import React, { ChangeEvent, useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import { useSelector } from 'react-redux' +import { ApplicationState } from '../../../../../redux' +import { mergeEditorPreferences } from '../../../../../redux/editor/methods' +import { EditorPreferenceInput, EditorPreferenceInputType } from './editor-preference-input' +import { EditorPreferenceProperty } from './editor-preference-property' + +export interface EditorPreferenceSelectPropertyProps { + property: EditorPreferenceProperty + selections: string[] +} + +export const EditorPreferenceSelectProperty: React.FC = ({ property, selections }) => { + const preference = useSelector((state: ApplicationState) => state.editorConfig.preferences[property]?.toString() || '', equal) + + const { t } = useTranslation() + + const selectItem = useCallback((event: ChangeEvent) => { + const selectedItem: string = event.target.value + + mergeEditorPreferences({ + [property]: selectedItem + } as EditorConfiguration) + }, [property]) + + const i18nPrefix = `editor.modal.preferences.${property}` + + return ( + + {selections.map(selection => + )} + + ) +} diff --git a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-select.tsx b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-select.tsx deleted file mode 100644 index d1c8659c8..000000000 --- a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preference-select.tsx +++ /dev/null @@ -1,60 +0,0 @@ -/* -SPDX-FileCopyrightText: 2020 The HedgeDoc developers (see AUTHORS file) - -SPDX-License-Identifier: AGPL-3.0-only -*/ - -import { EditorConfiguration } from 'codemirror' -import React, { ChangeEvent, useCallback, useState } from 'react' -import { Form } from 'react-bootstrap' -import { Trans, useTranslation } from 'react-i18next' - -export enum EditorPreferenceProperty { - KEYMAP = 'keyMap', - THEME = 'theme', - INDENT_WITH_TABS = 'indentWithTabs', - INDENT_UNIT = 'indentUnit', - SPELL_CHECK= 'spellcheck' -} - -export interface EditorPreferenceSelectProps { - onChange: (config: EditorConfiguration) => void - preferences: EditorConfiguration - property: EditorPreferenceProperty -} - -export const EditorPreferenceSelect: React.FC = ({ property, onChange, preferences, children }) => { - useTranslation() - const [selected, setSelected] = useState(preferences[property]) - - const selectItem = useCallback((event: ChangeEvent) => { - let selectedItem: string | boolean | number = event.target.value - if (property === EditorPreferenceProperty.INDENT_UNIT) { - selectedItem = parseInt(selectedItem) - } - setSelected(selectedItem) - if (property === EditorPreferenceProperty.INDENT_WITH_TABS) { - selectedItem = selectedItem === 'true' - } - onChange({ - ...preferences, - [property]: selectedItem - }) - }, [preferences, property, setSelected, onChange]) - - return ( - - - - - - { children } - - - ) -} diff --git a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preferences.tsx b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preferences.tsx index d9a0891e0..b7c5307f1 100644 --- a/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preferences.tsx +++ b/src/components/editor/editor-pane/tool-bar/editor-preferences/editor-preferences.tsx @@ -4,26 +4,26 @@ SPDX-FileCopyrightText: 2020 The HedgeDoc developers (see AUTHORS file) SPDX-License-Identifier: AGPL-3.0-only */ -import { EditorConfiguration } from 'codemirror' -import equal from 'fast-deep-equal' -import React, { Fragment, useCallback, useState } from 'react' +import equal from "fast-deep-equal" +import React, { Fragment, useState } from 'react' import { Button, Form, ListGroup } from 'react-bootstrap' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { ApplicationState } from '../../../../../redux' -import { setEditorPreferences } from '../../../../../redux/editor/methods' import { ForkAwesomeIcon } from '../../../../common/fork-awesome/fork-awesome-icon' import { CommonModal } from '../../../../common/modals/common-modal' -import { EditorPreferenceProperty, EditorPreferenceSelect } from './editor-preference-select' +import { ShowIf } from '../../../../common/show-if/show-if' +import { EditorPreferenceBooleanProperty } from './editor-preference-boolean-property' +import { EditorPreferenceInput, EditorPreferenceInputType } from './editor-preference-input' +import { EditorPreferenceLigaturesSelect } from './editor-preference-ligatures-select' +import { EditorPreferenceNumberProperty } from './editor-preference-number-property' +import { EditorPreferenceProperty } from "./editor-preference-property" +import { EditorPreferenceSelectProperty } from "./editor-preference-select-property" export const EditorPreferences: React.FC = () => { const { t } = useTranslation() const [showModal, setShowModal] = useState(false) - const preferences = useSelector((state: ApplicationState) => state.editorConfig.preferences, equal) - - const sendPreferences = useCallback((newPreferences: EditorConfiguration) => { - setEditorPreferences(newPreferences) - }, []) + const indentWithTabs = useSelector((state: ApplicationState) => state.editorConfig.preferences.indentWithTabs ?? false, equal) return ( @@ -39,32 +39,27 @@ export const EditorPreferences: React.FC = () => {
- - - - + - - - - - + - - - - + + + + + + + + + - - - - alert('This feature is not yet implemented.')} preferences={preferences} property={EditorPreferenceProperty.SPELL_CHECK}> - + alert('This feature is not yet implemented.')} property={EditorPreferenceProperty.SPELL_CHECK} type={EditorPreferenceInputType.SELECT}> + - +
diff --git a/src/components/markdown-renderer/replace-components/flow/flowchart/flowchart.tsx b/src/components/markdown-renderer/replace-components/flow/flowchart/flowchart.tsx index 64fea6741..771a77d0d 100644 --- a/src/components/markdown-renderer/replace-components/flow/flowchart/flowchart.tsx +++ b/src/components/markdown-renderer/replace-components/flow/flowchart/flowchart.tsx @@ -37,7 +37,7 @@ export const FlowChart: React.FC = ({ code }) => { 'line-color': darkModeActivated ? '#ffffff' : '#000000', 'element-color': darkModeActivated ? '#ffffff' : '#000000', 'font-color': darkModeActivated ? '#ffffff' : '#000000', - 'font-family': 'Source Code Pro, "Twemoji Mozilla", monospace' + 'font-family': 'Source Sans Pro, "Twemoji Mozilla", monospace' }) setError(false) } catch (error) { diff --git a/src/redux/editor/methods.ts b/src/redux/editor/methods.ts index 80eba19a5..d1ddbc130 100644 --- a/src/redux/editor/methods.ts +++ b/src/redux/editor/methods.ts @@ -11,6 +11,7 @@ import { EditorConfig, EditorConfigActionType, SetEditorConfigAction, + SetEditorLigaturesAction, SetEditorPreferencesAction, SetEditorSyncScrollAction } from './types' @@ -52,12 +53,18 @@ export const setEditorSyncScroll = (syncScroll: boolean): void => { store.dispatch(action) } -export const setEditorPreferences = (preferences: EditorConfiguration): void => { +export const setEditorLigatures = (ligatures: boolean): void => { + const action: SetEditorLigaturesAction = { + type: EditorConfigActionType.SET_LIGATURES, + ligatures: ligatures + } + store.dispatch(action); +} + +export const mergeEditorPreferences = (preferences: EditorConfiguration): void => { const action: SetEditorPreferencesAction = { - type: EditorConfigActionType.SET_EDITOR_PREFERENCES, - preferences: { - ...preferences - } + type: EditorConfigActionType.MERGE_EDITOR_PREFERENCES, + preferences: preferences } store.dispatch(action) } diff --git a/src/redux/editor/reducers.ts b/src/redux/editor/reducers.ts index a22670802..50c49457b 100644 --- a/src/redux/editor/reducers.ts +++ b/src/redux/editor/reducers.ts @@ -12,12 +12,14 @@ import { EditorConfigActions, EditorConfigActionType, SetEditorConfigAction, + SetEditorLigaturesAction, SetEditorPreferencesAction, SetEditorSyncScrollAction } from './types' const initialState: EditorConfig = { editorMode: EditorMode.BOTH, + ligatures: true, syncScroll: true, preferences: { theme: 'one-dark', @@ -28,7 +30,7 @@ const initialState: EditorConfig = { } const getInitialState = (): EditorConfig => { - return loadFromLocalStorage() ?? initialState + return { ...initialState, ...loadFromLocalStorage() } } export const EditorConfigReducer: Reducer = (state: EditorConfig = getInitialState(), action: EditorConfigActions) => { @@ -48,10 +50,19 @@ export const EditorConfigReducer: Reducer = ( } saveToLocalStorage(newState) return newState - case EditorConfigActionType.SET_EDITOR_PREFERENCES: + case EditorConfigActionType.SET_LIGATURES: newState = { ...state, - preferences: (action as SetEditorPreferencesAction).preferences + ligatures: (action as SetEditorLigaturesAction).ligatures + } + saveToLocalStorage(newState) + return newState + case EditorConfigActionType.MERGE_EDITOR_PREFERENCES: + newState = { + ...state, + preferences: { + ...state.preferences, ...(action as SetEditorPreferencesAction).preferences + } } saveToLocalStorage(newState) return newState diff --git a/src/redux/editor/types.ts b/src/redux/editor/types.ts index 8a7a348cc..bcc4f7013 100644 --- a/src/redux/editor/types.ts +++ b/src/redux/editor/types.ts @@ -11,12 +11,14 @@ import { EditorMode } from '../../components/editor/app-bar/editor-view-mode' export enum EditorConfigActionType { SET_EDITOR_VIEW_MODE = 'editor/mode/set', SET_SYNC_SCROLL = 'editor/syncScroll/set', - SET_EDITOR_PREFERENCES = 'editor/preferences/set' + MERGE_EDITOR_PREFERENCES = 'editor/preferences/merge', + SET_LIGATURES = 'editor/preferences/setLigatures' } export interface EditorConfig { editorMode: EditorMode; syncScroll: boolean; + ligatures: boolean preferences: EditorConfiguration } @@ -28,6 +30,10 @@ export interface SetEditorSyncScrollAction extends EditorConfigActions { syncScroll: boolean } +export interface SetEditorLigaturesAction extends EditorConfigActions { + ligatures: boolean +} + export interface SetEditorConfigAction extends EditorConfigActions { mode: EditorMode } diff --git a/src/style/index.scss b/src/style/index.scss index c1645573c..f80fc19b9 100644 --- a/src/style/index.scss +++ b/src/style/index.scss @@ -8,7 +8,6 @@ @import "../../node_modules/bootstrap/scss/bootstrap"; @import '../../node_modules/react-bootstrap-typeahead/css/Typeahead'; @import "~fontsource-source-sans-pro/index.css"; -@import "~fontsource-source-code-pro/index.css"; @import "fonts/twemoji/twemoji"; @import '../../node_modules/fork-awesome/css/fork-awesome.min'; diff --git a/yarn.lock b/yarn.lock index 00dbd9bf1..1a75cd987 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6869,6 +6869,11 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +firacode@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/firacode/-/firacode-5.2.0.tgz#2eab5b4f59e3197d5e84f15a25485a88f0cd3180" + integrity sha512-Q1SO7vibzYcT+KaohGK0ypGS58zLtO2o2UuiLvngTEhBbHQoZmZ4DAiugj0MNNpeM4jG9gM9NyusVDM3MxYP7A== + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -6908,11 +6913,6 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== -fontsource-source-code-pro@3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/fontsource-source-code-pro/-/fontsource-source-code-pro-3.1.5.tgz#0f000f06dfa7220f62c64f572e5d9ee1fd087a8e" - integrity sha512-eoYyrTaNcgrWc62w0pImfualDr2JE4SKpeGlEqV+Y34tHYbuD5jTIkzx3GrDH4eDw9KDS5wQdlnSVOj+SVy0Zw== - fontsource-source-sans-pro@3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/fontsource-source-sans-pro/-/fontsource-source-sans-pro-3.1.5.tgz#575edceadf0e68603c1c74b087f4423738cce2f9"