From af4121505897a15de714eee0f789c8ef6e49073a Mon Sep 17 00:00:00 2001
From: David <33458145+davidmcpowell@users.noreply.github.com>
Date: Wed, 19 Nov 2025 09:25:30 +0000
Subject: [PATCH] Merge pull request #29607 from overleaf/dp-redesign-opt-in
Add opt-in for editor redesign
GitOrigin-RevId: 29ec8f4045a6bf29ab26a5ce5bceff70fb3aba6e
---
.../Features/Project/ProjectController.mjs | 8 +-
.../Project/ProjectListController.mjs | 8 +-
.../Features/Project/UserSettingsHelper.mjs | 38 ++-
.../Features/Tutorial/TutorialController.mjs | 2 +
.../web/frontend/extracted-translations.json | 38 +--
.../settings/settings-new-editor.tsx | 13 +-
.../try-new-editor-button.tsx | 23 +-
.../ide-react/components/modals/modals.tsx | 10 +-
.../context/ide-redesign-switcher-context.tsx | 41 ---
.../ide-react/context/react-context-root.tsx | 48 ++--
.../editor-tour/editor-tour-logs-tooltip.tsx | 21 ++
.../editor-tour/editor-tour-rail-tooltip.tsx | 21 ++
.../editor-tour-switch-back-tooltip.tsx | 33 +++
.../editor-tour/editor-tour-theme-tooltip.tsx | 24 ++
.../editor-tour/editor-tour-tooltip.tsx | 77 ++++++
.../ide-redesign/components/main-layout.tsx | 1 -
.../components/new-editor-intro-modal.tsx | 80 ++++++
.../components/new-editor-promo-modal.tsx | 102 ++++++++
.../components/new-editor-promo-video.mp4 | Bin 0 -> 638526 bytes
.../pdf-preview-hybrid-toolbar.tsx | 13 +-
.../components/rail/rail-action-element.tsx | 115 ++++----
.../components/rail/rail-help-dropdown.tsx | 10 -
.../ide-redesign/components/rail/rail.tsx | 22 +-
.../editor-settings/new-editor-setting.tsx | 24 +-
.../components/settings/setting.tsx | 2 +-
.../components/settings/toggle-setting.tsx | 2 +-
.../components/switcher-modal/beta-modal.tsx | 246 ------------------
.../components/toolbar/beta-actions.tsx | 42 ---
.../components/toolbar/give-feedback-link.tsx | 20 --
.../components/toolbar/menu-bar.tsx | 69 +----
.../components/toolbar/toolbar.tsx | 2 -
.../ide-redesign/components/tooltip-promo.tsx | 8 +-
.../contexts/new-editor-tour-context.tsx | 114 ++++++++
.../contexts/settings-modal-context.tsx | 5 +-
.../ide-redesign/hooks/use-survey-url.tsx | 10 -
.../features/ide-redesign/utils/rail-types.ts | 1 +
.../components/pdf-hybrid-logs-button.tsx | 9 +-
.../shared/hooks/promotions/use-tutorial.tsx | 17 +-
.../web/frontend/stylesheets/pages/all.scss | 3 +-
.../pages/editor/editor-tour-tooltip.scss | 43 +++
.../editor/ide-redesign-switcher-modal.scss | 32 ---
.../pages/editor/new-editor-promo-modal.scss | 11 +
.../stylesheets/pages/editor/settings.scss | 15 --
.../stylesheets/pages/editor/toolbar.scss | 6 +
services/web/locales/en.json | 38 +--
45 files changed, 812 insertions(+), 655 deletions(-)
delete mode 100644 services/web/frontend/js/features/ide-react/context/ide-redesign-switcher-context.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-logs-tooltip.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-rail-tooltip.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-switch-back-tooltip.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-theme-tooltip.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-tooltip.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/new-editor-intro-modal.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/new-editor-promo-modal.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/new-editor-promo-video.mp4
delete mode 100644 services/web/frontend/js/features/ide-redesign/components/switcher-modal/beta-modal.tsx
delete mode 100644 services/web/frontend/js/features/ide-redesign/components/toolbar/beta-actions.tsx
delete mode 100644 services/web/frontend/js/features/ide-redesign/components/toolbar/give-feedback-link.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/contexts/new-editor-tour-context.tsx
delete mode 100644 services/web/frontend/js/features/ide-redesign/hooks/use-survey-url.tsx
create mode 100644 services/web/frontend/stylesheets/pages/editor/editor-tour-tooltip.scss
delete mode 100644 services/web/frontend/stylesheets/pages/editor/ide-redesign-switcher-modal.scss
create mode 100644 services/web/frontend/stylesheets/pages/editor/new-editor-promo-modal.scss
diff --git a/services/web/app/src/Features/Project/ProjectController.mjs b/services/web/app/src/Features/Project/ProjectController.mjs
index 9ae4d5d6e4..ec4005025b 100644
--- a/services/web/app/src/Features/Project/ProjectController.mjs
+++ b/services/web/app/src/Features/Project/ProjectController.mjs
@@ -864,6 +864,12 @@ const _ProjectController = {
!userHasPremiumSub &&
!userInNonIndividualSub
+ const userSettings = await UserSettingsHelper.buildUserSettings(
+ req,
+ res,
+ user
+ )
+
res.render(template, {
title: project.name,
priority_title: true,
@@ -902,7 +908,7 @@ const _ProjectController = {
isMemberOfGroupSubscription: userIsMemberOfGroupSubscription,
hasInstitutionLicence: userHasInstitutionLicence,
},
- userSettings: UserSettingsHelper.buildUserSettings(user),
+ userSettings,
labsExperiments: user.labsExperiments ?? [],
privilegeLevel,
anonymous,
diff --git a/services/web/app/src/Features/Project/ProjectListController.mjs b/services/web/app/src/Features/Project/ProjectListController.mjs
index 0cfb78a099..dfb165f535 100644
--- a/services/web/app/src/Features/Project/ProjectListController.mjs
+++ b/services/web/app/src/Features/Project/ProjectListController.mjs
@@ -542,6 +542,12 @@ async function projectListPage(req, res, next) {
'themed-project-dashboard'
)
+ const userSettings = await UserSettingsHelper.buildUserSettings(
+ req,
+ res,
+ user
+ )
+
res.render('project/list-react', {
title: 'your_projects',
usersBestSubscription,
@@ -550,7 +556,7 @@ async function projectListPage(req, res, next) {
user,
userAffiliations,
userEmails,
- userSettings: UserSettingsHelper.buildUserSettings(user),
+ userSettings,
reconfirmedViaSAML,
allInReconfirmNotificationPeriods,
survey,
diff --git a/services/web/app/src/Features/Project/UserSettingsHelper.mjs b/services/web/app/src/Features/Project/UserSettingsHelper.mjs
index e4c6440c0d..9d95420824 100644
--- a/services/web/app/src/Features/Project/UserSettingsHelper.mjs
+++ b/services/web/app/src/Features/Project/UserSettingsHelper.mjs
@@ -1,4 +1,38 @@
-function buildUserSettings(user) {
+import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
+
+// Copied from services/web/frontend/js/features/ide-redesign/utils/new-editor-utils.ts
+const SPLIT_TEST_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 8, 23, 13, 0, 0)) // 2pm British Summer Time on September 23, 2025
+const NEW_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 10, 12, 12, 0, 0)) // 12pm GMT on November 12, 2025
+
+async function getEnableNewEditorDefault(req, res, user) {
+ if (req.query['existing-user-override'] === 'true') {
+ return false
+ }
+
+ if (req.query['skip-new-user-check'] === 'true') {
+ return true
+ }
+
+ if (user.signUpDate >= NEW_USER_CUTOFF_DATE) {
+ return true
+ }
+
+ if (user.signUpDate >= SPLIT_TEST_USER_CUTOFF_DATE) {
+ const assignment = await SplitTestHandler.promises.getAssignment(
+ req,
+ res,
+ 'editor-redesign-new-users'
+ )
+
+ return assignment.variant !== 'default'
+ }
+
+ return false
+}
+
+async function buildUserSettings(req, res, user) {
+ const defaultEnableNewEditor = await getEnableNewEditorDefault(req, res, user)
+
return {
mode: user.ace.mode,
editorTheme: user.ace.theme,
@@ -13,7 +47,7 @@ function buildUserSettings(user) {
mathPreview: user.ace.mathPreview,
breadcrumbs: user.ace.breadcrumbs,
referencesSearchMode: user.ace.referencesSearchMode,
- enableNewEditor: user.ace.enableNewEditor ?? true,
+ enableNewEditor: user.ace.enableNewEditor ?? defaultEnableNewEditor,
}
}
diff --git a/services/web/app/src/Features/Tutorial/TutorialController.mjs b/services/web/app/src/Features/Tutorial/TutorialController.mjs
index 3de1706047..8513a186be 100644
--- a/services/web/app/src/Features/Tutorial/TutorialController.mjs
+++ b/services/web/app/src/Features/Tutorial/TutorialController.mjs
@@ -24,6 +24,8 @@ const VALID_KEYS = [
'rolling-compile-image-changed',
'groups-enterprise-banner',
'groups-enterprise-banner-repeat',
+ 'new-editor-opt-in',
+ 'new-editor-intro',
]
async function completeTutorial(req, res, next) {
diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json
index 78e69f1dd4..ef301a8a01 100644
--- a/services/web/frontend/extracted-translations.json
+++ b/services/web/frontend/extracted-translations.json
@@ -182,12 +182,11 @@
"back_to_subscription": "",
"back_to_your_projects": "",
"basic_compile_time": "",
+ "be_one_of_the_first_to_try_out_the_new_and_improved_overleaf_editor": "",
"before_you_use_error_assistant": "",
- "beta": "",
"beta_program_already_participating": "",
"beta_program_benefits": "",
"beta_program_not_participating": "",
- "beta_program_the_new_overleaf_editor": "",
"billed_annually_at": "",
"billed_monthly_at": "",
"billed_yearly": "",
@@ -240,6 +239,7 @@
"center": "",
"change": "",
"change_currency": "",
+ "change_how_you_see_the_editor": "",
"change_language": "",
"change_or_cancel-cancel": "",
"change_or_cancel-change": "",
@@ -581,6 +581,7 @@
"expires": "",
"expires_in_days": "",
"expires_on": "",
+ "explore_what_s_new": "",
"export_csv": "",
"export_project_to_github": "",
"failed_to_send_group_invite_to_email": "",
@@ -615,11 +616,13 @@
"files_selected": "",
"filter_projects": "",
"find": "",
+ "find_and_fix_errors_faster": "",
"find_out_more": "",
"find_out_more_about_institution_login": "",
"find_out_more_about_the_file_outline": "",
"find_out_more_nt": "",
"finding_a_fix": "",
+ "finish": "",
"first_name": "",
"fit_to_height": "",
"fit_to_width": "",
@@ -848,7 +851,6 @@
"imported_from_zotero_at_date": "",
"importing": "",
"importing_and_merging_changes_in_github": "",
- "improved_dark_mode": "",
"in_order_to_match_institutional_metadata_2": "",
"in_order_to_match_institutional_metadata_associated": "",
"include_caption": "",
@@ -887,6 +889,7 @@
"integrations": "",
"integrations_like_github": "",
"interested_in_cheaper_personal_plan": "",
+ "introducing_overleafs_new_look": "",
"invalid_confirmation_code": "",
"invalid_email": "",
"invalid_file_name": "",
@@ -1112,15 +1115,11 @@
"new_compile_domain_notice": "",
"new_compiles_in_this_project_will_automatically_use_the_newest_version": "",
"new_create_tables_and_equations": "",
- "new_editor": "",
- "new_editor_experience": "",
- "new_editor_info": "",
+ "new_editor_look": "",
+ "new_error_logs_make_it_easier_to_find_whats_wrong": "",
"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_password": "",
"new_project": "",
"new_subscription_will_be_billed_immediately": "",
@@ -1165,6 +1164,7 @@
"not_a_student": "",
"not_managed": "",
"not_now": "",
+ "not_sure_about_switching_yet": "",
"notification": "",
"notification_personal_and_group_subscriptions": "",
"notification_project_invite_accepted_message": "",
@@ -1217,6 +1217,7 @@
"overleaf_labs": "",
"overleaf_logo": "",
"overleafs_functionality_meets_my_needs": "",
+ "overleafs_new_look_is_here": "",
"overview": "",
"overwrite": "",
"overwriting_the_original_folder": "",
@@ -1397,6 +1398,7 @@
"read_lines_from_path": "",
"read_more": "",
"read_more_about_managed_users": "",
+ "read_more_about_the_new_editor": "",
"read_only_dropbox_sync_message": "",
"read_only_token": "",
"read_write_token": "",
@@ -1504,7 +1506,6 @@
"revert_pending_plan_change": "",
"review": "",
"review_panel": "",
- "review_panel_and_error_logs_moved_to_the_left": "",
"reviewer": "",
"reviewer_dropbox_sync_message": "",
"reviewing": "",
@@ -1621,6 +1622,7 @@
"setup_another_account_under_a_personal_email_address": "",
"share": "",
"share_feedback": "",
+ "share_feedback_on_the_new_editor": "",
"share_project": "",
"shared_with_you": "",
"sharelatex_beta_program": "",
@@ -1648,6 +1650,7 @@
"showing_x_results_of_total": "",
"sign_up": "",
"simple_search_mode": "",
+ "simplified_working_starts_here": "",
"single_sign_on_sso": "",
"size": "",
"something_not_right": "",
@@ -1775,10 +1778,10 @@
"sure_you_want_to_change_plan": "",
"sure_you_want_to_delete": "",
"sure_you_want_to_leave_group": "",
+ "switch_between_dark_and_light_mode": "",
"switch_compile_mode_for_faster_draft_compilation": "",
+ "switch_easily_between_your_files_comments_track_changes_and_more": "",
"switch_to_editor": "",
- "switch_to_new_editor": "",
- "switch_to_old_editor": "",
"switch_to_pdf": "",
"switch_to_personal_email_to_keep_your_accounts_separate": "",
"switch_to_standard_plan": "",
@@ -1836,7 +1839,7 @@
"the_following_folder_already_exists_in_this_project": "",
"the_following_folder_already_exists_in_this_project_plural": "",
"the_latex_engine_used_for_compiling": "",
- "the_new_overleaf_editor_try_now_in_beta": "",
+ "the_new_overleaf_editor_info": "",
"the_next_payment_will_be_collected_on": "",
"the_original_text_has_changed": "",
"the_overleaf_color_scheme": "",
@@ -1867,7 +1870,6 @@
"this_experiment_isnt_accepting_new_participants": "",
"this_field_is_required": "",
"this_grants_access_to_features_2": "",
- "this_is_a_beta_release_for_the_new_overleaf_editor": "",
"this_is_a_new_feature": "",
"this_is_the_file_that_references_pulled_from_your_reference_manager_will_be_added_to": "",
"this_organization_is_tax_exempt": "",
@@ -1996,10 +1998,12 @@
"try_for_free": "",
"try_it_for_free": "",
"try_now": "",
+ "try_out_the_new_editor_now": "",
"try_premium_for_free": "",
"try_recompile_project_or_troubleshoot": "",
"try_relinking_provider": "",
- "try_the_new_editor": "",
+ "try_the_new_editor_design": "",
+ "try_the_new_look": "",
"try_to_compile_despite_errors": "",
"turn_off": "",
"turn_off_link_sharing": "",
@@ -2159,13 +2163,12 @@
"well_be_here_when_youre_ready": "",
"were_making_some_changes_to_project_sharing_this_means_you_will_be_visible": "",
"were_performing_maintenance": "",
- "weve_redesigned_our_editor_to_make_it_easier_to_use_and_future_ready": "",
+ "weve_made_it_easier_to_find_and_use_the_tools_you_need_today": "",
"what_did_you_find_most_helpful": "",
"what_do_you_need_help_with": "",
"what_does_this_mean_for_you": "",
"what_happens_when_sso_is_enabled": "",
"what_should_we_call_you": "",
- "whats_different": "",
"when_you_tick_the_include_caption_box": "",
"why_not_pause_instead": "",
"wide": "",
@@ -2215,7 +2218,6 @@
"you_can_select_or_invite_collaborator": "",
"you_can_select_or_invite_collaborator_plural": "",
"you_can_still_use_your_premium_features": "",
- "you_can_switch_back_to_the_old_editor_at_any_time": "",
"you_cant_add_or_change_password_due_to_sso": "",
"you_cant_join_this_group_subscription": "",
"you_dont_have_any_add_ons_on_your_account": "",
diff --git a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-new-editor.tsx b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-new-editor.tsx
index 59a377f03c..ea3b86fa06 100644
--- a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-new-editor.tsx
+++ b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-new-editor.tsx
@@ -4,22 +4,27 @@ import { useSwitchEnableNewEditorState } from '@/features/ide-redesign/hooks/use
import { useLayoutContext } from '@/shared/context/layout-context'
import { useCallback } from 'react'
import {
- canUseNewEditorAsNewUser,
+ canUseNewEditor,
useIsNewEditorEnabled,
} from '@/features/ide-redesign/utils/new-editor-utils'
+import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics'
export default function SettingsNewEditor() {
const { t } = useTranslation()
const { setEditorRedesignStatus } = useSwitchEnableNewEditorState()
const { setLeftMenuShown } = useLayoutContext()
const enabled = useIsNewEditorEnabled()
- const show = canUseNewEditorAsNewUser()
+ const show = canUseNewEditor()
+ const { sendEvent } = useEditorAnalytics()
const onChange = useCallback(
(newValue: boolean) => {
+ sendEvent('switch-to-new-editor', {
+ location: 'left-menu',
+ })
setEditorRedesignStatus(newValue).then(() => setLeftMenuShown(false))
},
- [setEditorRedesignStatus, setLeftMenuShown]
+ [setEditorRedesignStatus, setLeftMenuShown, sendEvent]
)
if (!show) {
@@ -40,7 +45,7 @@ export default function SettingsNewEditor() {
label: t('off'),
},
]}
- label={t('new_editor')}
+ label={t('new_editor_look')}
name="new-editor-setting"
/>
)
diff --git a/services/web/frontend/js/features/editor-navigation-toolbar/try-new-editor-button.tsx b/services/web/frontend/js/features/editor-navigation-toolbar/try-new-editor-button.tsx
index 7bfdc034de..8a835ab2a1 100644
--- a/services/web/frontend/js/features/editor-navigation-toolbar/try-new-editor-button.tsx
+++ b/services/web/frontend/js/features/editor-navigation-toolbar/try-new-editor-button.tsx
@@ -1,34 +1,33 @@
import { useCallback } from 'react'
import OLButton from '../../shared/components/ol/ol-button'
-import { useIdeRedesignSwitcherContext } from '../ide-react/context/ide-redesign-switcher-context'
import { useTranslation } from 'react-i18next'
-import { canUseNewEditorAsExistingUser } from '../ide-redesign/utils/new-editor-utils'
import { useSwitchEnableNewEditorState } from '../ide-redesign/hooks/use-switch-enable-new-editor-state'
+import MaterialIcon from '@/shared/components/material-icon'
+import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics'
const TryNewEditorButton = () => {
const { t } = useTranslation()
- const { setShowSwitcherModal } = useIdeRedesignSwitcherContext()
- const showModal = canUseNewEditorAsExistingUser()
const { loading, setEditorRedesignStatus } = useSwitchEnableNewEditorState()
+ const { sendEvent } = useEditorAnalytics()
const onClick = useCallback(() => {
- if (showModal) {
- setShowSwitcherModal(true)
- } else {
- setEditorRedesignStatus(true)
- }
- }, [setShowSwitcherModal, showModal, setEditorRedesignStatus])
+ sendEvent('switch-to-new-editor', {
+ location: 'toolbar',
+ })
+ setEditorRedesignStatus(true)
+ }, [setEditorRedesignStatus, sendEvent])
return (
- {t('try_the_new_editor')}
+
+ {t('try_the_new_editor_design')}
)
diff --git a/services/web/frontend/js/features/ide-react/components/modals/modals.tsx b/services/web/frontend/js/features/ide-react/components/modals/modals.tsx
index 0272331458..b71447dad5 100644
--- a/services/web/frontend/js/features/ide-react/components/modals/modals.tsx
+++ b/services/web/frontend/js/features/ide-react/components/modals/modals.tsx
@@ -2,10 +2,8 @@ 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,
- IdeRedesignIntroModal,
-} from '@/features/ide-redesign/components/switcher-modal/beta-modal'
+import NewEditorPromoModal from '@/features/ide-redesign/components/new-editor-promo-modal'
+import NewEditorIntroModal from '@/features/ide-redesign/components/new-editor-intro-modal'
export const Modals = memo(() => {
return (
@@ -13,8 +11,8 @@ export const Modals = memo(() => {
-
-
+
+
>
)
})
diff --git a/services/web/frontend/js/features/ide-react/context/ide-redesign-switcher-context.tsx b/services/web/frontend/js/features/ide-react/context/ide-redesign-switcher-context.tsx
deleted file mode 100644
index 6eb8cd6d0b..0000000000
--- a/services/web/frontend/js/features/ide-react/context/ide-redesign-switcher-context.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import {
- createContext,
- Dispatch,
- FC,
- SetStateAction,
- useContext,
- useState,
-} from 'react'
-
-type IdeRedesignSwitcherContextValue = {
- showSwitcherModal: boolean
- setShowSwitcherModal: Dispatch>
-}
-
-export const IdeRedesignSwitcherContext = createContext<
- IdeRedesignSwitcherContextValue | undefined
->(undefined)
-
-export const IdeRedesignSwitcherProvider: FC = ({
- children,
-}) => {
- const [showSwitcherModal, setShowSwitcherModal] = useState(false)
-
- return (
-
- {children}
-
- )
-}
-
-export const useIdeRedesignSwitcherContext = () => {
- const context = useContext(IdeRedesignSwitcherContext)
- if (!context) {
- throw new Error(
- 'useIdeRedesignSwitcherContext is only available inside IdeRedesignSwitcherProvider'
- )
- }
- return context
-}
diff --git a/services/web/frontend/js/features/ide-react/context/react-context-root.tsx b/services/web/frontend/js/features/ide-react/context/react-context-root.tsx
index 1f5d6fba7d..febe2956c9 100644
--- a/services/web/frontend/js/features/ide-react/context/react-context-root.tsx
+++ b/services/web/frontend/js/features/ide-react/context/react-context-root.tsx
@@ -28,8 +28,8 @@ import { SplitTestProvider } from '@/shared/context/split-test-context'
import { UserProvider } from '@/shared/context/user-context'
import { UserFeaturesProvider } from '@/shared/context/user-features-context'
import { UserSettingsProvider } from '@/shared/context/user-settings-context'
-import { IdeRedesignSwitcherProvider } from './ide-redesign-switcher-context'
import { CommandRegistryProvider } from './command-registry-context'
+import { NewEditorTourProvider } from '@/features/ide-redesign/contexts/new-editor-tour-context'
import { EditorSelectionProvider } from '@/shared/context/editor-selection-context'
import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
@@ -72,9 +72,9 @@ export const ReactContextRoot: FC<
SplitTestProvider,
UserProvider,
UserSettingsProvider,
- IdeRedesignSwitcherProvider,
CommandRegistryProvider,
UserFeaturesProvider,
+ NewEditorTourProvider,
EditorSelectionProvider,
...providers,
}
@@ -111,17 +111,17 @@ export const ReactContextRoot: FC<
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
{
@@ -129,17 +129,17 @@ export const ReactContextRoot: FC<
}
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-logs-tooltip.tsx b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-logs-tooltip.tsx
new file mode 100644
index 0000000000..6d22656d0d
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-logs-tooltip.tsx
@@ -0,0 +1,21 @@
+import { useTranslation } from 'react-i18next'
+import EditorTourTooltip from './editor-tour-tooltip'
+
+export default function EditorTourLogsTooltip({
+ target,
+}: {
+ target: HTMLElement | null
+}) {
+ const { t } = useTranslation()
+
+ return (
+
+ {t('new_error_logs_make_it_easier_to_find_whats_wrong')}
+
+ )
+}
diff --git a/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-rail-tooltip.tsx b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-rail-tooltip.tsx
new file mode 100644
index 0000000000..85fae1055b
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-rail-tooltip.tsx
@@ -0,0 +1,21 @@
+import { useTranslation } from 'react-i18next'
+import EditorTourTooltip from './editor-tour-tooltip'
+
+export default function EditorTourRailTooltip({
+ target,
+}: {
+ target: HTMLElement | null
+}) {
+ const { t } = useTranslation()
+
+ return (
+
+ {t('switch_easily_between_your_files_comments_track_changes_and_more')}
+
+ )
+}
diff --git a/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-switch-back-tooltip.tsx b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-switch-back-tooltip.tsx
new file mode 100644
index 0000000000..805065a1d3
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-switch-back-tooltip.tsx
@@ -0,0 +1,33 @@
+import { Trans, useTranslation } from 'react-i18next'
+import EditorTourTooltip from './editor-tour-tooltip'
+
+export default function EditorTourSwitchBackTooltip({
+ target,
+}: {
+ target: HTMLElement | null
+}) {
+ const { t } = useTranslation()
+
+ return (
+
+ ,
+ ,
+ ]}
+ />
+
+ )
+}
diff --git a/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-theme-tooltip.tsx b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-theme-tooltip.tsx
new file mode 100644
index 0000000000..1c8adadad1
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-theme-tooltip.tsx
@@ -0,0 +1,24 @@
+import { Trans, useTranslation } from 'react-i18next'
+import EditorTourTooltip from './editor-tour-tooltip'
+
+export default function EditorTourThemeTooltip({
+ target,
+}: {
+ target: HTMLElement | null
+}) {
+ const { t } = useTranslation()
+
+ return (
+
+ }}
+ />
+
+ )
+}
diff --git a/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-tooltip.tsx b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-tooltip.tsx
new file mode 100644
index 0000000000..2c63a2c51d
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/editor-tour/editor-tour-tooltip.tsx
@@ -0,0 +1,77 @@
+import { Overlay, OverlayProps, Popover } from 'react-bootstrap'
+import {
+ NewEditorTourStage,
+ useNewEditorTourContext,
+} from '../../contexts/new-editor-tour-context'
+import Close from '@/shared/components/close'
+import OLButton from '@/shared/components/ol/ol-button'
+import { useTranslation } from 'react-i18next'
+import { useEffect } from 'react'
+import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics'
+
+export default function EditorTourTooltip({
+ children,
+ target,
+ header,
+ stage,
+ placement,
+}: {
+ children: React.ReactNode
+ target: HTMLElement | null
+ header: string
+ stage: NewEditorTourStage
+ placement?: OverlayProps['placement']
+}) {
+ const { t } = useTranslation()
+ const {
+ shouldShowTourStage,
+ dismissTour,
+ goToNextStage,
+ stageNumber,
+ totalStages,
+ finishTour,
+ } = useNewEditorTourContext()
+ const { sendEvent } = useEditorAnalytics()
+
+ const show = shouldShowTourStage(stage)
+
+ useEffect(() => {
+ if (show) {
+ sendEvent('new-editor-tour-shown', { stage: stageNumber })
+ }
+ }, [show, stageNumber, sendEvent])
+
+ const isFinalStage = stageNumber === totalStages
+
+ if (!show) {
+ return null
+ }
+
+ return (
+
+
+
+ {header}
+
+
+
+ {children}
+
+
+ {stageNumber}/{totalStages}
+
+ {isFinalStage ? (
+
+ {t('finish')}
+
+ ) : (
+
+ {t('next')}
+
+ )}
+
+
+
+
+ )
+}
diff --git a/services/web/frontend/js/features/ide-redesign/components/main-layout.tsx b/services/web/frontend/js/features/ide-redesign/components/main-layout.tsx
index effff8f2c8..4e2436c283 100644
--- a/services/web/frontend/js/features/ide-redesign/components/main-layout.tsx
+++ b/services/web/frontend/js/features/ide-redesign/components/main-layout.tsx
@@ -31,7 +31,6 @@ export default function MainLayout() {
pdfIsOpen: isPdfOpen,
pdfPanelRef,
} = usePdfPane()
-
const { view, pdfLayout } = useLayoutContext()
const editorIsOpen =
diff --git a/services/web/frontend/js/features/ide-redesign/components/new-editor-intro-modal.tsx b/services/web/frontend/js/features/ide-redesign/components/new-editor-intro-modal.tsx
new file mode 100644
index 0000000000..bf722d369f
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/new-editor-intro-modal.tsx
@@ -0,0 +1,80 @@
+import {
+ OLModal,
+ OLModalBody,
+ OLModalFooter,
+ OLModalHeader,
+ OLModalTitle,
+} from '@/shared/components/ol/ol-modal'
+import { useCallback, useEffect, useState } from 'react'
+import useTutorial from '@/shared/hooks/promotions/use-tutorial'
+import OLButton from '@/shared/components/ol/ol-button'
+import { useTranslation } from 'react-i18next'
+import { useEditorContext } from '@/shared/context/editor-context'
+import { useIsNewEditorEnabledAsExistingUser } from '../utils/new-editor-utils'
+import { useNewEditorTourContext } from '../contexts/new-editor-tour-context'
+import promoVideo from './new-editor-promo-video.mp4'
+
+const TUTORIAL_KEY = 'new-editor-intro'
+
+export default function NewEditorIntroModal() {
+ const { inactiveTutorials } = useEditorContext()
+ const {
+ tryShowingPopup,
+ showPopup: showModal,
+ dismissTutorial,
+ completeTutorial,
+ clearPopup,
+ } = useTutorial(TUTORIAL_KEY, {
+ name: TUTORIAL_KEY,
+ })
+ const { startTour } = useNewEditorTourContext()
+
+ const { t } = useTranslation()
+
+ const canShow = useIsNewEditorEnabledAsExistingUser()
+ const [hasShown, setHasShown] = useState(false)
+
+ useEffect(() => {
+ if (canShow && !hasShown && !inactiveTutorials.includes(TUTORIAL_KEY)) {
+ tryShowingPopup('notification-prompt')
+ setHasShown(true)
+ }
+ }, [tryShowingPopup, inactiveTutorials, canShow, hasShown])
+
+ const startProductTour = useCallback(() => {
+ completeTutorial({ event: 'notification-click', action: 'complete' })
+ startTour()
+ clearPopup()
+ }, [completeTutorial, startTour, clearPopup])
+
+ const closeModal = useCallback(() => {
+ dismissTutorial('notification-dismiss')
+ clearPopup()
+ }, [dismissTutorial, clearPopup])
+
+ if (!canShow) {
+ return null
+ }
+
+ return (
+
+
+ {t('introducing_overleafs_new_look')}
+
+
+ {/* eslint-disable-next-line jsx-a11y/media-has-caption */}
+
+
+ {t('weve_made_it_easier_to_find_and_use_the_tools_you_need_today')}
+
+
+
+
+ {t('explore_what_s_new')}
+
+
+
+ )
+}
diff --git a/services/web/frontend/js/features/ide-redesign/components/new-editor-promo-modal.tsx b/services/web/frontend/js/features/ide-redesign/components/new-editor-promo-modal.tsx
new file mode 100644
index 0000000000..573b899908
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/new-editor-promo-modal.tsx
@@ -0,0 +1,102 @@
+import {
+ OLModal,
+ OLModalBody,
+ OLModalFooter,
+ OLModalHeader,
+ OLModalTitle,
+} from '@/shared/components/ol/ol-modal'
+import { useSwitchEnableNewEditorState } from '../hooks/use-switch-enable-new-editor-state'
+import { useCallback, useEffect, useState } from 'react'
+import useTutorial from '@/shared/hooks/promotions/use-tutorial'
+import OLButton from '@/shared/components/ol/ol-button'
+import { Trans, useTranslation } from 'react-i18next'
+import { useEditorContext } from '@/shared/context/editor-context'
+import {
+ canUseNewEditorAsExistingUser,
+ useIsNewEditorEnabled,
+} from '../utils/new-editor-utils'
+import promoVideo from './new-editor-promo-video.mp4'
+
+const TUTORIAL_KEY = 'new-editor-opt-in'
+
+export default function NewEditorPromoModal() {
+ const { inactiveTutorials } = useEditorContext()
+ const {
+ tryShowingPopup,
+ showPopup: showModal,
+ dismissTutorial,
+ completeTutorial,
+ clearPopup,
+ } = useTutorial(TUTORIAL_KEY, {
+ name: TUTORIAL_KEY,
+ })
+ const { setEditorRedesignStatus } = useSwitchEnableNewEditorState()
+ const { t } = useTranslation()
+
+ const newEditor = useIsNewEditorEnabled()
+ const canShow = canUseNewEditorAsExistingUser() && !newEditor
+ const [hasShown, setHasShown] = useState(false)
+
+ useEffect(() => {
+ if (canShow && !hasShown && !inactiveTutorials.includes(TUTORIAL_KEY)) {
+ tryShowingPopup('notification-prompt')
+ setHasShown(true)
+ }
+ }, [tryShowingPopup, inactiveTutorials, canShow, hasShown])
+
+ const switchToNewEditor = useCallback(() => {
+ setEditorRedesignStatus(true)
+ completeTutorial({ event: 'notification-click', action: 'complete' })
+ clearPopup()
+ }, [setEditorRedesignStatus, completeTutorial, clearPopup])
+
+ const closeModal = useCallback(() => {
+ dismissTutorial('notification-dismiss')
+ clearPopup()
+ }, [dismissTutorial, clearPopup])
+
+ if (!canShow) {
+ return null
+ }
+
+ return (
+
+
+ {t('overleafs_new_look_is_here')}
+
+
+
+ {t(
+ 'be_one_of_the_first_to_try_out_the_new_and_improved_overleaf_editor'
+ )}
+
+ {/* eslint-disable-next-line jsx-a11y/media-has-caption */}
+
+
+ ,
+ ]}
+ />
+
+
+
+
+ {t('not_now')}
+
+
+ {t('try_the_new_look')}
+
+
+
+ )
+}
diff --git a/services/web/frontend/js/features/ide-redesign/components/new-editor-promo-video.mp4 b/services/web/frontend/js/features/ide-redesign/components/new-editor-promo-video.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..0a6e8af7eeaa6098628c44027b94be0f98870d46
GIT binary patch
literal 638526
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