diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index e7e9681c46..ba4a45f566 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -648,8 +648,6 @@ "folder_location": "", "folder_name": "", "following_paths_conflict": "", - "font_family": "", - "font_size": "", "footer_about_us": "", "footer_contact_us": "", "footnotes": "", @@ -1011,7 +1009,6 @@ "limited_to_n_collaborators_per_project": "", "limited_to_n_collaborators_per_project_plural": "", "line": "", - "line_height": "", "line_width_is_the_width_of_the_line_in_the_current_environment": "", "link": "", "link_account": "", @@ -1152,7 +1149,6 @@ "new_compile_domain_notice": "", "new_compiles_in_this_project_will_automatically_use_the_newest_version": "", "new_create_tables_and_equations": "", - "new_editor_look": "", "new_error_logs_make_it_easier_to_find_whats_wrong": "", "new_file": "", "new_folder": "", @@ -1326,7 +1322,6 @@ "please_ask_the_project_owner_to_upgrade_to_track_changes": "", "please_change_primary_to_remove": "", "please_compile_pdf_before_download": "", - "please_compile_pdf_before_word_count": "", "please_confirm_primary_email_or_edit": "", "please_confirm_secondary_email_or_edit": "", "please_confirm_your_email_before_making_it_default": "", @@ -1678,7 +1673,6 @@ "show_document_preamble": "", "show_equation_preview": "", "show_file_tree": "", - "show_hotkeys": "", "show_in_code": "", "show_in_pdf": "", "show_less": "", @@ -1723,10 +1717,8 @@ "sort_by": "", "sort_by_x": "", "sort_projects": "", - "source": "", "speak": "", "speech_input_not_available": "", - "spell_check": "", "spellcheck": "", "spellcheck_language": "", "split_view": "", @@ -2243,7 +2235,6 @@ "wide": "", "will_lose_edit_access_on_date": "", "with_premium_subscription_you_also_get": "", - "word_count": "", "word_count_lower": "", "words": "", "work_in_vim_or_emacs_emulation_mode": "", diff --git a/services/web/frontend/js/features/editor-left-menu/components/actions-copy-project.tsx b/services/web/frontend/js/features/editor-left-menu/components/actions-copy-project.tsx deleted file mode 100644 index 00ef523463..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/actions-copy-project.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { useCallback, useState } from 'react' -import { useTranslation } from 'react-i18next' -import EditorCloneProjectModalWrapper from '../../clone-project-modal/components/editor-clone-project-modal-wrapper' -import LeftMenuButton from './left-menu-button' -import * as eventTracking from '../../../infrastructure/event-tracking' -import useOpenProject from '@/shared/hooks/use-open-project' - -export default function ActionsCopyProject() { - const [showModal, setShowModal] = useState(false) - const { t } = useTranslation() - const openProject = useOpenProject() - - const handleShowModal = useCallback(() => { - eventTracking.sendMB('left-menu-copy') - setShowModal(true) - }, []) - - return ( - <> - - {t('copy_project')} - - setShowModal(false)} - openProject={openProject} - /> - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/actions-menu.tsx b/services/web/frontend/js/features/editor-left-menu/components/actions-menu.tsx deleted file mode 100644 index 65d53a557d..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/actions-menu.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { ElementType } from 'react' -import { useTranslation } from 'react-i18next' -import getMeta from '../../../utils/meta' -import importOverleafModules from '../../../../macros/import-overleaf-module.macro' -import ActionsCopyProject from './actions-copy-project' -import ActionsWordCount from './actions-word-count' - -const components = importOverleafModules('editorLeftMenuManageTemplate') as { - import: { default: ElementType } - path: string -}[] - -export default function ActionsMenu() { - const { t } = useTranslation() - const anonymous = getMeta('ol-anonymous') - - if (anonymous) { - return null - } - - return ( - <> -

{t('actions')}

- - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/actions-word-count.tsx b/services/web/frontend/js/features/editor-left-menu/components/actions-word-count.tsx deleted file mode 100644 index 7832939541..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/actions-word-count.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { useState, useCallback } from 'react' -import WordCountModal from '../../word-count-modal/components/word-count-modal' -import * as eventTracking from '../../../infrastructure/event-tracking' -import { WordCountButton } from '@/features/word-count-modal/components/word-count-button' - -export default function ActionsWordCount() { - const [showModal, setShowModal] = useState(false) - - const handleShowModal = useCallback(() => { - eventTracking.sendMB('left-menu-count') - setShowModal(true) - }, []) - - return ( - <> - - setShowModal(false)} /> - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/download-menu.tsx b/services/web/frontend/js/features/editor-left-menu/components/download-menu.tsx deleted file mode 100644 index e0bb6c453e..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/download-menu.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useTranslation } from 'react-i18next' -import DownloadPDF from './download-pdf' -import DownloadSource from './download-source' - -export default function DownloadMenu() { - const { t } = useTranslation() - - return ( - <> -

{t('download')}

-
    -
  • - -
  • -
  • - -
  • -
- - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/download-pdf.tsx b/services/web/frontend/js/features/editor-left-menu/components/download-pdf.tsx deleted file mode 100644 index 2031ca4a48..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/download-pdf.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useTranslation } from 'react-i18next' -import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context' -import { useProjectContext } from '../../../shared/context/project-context' -import { isSmallDevice } from '../../../infrastructure/event-tracking' -import MaterialIcon from '@/shared/components/material-icon' -import OLTooltip from '@/shared/components/ol/ol-tooltip' -import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics' - -export default function DownloadPDF() { - const { t } = useTranslation() - const { pdfDownloadUrl, pdfUrl } = useCompileContext() - const { projectId } = useProjectContext() - const { sendEvent } = useEditorAnalytics() - - function sendDownloadEvent() { - sendEvent('download-pdf-button-click', { - projectId, - location: 'left-menu', - isSmallDevice, - }) - } - - if (pdfUrl) { - return ( - - -
- PDF -
- ) - } else { - return ( - -
- -
- PDF -
-
- ) - } -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/download-source.tsx b/services/web/frontend/js/features/editor-left-menu/components/download-source.tsx deleted file mode 100644 index 9c9e4b2471..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/download-source.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { useTranslation } from 'react-i18next' -import { useProjectContext } from '../../../shared/context/project-context' -import * as eventTracking from '../../../infrastructure/event-tracking' -import { isSmallDevice } from '../../../infrastructure/event-tracking' -import MaterialIcon from '@/shared/components/material-icon' - -export default function DownloadSource() { - const { t } = useTranslation() - const { projectId } = useProjectContext() - - function sendDownloadEvent() { - eventTracking.sendMB('download-zip-button-click', { - projectId, - location: 'left-menu', - isSmallDevice, - }) - } - - return ( - - -
- {t('source')} -
- ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/editor-left-menu-body.tsx b/services/web/frontend/js/features/editor-left-menu/components/editor-left-menu-body.tsx deleted file mode 100644 index 56e39f20e6..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/editor-left-menu-body.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import DownloadMenu from './download-menu' -import ActionsMenu from './actions-menu' -import HelpMenu from './help-menu' -import SyncMenu from './sync-menu' -import SettingsMenu from './settings-menu' - -export default function EditorLeftMenuBody() { - return ( - <> - - - - - - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/editor-left-menu.tsx b/services/web/frontend/js/features/editor-left-menu/components/editor-left-menu.tsx deleted file mode 100644 index ea4c06bc5c..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/editor-left-menu.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { useLayoutContext } from '../../../shared/context/layout-context' -import LeftMenuMask from './left-menu-mask' -import classNames from 'classnames' -import { lazy, memo, Suspense } from 'react' -import { FullSizeLoadingSpinner } from '@/shared/components/loading-spinner' -import { Offcanvas } from 'react-bootstrap' -import { EditorLeftMenuProvider } from './editor-left-menu-context' -import withErrorBoundary from '@/infrastructure/error-boundary' -import OLNotification from '@/shared/components/ol/ol-notification' -import { useTranslation } from 'react-i18next' - -const EditorLeftMenuBody = lazy(() => import('./editor-left-menu-body')) - -const LazyEditorLeftMenuWithErrorBoundary = withErrorBoundary( - () => ( - }> - - - ), - () => { - const { t } = useTranslation() - return - } -) - -function EditorLeftMenu() { - const { leftMenuShown, setLeftMenuShown } = useLayoutContext() - - const closeLeftMenu = () => { - setLeftMenuShown(false) - } - - return ( - - - - - - - {leftMenuShown && } - - ) -} - -export default memo(EditorLeftMenu) diff --git a/services/web/frontend/js/features/editor-left-menu/components/help-contact-us.tsx b/services/web/frontend/js/features/editor-left-menu/components/help-contact-us.tsx deleted file mode 100644 index eee0672fe5..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/help-contact-us.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { useTranslation } from 'react-i18next' -import { useCallback } from 'react' -import * as eventTracking from '../../../infrastructure/event-tracking' -import { useContactUsModal } from '../../../shared/hooks/use-contact-us-modal' -import LeftMenuButton from './left-menu-button' - -export default function HelpContactUs() { - const { modal, showModal } = useContactUsModal() - const { t } = useTranslation() - - const showModalWithAnalytics = useCallback(() => { - eventTracking.sendMB('left-menu-contact') - showModal() - }, [showModal]) - - return ( - <> - - {t('contact_us')} - - {modal} - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/help-documentation.tsx b/services/web/frontend/js/features/editor-left-menu/components/help-documentation.tsx deleted file mode 100644 index e0d2fb6ca5..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/help-documentation.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { useTranslation } from 'react-i18next' -import LeftMenuButton from './left-menu-button' - -export default function HelpDocumentation() { - const { t } = useTranslation() - - return ( - <> - - {t('documentation')} - - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/help-menu.tsx b/services/web/frontend/js/features/editor-left-menu/components/help-menu.tsx deleted file mode 100644 index ceb64d1857..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/help-menu.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { useTranslation } from 'react-i18next' -import getMeta from '../../../utils/meta' -import HelpContactUs from './help-contact-us' -import HelpDocumentation from './help-documentation' -import HelpShowHotkeys from './help-show-hotkeys' - -export default function HelpMenu() { - const { t } = useTranslation() - const showSupport = getMeta('ol-showSupport') - - return ( - <> -

{t('help')}

-
    -
  • - -
  • - {showSupport ? ( - <> -
  • - -
  • -
  • - -
  • - - ) : null} -
- - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/help-show-hotkeys.tsx b/services/web/frontend/js/features/editor-left-menu/components/help-show-hotkeys.tsx deleted file mode 100644 index 1bec8b3686..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/help-show-hotkeys.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { useState, useCallback } from 'react' -import { useTranslation } from 'react-i18next' -import * as eventTracking from '../../../infrastructure/event-tracking' -import { useProjectContext } from '../../../shared/context/project-context' -import HotkeysModal from '../../hotkeys-modal/components/hotkeys-modal' -import LeftMenuButton from './left-menu-button' -import { isMac } from '@/shared/utils/os' - -export default function HelpShowHotkeys() { - const [showModal, setShowModal] = useState(false) - const { t } = useTranslation() - const { features } = useProjectContext() - - const showModalWithAnalytics = useCallback(() => { - eventTracking.sendMB('left-menu-hotkeys') - setShowModal(true) - }, []) - - return ( - <> - - {t('show_hotkeys')} - - setShowModal(false)} - isMac={isMac} - trackChangesVisible={features?.trackChangesVisible} - /> - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/left-menu-button.tsx b/services/web/frontend/js/features/editor-left-menu/components/left-menu-button.tsx deleted file mode 100644 index f1cd54750f..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/left-menu-button.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { PropsWithChildren } from 'react' -import MaterialIcon from '@/shared/components/material-icon' - -type Props = { - onClick?: () => void - icon?: string - svgIcon?: React.ReactElement | null - disabled?: boolean - disabledAccesibilityText?: string - type?: 'button' | 'link' - href?: string - translate?: React.HTMLAttributes['translate'] -} - -function LeftMenuButtonIcon({ - svgIcon, - icon, -}: { - svgIcon?: React.ReactElement | null - icon?: string -}) { - if (svgIcon) { - return
{svgIcon}
- } else if (icon) { - return - } else return null -} - -export default function LeftMenuButton({ - children, - svgIcon, - onClick, - icon, - disabled = false, - disabledAccesibilityText, - type = 'button', - href, - translate, -}: PropsWithChildren) { - if (disabled) { - return ( -
- - {children} - {disabledAccesibilityText ? ( - {disabledAccesibilityText} - ) : null} -
- ) - } - - if (type === 'button') { - return ( - - ) - } else { - return ( - - - {children} - - ) - } -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/left-menu-mask.tsx b/services/web/frontend/js/features/editor-left-menu/components/left-menu-mask.tsx deleted file mode 100644 index 9a2d068f07..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/left-menu-mask.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { memo, useEffect, useRef, useState } from 'react' -import { useLayoutContext } from '../../../shared/context/layout-context' -import { useUserSettingsContext } from '@/shared/context/user-settings-context' - -export default memo(function LeftMenuMask() { - const { setLeftMenuShown } = useLayoutContext() - const { userSettings } = useUserSettingsContext() - const { editorTheme, editorLightTheme, editorDarkTheme, overallTheme } = - userSettings - const [original] = useState({ - editorTheme, - overallTheme, - editorLightTheme, - editorDarkTheme, - }) - const maskRef = useRef(null) - - useEffect(() => { - if (maskRef.current) { - if ( - editorTheme !== original.editorTheme || - editorLightTheme !== original.editorLightTheme || - editorDarkTheme !== original.editorDarkTheme || - overallTheme !== original.overallTheme - ) { - maskRef.current.style.opacity = '0' - } - } - }, [editorTheme, editorLightTheme, editorDarkTheme, overallTheme, original]) - - return ( - // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions -
setLeftMenuShown(false)} - /> - ) -}) diff --git a/services/web/frontend/js/features/editor-left-menu/components/settings-menu.tsx b/services/web/frontend/js/features/editor-left-menu/components/settings-menu.tsx deleted file mode 100644 index 8565497448..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/settings-menu.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { useTranslation } from 'react-i18next' -import getMeta from '../../../utils/meta' -import SettingsAutoCloseBrackets from './settings/settings-auto-close-brackets' -import SettingsAutoComplete from './settings/settings-auto-complete' -import SettingsCompiler from './settings/settings-compiler' -import SettingsDictionary from './settings/settings-dictionary' -import SettingsDocument from './settings/settings-document' -import SettingsEditorTheme from './settings/settings-editor-theme' -import SettingsFontFamily from './settings/settings-font-family' -import SettingsFontSize from './settings/settings-font-size' -import SettingsImageName from './settings/settings-image-name' -import SettingsKeybindings from './settings/settings-keybindings' -import SettingsLineHeight from './settings/settings-line-height' -import SettingsOverallTheme from './settings/settings-overall-theme' -import SettingsPdfViewer from './settings/settings-pdf-viewer' -import SettingsSpellCheckLanguage from './settings/settings-spell-check-language' -import SettingsSyntaxValidation from './settings/settings-syntax-validation' -import SettingsMathPreview from './settings/settings-math-preview' -import importOverleafModules from '../../../../macros/import-overleaf-module.macro' -import { ElementType } from 'react' -import OLForm from '@/shared/components/ol/ol-form' -import SettingsNewEditor from './settings/settings-new-editor' - -const moduleSettings: Array<{ - import: { default: ElementType } - path: string -}> = importOverleafModules('settingsEntries') - -export default function SettingsMenu() { - const { t } = useTranslation() - const anonymous = getMeta('ol-anonymous') - - if (anonymous) { - return null - } - - return ( - <> -

{t('settings')}

- - - - - - - {moduleSettings.map(({ import: { default: Component }, path }) => ( - - ))} - - - - - - - - - - - - - - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-auto-close-brackets.tsx b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-auto-close-brackets.tsx deleted file mode 100644 index ae245873bc..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-auto-close-brackets.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { useTranslation } from 'react-i18next' -import { useProjectSettingsContext } from '../../context/project-settings-context' -import SettingsMenuSelect from './settings-menu-select' - -export default function SettingsAutoCloseBrackets() { - const { t } = useTranslation() - const { autoPairDelimiters, setAutoPairDelimiters } = - useProjectSettingsContext() - - return ( - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-auto-complete.tsx b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-auto-complete.tsx deleted file mode 100644 index 08268d744f..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-auto-complete.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useTranslation } from 'react-i18next' -import { useProjectSettingsContext } from '../../context/project-settings-context' -import SettingsMenuSelect from './settings-menu-select' - -export default function SettingsAutoComplete() { - const { t } = useTranslation() - const { autoComplete, setAutoComplete } = useProjectSettingsContext() - - return ( - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-compiler.tsx b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-compiler.tsx deleted file mode 100644 index ccc6cfd7bf..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-compiler.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useTranslation } from 'react-i18next' -import type { ProjectCompiler } from '../../../../../../types/project-settings' -import { usePermissionsContext } from '@/features/ide-react/context/permissions-context' -import { useProjectSettingsContext } from '../../context/project-settings-context' -import SettingsMenuSelect from './settings-menu-select' -import { useSetCompilationSettingWithEvent } from '../../hooks/use-set-compilation-setting' - -export default function SettingsCompiler() { - const { t } = useTranslation() - const { write } = usePermissionsContext() - const { compiler, setCompiler } = useProjectSettingsContext() - const changeCompiler = useSetCompilationSettingWithEvent( - 'compiler', - setCompiler - ) - - return ( - - onChange={changeCompiler} - value={compiler} - disabled={!write} - options={[ - { - value: 'pdflatex', - label: 'pdfLaTeX', - }, - { - value: 'latex', - label: 'LaTeX', - }, - { - value: 'xelatex', - label: 'XeLaTeX', - }, - { - value: 'lualatex', - label: 'LuaLaTeX', - }, - ]} - label={t('compiler')} - name="compiler" - translateOptions="no" - /> - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-dictionary.tsx b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-dictionary.tsx deleted file mode 100644 index 8e836b8ebc..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-dictionary.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { useState } from 'react' -import { useTranslation } from 'react-i18next' -import DictionaryModal from '../../../dictionary/components/dictionary-modal' -import OLButton from '@/shared/components/ol/ol-button' -import OLFormGroup from '@/shared/components/ol/ol-form-group' -import OLFormLabel from '@/shared/components/ol/ol-form-label' - -export default function SettingsDictionary() { - const { t } = useTranslation() - const [showModal, setShowModal] = useState(false) - - return ( - - {t('dictionary')} - setShowModal(true)} - > - {t('edit')} - - - setShowModal(false)} - /> - - ) -} diff --git a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-document.tsx b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-document.tsx deleted file mode 100644 index 38f3e43540..0000000000 --- a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-document.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useMemo } from 'react' -import { useTranslation } from 'react-i18next' -import { isValidTeXFile } from '../../../../main/is-valid-tex-file' -import { usePermissionsContext } from '@/features/ide-react/context/permissions-context' -import { useProjectSettingsContext } from '../../context/project-settings-context' -import SettingsMenuSelect from './settings-menu-select' -import type { Option } from './settings-menu-select' -import { useFileTreeData } from '@/shared/context/file-tree-data-context' -import { useSetCompilationSettingWithEvent } from '../../hooks/use-set-compilation-setting' - -export default function SettingsDocument() { - const { t } = useTranslation() - const { write } = usePermissionsContext() - const { docs } = useFileTreeData() - const { rootDocId, setRootDocId } = useProjectSettingsContext() - const changeRootDoc = useSetCompilationSettingWithEvent( - 'root-doc-id', - setRootDocId, - { omitValueInEvent: true } - ) - - const validDocsOptions = useMemo(() => { - const filteredDocs = - docs?.filter( - doc => isValidTeXFile(doc.doc.name) || rootDocId === doc.doc.id - ) ?? [] - - const mappedDocs: Array