From 7bc2c7f2faa906aacd30e5909cfb45a700b8e2fd Mon Sep 17 00:00:00 2001 From: yu-i-i Date: Fri, 25 Sep 2026 11:32:17 +0200 Subject: [PATCH] Enable themed modals --- services/web/config/settings.defaults.js | 1 + .../share-project-modal-content.tsx | 2 +- .../stylesheets/components/modal.scss | 56 ++++++++++++++++++- .../pages/editor/references-search.scss | 4 +- .../stylesheets/pages/editor/share.scss | 9 ++- .../stylesheets/pages/editor/tags-input.scss | 5 +- .../modals/projects-action-modal.tsx | 1 + .../modals/transfer-project-modal.tsx | 21 ++++--- .../create-account-modal.tsx | 1 + .../components/modals/update-user-modal.tsx | 1 - .../components/modals/users-action-modal.tsx | 8 ++- .../frontend/js/card/components/git-modal.tsx | 1 + .../import-from-github-modal-wrapper.tsx | 1 + .../js/components/modals/git-sync-modal.tsx | 2 +- .../components/reference-picker-modal.tsx | 2 +- .../frontend/styles/reference-picker.scss | 35 ++++++++++-- .../js/components/zotero-link-info-modal.tsx | 6 +- .../frontend/js/components/zotero-widget.tsx | 1 + 18 files changed, 122 insertions(+), 35 deletions(-) diff --git a/services/web/config/settings.defaults.js b/services/web/config/settings.defaults.js index efcec369dc..ed73c1d81c 100644 --- a/services/web/config/settings.defaults.js +++ b/services/web/config/settings.defaults.js @@ -1238,6 +1238,7 @@ module.exports = { }, splitTestOverrides: { + 'themed-modals': 'enabled', ...(process.env.ENABLE_EDITOR_TABS?.toLowerCase() === 'true' ? { 'editor-tabs': 'enabled', } : {}), diff --git a/services/web/frontend/js/features/share-project-modal/components/share-project-modal-content.tsx b/services/web/frontend/js/features/share-project-modal/components/share-project-modal-content.tsx index 3f9003b10c..18882d0840 100644 --- a/services/web/frontend/js/features/share-project-modal/components/share-project-modal-content.tsx +++ b/services/web/frontend/js/features/share-project-modal/components/share-project-modal-content.tsx @@ -57,7 +57,7 @@ export default function ShareProjectModalContent({ projectName, }: ShareProjectModalContentProps) { return ( - + diff --git a/services/web/modules/admin-tools/frontend/js/project-list/components/modals/transfer-project-modal.tsx b/services/web/modules/admin-tools/frontend/js/project-list/components/modals/transfer-project-modal.tsx index 384ac88442..761333024f 100644 --- a/services/web/modules/admin-tools/frontend/js/project-list/components/modals/transfer-project-modal.tsx +++ b/services/web/modules/admin-tools/frontend/js/project-list/components/modals/transfer-project-modal.tsx @@ -93,8 +93,7 @@ function TransferProjectModal({ >

{t('ownership_of_projects_will_be_transferred')}

- - + - - - + + + ) diff --git a/services/web/modules/admin-tools/frontend/js/user-list/components/create-account-button/create-account-modal.tsx b/services/web/modules/admin-tools/frontend/js/user-list/components/create-account-button/create-account-modal.tsx index 99923114e0..e1b2ca47a0 100644 --- a/services/web/modules/admin-tools/frontend/js/user-list/components/create-account-button/create-account-modal.tsx +++ b/services/web/modules/admin-tools/frontend/js/user-list/components/create-account-button/create-account-modal.tsx @@ -13,6 +13,7 @@ function CreateAccountModal({ onHide }: CreateAccountModalProps) { onHide={onHide} id="blank-user-modal" backdrop="static" + themed="true" >
diff --git a/services/web/modules/admin-tools/frontend/js/user-list/components/modals/update-user-modal.tsx b/services/web/modules/admin-tools/frontend/js/user-list/components/modals/update-user-modal.tsx index 52f480adc8..d0313c3ccd 100644 --- a/services/web/modules/admin-tools/frontend/js/user-list/components/modals/update-user-modal.tsx +++ b/services/web/modules/admin-tools/frontend/js/user-list/components/modals/update-user-modal.tsx @@ -4,7 +4,6 @@ import getMeta from '@/utils/meta' import UsersActionModal from './users-action-modal' import UsersList from './users-list' import Notification from '@/shared/components/notification' -import OLForm from '@/shared/components/ol/ol-form' import OLFormLabel from '@/shared/components/ol/ol-form-label' import OLFormControl from '@/shared/components/ol/ol-form-control' import OLFormGroup from '@/shared/components/ol/ol-form-group' diff --git a/services/web/modules/admin-tools/frontend/js/user-list/components/modals/users-action-modal.tsx b/services/web/modules/admin-tools/frontend/js/user-list/components/modals/users-action-modal.tsx index 0d2a258c25..641d11d668 100644 --- a/services/web/modules/admin-tools/frontend/js/user-list/components/modals/users-action-modal.tsx +++ b/services/web/modules/admin-tools/frontend/js/user-list/components/modals/users-action-modal.tsx @@ -4,6 +4,7 @@ import * as eventTracking from '@/infrastructure/event-tracking' import { isSmallDevice } from '@/infrastructure/event-tracking' import { getUserFacingMessage } from '@/infrastructure/fetch-json' import useIsMounted from '@/shared/hooks/use-is-mounted' +import OLForm from '@/shared/components/ol/ol-form' import OLButton from '@/shared/components/ol/ol-button' import { OLModal, @@ -97,12 +98,17 @@ function UsersActionModal({ onHide={handleCloseModal} id="action-user-modal" backdrop="static" + themed="true" > {title} + {children} + {!isProcessing && errors.length > 0 && errors.map((error, i) => ( @@ -122,8 +128,8 @@ function UsersActionModal({ )} handleActionForUsers(users, options)} + variant={variant} disabled={isProcessing || actionIsDisabled} > {actionLabel} diff --git a/services/web/modules/git-bridge/frontend/js/card/components/git-modal.tsx b/services/web/modules/git-bridge/frontend/js/card/components/git-modal.tsx index 98840368ac..e2bc941666 100644 --- a/services/web/modules/git-bridge/frontend/js/card/components/git-modal.tsx +++ b/services/web/modules/git-bridge/frontend/js/card/components/git-modal.tsx @@ -32,6 +32,7 @@ export default function GitModal({ id="git-sync-modal" backdrop="static" size="lg" + themed="true" > diff --git a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx index f5b618b47d..d17da9910c 100644 --- a/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx +++ b/services/web/modules/github-sync/frontend/js/components/import-from-github-modal-wrapper.tsx @@ -211,6 +211,7 @@ export default function ImportFromGitHubModal({ onHide }: { onHide: () => void } size="lg" onHide={onHide} backdrop="static" + themed="true" >
diff --git a/services/web/modules/github-sync/frontend/js/components/modals/git-sync-modal.tsx b/services/web/modules/github-sync/frontend/js/components/modals/git-sync-modal.tsx index 6892cc6230..367271040a 100644 --- a/services/web/modules/github-sync/frontend/js/components/modals/git-sync-modal.tsx +++ b/services/web/modules/github-sync/frontend/js/components/modals/git-sync-modal.tsx @@ -128,7 +128,7 @@ const { }, [show, modalStatus, projectId, runAsyncConn, runAsync]) return ( - + {t('sync_with_github')} diff --git a/services/web/modules/reference-picker/frontend/components/reference-picker-modal.tsx b/services/web/modules/reference-picker/frontend/components/reference-picker-modal.tsx index 729e1cfd6c..1940b3429d 100644 --- a/services/web/modules/reference-picker/frontend/components/reference-picker-modal.tsx +++ b/services/web/modules/reference-picker/frontend/components/reference-picker-modal.tsx @@ -299,7 +299,7 @@ const scrollToReference = useCallback((key: string) => { }, [focusArea, focusedIndex]) return ( - + {t('references_picker_title')} diff --git a/services/web/modules/reference-picker/frontend/styles/reference-picker.scss b/services/web/modules/reference-picker/frontend/styles/reference-picker.scss index 3589d5bc10..72e2fbd581 100644 --- a/services/web/modules/reference-picker/frontend/styles/reference-picker.scss +++ b/services/web/modules/reference-picker/frontend/styles/reference-picker.scss @@ -1,3 +1,21 @@ +:root { + --badge-bg-color-existing: var(--ds-color-green-900); + --badge-bg-color-nonexistent: var(--ds-color-red-950); + --badge-bg-color-existing-hover: var(--ds-color-green-800); + --badge-close-color: var(--content-primary-dark); + --badge-close-bg-color-hover: var(--bg-dark-tertiary); + --search-result-at-focus-bg-color: var(--ds-color-teal-950); +} + +@include theme('light') { + --badge-bg-color-existing: var(--ds-color-green-50); + --badge-bg-color-nonexistent: var(--ds-color-red-50); + --badge-bg-color-existing-hover: var(--ds-color-green-100); + --badge-close-color: var(--content-primary); + --badge-close-bg-color-hover: var(--bg-light-tertiary); + --search-result-at-focus-bg-color: var(--ds-color-teal-50); +} + .references-search-modal { .selected-key-tags { position: relative; @@ -11,26 +29,31 @@ font-size: var(--font-size-02); margin-top: -10px; margin-bottom: 8px; - box-shadow: 0 1px 0 var(--ds-color-neutral-100); + box-shadow: 0 1px 0 var(--border-divider-themed); padding-bottom: 6px; } .selected-key-tags .existing-key-tag .badge-tag { - background-color: var(--ds-color-green-50) !important; + background-color: var(--badge-bg-color-existing) !important; } .selected-key-tags .nonexistent-key-tag .badge-tag { - background-color: var(--ds-color-red-50) !important; + background-color: var(--badge-bg-color-nonexistent) !important; } .existing-key-tag .badge-tag-content-btn:hover { - background-color: var(--ds-color-green-100); + background-color: var(--badge-bg-color-existing-hover); } .nonexistent-key-tag .badge-tag-content-btn:hover { background-color: transparent; } + .badge-close { + color: var(--badge-close-color); + } + .badge-close:hover, .badge-close:focus { - background-color: var(--ds-color-neutral-100); + background-color: var(--badge-close-bg-color-hover); } + .search-results { .search-results-scroll-container { max-height: calc(100vh - 330px); @@ -38,7 +61,7 @@ } .search-result-hit { &:focus { - background: var(--ds-color-yellow-50); + background: var(--search-result-at-focus-bg-color); outline: none; } } diff --git a/services/web/modules/zotero/frontend/js/components/zotero-link-info-modal.tsx b/services/web/modules/zotero/frontend/js/components/zotero-link-info-modal.tsx index d18c1a82a5..0e8c6c7c0a 100644 --- a/services/web/modules/zotero/frontend/js/components/zotero-link-info-modal.tsx +++ b/services/web/modules/zotero/frontend/js/components/zotero-link-info-modal.tsx @@ -43,8 +43,7 @@ const ZoteroLinkInfoModal = ({ show, isError, handleHide }: ZoteroLinkInfoModalP }, [show]) return ( - <> - + {t('zotero_integration')} @@ -101,8 +100,7 @@ const ZoteroLinkInfoModal = ({ show, isError, handleHide }: ZoteroLinkInfoModalP {t('close')} - - + ) } diff --git a/services/web/modules/zotero/frontend/js/components/zotero-widget.tsx b/services/web/modules/zotero/frontend/js/components/zotero-widget.tsx index b52cfa0112..537e7d77dc 100644 --- a/services/web/modules/zotero/frontend/js/components/zotero-widget.tsx +++ b/services/web/modules/zotero/frontend/js/components/zotero-widget.tsx @@ -143,6 +143,7 @@ export const ZoteroWidget = function ZoteroWidget() { show={showUnlinkModal} onHide={() => setShowUnlinkModal(false)} backdrop="static" + themed="true" >