Bläddra i källkod

[web] Cleanup `plans-2026-phase-1` - phase 1: frontend (#34619)

* Remove `plans-2026-phase-1` from frontend in subscriptions module

* Remove `plans-2026-phase-1` from general frontend

* Remove empty `AiErrorAssistantPaywall`

* Simplify `UpgradeNotification`

* Update translations

* Fix tests

* Remove `OverleafAssistPaywall`

* Remove unused locales

GitOrigin-RevId: 4cf04bbde134a3f7b778a0695d388f31d9765343
Antoine Clausse 1 månad sedan
förälder
incheckning
0d004926e6
28 ändrade filer med 20 tillägg och 170 borttagningar
  1. 0 1
      services/web/config/settings.defaults.js
  2. 0 24
      services/web/frontend/extracted-translations.json
  3. 1 7
      services/web/frontend/js/features/ide-react/components/toolbar/upgrade-button.tsx
  4. 1 11
      services/web/frontend/js/features/pdf-preview/components/error-logs.tsx
  5. 1 11
      services/web/frontend/js/features/share-project-modal/components/collaborators-limit-upgrade.tsx
  6. 3 21
      services/web/frontend/js/features/subscription/components/dashboard/free-plan.tsx
  7. 0 31
      services/web/frontend/js/shared/components/ai-paywall-notification.tsx
  8. 1 3
      services/web/frontend/js/shared/components/upgrade-benefits.tsx
  9. 0 1
      services/web/locales/cs.json
  10. 0 2
      services/web/locales/da.json
  11. 0 6
      services/web/locales/de.json
  12. 0 19
      services/web/locales/en.json
  13. 0 1
      services/web/locales/es.json
  14. 0 1
      services/web/locales/fi.json
  15. 0 1
      services/web/locales/fr.json
  16. 0 1
      services/web/locales/it.json
  17. 0 1
      services/web/locales/ja.json
  18. 0 1
      services/web/locales/ko.json
  19. 0 1
      services/web/locales/nl.json
  20. 0 1
      services/web/locales/no.json
  21. 0 1
      services/web/locales/pt.json
  22. 0 1
      services/web/locales/ru.json
  23. 0 1
      services/web/locales/sv.json
  24. 0 1
      services/web/locales/tr.json
  25. 0 3
      services/web/locales/zh-CN.json
  26. 2 2
      services/web/test/frontend/features/share-project-modal/components/share-project-modal.test.tsx
  27. 1 1
      services/web/test/frontend/features/subscription/components/dashboard/free-plan.test.tsx
  28. 10 15
      services/web/test/frontend/features/workbench/chat.spec.tsx

+ 0 - 1
services/web/config/settings.defaults.js

@@ -1099,7 +1099,6 @@ module.exports = {
     settingsModalEditorTabSections: [],
     settingsModalSpellcheckSections: [],
     editorFloatingMenuActions: [],
-    errorLogsComponents: [],
     referenceIndices: [],
     railEntries: [],
     railPopovers: [],

+ 0 - 24
services/web/frontend/extracted-translations.json

@@ -1,8 +1,6 @@
 {
-  "0_free_suggestions": "",
   "1_2_width": "",
   "1_4_width": "",
-  "1_free_suggestion": "",
   "24x_more_compile_time": "",
   "3_4_width": "",
   "About": "",
@@ -72,7 +70,6 @@
   "add_add_on_to_your_plan": "",
   "add_additional_certificate": "",
   "add_affiliation": "",
-  "add_ai_assist": "",
   "add_ai_assist_annual_and_get_unlimited_access": "",
   "add_ai_assist_monthly_and_get_unlimited_access": "",
   "add_ai_assist_to_your_plan": "",
@@ -101,9 +98,6 @@
   "add_to_dictionary": "",
   "add_to_tag": "",
   "add_txt_record_to_dns_with_token": "",
-  "add_unlimited_ai_to_overleaf": "",
-  "add_unlimited_ai_to_your_overleaf_plan": "",
-  "add_unlimited_ai_to_your_plan": "",
   "add_your_comment_here": "",
   "added_by_on": "",
   "adding": "",
@@ -122,7 +116,6 @@
   "agree_with_the_terms": "",
   "ai_assist_in_overleaf_is_included_via_writefull_groups": "",
   "ai_assist_in_overleaf_is_included_via_writefull_individual": "",
-  "ai_assist_subscriber_can_now_write_smarter": "",
   "ai_assist_unavailable": "",
   "ai_assistance": "",
   "ai_assistant": "",
@@ -157,7 +150,6 @@
   "an_error_occured_while_restoring_project": "",
   "an_error_occurred_when_verifying_the_coupon_code": "",
   "and_much_more": "",
-  "annual_discount": "",
   "anonymous": "",
   "anyone": "",
   "anyone_in_x": "",
@@ -409,7 +401,6 @@
   "create_new_subscription": "",
   "create_new_tag": "",
   "create_project_in_github": "",
-  "create_summaries": "",
   "created": "",
   "created_at": "",
   "creating": "",
@@ -551,7 +542,6 @@
   "dropbox_duplicate_project_names_suggestion": "",
   "dropbox_for_link_share_projs": "",
   "dropbox_integration_lowercase": "",
-  "dropbox_sync": "",
   "dropbox_sync_both": "",
   "dropbox_sync_description": "",
   "dropbox_sync_error": "",
@@ -704,7 +694,6 @@
   "files_selected": "",
   "filter_projects": "",
   "find": "",
-  "find_and_check_citations": "",
   "find_out_how_to_get_the_most_out_of_your_new_subscription": "",
   "find_out_more": "",
   "find_out_more_about_institution_login": "",
@@ -714,7 +703,6 @@
   "first_name": "",
   "fit_to_height": "",
   "fit_to_width": "",
-  "fix_errors": "",
   "fixed_width": "",
   "fixed_width_wrap_text": "",
   "focus_mode": "",
@@ -756,7 +744,6 @@
   "future_payments": "",
   "generate_from_text": "",
   "generate_from_text_or_image": "",
-  "generate_latex_from_prompts_and_images": "",
   "generate_token": "",
   "generating": "",
   "generic_export_feedback_message": "",
@@ -764,14 +751,11 @@
   "generic_linked_file_compile_error": "",
   "generic_something_went_wrong": "",
   "get_access_to_enterprise_features": "",
-  "get_ai_assist": "",
   "get_collaborative_benefits": "",
   "get_discounted_plan": "",
-  "get_early_access_with_ai_assist_add_on": "",
   "get_exclusive_access_to_labs": "",
   "get_full_project_history": "",
   "get_in_touch": "",
-  "get_language_suggestions": "",
   "get_more_compile_time": "",
   "get_most_subscription_by_checking_ai_writefull": "",
   "get_most_subscription_by_checking_overleaf": "",
@@ -816,7 +800,6 @@
   "github_public_description": "",
   "github_repository_diverged": "",
   "github_symlink_error": "",
-  "github_sync": "",
   "github_sync_description": "",
   "github_sync_error": "",
   "github_sync_repository_not_found_description": "",
@@ -1358,7 +1341,6 @@
   "ok_continue_to_project": "",
   "ok_join_project": "",
   "on": "",
-  "on_free_plan_upgrade_to_access_features": "",
   "one_step_away_from_professional_features": "",
   "only_add_people_who_dont_yet_have_access": "",
   "only_group_admin_or_managers_can_delete_your_account_1": "",
@@ -1464,7 +1446,6 @@
   "pending_subscription_message": "",
   "per_license": "",
   "per_month": "",
-  "per_month_x_annually": "",
   "per_year": "",
   "percent_is_the_percentage_of_the_line_width": "",
   "permanently_disables_the_preview": "",
@@ -1525,7 +1506,6 @@
   "primarily_work_study_question_university_school": "",
   "primary": "",
   "primary_certificate": "",
-  "priority_support": "",
   "privacy_and_terms": "",
   "private": "",
   "pro": "",
@@ -1598,7 +1578,6 @@
   "ready_to_join_x": "",
   "ready_to_join_x_in_group_y": "",
   "ready_to_set_up": "",
-  "realtime_track_changes": "",
   "reauthorize_github_account": "",
   "recaptcha_conditions": "",
   "recent_commits_in_github": "",
@@ -2269,7 +2248,6 @@
   "unlimited_collabs": "",
   "unlimited_collabs_per_project_plus": "",
   "unlimited_document_history": "",
-  "unlimited_projects": "",
   "unlink": "",
   "unlink_all_users": "",
   "unlink_all_users_explanation": "",
@@ -2317,7 +2295,6 @@
   "upgrade_now": "",
   "upgrade_plan": "",
   "upgrade_summary": "",
-  "upgrade_to_add_more_collaborators_and_access_collaboration_features": "",
   "upgrade_to_add_more_collaborators_and_more": "",
   "upgrade_to_get_feature": "",
   "upgrade_to_get_started": "",
@@ -2452,7 +2429,6 @@
   "work_offline_pull_to_overleaf": "",
   "work_with_non_overleaf_users": "",
   "work_with_other_github_users": "",
-  "write_faster_smarter_with_research_ready_ai": "",
   "x_changes_in": "",
   "x_changes_in_plural": "",
   "x_files_saved_to_your_project": "",

+ 1 - 7
services/web/frontend/js/features/ide-react/components/toolbar/upgrade-button.tsx

@@ -1,7 +1,6 @@
 import { useTranslation } from 'react-i18next'
 import * as eventTracking from '../../../../infrastructure/event-tracking'
 import OLButton from '@/shared/components/ol/ol-button'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 export default function UpgradeButton({
   className = '',
@@ -13,7 +12,6 @@ export default function UpgradeButton({
   source?: string
 }) {
   const { t } = useTranslation()
-  const plans2026 = useFeatureFlag('plans-2026-phase-1')
 
   function handleClick() {
     eventTracking.send('subscription-funnel', source, 'upgrade')
@@ -25,11 +23,7 @@ export default function UpgradeButton({
       <OLButton
         variant="premium"
         size="sm"
-        href={
-          plans2026
-            ? `/user/subscription/choose-your-plan?itm_referrer=${referrer}&paywall-type=${source}`
-            : `/user/subscription/plans?itm_referrer=${referrer}`
-        }
+        href={`/user/subscription/choose-your-plan?itm_referrer=${referrer}&paywall-type=${source}`}
         target="_blank"
         rel="noreferrer"
         onClick={handleClick}

+ 1 - 11
services/web/frontend/js/features/pdf-preview/components/error-logs.tsx

@@ -1,5 +1,5 @@
 import { useTranslation } from 'react-i18next'
-import { ElementType, memo, useCallback, useMemo, useState } from 'react'
+import { memo, useCallback, useMemo, useState } from 'react'
 import { usePdfPreviewContext } from '@/features/pdf-preview/components/pdf-preview-provider'
 import StopOnFirstErrorPrompt from '@/features/pdf-preview/components/stop-on-first-error-prompt'
 import PdfPreviewError from '@/features/pdf-preview/components/pdf-preview-error'
@@ -17,13 +17,6 @@ import PdfClearCacheButton from '@/features/pdf-preview/components/pdf-clear-cac
 import PdfDownloadFilesButton from '@/features/pdf-preview/components/pdf-download-files-button'
 import RollingBuildSelectedReminder from './rolling-build-selected-reminder'
 import ErrorAssistantAiPaywallNotification from './error-assistant-ai-paywall-notification'
-import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
-
-// todo: quota clean-up remove unneeded old paywall component
-const logsComponents: Array<{
-  import: { default: ElementType }
-  path: string
-}> = importOverleafModules('errorLogsComponents')
 
 type ErrorLogTab = {
   key: string
@@ -81,9 +74,6 @@ function ErrorLogs({
           <TabHeader key={tab.key} tab={tab} active={activeTab === tab.key} />
         ))}
       </Nav>
-      {logsComponents.map(({ import: { default: Component }, path }) => (
-        <Component key={path} />
-      ))}
       <ErrorAssistantAiPaywallNotification />
       <TabContent className="error-logs new-error-logs">
         <div className="logs-pane-content">

+ 1 - 11
services/web/frontend/js/features/share-project-modal/components/collaborators-limit-upgrade.tsx

@@ -5,12 +5,10 @@ import { useUserContext } from '@/shared/context/user-context'
 import StartFreeTrialButton from '@/shared/components/start-free-trial-button'
 import OLButton from '@/shared/components/ol/ol-button'
 import addMoreEditorsImage from '../images/add-more-editors.svg'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 export default function CollaboratorsLimitUpgrade() {
   const { t } = useTranslation()
   const user = useUserContext()
-  const plans2026 = useFeatureFlag('plans-2026-phase-1')
 
   return (
     <div className="invite-warning">
@@ -18,15 +16,7 @@ export default function CollaboratorsLimitUpgrade() {
         type="info"
         customIcon={<img src={addMoreEditorsImage} alt="" aria-hidden="true" />}
         title={t('add_more_collaborators')}
-        content={
-          <p>
-            {plans2026
-              ? t('upgrade_to_add_more_collaborators_and_more')
-              : t(
-                  'upgrade_to_add_more_collaborators_and_access_collaboration_features'
-                )}
-          </p>
-        }
+        content={<p>{t('upgrade_to_add_more_collaborators_and_more')}</p>}
         isActionBelowContent
         action={
           user.allowedFreeTrial ? (

+ 3 - 21
services/web/frontend/js/features/subscription/components/dashboard/free-plan.tsx

@@ -1,39 +1,21 @@
-import { useTranslation, Trans } from 'react-i18next'
+import { useTranslation } from 'react-i18next'
 import WritefullManagedBundleAddOn from '@/features/subscription/components/dashboard/states/active/change-plan/modals/writefull-bundle-management-modal'
 import getMeta from '@/utils/meta'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 function FreePlan() {
   const { t } = useTranslation()
   const hasAiAssistViaWritefull = getMeta('ol-hasAiAssistViaWritefull')
-  const plans2026 = useFeatureFlag('plans-2026-phase-1')
   return (
     <>
-      {plans2026 ? (
-        t('you_are_using_our_free_plan')
-      ) : (
-        <Trans
-          i18nKey="on_free_plan_upgrade_to_access_features"
-          components={[
-            // eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
-            <a
-              href="/learn/how-to/Overleaf_premium_features"
-              target="_blank"
-            />,
-          ]}
-        />
-      )}
-      :
+      {t('you_are_using_our_free_plan')}:
       <ul>
         <li>{t('invite_more_collabs')}</li>
-        {plans2026 && <li>{t('higher_ai_allowance')}</li>}
-        {!plans2026 && <li>{t('realtime_track_changes')}</li>}
+        <li>{t('higher_ai_allowance')}</li>
         <li>{t('full_doc_history')}</li>
         <li>{t('reference_search')}</li>
         <li>{t('reference_sync')}</li>
         <li>{t('dropbox_integration_lowercase')}</li>
         <li>{t('github_integration_lowercase')}</li>
-        {!plans2026 && <li>{t('priority_support')}</li>}
       </ul>
       <a className="btn btn-primary me-1" href="/user/subscription/plans">
         {t('upgrade_now')}

+ 0 - 31
services/web/frontend/js/shared/components/ai-paywall-notification.tsx

@@ -6,7 +6,6 @@ import { useUserFeaturesContext } from '@/shared/context/user-features-context'
 import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics'
 import { useTranslation } from 'react-i18next'
 import { formatSecondsToHoursAndMinutes } from '@/shared/utils/time'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 import getMeta from '@/utils/meta'
 const hasUnlimitedAi = getMeta('ol-hasUnlimitedAi')
@@ -33,9 +32,7 @@ function AiPaywallNotification({
     premiumSuggestionResetDate,
   } = useEditorContext()
 
-  const { t } = useTranslation()
   const features = useUserFeaturesContext()
-  const inQuotaRollout = useFeatureFlag('plans-2026-phase-1')
   const user = getMeta('ol-user')
 
   const isCommons = user.hasInstitutionLicence
@@ -77,34 +74,6 @@ function AiPaywallNotification({
     return null
   }
 
-  // if not in rollout, use old paywalls for free users
-  if (!inQuotaRollout && !hasAddOn) {
-    return null
-  }
-
-  if (!inQuotaRollout) {
-    // if not in rollout, we can still use our fair usage messages
-    const chattingMessage = t(
-      'youve_reached_the_fair_usage_limit_on_your_plan_you_can_start_chatting_again_in_time',
-      {
-        time: formatSecondsToHoursAndMinutes(t, secondsTillReset),
-      }
-    )
-    const assistMessage = t('youve_reached_the_fair_usage')
-    return (
-      <Notification
-        type="info"
-        title={t('usage_limit_reached')}
-        content={
-          featureLocation === 'workbench' ? chattingMessage : assistMessage
-        }
-        isDismissible={false}
-        customIcon={null}
-        className="ai-paywall-notification"
-      />
-    )
-  }
-
   if (hasAddOn) {
     return (
       <FairUseLimit

+ 1 - 3
services/web/frontend/js/shared/components/upgrade-benefits.tsx

@@ -2,7 +2,6 @@ import MaterialIcon from '@/shared/components/material-icon'
 import { useTranslation } from 'react-i18next'
 import { memo } from 'react'
 import classNames from 'classnames'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 function Check() {
   return <MaterialIcon type="check" />
@@ -10,14 +9,13 @@ function Check() {
 
 function UpgradeBenefits({ className }: { className?: string }) {
   const { t } = useTranslation()
-  const plans2026 = useFeatureFlag('plans-2026-phase-1')
 
   return (
     <ul className={classNames('list-unstyled upgrade-benefits', className)}>
       <li>
         <Check />
         &nbsp;
-        {plans2026 ? t('higher_ai_allowance') : t('unlimited_projects')}
+        {t('higher_ai_allowance')}
       </li>
       <li>
         <Check />

+ 0 - 1
services/web/locales/cs.json

@@ -112,7 +112,6 @@
   "github_no_master_branch_error": "Tento repozitář nemůže být importován, protože nemá master branch. Prosím zajistěte, aby projekt měl master branch.",
   "github_public_description": "Tento repozitář může vidět kdokoliv. Vy určíte kdo do něj může commitovat,",
   "github_successfully_linked_description": "Děkujeme, úspěšně jsem připojili váš GitHub účet k __appName__u. Nyní můžete exportovat své projekty v __appName__u do GitHubu, nebo importovat projekty z GitHub repozitáře.",
-  "github_sync": "Synchronizace s GitHubem",
   "github_sync_description": "Můžete spojit vaše projekty v __appName__u s GitHub repozitářem. Můžete vytvářet nové commity z __appName__u a mergovat s commity vytvořenými offline, nebo na GitHubu.",
   "github_sync_error": "Omlouváme se, ale při komunikaci s naší GitHub službou nastala chyba. Zkuste to za moment znovu.",
   "github_validation_check": "Zkontrolujte prosím, jestli máte správné jméno repozitáře a jestli máte práva k jeho vytvoření.",

+ 0 - 2
services/web/locales/da.json

@@ -684,7 +684,6 @@
   "github_repository_diverged": "Default branch i det forbundne repository er blevet force-push’et. Det kan desynkronisere Overleaf og GitHub at pull’e ændringer efter et force push. Det vil muligvis være nødvendigt at push’e ændringer efter pullet for blive synkroniseret igen.",
   "github_successfully_linked_description": "Vi har linket din GitHub konto til __appName__. Du kan nu eksportere dine __appName__ projekter til GitHub, eller importere projekter fra dine GitHub repositories.",
   "github_symlink_error": "Dit GitHub repository indeholder symbolske lænkefiler, som ikke på nuværende tidpunkt er understøttet af Overleaf. Du må prøve igen, efter du har fjernet de filer.",
-  "github_sync": "GitHub synkronisering",
   "github_sync_description": "Med GitHub synkronisering kan du forbinde dine __appName__-projekter til et GitHub repository, oprette nye commits fra __appName__, og merge commits fra GitHub.",
   "github_sync_error": "Beklager, der skete en fejl mens vi checkede vores GitHub service. Prøv igen om lidt.",
   "github_sync_repository_not_found_description": "Det forbundne repository er enten blevet fjernet, eller du har ikke længere adgang til det. Du kan forbinde til et nyt repository ved at klone projektet, og vælge punktet ’GitHub’ i menuen. Du kan også fjerne forbindelsen mellem det her projekt og repository’et.",
@@ -1185,7 +1184,6 @@
   "ok_continue_to_project": "OK, fortsæt til projekt",
   "ok_join_project": "OK, deltag i projekt",
   "on": "Til",
-  "on_free_plan_upgrade_to_access_features": "Du er på det gratis __appName__ abonnement. Opgrader for at tilgå disse <0>Premium-funktioner</0>",
   "one_collaborator_per_project": "1 samarbejdspartner per projekt",
   "one_free_collab": "Kun én gratis samarbejdspartner",
   "one_per_project": "1 per projekt",

+ 0 - 6
services/web/locales/de.json

@@ -1,8 +1,6 @@
 {
-  "0_free_suggestions": "0 kostenlose Vorschläge",
   "1_2_width": "½ Breite",
   "1_4_width": "¼ Breite",
-  "1_free_suggestion": "1 kostenloser Vorschlag",
   "24x_basic": "24x Basis",
   "24x_more_compile_time": "24x mehr Kompilierzeit auf unseren schnellsten Servern",
   "3_4_width": "¾ Breite",
@@ -77,7 +75,6 @@
   "add_add_on_to_your_plan": "Füge __addOnName__ zu deinem Abonnement hinzu",
   "add_additional_certificate": "Füge ein weiteres Zertifikat hinzu",
   "add_affiliation": "Zugehörigkeit hinzufügen",
-  "add_ai_assist": "KI-Assistenz hinzufügen",
   "add_ai_assist_annual_and_get_unlimited_access": "Füge die <sparkle/> AI Assist Annual hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
   "add_ai_assist_monthly_and_get_unlimited_access": "Füge die <sparkle/> AI Assist Monthly hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
   "add_ai_assist_to_your_plan": "Füge die <sparkle/> AI Assist zu deinem Abonnement hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
@@ -106,8 +103,6 @@
   "add_role_and_department": "Rolle und Abteilung hinzufügen",
   "add_to_dictionary": "Zum Wörterbuch hinzufügen",
   "add_to_tag": "Zu Stichwort hinzufügen",
-  "add_unlimited_ai_to_overleaf": "Unbegrenzte KI* zu Overleaf hinzufügen",
-  "add_unlimited_ai_to_your_overleaf_plan": "Unbegrenzte KI* zu deinem Overleaf-__planName__-Abonnement hinzufügen",
   "add_your_comment_here": "Füge hier einen Kommentar hinzu",
   "added": "hinzugefügt",
   "added_by_on": "Hinzugefügt von __name__ am __date__",
@@ -648,7 +643,6 @@
   "github_repository_diverged": "Der Standard-Branch des verknüpften Repositorys wurde forciert gepusht. Das Pullen von GitHub-Änderungen nach einem forciertem Push kann dazu führen, dass Overleaf und GitHub nicht mehr synchron sind. Möglicherweise musst du Änderungen nach dem Pullen erneut Pushen um wieder synchron zu sein",
   "github_successfully_linked_description": "Danke, wir haben dein GitHub-Nutzerkonto erfolgreich mit __appName__ verknüpft. Du kannst die __appName__-Projekte jetzt in GitHub exportieren oder Projekte aus deinen GitHub-Repositories importieren.",
   "github_symlink_error": "Dein GitHub-Repository enthält Dateien mit symbolischen Links, was derzeit von Overleaf nicht unterstützt wird. Entferne diese und versuche es erneut.",
-  "github_sync": "GitHub Synchronisierung",
   "github_sync_description": "Mit GitHub-Synchronisierung kannst du deine __appName__-Projekte mit GitHub-Repositories verlinken. Erstelle neue Commits aus __appName__ und führe sie mit Commits in GitHub zusammen.",
   "github_sync_error": "Entschuldigung, es gab ein Problem mit unserem GitHub-Dienst. Bitte versuche es später erneut.",
   "github_sync_repository_not_found_description": "Das verknüpfte Repository wurde entweder entfernt oder du hast keinen Zugriff mehr darauf. Du kannst die Synchronisierung mit einem neuen Repository einrichten, indem du das Projekt klonst und den Menüpunkt „GitHub“ verwendest. Du kannst das Repository auch von diesem Projekt trennen.",

+ 0 - 19
services/web/locales/en.json

@@ -1,8 +1,6 @@
 {
-  "0_free_suggestions": "0 free suggestions",
   "1_2_width": "½ width",
   "1_4_width": "¼ width",
-  "1_free_suggestion": "1 free suggestion",
   "1_user": "1 user",
   "24x_basic": "24x Basic",
   "24x_more_compile_time": "24x more compile time on our fastest servers",
@@ -85,7 +83,6 @@
   "add_add_on_to_your_plan": "Add __addOnName__ to your plan",
   "add_additional_certificate": "Add another certificate",
   "add_affiliation": "Add affiliation",
-  "add_ai_assist": "Add AI Assist",
   "add_ai_assist_annual_and_get_unlimited_access": "Add <sparkle/> AI Assist Annual and get unlimited* access to Overleaf and Writefull AI features.",
   "add_ai_assist_monthly_and_get_unlimited_access": "Add <sparkle/> AI Assist Monthly and get unlimited* access to Overleaf and Writefull AI features.",
   "add_ai_assist_to_your_plan": "Add <sparkle/> AI Assist to your plan and get unlimited* access to Overleaf and Writefull AI features.",
@@ -118,9 +115,6 @@
   "add_to_dictionary": "Add to dictionary",
   "add_to_tag": "Add to tag",
   "add_txt_record_to_dns_with_token": "To complete the process of domain verification you need to add a TXT record to your DNS with the following token:",
-  "add_unlimited_ai_to_overleaf": "Add unlimited AI* to Overleaf",
-  "add_unlimited_ai_to_your_overleaf_plan": "Add unlimited AI* to your Overleaf __planName__ plan",
-  "add_unlimited_ai_to_your_plan": "Add unlimited AI* to your __planName__ plan",
   "add_your_comment_here": "Add your comment here",
   "added": "added",
   "added_by_on": "Added by __name__ on __date__",
@@ -155,7 +149,6 @@
   "ai_assist_description": "AI Assist combines AI tools from Overleaf and Writefull to help you write faster, smarter and with confidence.",
   "ai_assist_in_overleaf_is_included_via_writefull_groups": "AI Assist in Overleaf is included as part of your group or organization’s Writefull subscription. To make changes you’ll need to speak to your subscription admin",
   "ai_assist_in_overleaf_is_included_via_writefull_individual": "AI Assist in Overleaf is included as part of your Writefull subscription. You can cancel or manage your access to AI Assist in your Writefull subscription settings.",
-  "ai_assist_subscriber_can_now_write_smarter": "AI Assist subscribers can now write smarter, find citations, and generate LaTeX from prompts and images.",
   "ai_assist_unavailable": "AI features are now included in every paid plan. See the <0>pricing page</0> for what each plan includes.",
   "ai_assistance": "AI assistance",
   "ai_assistant": "AI Assistant",
@@ -545,7 +538,6 @@
   "create_new_tag": "Create new tag",
   "create_password": "Create password",
   "create_project_in_github": "Create a GitHub repository",
-  "create_summaries": "Create summaries",
   "create_your_account": "Create your account",
   "created": "Created",
   "created_at": "Created at",
@@ -923,7 +915,6 @@
   "filter_projects": "Filter projects",
   "filters": "Filters",
   "find": "Find",
-  "find_and_check_citations": "Find and check citations",
   "find_out_how_to_get_the_most_out_of_your_new_subscription": "Find out how to get the most out of your new subscription by checking out <0>Overleaf’s AI features</0>.",
   "find_out_more": "Find out More",
   "find_out_more_about_institution_login": "Find out more about institutional login",
@@ -934,7 +925,6 @@
   "first_name": "First name",
   "fit_to_height": "Fit to height",
   "fit_to_width": "Fit to width",
-  "fix_errors": "Fix errors",
   "fixed_width": "Fixed width",
   "fixed_width_wrap_text": "Fixed width, wrap text",
   "flexible_plans_for_everyone": "Flexible plans for everyone—from individual students and researchers, to large businesses and universities.",
@@ -997,7 +987,6 @@
   "general": "General",
   "generate_from_text": "From text",
   "generate_from_text_or_image": "From text or image",
-  "generate_latex_from_prompts_and_images": "Generate LaTeX from prompts and images",
   "generate_token": "Generate token",
   "generating": "Generating",
   "generic_export_feedback_message": "This is a new feature. <0>Let us know what you think</0>",
@@ -1005,16 +994,13 @@
   "generic_linked_file_compile_error": "This project’s output files are not available because it failed to compile. Please open the project to see the compilation error details.",
   "generic_something_went_wrong": "Sorry, something went wrong",
   "get_access_to_enterprise_features": "Get access to enterprise features and benefits provided by your organization.",
-  "get_ai_assist": "Get AI Assist",
   "get_collaborative_benefits": "Get the collaborative benefits from __appName__, even if you prefer to work offline",
   "get_discounted_plan": "Get discounted plan",
-  "get_early_access_with_ai_assist_add_on": "Get early access with the AI Assist add-on",
   "get_exclusive_access_to_labs": "Get exclusive access to early-stage experiments when you join Overleaf Labs. All we ask in return is your honest feedback to help us develop and improve.",
   "get_full_project_history": "Get full project history",
   "get_in_touch": "Get in touch",
   "get_in_touch_having_problems": "<a href=\"__link__\">Get in touch with support</a> if you’re having problems",
   "get_involved": "Get involved",
-  "get_language_suggestions": "Get language suggestions",
   "get_more_compile_time": "Get more compile time",
   "get_most_subscription_by_checking_ai_writefull": "Get the most out of your subscription by checking out <0>Overleaf’s AI features</0> and <1>Writefull’s features</1>.",
   "get_most_subscription_by_checking_overleaf": "Get the most out of your subscription by checking out <0>Overleaf’s features</0>.",
@@ -1067,7 +1053,6 @@
   "github_repository_diverged": "The default branch of the linked repository has been force-pushed. Pulling GitHub changes after a force push can cause Overleaf and GitHub to get out of sync. You might need to push changes after pulling to get back in sync.",
   "github_successfully_linked_description": "Thanks, we’ve successfully linked your GitHub account to __appName__. You can now export your __appName__ projects to GitHub, or import projects from your GitHub repositories.",
   "github_symlink_error": "Your GitHub repository contains symbolic link files, which are not currently supported by Overleaf. Please remove these and try again.",
-  "github_sync": "GitHub Sync",
   "github_sync_description": "With GitHub Sync you can link your __appName__ projects to GitHub repositories, create new commits from __appName__, and merge commits from GitHub.",
   "github_sync_error": "Sorry, there was a problem checking our GitHub service. Please try again in a few moments.",
   "github_sync_repository_not_found_description": "The linked repository has either been removed, or you no longer have access to it. You can set up sync with a new repository by cloning the project and using the ‘GitHub’ menu item. You can also unlink the repository from this project.",
@@ -1770,7 +1755,6 @@
   "ok_continue_to_project": "OK, continue to project",
   "ok_join_project": "OK, join project",
   "on": "On",
-  "on_free_plan_upgrade_to_access_features": "You are on the __appName__ Free plan. Upgrade to access these <0>Premium features</0>",
   "on_premises_explanation": "Host Overleaf in your own secure environment, with enhanced administrative control over projects and user access.",
   "on_premises_option_optional": "On-premises option (optional)",
   "on_premises_server_pro_option": "On-Premises (Server Pro) option",
@@ -1923,7 +1907,6 @@
   "per_license": "per license",
   "per_month": "per month",
   "per_month_billed_annually": "per month, billed annually",
-  "per_month_x_annually": "per month, __price__ annually",
   "per_user_year": "per user / year",
   "per_year": "per year",
   "percent_is_the_percentage_of_the_line_width": "% is the percentage of the line width",
@@ -2955,7 +2938,6 @@
   "upgrade_now": "Upgrade now",
   "upgrade_plan": "Upgrade plan",
   "upgrade_summary": "Upgrade summary",
-  "upgrade_to_add_more_collaborators_and_access_collaboration_features": "Upgrade to add more collaborators and access collaboration features like track changes and full project history.",
   "upgrade_to_add_more_collaborators_and_more": "Upgrade to add more collaborators and access higher AI allowance, track changes, and full project history.",
   "upgrade_to_get_feature": "Upgrade to get __feature__, plus:",
   "upgrade_to_get_more_from_overleaf": "Upgrade to get more from Overleaf",
@@ -3114,7 +3096,6 @@
   "work_or_university_sso": "Work/university single sign-on",
   "work_with_non_overleaf_users": "Work with non-Overleaf users",
   "work_with_other_github_users": "Work with other GitHub users",
-  "write_faster_smarter_with_research_ready_ai": "Write faster, smarter and with confidence with research-ready AI",
   "writefull": "Writefull",
   "x_changes_in": "__count__ change in",
   "x_changes_in_plural": "__count__ changes in",

+ 0 - 1
services/web/locales/es.json

@@ -320,7 +320,6 @@
   "github_is_premium": "La sincronización con GitHub es una característica premium",
   "github_public_description": "Cualquier persona puede ver este repositorio. Tú eliges quién puede contribuir.",
   "github_successfully_linked_description": "Gracias, vinculamos exitosamente tu cuenta de GitHub con __appName__. Ahora puedes exportar tus proyectos de __appName__ a GitHub o importar proyectos desde tus repositorios en GitHub.",
-  "github_sync": "Sincronización con GitHub",
   "github_sync_description": "Con la sincronización con GitHub puedes enlazar tus proyectos de __appName__ con repositorios GitHub. Crea nuevos commits desde __appName__ y únelos con commits hechos offline o en GitHub.",
   "github_sync_error": "Disculpa, hubo un error en la conexión con nuestro servicio de GitHub. Intenta de nuevo en unos minutos más, por favor.",
   "github_validation_check": "Por favor revisa que el nombre del repositorio es válido y que tienes permisos para crear el repositorio.",

+ 0 - 1
services/web/locales/fi.json

@@ -115,7 +115,6 @@
   "github_is_premium": "GitHub-synkronointi on premium-ominaisuus",
   "github_public_description": "Kuka tahansa voi nähdä tämän repositoryn. Voit valita kuka voi tehdä muutoksia.",
   "github_successfully_linked_description": "Kiitos, olemme linkittäneet GitHub-tilisi sovellukseen __appName__ onnistuneesti. Voit nyt viedä __appName__-projektejasi GitHubiin tai tuoda projekteja omista GitHub-repositoryistasi.",
-  "github_sync": "GitHub Synkronointi",
   "github_sync_description": "Voit linkittää __appName__-projektisi GitHub-repositoryihin GitHub Syncin avulla. Tee uusia muutoksia sovelluksesta __appName__ ja yhdistä GitHubissa tai offline-tilassa tehtyihin muutoksiin.",
   "github_sync_error": "Tapahtui virhe puhuessa GitHub-palvelullemme. Yritä uudelleen pienen hetken päästä.",
   "github_validation_check": "Tarkista, että repositoryn nimi on kelvollinen ja että sinulla on oikeudet luoda repository.",

+ 0 - 1
services/web/locales/fr.json

@@ -504,7 +504,6 @@
   "github_repository_diverged": "La branche master du dépôt lié a été poussée de force. La récupération des modifications faites sur GitHub après un poussage forcé peut causer la désynchronisation d’Overleaf et GitHub. Vous pourriez avoir besoin de pousser les modifications après leur récupération pour restaurer la synchronisation.",
   "github_successfully_linked_description": "Merci, nous avons lié votre compte GitHub avec __appName__. Vous pouvez maintenant exporter vos projets __appName__ dans GitHub ou importer des projets depuis vos dépôts GitHub.",
   "github_symlink_error": "Votre dépôt GitHub contient des liens symboliques qui ne sont pas encore supportés par Overleaf. Veuillez les retirer et réessayer.",
-  "github_sync": "Synchronisation GitHub",
   "github_sync_description": "Avec la synchronisation GitHub, vous pouvez lier vos projets __appName__ à des dépôts GitHub. Créez de nouveaux commits depuis __appName__, et fusionnez avec les commits réalisés hors ligne ou dans GitHub.",
   "github_sync_error": "Désolé, une erreur s’est produite lors de la communication avec le service GitHub. Veuillez essayer à nouveau dans quelques instants.",
   "github_sync_repository_not_found_description": "Le dépôt lié a été supprimé ou bien vous avez perdu accès à celui-ci. Vous pouvez configurer la synchronisation avec un nouveau dépôt en clonant le projet puis en accédant à l’option « GitHub » du menu. Vous pouvez également supprimer le lien entre ce projet et le dépôt.",

+ 0 - 1
services/web/locales/it.json

@@ -130,7 +130,6 @@
   "github_is_premium": "La sincronizzazione GitHub è una funzionalità premium",
   "github_public_description": "Chiunque può visualizzare il repository. Puoi scegliere chi può eseguire commit.",
   "github_successfully_linked_description": "Grazie, abbiamo collegato con successo il tuo account GitHub a __appName__ . Adesso puoi esportare i progetti __appName__ in GitHub, o importarli dai tuoi repository GitHub.",
-  "github_sync": "Sincronizzazione GitHub",
   "github_sync_description": "Con GitHub Sync puoi collegare i tuoi progetti __appName__ a repository GitHub. Crea nuovi commit da __appName__ e unisci con commit fatti offline o su GitHub.",
   "github_sync_error": "Spiacenti, c’è stato un errore con la comunicazione con GitHub. Si prega di riprovare fra poco.",
   "github_validation_check": "Per favore, controlla che il nome del repository sia valido, e che tu abbia i permessi per crearlo.",

+ 0 - 1
services/web/locales/ja.json

@@ -162,7 +162,6 @@
   "github_is_premium": "GitHub統合はプレミアム機能です",
   "github_public_description": "このリポジトリは全員が閲覧できます。コミットできる人を選択します。",
   "github_successfully_linked_description": "ありがとうございます。GitHubアカウントと __appName__ のリンクが完了しました。これからは __appName__ プロジェクトをGitHubにエクスポート、あるいはGitHubリポジトリからプロジェクトのインポートをすることができます。",
-  "github_sync": "GitHub同期",
   "github_sync_description": "GitHub Syncがあれば、__appName__ プロジェクトとGitHubリポジトリを接続することができます。__appName__ から新しいコミットを作成して、オフラインあるいはGitHubで作成したコミットと統合できます。",
   "github_sync_error": "申し訳ありません。GitHubサービスとの接続に問題が発生しました。しばらく時間を置いて再度お試しください。",
   "github_validation_check": "リポジトリ名が有効か、リポジトリを作成する権限があるか確認してください。",

+ 0 - 1
services/web/locales/ko.json

@@ -188,7 +188,6 @@
   "github_is_premium": "GitHub 동기화는 프리미엄 기능입니다",
   "github_public_description": "모두가 이 저장소를 볼 수 있습니다. 커밋할 수 있는 분을 선택하실 수 있습니다.",
   "github_successfully_linked_description": "감사합니다, __appName__로 GitHub 계정을 성공적으로 연결하였습니다. __appName__ 프로젝트를 GitHub으로 전송하시거나 GitHub 저장소의 프로젝트를 불러올 수 있습니다.",
-  "github_sync": "GitHub 동기화",
   "github_sync_description": "GitHub 동기화로, __appName__ 프로젝트를 GitHub 저장소로 연결하실 수 있습니다. __appName__의 새로운 커밋을 만들고, 오프라인이나 GitHub에서 만들어진 커밋과 합치세요.",
   "github_sync_error": "죄송합니다, GitHub 서비스에 대한 에러가 있었습니다. 잠시 후 다시 시도해주시기 바랍니다.",
   "github_validation_check": "저장소 이름이 유효한지 확인하시기 바랍니다, 그리고 저장소를 만들기위해 허가를 가지셔야 합니다.",

+ 0 - 1
services/web/locales/nl.json

@@ -191,7 +191,6 @@
   "github_is_premium": "GitHubsnychronisatie is een premium functie",
   "github_public_description": "Iedereen kan deze repository zien. Jij kiest wie eraan kan bijdragen.",
   "github_successfully_linked_description": "Bedankt, we hebben je GitHub-account kunnen koppelen aan __appName__. Je kunt nu je __appName__-projecten exporteren naar GitHub, of je projecten vanuit je GitHub repositories importeren.",
-  "github_sync": "GitHub-synchonisatie",
   "github_sync_description": "Met GitHub Sync kun je je __appName__-projecten koppelen aan GitHub repositories. Maak nieuwe toevoegingen vanuit __appName__ en voeg deze samen met toevoegingen die offline of in GitHub gemaakt zijn.",
   "github_sync_error": "Sorry, er trad een fout op tijdens het communiceren met onze GitHub-dienst. Probeer het opnieuw over een ogenblik.",
   "github_validation_check": "Controleer of de naam van de repository geldig is en of je toestemming heb om de repository te maken.",

+ 0 - 1
services/web/locales/no.json

@@ -134,7 +134,6 @@
   "github_is_premium": "Synkronisering med GitHub er en premium funksjonalitet",
   "github_public_description": "Hvem som helst kan se dette repositoriet. Du velger hvem som kan gjøre commits.",
   "github_successfully_linked_description": "Takk, kobling av GitHub-kontoen din til __appName__ var vellykket. Du kan nå eksportere __appName__-prosjektene dine til GitHub, eller importere prosjekter fra GitHub-repositoriene dine.",
-  "github_sync": "GitHub Synk.",
   "github_sync_description": "Med GitHub-Sync kan du koble dine prosjekter i __appName__ til GitHub-repositories. Lag nye commits fra __appName__, og merge med commits gjort offline eller i GitHub.",
   "github_sync_error": "Beklager, det oppstod en feil da vi forsøkte å snakke med vår GitHub-service. Prøv igjen om ett øyeblikk",
   "github_validation_check": "Vennligst sjekk at navnet til repositoriet er gyldig, og at du har tilgang til å lage repositoriet.",

+ 0 - 1
services/web/locales/pt.json

@@ -226,7 +226,6 @@
   "github_is_premium": "Sincronizar com GitHub é um recurso premium",
   "github_public_description": "Qualquer um pode ver esse repositório.",
   "github_successfully_linked_description": "Obrigado, nós vinculamos com sucesso sua conta do GitHub com o __appName__. Agora você pode exportar seus projetos do __appName__ para o GitHub e importar seus projetos de repositórios do GitHub.",
-  "github_sync": "Sincronizar com GitHub",
   "github_sync_description": "Com a Sincronização GitHub você pode vincular seus projetos __appName__ com os repositórios do GitHub. Crie novos commits no __appName__ e mescle com commits feitos fora ou no GitHub.",
   "github_sync_error": "Desculpe, houve um erro ao se comunicar com nosso serviço do GitHub. Por favor, tente novamente mais tarde.",
   "github_validation_check": "Por favor, verifique se o nome do projeto é válido e que você tem permissão para criar o repositório.",

+ 0 - 1
services/web/locales/ru.json

@@ -170,7 +170,6 @@
   "github_is_premium": "Синхронизация с GitHub доступна только в премиум аккаунте",
   "github_public_description": "Этот репозиторий может просмотреть каждый. Вы выбираете, кто может править.",
   "github_successfully_linked_description": "Спасибо, мы успешно связали ваш аккаунт на GitHub с __appName__. Теперь вы можете экспортировать проекты с __appName__ в GitHub или импортировать в обратном направлении.",
-  "github_sync": "Синхронизация с GitHub",
   "github_sync_description": "Вы можете связать ваши проекты __appName__ с репозиториями на GitHub. Создавайте коммиты в __appName__ и объединяйте их с коммитами, сделанными оффлайн или на GitHub.",
   "github_sync_error": "Извините, произошла ошибка в общении с сервисом GitHub. Пожалуйста, попробуйте ещё раз позднее.",
   "github_validation_check": "Пожалуйста, проверьте правильность имени хранилища и права доступа на создание хранилища",

+ 0 - 1
services/web/locales/sv.json

@@ -310,7 +310,6 @@
   "github_public_description": "Alla kan se detta repo. Du bestämmer vem som kan commita.",
   "github_successfully_linked_description": "Tack, vi har länkat ditt GitHub konto till __appName__. Du kan du exportera dina __appName__ projekt till GitHub, eller importera projekt från dina GitHub repon.",
   "github_symlink_error": "Ditt GitHub-arkiv innehåller symboliska länkfiler som för närvarande inte stöds av Overleaf. Vänligen ta bort dessa och försök igen.",
-  "github_sync": "GitHub Synk",
   "github_sync_description": "Med GitHub synk kan du koppla dina __appName__ projekt till GitHub repon. Skapa nya commits från __appName__ och slå samman commits som har gjorts i offlineläge eller i GitHub.",
   "github_sync_error": "Ett fel uppstod vid kommunikationen med GitHub. Vänligen försök igen om en stund.",
   "github_timeout_error": "Synkroniseringen av ditt Overleaf-projekt med GitHub har orsakat time-out. Det kan bero på att projektets totala storlek eller antalet filer/ändringar som ska synkroniseras är för stort.",

+ 0 - 1
services/web/locales/tr.json

@@ -131,7 +131,6 @@
   "github_is_premium": "GitHub senkronizasyonu premium bir özelliktir",
   "github_public_description": "Herkes bu depoyu görüntüleyebilir. Kimlerin işlem yapabileceğini siz seçersiniz.",
   "github_successfully_linked_description": "Teşekkürler, GitHub hesabınız ile __appName__ arasındaki bağlantı, başarıyla oluşturuldu. Artık __appName__ projelerinizi GitHub üzerine yükleyebilir ya da GitHub depolarınızı __appName__’e yükleyebilirsiniz.",
-  "github_sync": "GitHub Senkronizasyonu",
   "github_sync_description": "GitHub senkronizasyonu sayesinde __appName__ projeleriniz ile GitHub depolarınız arasında bağlantı kurabilirsiniz. Bu sayede __appName__ üzerinden çevrimdışı olarak işlem yapabilir ya da bu işlemleri GitHub üzerine işleyebilirsiniz.",
   "github_sync_error": "Üzgünüz, GitHub servisine bağlanırken bir sorunla karşılaştık. Lütfen, birkaç dakika sonra tekrar deneyin.",
   "github_validation_check": "Lütfen, depo adının doğru yazıldığından ve yeni bir depo oluşturma yetkinizin olduğundan emin olunuz.",

+ 0 - 3
services/web/locales/zh-CN.json

@@ -794,7 +794,6 @@
   "github_repository_diverged": "已强制推送到链接存储库的主分支。在强制推送之后拉取 GitHub 更改可能会导致 Overleaf 和 GitHub 不同步。您可能需要在拉取后推送更改以恢复同步。",
   "github_successfully_linked_description": "谢谢,您已成功建立了您的GitHub账户与 __appName__ 的关联。您现在可以导出您的 __appName__ 项目到GitHub,或者从您的GitHub存储困导入项目。",
   "github_symlink_error": "您的GitHub存储库包含符号链接文件,Overleaf 暂时不支持这些文件。请删除这些文件并重试。",
-  "github_sync": "GitHub 同步",
   "github_sync_description": "通过与 GitHub 同步,你可以将您的__appName__项目关联到GitHub的存储库,从 __appName__ 创建新的提交,并与线下或者GitHub中的提交合并。",
   "github_sync_error": "抱歉,与我们的 GitHub 服务连接出错。请稍后重试。",
   "github_sync_repository_not_found_description": "链接的存储库已被删除,或者您不再有权访问它。通过克隆项目并使用“GitHub”菜单项,可以设置与新存储库的同步。您还可以取消存储库与此项目的链接。",
@@ -1354,7 +1353,6 @@
   "ok_continue_to_project": "好的,继续到项目",
   "ok_join_project": "好的,加入项目",
   "on": "开",
-  "on_free_plan_upgrade_to_access_features": "您使用的是 __appName__ 免费计划。 升级即可使用这些<0>高级功能</0>",
   "one_collaborator_per_project": "每个项目 1 名协作者",
   "one_free_collab": "1个免费的合作者",
   "one_per_project": "每个项目 1 个",
@@ -2284,7 +2282,6 @@
   "upgrade_now": "现在升级",
   "upgrade_plan": "升级计划",
   "upgrade_summary": "升级摘要",
-  "upgrade_to_add_more_collaborators_and_access_collaboration_features": "升级以添加更多合作者并访问协作功能,如跟踪更改和完整的项目历史记录。",
   "upgrade_to_get_feature": "升级以获得__feature__,以及:",
   "upgrade_to_review": "升级以获取评论",
   "upgrade_your_subscription": "升级您的订阅",

+ 2 - 2
services/web/test/frontend/features/share-project-modal/components/share-project-modal.test.tsx

@@ -713,7 +713,7 @@ describe('<ShareProjectModal/>', function () {
     expect(viewerOption?.classList.contains('disabled')).to.be.false
 
     screen.getByText(
-      /Upgrade to add more collaborators and access collaboration features like track changes and full project history/
+      /Upgrade to add more collaborators and access higher AI allowance, track changes, and full project history/
     )
   })
 
@@ -751,7 +751,7 @@ describe('<ShareProjectModal/>', function () {
     expect(viewerOption?.classList.contains('disabled')).to.be.false
 
     screen.getByText(
-      /Upgrade to add more collaborators and access collaboration features like track changes and full project history/
+      /Upgrade to add more collaborators and access higher AI allowance, track changes, and full project history/
     )
   })
 

+ 1 - 1
services/web/test/frontend/features/subscription/components/dashboard/free-plan.test.tsx

@@ -11,7 +11,7 @@ describe('<FreePlan />', function () {
     )
 
     screen.getByText(
-      'You are on the Overleaf Free plan. Upgrade to access these',
+      'You’re using our free plan. Upgrade to get the best Overleaf experience',
       {
         exact: false,
       }

+ 10 - 15
services/web/test/frontend/features/workbench/chat.spec.tsx

@@ -57,7 +57,7 @@ describe('Workbench', { scrollBehavior: false }, function () {
 
       cy.contains('Supporting your research').should('not.exist')
 
-      cy.contains('Get early access').should('not.exist')
+      cy.contains('Upgrade to get started').should('not.exist')
 
       cy.contains('AI can make mistakes').should('exist')
     })
@@ -82,7 +82,7 @@ describe('Workbench', { scrollBehavior: false }, function () {
 
       cy.findByRole('button', { name: /accept and continue/i }).should('exist')
 
-      cy.contains('Get early access').should('not.exist')
+      cy.contains('Upgrade to get started').should('not.exist')
 
       cy.get('.conversation-footer').should('have.attr', 'inert', 'true')
     })
@@ -117,26 +117,21 @@ describe('Workbench', { scrollBehavior: false }, function () {
       )
     })
     it('should show upgrade notification', function () {
-      cy.get('.workbench-upgrade-notification').should('exist')
-      cy.contains('Get early access').should('be.visible')
+      cy.get('.ai-upgrade-paywall-btn').should('exist')
+      cy.contains('Upgrade to get started').should('be.visible')
 
-      cy.findByRole('button', { name: /get ai assist/i }).should('exist')
+      cy.findByRole('link', { name: /upgrade/i }).should('exist')
 
       cy.get('.workbench-consent-prompt').should('not.exist')
 
       cy.get('.conversation-footer').should('have.attr', 'inert', 'true')
     })
 
-    it('should dispatch paywall event when clicking upgrade button', function () {
-      const paywallSpy = cy.spy().as('paywallSpy')
-      cy.window().then(win => {
-        win.addEventListener('aiAssist:showPaywall', paywallSpy)
-      })
-
-      cy.findByRole('button', { name: /get ai assist/i }).click()
-
-      // Should dispatch the paywall event
-      cy.get('@paywallSpy').should('have.been.calledOnce')
+    it('should link to the plans interstitial from the upgrade button', function () {
+      cy.findByRole('link', { name: /upgrade/i })
+        .should('have.attr', 'href')
+        .and('include', '/user/subscription/choose-your-plan')
+        .and('include', 'paywall-type=workbench')
     })
   })
 })