From 3c3dd0fb3799da6f0ce340eda53910cdb4c07fd8 Mon Sep 17 00:00:00 2001 From: Mathias Jakobsen Date: Tue, 30 Jun 2026 16:52:09 +0100 Subject: [PATCH] Merge pull request #35037 from overleaf/mj-themed-modals-again [web] Add support for dark mode modals GitOrigin-RevId: 34770a6f91d6a331cfaccf86c7dc1a5d151ad25b --- .../Features/Project/ProjectController.mjs | 1 + .../components/settings-modal.tsx | 3 ++ .../js/shared/components/ol/ol-modal.tsx | 17 ++++++- .../stylesheets/components/modal.scss | 23 ++++++++- .../stylesheets/pages/editor/settings.scss | 48 ++++++++++++++----- 5 files changed, 78 insertions(+), 14 deletions(-) diff --git a/services/web/app/src/Features/Project/ProjectController.mjs b/services/web/app/src/Features/Project/ProjectController.mjs index 8658129a8f..e20621b0ec 100644 --- a/services/web/app/src/Features/Project/ProjectController.mjs +++ b/services/web/app/src/Features/Project/ProjectController.mjs @@ -497,6 +497,7 @@ const _ProjectController = { 'ai-disabled-collaborators', 'group-link-sharing', 'compile-with-checkpoint', + 'themed-modals', ].filter(Boolean) const getUserValues = async userId => diff --git a/services/web/frontend/js/features/ide-settings/components/settings-modal.tsx b/services/web/frontend/js/features/ide-settings/components/settings-modal.tsx index e6d2605687..fe2a7c030a 100644 --- a/services/web/frontend/js/features/ide-settings/components/settings-modal.tsx +++ b/services/web/frontend/js/features/ide-settings/components/settings-modal.tsx @@ -12,6 +12,7 @@ import { } from '../context/settings-modal-context' import useFocusOnSetting from '../hooks/use-focus-on-setting' import useOpenSettingsViaQueryParam from '../hooks/use-open-settings-via-query-param' +import { useFeatureFlag } from '@/shared/context/split-test-context' const SettingsModalWrapper = () => { return ( @@ -25,6 +26,7 @@ const SettingsModal = () => { const { t } = useTranslation() const { show, setShow, settingsTabs, activeTab, setActiveTab } = useSettingsModalContext() + const themed = useFeatureFlag('themed-modals') useFocusOnSetting() useOpenSettingsViaQueryParam() @@ -39,6 +41,7 @@ const SettingsModal = () => { ? 'ide-settings-modal-transparent-backdrop' : undefined } + themed={themed} > {t('settings')} diff --git a/services/web/frontend/js/shared/components/ol/ol-modal.tsx b/services/web/frontend/js/shared/components/ol/ol-modal.tsx index c8cd502e0f..0aacc257e6 100644 --- a/services/web/frontend/js/shared/components/ol/ol-modal.tsx +++ b/services/web/frontend/js/shared/components/ol/ol-modal.tsx @@ -9,11 +9,14 @@ import { import { ModalBodyProps } from 'react-bootstrap/ModalBody' import type { Options as FocusTrapOptions } from 'focus-trap' import { useTranslation } from 'react-i18next' +import classNames from 'classnames' type OLModalProps = ModalProps & { size?: 'sm' | 'lg' onHide: () => void show?: boolean + themed?: boolean + className?: string } & Pick< FocusTrapOptions, | 'escapeDeactivates' @@ -34,10 +37,22 @@ export function OLModal({ escapeDeactivates = false, // Let React-Bootstrap Modal handle Escape key to avoid double Escape key handling clickOutsideDeactivates = true, // Allow focus trap to deactivate on outside click and let React-Bootstrap Modal handle it initialFocus, + themed = false, + className, + backdropClassName, ...props }: OLModalProps) { return ( - +