Merge pull request #27684 from overleaf/dp-teardown-labs

Cleanup editor-redesign labs experiment

GitOrigin-RevId: 7697736f3bada8d205bab98c03ba96a99734311a
This commit is contained in:
David
2025-08-18 09:54:21 +01:00
committed by Copybot
parent 1e6d9017ee
commit 297ed66899
17 changed files with 14 additions and 455 deletions

View File

@@ -48,7 +48,6 @@
"access_denied": "",
"access_edit_your_projects": "",
"access_levels_changed": "",
"access_your_favourite_features_faster_with_our_new_streamlined_editor": "",
"account_billed_manually": "",
"account_has_been_link_to_institution_account": "",
"account_has_past_due_invoice_change_plan_warning": "",
@@ -448,7 +447,6 @@
"done": "",
"dont_forget_you_currently_have": "",
"dont_reload_or_close_this_tab": "",
"double_clicking_on_the_pdf_shows": "",
"download": "",
"download_all": "",
"download_as_pdf": "",
@@ -738,7 +736,6 @@
"help_editor_settings": "",
"help_improve_overleaf_fill_out_this_survey": "",
"help_improve_screen_reader_fill_out_this_survey": "",
"help_shape_the_future_of_overleaf": "",
"hide": "",
"hide_configuration": "",
"hide_deleted_user": "",
@@ -892,7 +889,6 @@
"it_looks_like_your_payment_details_are_missing_please_update_your_billing_information": "",
"italics": "",
"join": "",
"join_beta": "",
"join_beta_program": "",
"join_now": "",
"join_overleaf_labs": "",
@@ -911,7 +907,6 @@
"knowledge_base": "",
"labels_help_you_to_easily_reference_your_figures": "",
"labels_help_you_to_reference_your_tables": "",
"labs": "",
"language": "",
"language_suggestions": "",
"large_or_high-resolution_images_taking_too_long": "",
@@ -927,7 +922,6 @@
"last_used": "",
"latam_discount_modal_info": "",
"latam_discount_modal_title": "",
"latest_updates": "",
"latex_in_thirty_minutes": "",
"latex_places_figures_according_to_a_special_algorithm": "",
"latex_places_tables_according_to_a_special_algorithm": "",
@@ -1094,14 +1088,12 @@
"neither_agree_nor_disagree": "",
"new_compile_domain_notice": "",
"new_create_tables_and_equations": "",
"new_error_logs_panel": "",
"new_file": "",
"new_folder": "",
"new_look_and_feel": "",
"new_look_and_placement_of_the_settings": "",
"new_name": "",
"new_navigation_introducing_left_hand_side_rail_and_top_menus": "",
"new_overleaf_editor": "",
"new_password": "",
"new_project": "",
"new_project_name": "",
@@ -1533,7 +1525,6 @@
"search_whole_word": "",
"search_within_selection": "",
"searched_path_for_lines_containing": "",
"searching_all_project_files_is_now_available": "",
"security": "",
"see_suggestions_from_collaborators": "",
"see_your_current_location_in_the_project": "",
@@ -1782,14 +1773,12 @@
"thank_you": "",
"thank_you_exclamation": "",
"thank_you_for_your_feedback": "",
"thanks_for_being_part_of_this_labs_experiment_your_feedback_will_help_us_make_the_new_editor_the_best_yet": "",
"thanks_for_confirming_your_email_address": "",
"thanks_for_getting_in_touch": "",
"thanks_for_subscribing": "",
"thanks_for_subscribing_to_plan_with_add_on": "",
"thanks_for_subscribing_to_the_add_on": "",
"thanks_for_subscribing_you_help_sl": "",
"thanks_for_trying_the_new_editor": "",
"thanks_settings_updated": "",
"the_add_on_will_remain_active_until": "",
"the_code_editor_color_scheme": "",
@@ -1798,9 +1787,7 @@
"the_following_files_and_folders_already_exist_in_this_project": "",
"the_following_folder_already_exists_in_this_project": "",
"the_following_folder_already_exists_in_this_project_plural": "",
"the_labs_experiment_has_now_finished": "",
"the_latex_engine_used_for_compiling": "",
"the_new_overleaf_editor": "",
"the_new_overleaf_editor_try_now_in_beta": "",
"the_next_payment_will_be_collected_on": "",
"the_original_text_has_changed": "",
@@ -1831,7 +1818,6 @@
"this_field_is_required": "",
"this_grants_access_to_features_2": "",
"this_is_a_beta_release_for_the_new_overleaf_editor": "",
"this_is_a_labs_experiment_for_the_new_overleaf_editor_some_features_are_still_in_progress": "",
"this_is_a_new_feature": "",
"this_is_the_file_that_references_pulled_from_your_reference_manager_will_be_added_to": "",
"this_project_already_has_maximum_collaborators": "",
@@ -2114,7 +2100,6 @@
"well_be_here_when_youre_ready": "",
"were_making_some_changes_to_project_sharing_this_means_you_will_be_visible": "",
"were_performing_maintenance": "",
"were_redesigning_our_editor_to_make_it_easier_to_use": "",
"were_reducing_compile_timeout": "",
"weve_redesigned_our_editor_to_make_it_easier_to_use_and_future_ready": "",
"what_did_you_find_most_helpful": "",
@@ -2123,7 +2108,6 @@
"what_happens_when_sso_is_enabled": "",
"what_should_we_call_you": "",
"whats_different": "",
"whats_different_in_the_new_editor": "",
"when_you_tick_the_include_caption_box": "",
"why_might_this_happen": "",
"why_not_pause_instead": "",
@@ -2166,7 +2150,6 @@
"you_are_using_your_organization_email_x_would_like_you_to_take_action": "",
"you_can_also_choose_to_view_anonymously_or_leave_the_project": "",
"you_can_buy_this_plan_but_not_as_a_trial": "",
"you_can_leave_the_experiment_from_your_account_settings_at_any_time": "",
"you_can_manage_your_reference_manager_integrations_from_your_account_settings_page": "",
"you_can_now_enable_sso": "",
"you_can_now_log_in_sso": "",
@@ -2240,7 +2223,6 @@
"youre_about_to_enable_single_sign_on_sso_only": "",
"youre_adding_x_licenses_to_your_plan_giving_you_a_total_of_y_licenses": "",
"youre_already_setup_for_sso": "",
"youre_helping_us_shape_the_future_of_overleaf": "",
"youre_joining": "",
"youre_on_free_trial_which_ends_on": "",
"youre_signed_in_as_logout": "",

View File

@@ -1,14 +1,11 @@
import { useCallback } from 'react'
import OLButton from '../../shared/components/ol/ol-button'
import { useIdeRedesignSwitcherContext } from '../ide-react/context/ide-redesign-switcher-context'
import MaterialIcon from '@/shared/components/material-icon'
import { useTranslation } from 'react-i18next'
import { isNewEditorInBeta } from '../ide-redesign/utils/new-editor-utils'
const TryNewEditorButton = () => {
const { t } = useTranslation()
const { setShowSwitcherModal } = useIdeRedesignSwitcherContext()
const newEditorBeta = isNewEditorInBeta()
const onClick = useCallback(() => {
setShowSwitcherModal(true)
@@ -19,9 +16,6 @@ const TryNewEditorButton = () => {
className="toolbar-experiment-button"
onClick={onClick}
size="sm"
leadingIcon={
!newEditorBeta && <MaterialIcon type="experiment" unfilled />
}
variant="secondary"
>
{t('try_the_new_editor')}

View File

@@ -16,7 +16,6 @@ import HistoryContainer from '@/features/ide-react/components/history-container'
import getMeta from '@/utils/meta'
import { useEditorContext } from '@/shared/context/editor-context'
import importOverleafModules from '../../../../../macros/import-overleaf-module.macro'
import LabsUserBetaPromo from '@/features/ide-redesign/components/labs-user-beta-promo'
const mainEditorLayoutModalsModules: Array<{
import: { default: ElementType }
@@ -100,7 +99,6 @@ export const MainLayout: FC = () => {
<PanelGroup autoSaveId="ide-inner-layout" direction="horizontal">
<Panel className="ide-react-panel" id="panel-main" order={1}>
<HistoryContainer />
<LabsUserBetaPromo />
<EditorAndPdf />
</Panel>

View File

@@ -2,29 +2,19 @@ import { memo } from 'react'
import ForceDisconnected from '@/features/ide-react/components/modals/force-disconnected'
import { UnsavedDocs } from '@/features/ide-react/components/unsaved-docs/unsaved-docs'
import SystemMessages from '@/shared/components/system-messages'
import { IdeRedesignSwitcherModal as IdeRedesignSwitcherModalLabs } from '@/features/ide-redesign/components/switcher-modal/modal'
import {
IdeRedesignSwitcherModal as IdeRedesignSwitcherModalBeta,
IdeRedesignSwitcherModal,
IdeRedesignIntroModal,
} from '@/features/ide-redesign/components/switcher-modal/beta-modal'
import { isNewEditorInBeta } from '@/features/ide-redesign/utils/new-editor-utils'
export const Modals = memo(() => {
const newEditorBeta = isNewEditorInBeta()
return (
<>
<ForceDisconnected />
<UnsavedDocs />
<SystemMessages />
{newEditorBeta ? (
<>
<IdeRedesignIntroModal />
<IdeRedesignSwitcherModalBeta />
</>
) : (
<IdeRedesignSwitcherModalLabs />
)}
<IdeRedesignIntroModal />
<IdeRedesignSwitcherModal />
</>
)
})

View File

@@ -1,76 +0,0 @@
import OLButton from '@/shared/components/ol/ol-button'
import MaterialIcon from '@/shared/components/material-icon'
import Notification from '@/shared/components/notification'
import { useEditorContext } from '@/shared/context/editor-context'
import useTutorial from '@/shared/hooks/promotions/use-tutorial'
import { useEffect } from 'react'
import { isNewEditorInBeta } from '../utils/new-editor-utils'
import { isInExperiment } from '@/utils/labs-utils'
import { useUserContext } from '@/shared/context/user-context'
import { useTranslation } from 'react-i18next'
const TUTORIAL_KEY = 'ide-redesign-labs-user-beta-promo'
export default function LabsUserBetaPromoWrapper() {
const user = useUserContext()
// Show beta promo to labs users who are not in beta
// when the redesign switches to beta
if (
isNewEditorInBeta() &&
isInExperiment('editor-redesign') &&
!user.betaProgram
) {
return <LabsUserBetaPromo />
}
}
const LabsUserBetaPromo = () => {
const { inactiveTutorials } = useEditorContext()
const { showPopup, tryShowingPopup, dismissTutorial } = useTutorial(
TUTORIAL_KEY,
{ name: TUTORIAL_KEY }
)
useEffect(() => {
if (!inactiveTutorials.includes(TUTORIAL_KEY)) {
tryShowingPopup()
}
}, [tryShowingPopup, inactiveTutorials])
if (!showPopup) {
return null
}
return (
<Notification
className="ide-redesign-labs-user-beta-promo"
customIcon={<MaterialIcon type="experiment" unfilled />}
type="success"
isDismissible
content={<NotificationContent />}
onDismiss={dismissTutorial}
/>
)
}
const NotificationContent = () => {
const { t } = useTranslation()
return (
<>
<div className="ide-redesign-labs-user-beta-promo-title">
{t('thanks_for_trying_the_new_editor')}
</div>
<div>{t('the_labs_experiment_has_now_finished')}</div>
<OLButton
variant="secondary"
className="ide-redesign-labs-user-beta-promo-button"
href="/beta/participate"
target="_blank"
rel="noreferrer noopener"
>
{t('join_beta')}
</OLButton>
</>
)
}

View File

@@ -1,32 +0,0 @@
import { useState } from 'react'
import LabsExperimentWidget from '../../../shared/components/labs/labs-experiments-widget'
import { isInExperiment } from '@/utils/labs-utils'
import { useTranslation } from 'react-i18next'
import labsIcon from '../images/labs-icon.svg'
const EditorRedesignLabsWidget = ({
labsProgram,
setErrorMessage,
}: {
labsProgram: boolean
setErrorMessage: (err: string) => void
}) => {
const { t } = useTranslation()
const [optedIn, setOptedIn] = useState(isInExperiment('editor-redesign'))
return (
<LabsExperimentWidget
description={t(
'access_your_favourite_features_faster_with_our_new_streamlined_editor'
)}
experimentName="editor-redesign"
logo={<img src={labsIcon} alt="" aria-hidden="true" />}
labsEnabled={labsProgram}
setErrorMessage={setErrorMessage}
optedIn={optedIn}
setOptedIn={setOptedIn}
title={t('new_overleaf_editor')}
/>
)
}
export default EditorRedesignLabsWidget

View File

@@ -1,201 +0,0 @@
import { useIdeRedesignSwitcherContext } from '@/features/ide-react/context/ide-redesign-switcher-context'
import OLButton from '@/shared/components/ol/ol-button'
import OLModal, {
OLModalBody,
OLModalFooter,
OLModalHeader,
OLModalTitle,
} from '@/shared/components/ol/ol-modal'
import { FC, useCallback } from 'react'
import {
canUseNewEditor,
useIsNewEditorEnabled,
} from '../../utils/new-editor-utils'
import Notification from '@/shared/components/notification'
import { useSwitchEnableNewEditorState } from '../../hooks/use-switch-enable-new-editor-state'
import { Trans, useTranslation } from 'react-i18next'
import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics'
import { useFeatureFlag } from '@/shared/context/split-test-context'
import { useSurveyUrl } from '../../hooks/use-survey-url'
export const IdeRedesignSwitcherModal = () => {
const { t } = useTranslation()
const { showSwitcherModal, setShowSwitcherModal } =
useIdeRedesignSwitcherContext()
const onHide = useCallback(
() => setShowSwitcherModal(false),
[setShowSwitcherModal]
)
const { loading, error, setEditorRedesignStatus } =
useSwitchEnableNewEditorState()
const enabled = useIsNewEditorEnabled()
const hasAccess = canUseNewEditor()
if (!hasAccess) {
return null
}
const Content = enabled
? SwitcherModalContentEnabled
: SwitcherModalContentDisabled
return (
<OLModal
show={showSwitcherModal}
onHide={onHide}
className="ide-redesign-switcher-modal"
>
<OLModalHeader closeButton>
<OLModalTitle>{t('the_new_overleaf_editor')}</OLModalTitle>
</OLModalHeader>
{error && <Notification type="error" content={error} isDismissible />}
<Content
setEditorRedesignStatus={setEditorRedesignStatus}
hide={onHide}
loading={loading}
/>
</OLModal>
)
}
type ModalContentProps = {
setEditorRedesignStatus: (enabled: boolean) => Promise<void>
hide: () => void
loading: boolean
}
const SwitcherModalContentEnabled: FC<ModalContentProps> = ({
setEditorRedesignStatus,
hide,
loading,
}) => {
const { t } = useTranslation()
const { sendEvent } = useEditorAnalytics()
const disable = useCallback(() => {
sendEvent('editor-redesign-toggle', {
action: 'disable',
location: 'modal',
})
setEditorRedesignStatus(false)
.then(hide)
.catch(() => {
// do nothing, we're already showing the error
})
}, [setEditorRedesignStatus, hide, sendEvent])
const surveyURL = useSurveyUrl()
return (
<>
<OLModalBody>
<h3>{t('youre_helping_us_shape_the_future_of_overleaf')}</h3>
<p>
{t(
'thanks_for_being_part_of_this_labs_experiment_your_feedback_will_help_us_make_the_new_editor_the_best_yet'
)}
</p>
<SwitcherWhatsNew />
<LeavingNote />
</OLModalBody>
<OLModalFooter>
<OLButton
onClick={disable}
variant="secondary"
className="me-auto"
disabled={loading}
>
{t('switch_to_old_editor')}
</OLButton>
<OLButton onClick={hide} variant="secondary">
{t('cancel')}
</OLButton>
<OLButton
href={surveyURL}
target="_blank"
rel="noopener noreferrer"
variant="primary"
>
{t('give_feedback')}
</OLButton>
</OLModalFooter>
</>
)
}
const SwitcherModalContentDisabled: FC<ModalContentProps> = ({
setEditorRedesignStatus,
hide,
loading,
}) => {
const { t } = useTranslation()
const { sendEvent } = useEditorAnalytics()
const enable = useCallback(() => {
sendEvent('editor-redesign-toggle', {
action: 'enable',
location: 'modal',
})
setEditorRedesignStatus(true)
.then(hide)
.catch(() => {
// do nothing, we're already showing the error
})
}, [setEditorRedesignStatus, hide, sendEvent])
return (
<>
<OLModalBody>
<h3>{t('help_shape_the_future_of_overleaf')}</h3>
<p>{t('were_redesigning_our_editor_to_make_it_easier_to_use')}</p>
<SwitcherWhatsNew />
<LeavingNote />
</OLModalBody>
<OLModalFooter>
<OLButton onClick={hide} variant="secondary">
{t('cancel')}
</OLButton>
<OLButton onClick={enable} variant="primary" disabled={loading}>
{t('switch_to_new_editor')}
</OLButton>
</OLModalFooter>
</>
)
}
const SwitcherWhatsNew = () => {
const { t } = useTranslation()
const newErrorlogs = useFeatureFlag('new-editor-error-logs-redesign')
return (
<div className="ide-redesign-switcher-modal-whats-new">
<h4>{t('latest_updates')}</h4>
<ul>
{newErrorlogs && <li>{t('new_error_logs_panel')}</li>}
<li>{t('searching_all_project_files_is_now_available')}</li>
<li>{t('double_clicking_on_the_pdf_shows')}</li>
</ul>
<hr />
<h4>{t('whats_different_in_the_new_editor')}</h4>
<ul>
<li>{t('new_look_and_feel')}</li>
<li>
{t('new_navigation_introducing_left_hand_side_rail_and_top_menus')}
</li>
<li>{t('new_look_and_placement_of_the_settings')}</li>
<li>{t('improved_dark_mode')}</li>
<li>{t('review_panel_and_error_logs_moved_to_the_left')}</li>
</ul>
</div>
)
}
const LeavingNote = () => {
return (
<p className="ide-redesign-switcher-modal-leave-text">
<Trans
i18nKey="you_can_leave_the_experiment_from_your_account_settings_at_any_time"
// eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
components={[<a href="/user/settings" />]}
shouldUnescape
tOptions={{ interpolation: { escapeValue: true } }}
/>
</p>
)
}

View File

@@ -1,40 +0,0 @@
import { useIdeRedesignSwitcherContext } from '@/features/ide-react/context/ide-redesign-switcher-context'
import OLButton from '@/shared/components/ol/ol-button'
import OLTooltip from '@/shared/components/ol/ol-tooltip'
import MaterialIcon from '@/shared/components/material-icon'
import { useCallback } from 'react'
import { useTranslation } from 'react-i18next'
import { GiveFeedbackLink } from './give-feedback-link'
export const LabsActions = () => {
const { t } = useTranslation()
const { setShowSwitcherModal } = useIdeRedesignSwitcherContext()
const openEditorRedesignSwitcherModal = useCallback(() => {
setShowSwitcherModal(true)
}, [setShowSwitcherModal])
return (
<>
<div className="ide-redesign-toolbar-button-container">
<OLTooltip
id="tooltip-labs-button"
description={t(
'this_is_a_labs_experiment_for_the_new_overleaf_editor_some_features_are_still_in_progress'
)}
overlayProps={{ delay: 0, placement: 'bottom' }}
>
<OLButton
size="sm"
variant="secondary"
className="ide-redesign-labs-button"
onClick={openEditorRedesignSwitcherModal}
leadingIcon={<MaterialIcon type="experiment" unfilled />}
>
{t('labs')}
</OLButton>
</OLTooltip>
</div>
<GiveFeedbackLink />
</>
)
}

View File

@@ -5,7 +5,6 @@ import { OnlineUsers } from './online-users'
import ShareProjectButton from './share-project-button'
import ChangeLayoutButton from './change-layout-button'
import ShowHistoryButton from './show-history-button'
import { LabsActions } from './labs-actions'
import { useLayoutContext } from '@/shared/context/layout-context'
import BackToEditorButton from '@/features/editor-navigation-toolbar/components/back-to-editor-button'
import { useCallback } from 'react'
@@ -16,7 +15,6 @@ import importOverleafModules from '../../../../../macros/import-overleaf-module.
import UpgradeButton from './upgrade-button'
import getMeta from '@/utils/meta'
import { useIdeReactContext } from '@/features/ide-react/context/ide-react-context'
import { isNewEditorInBeta } from '../../utils/new-editor-utils'
import { BetaActions } from './beta-actions'
const [publishModalModules] = importOverleafModules('publishModal')
@@ -30,7 +28,6 @@ export const Toolbar = () => {
const shouldDisplaySubmitButton =
(permissionsLevel === 'owner' || permissionsLevel === 'readAndWrite') &&
SubmitProjectButton
const newEditorBeta = isNewEditorInBeta()
const handleBackToEditorClick = useCallback(() => {
eventTracking.sendMB('navigation-clicked-history', { action: 'close' })
@@ -57,7 +54,7 @@ export const Toolbar = () => {
</div>
<ToolbarProjectTitle />
<div className="ide-redesign-toolbar-actions">
{newEditorBeta ? <BetaActions /> : <LabsActions />}
<BetaActions />
<OnlineUsers />
<ShowHistoryButton />
<ChangeLayoutButton />

View File

@@ -1,23 +1,10 @@
import {
useFeatureFlag,
useSplitTest,
} from '@/shared/context/split-test-context'
import { isNewEditorInBeta } from '../utils/new-editor-utils'
import { useSplitTest } from '@/shared/context/split-test-context'
export const useSurveyUrl = () => {
const newErrorlogs = useFeatureFlag('new-editor-error-logs-redesign')
const splitTestConfig = useSplitTest('editor-redesign')
const newEditorBeta = isNewEditorInBeta()
if (newEditorBeta) {
return (
splitTestConfig.info?.badgeInfo?.url ||
'https://forms.gle/NGkALNUiMbanjp3Q7'
)
}
if (newErrorlogs) {
return 'https://forms.gle/83QJ9ALJkiugxTZf8'
}
return 'https://forms.gle/soyVStc5qDx9na1Z6'
return (
splitTestConfig.info?.badgeInfo?.url ||
'https://forms.gle/NGkALNUiMbanjp3Q7'
)
}

View File

@@ -1,19 +1,8 @@
import { useUserSettingsContext } from '@/shared/context/user-settings-context'
import { isInExperiment } from '@/utils/labs-utils'
import getMeta from '@/utils/meta'
import { isSplitTestEnabled } from '@/utils/splitTestUtils'
export const isNewEditorInBeta = () => {
const splitTestInfo = getMeta('ol-splitTestInfo') || {}
return splitTestInfo['editor-redesign']?.phase === 'beta'
}
export const canUseNewEditor = () => {
const inBetaPhase = isNewEditorInBeta()
return (
(!inBetaPhase && isInExperiment('editor-redesign')) ||
isSplitTestEnabled('editor-redesign')
)
return isSplitTestEnabled('editor-redesign')
}
export const useIsNewEditorEnabled = () => {

View File

@@ -2,7 +2,7 @@ import getMeta from './meta'
// Should be `never` when no experiments are active. Otherwise it should be a
// union of active experiment names e.g. `'experiment1' | 'experiment2'`
export type ActiveExperiment = 'editor-redesign'
export type ActiveExperiment = never
export const isInExperiment = (experiment: ActiveExperiment): boolean => {
const experiments = getMeta('ol-labsExperiments')

View File

@@ -60,7 +60,7 @@
}
}
@mixin labs-button {
@mixin editor-switcher-button {
@include ol-button-variant(
$color: var(--green-60),
$background: var(--bg-accent-03),

View File

@@ -29,12 +29,4 @@
}
}
}
.ide-redesign-switcher-modal-leave-text {
color: var(--content-secondary);
a {
color: var(--link-ui);
}
}
}

View File

@@ -234,10 +234,6 @@
white-space: nowrap;
}
.ide-redesign-labs-button.btn.btn-secondary {
@include labs-button;
}
.ide-redesign-beta-button.btn.btn-secondary {
@include labs-button;
@include editor-switcher-button;
}

View File

@@ -534,7 +534,7 @@
// Override a secondary button to ensure that the border is visible because
// overriding a borderless button will not add a border.
.toolbar-experiment-button.btn-secondary {
@include labs-button;
@include editor-switcher-button;
max-height: 39px;
font-size: var(--font-size-01);

View File

@@ -52,7 +52,6 @@
"access_denied": "Access Denied",
"access_edit_your_projects": "Access and edit your projects",
"access_levels_changed": "Access levels changed",
"access_your_favourite_features_faster_with_our_new_streamlined_editor": "Access your favourite features faster with our new, streamlined editor.",
"account": "Account",
"account_already_managed": "Your account is already managed.",
"account_billed_manually": "Account billed manually",
@@ -581,7 +580,6 @@
"dont_forget_you_currently_have": "Dont forget, you currently have:",
"dont_have_account": "Dont have an account?",
"dont_reload_or_close_this_tab": "Dont reload or close this tab.",
"double_clicking_on_the_pdf_shows": "Double clicking on the PDF shows the corresponding location in code. Added word count (7 May 2025)",
"download": "Download",
"download_all": "Download all",
"download_as_pdf": "Download as PDF",
@@ -958,7 +956,6 @@
"help_guides": "Help guides",
"help_improve_overleaf_fill_out_this_survey": "If you would like to help us improve Overleaf, please take a moment to fill out <0>this survey</0>.",
"help_improve_screen_reader_fill_out_this_survey": "Help us improve your experience using a screen reader with __appName__ by filling out this quick survey.",
"help_shape_the_future_of_overleaf": "Help shape the future of Overleaf",
"hide": "Hide",
"hide_configuration": "Hide configuration",
"hide_deleted_user": "Hide deleted users",
@@ -1148,7 +1145,6 @@
"ja": "Japanese",
"january": "January",
"join": "Join",
"join_beta": "Join beta",
"join_beta_program": "Join the beta program",
"join_labs": "Join Labs",
"join_now": "Join now",
@@ -1193,7 +1189,6 @@
"latam_discount_modal_info": "Unlock the full potential of Overleaf with a __discount__% discount on premium subscriptions paid in __currencyName__. Get a longer compile timeout, full document history, track changes, additional collaborators, and more.",
"latam_discount_modal_title": "Premium subscription discount",
"latam_discount_offer_plans_page_banner": "__flag__ Weve applied a __discount__ discount to premium plans on this page for our users in __country__. Check out the new lower prices (in __currency__).",
"latest_updates": "Latest updates",
"latex_articles_page_title": "Articles - Papers, Presentations, Reports and more",
"latex_examples": "LaTeX examples",
"latex_examples_page_title": "Examples - Equations, Formatting, TikZ, Packages and More",
@@ -1420,14 +1415,12 @@
"neither_agree_nor_disagree": "Neither agree nor disagree",
"new_compile_domain_notice": "Weve recently migrated PDF downloads to a new domain. Something might be blocking your browser from accessing that new domain, <0>__compilesUserContentDomain__</0>. This could be caused by network blocking or a strict browser plugin rule. Please follow our <1>troubleshooting guide</1>.",
"new_create_tables_and_equations": "NEW! <sparkle/> Create tables and equations in seconds",
"new_error_logs_panel": "New error logs panel. Added Go to location in code and Go to location in PDF buttons (17 June 2025)",
"new_file": "New file",
"new_folder": "New folder",
"new_look_and_feel": "New look and feel",
"new_look_and_placement_of_the_settings": "New look and placement of the settings",
"new_name": "New Name",
"new_navigation_introducing_left_hand_side_rail_and_top_menus": "New navigation - introducing left-hand side rail and top menus",
"new_overleaf_editor": "New Overleaf editor",
"new_password": "New password",
"new_project": "New project",
"new_project_name": "New project name",
@@ -1992,7 +1985,6 @@
"search_whole_word": "Whole word",
"search_within_selection": "Within selection",
"searched_path_for_lines_containing": "Searched __path__ for lines containing \"__query__\"",
"searching_all_project_files_is_now_available": "Searching all project files is now available (2 June 2025)",
"secondary_email_password_reset": "That email is registered as a secondary email. Please enter the primary email for your account.",
"security": "Security",
"see_suggestions_from_collaborators": "See suggestions from collaborators",
@@ -2296,14 +2288,12 @@
"thank_you_for_being_part_of_our_beta_program": "Thank you for being part of our beta program, where you can have <0>early access to new features</0> and help us understand your needs better",
"thank_you_for_your_feedback": "Thank you for your feedback!",
"thanks": "Thanks",
"thanks_for_being_part_of_this_labs_experiment_your_feedback_will_help_us_make_the_new_editor_the_best_yet": "Thanks for being part of this Labs experiment. Your feedback and support will help us make the new editor the best yet! Some features are still in progress, so if you need something thats missing, you can switch back to the old editor.",
"thanks_for_confirming_your_email_address": "Thanks for confirming your email address",
"thanks_for_getting_in_touch": "Thanks for getting in touch. Our team will get back to you by email as soon as possible.",
"thanks_for_subscribing": "Thanks for subscribing!",
"thanks_for_subscribing_to_plan_with_add_on": "Thank you for subscribing to the __planName__ plan with the __addOnName__ add-on. Its support from people like yourself that allows __appName__ to continue to grow and improve.",
"thanks_for_subscribing_to_the_add_on": "Thank you for subscribing to the __addOnName__ add-on. Its support from people like yourself that allows __appName__ to continue to grow and improve.",
"thanks_for_subscribing_you_help_sl": "Thank you for subscribing to the __planName__ plan. Its support from people like yourself that allows __appName__ to continue to grow and improve.",
"thanks_for_trying_the_new_editor": "Thanks for trying the new editor",
"thanks_settings_updated": "Thanks, your settings have been updated.",
"the_add_on_will_remain_active_until": "The add-on will remain active until the end of the current billing period.",
"the_code_editor_color_scheme": "The code editor color scheme",
@@ -2313,9 +2303,7 @@
"the_following_files_and_folders_already_exist_in_this_project": "The following files and folders already exist in this project:",
"the_following_folder_already_exists_in_this_project": "The following folder already exists in this project:",
"the_following_folder_already_exists_in_this_project_plural": "The following folders already exist in this project:",
"the_labs_experiment_has_now_finished": "The Labs experiment has now finished, but you can still use the new editor by joining our beta program.",
"the_latex_engine_used_for_compiling": "The LaTeX engine used for compiling",
"the_new_overleaf_editor": "The new Overleaf editor",
"the_new_overleaf_editor_try_now_in_beta": "The new Overleaf editor — try now in beta",
"the_next_payment_will_be_collected_on": "The next payment will be collected on <strong>__date__</strong>.",
"the_original_text_has_changed": "The original text has changed, so this suggestion cant be applied",
@@ -2355,7 +2343,6 @@
"this_field_is_required": "This field is required",
"this_grants_access_to_features_2": "This grants you access to <0>__appName__</0> <0>__featureType__</0> features.",
"this_is_a_beta_release_for_the_new_overleaf_editor": "This is a beta release for the new Overleaf editor. You can switch back to the old editor at any time.",
"this_is_a_labs_experiment_for_the_new_overleaf_editor_some_features_are_still_in_progress": "This is a Labs experiment for the new Overleaf editor. Some features are still in progress, so if you need something thats missing, you can switch back to the old editor at any time.",
"this_is_a_new_feature": "This is a new feature",
"this_is_the_file_that_references_pulled_from_your_reference_manager_will_be_added_to": "This is the file that references pulled from your reference manager will be added to.",
"this_is_your_template": "This is your template from your project",
@@ -2662,7 +2649,6 @@
"well_be_here_when_youre_ready": "Well be here when youre ready to dive back in! 🦆",
"were_making_some_changes_to_project_sharing_this_means_you_will_be_visible": "Were making some <0>changes to project sharing</0>. This means, as someone with edit access, your name and email address will be visible to the project owner and other editors.",
"were_performing_maintenance": "Were performing maintenance on Overleaf and you need to wait a moment. Sorry for any inconvenience. The editor will refresh automatically in __seconds__ seconds.",
"were_redesigning_our_editor_to_make_it_easier_to_use": "Were redesigning our editor to make it easier to use and ensure its future ready. Try it out and give us your feedback to help us get this right. (Some features are still in the works, so you can switch back at any time.)",
"were_reducing_compile_timeout": "Were in the process of <0>reducing the compile timeout limit</0> on our free plan, which may affect your project in future.",
"weve_redesigned_our_editor_to_make_it_easier_to_use_and_future_ready": "Weve redesigned our editor to make it easier to use and future ready. Its now in beta, so try it out and give us your feedback.",
"what_did_you_find_most_helpful": "What did you find most helpful?",
@@ -2672,7 +2658,6 @@
"what_happens_when_sso_is_enabled": "What happens when SSO is enabled?",
"what_should_we_call_you": "What should we call you?",
"whats_different": "Whats different?",
"whats_different_in_the_new_editor": "Whats different in the new editor?",
"when_you_join_labs": "When you join Labs, you can choose which experiments you want to be part of. Once youve done that, you can use Overleaf as normal, but youll see any labs features marked with this badge:",
"when_you_tick_the_include_caption_box": "When you tick the box “Include caption” the image will be inserted into your document with a placeholder caption. To edit it, you simply select the placeholder text and type to replace it with your own.",
"why_latex": "Why LaTeX?",
@@ -2723,7 +2708,6 @@
"you_are_using_your_organization_email_x_would_like_you_to_take_action": "Because you are using your organization email on Overleaf, __companyName__ would like you to take one of the following actions.",
"you_can_also_choose_to_view_anonymously_or_leave_the_project": "You can also choose to <0>view anonymously</0> (you will lose edit access) or <1>leave the project</1>.",
"you_can_buy_this_plan_but_not_as_a_trial": "You can buy this plan but not as a trial, as youve completed a trial recently.",
"you_can_leave_the_experiment_from_your_account_settings_at_any_time": "You can leave the experiment from your <0>account settings</0> at any time.",
"you_can_manage_your_reference_manager_integrations_from_your_account_settings_page": "You can manage your reference manager integrations from your <0>account settings page</0>.",
"you_can_now_enable_sso": "You can now enable SSO on your group settings page.",
"you_can_now_log_in_sso": "You can now log in through your institution and if eligible you will receive <0>__appName__ Professional features</0>.",
@@ -2804,7 +2788,6 @@
"youre_about_to_enable_single_sign_on_sso_only": "Youre about to enable single sign-on (SSO). Before you do this, you should ensure youre confident the SSO configuration is correct.",
"youre_adding_x_licenses_to_your_plan_giving_you_a_total_of_y_licenses": "Youre adding <0>__adding__</0> licenses to your plan giving you a total of <1>__total__</1> licenses.",
"youre_already_setup_for_sso": "Youre already set up for SSO",
"youre_helping_us_shape_the_future_of_overleaf": "Youre helping us shape the future of Overleaf",
"youre_joining": "Youre joining",
"youre_on_free_trial_which_ends_on": "Youre on a free trial which ends on <0>__date__</0>.",
"youre_signed_in_as_logout": "Youre signed in as <0>__email__</0>. <1>Log out.</1>",