From 065464f722995012b5216d7668f946b88ebc4b4b Mon Sep 17 00:00:00 2001
From: Tim Down <158919+timdown@users.noreply.github.com>
Date: Tue, 26 Nov 2024 15:28:03 +0000
Subject: [PATCH] Merge pull request #22147 from
overleaf/td-bs5-beta-badge-special-cases
Alpha/beta badge fixes and change warning badge colours in Bootstrap 5
GitOrigin-RevId: f60610572c62607db7e5cf349c5791c3519c74ed
---
.../settings/settings-font-family.tsx | 33 +++----
.../components/math-preview-tooltip.tsx | 6 +-
.../js/shared/components/beta-badge-icon.tsx | 53 +++++++++++
.../js/shared/components/beta-badge.tsx | 88 ++++++++-----------
.../js/shared/components/feedback-badge.tsx | 2 +-
.../js/shared/components/split-test-badge.tsx | 8 +-
.../abstracts/variable-overrides.scss | 2 +-
.../bootstrap-5/components/badge.scss | 5 ++
.../bootstrap-5/pages/editor/left-menu.scss | 2 +-
.../components/shared/beta-badge.spec.tsx | 2 +-
10 files changed, 119 insertions(+), 82 deletions(-)
create mode 100644 services/web/frontend/js/shared/components/beta-badge-icon.tsx
diff --git a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-font-family.tsx b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-font-family.tsx
index 21e2117edd..cfa62a1826 100644
--- a/services/web/frontend/js/features/editor-left-menu/components/settings/settings-font-family.tsx
+++ b/services/web/frontend/js/features/editor-left-menu/components/settings/settings-font-family.tsx
@@ -2,9 +2,7 @@ import { useTranslation } from 'react-i18next'
import { FontFamily } from '../../../source-editor/extensions/theme'
import { useProjectSettingsContext } from '../../context/project-settings-context'
import SettingsMenuSelect from './settings-menu-select'
-import OLTooltip from '@/features/ui/components/ol/ol-tooltip'
-import BootstrapVersionSwitcher from '@/features/ui/components/bootstrap-5/bootstrap-version-switcher'
-import MaterialIcon from '@/shared/components/material-icon'
+import BetaBadge from '@/shared/components/beta-badge'
export default function SettingsFontFamily() {
const { t } = useTranslation()
@@ -32,23 +30,18 @@ export default function SettingsFontFamily() {
label={t('font_family')}
name="fontFamily"
/>
-
-
- }
- bs5={}
- />
-
-
+
)
}
diff --git a/services/web/frontend/js/features/source-editor/components/math-preview-tooltip.tsx b/services/web/frontend/js/features/source-editor/components/math-preview-tooltip.tsx
index 73258eccb2..af5e762819 100644
--- a/services/web/frontend/js/features/source-editor/components/math-preview-tooltip.tsx
+++ b/services/web/frontend/js/features/source-editor/components/math-preview-tooltip.tsx
@@ -29,6 +29,7 @@ import {
Dropdown as BS3Dropdown,
MenuItem as BS3MenuItem,
} from 'react-bootstrap'
+import BetaBadgeIcon from '@/shared/components/beta-badge-icon'
const MathPreviewTooltipContainer: FC = () => {
const state = useCodeMirrorStateContext()
@@ -223,10 +224,7 @@ const CustomSplitTestBadge: FC = () => {
target="_blank"
rel="noopener noreferrer"
>
- }
- bs5={}
- />
+
)
}
diff --git a/services/web/frontend/js/shared/components/beta-badge-icon.tsx b/services/web/frontend/js/shared/components/beta-badge-icon.tsx
new file mode 100644
index 0000000000..7e60253d5b
--- /dev/null
+++ b/services/web/frontend/js/shared/components/beta-badge-icon.tsx
@@ -0,0 +1,53 @@
+import type { FC } from 'react'
+import classnames from 'classnames'
+import MaterialIcon from '@/shared/components/material-icon'
+import BootstrapVersionSwitcher from '@/features/ui/components/bootstrap-5/bootstrap-version-switcher'
+import OLBadge from '@/features/ui/components/ol/ol-badge'
+
+function BS5BetaBadgeIcon({
+ badgeClass,
+}: {
+ badgeClass: ReturnType
+}) {
+ if (badgeClass === 'info-badge') {
+ return
+ } else if (badgeClass === 'alpha-badge') {
+ return (
+
+ α
+
+ )
+ } else {
+ return (
+
+ β
+
+ )
+ }
+}
+
+const BetaBadgeIcon: FC<{
+ phase?: string
+}> = ({ phase = 'beta' }) => {
+ const badgeClass = chooseBadgeClass(phase)
+ return (
+ }
+ bs5={}
+ />
+ )
+}
+
+function chooseBadgeClass(phase?: string) {
+ switch (phase) {
+ case 'release':
+ return 'info-badge'
+ case 'alpha':
+ return 'alpha-badge'
+ case 'beta':
+ default:
+ return 'beta-badge'
+ }
+}
+
+export default BetaBadgeIcon
diff --git a/services/web/frontend/js/shared/components/beta-badge.tsx b/services/web/frontend/js/shared/components/beta-badge.tsx
index 332c674002..63a31be402 100644
--- a/services/web/frontend/js/shared/components/beta-badge.tsx
+++ b/services/web/frontend/js/shared/components/beta-badge.tsx
@@ -1,10 +1,7 @@
-import type { FC, ReactNode } from 'react'
-import classnames from 'classnames'
+import type { FC, MouseEventHandler, ReactNode } from 'react'
import OLTooltip from '@/features/ui/components/ol/ol-tooltip'
-import MaterialIcon from '@/shared/components/material-icon'
-import BootstrapVersionSwitcher from '@/features/ui/components/bootstrap-5/bootstrap-version-switcher'
import { bsVersion } from '@/features/utils/bootstrap-5'
-import OLBadge from '@/features/ui/components/ol/ol-badge'
+import BetaBadgeIcon from '@/shared/components/beta-badge-icon'
type TooltipProps = {
id: string
@@ -15,35 +12,42 @@ type TooltipProps = {
>['placement']
}
-function BS5BetaBadge({
- badgeClass,
-}: {
- badgeClass: ReturnType
-}) {
- if (badgeClass === 'info-badge') {
- return
- } else if (badgeClass === 'alpha-badge') {
- return (
-
- α
-
- )
- } else {
- return (
-
- β
-
- )
- }
+type LinkProps = {
+ href?: string
+ ref?: React.Ref
+ className?: string
+ onMouseDown?: MouseEventHandler
}
+const defaultHref = '/beta/participate'
+
const BetaBadge: FC<{
- tooltip: TooltipProps
- url?: string
+ tooltip?: TooltipProps
+ link?: LinkProps
+ description?: ReactNode
phase?: string
-}> = ({ tooltip, url = '/beta/participate', phase = 'beta' }) => {
- const badgeClass = chooseBadgeClass(phase)
- return (
+}> = ({
+ tooltip,
+ link = { href: defaultHref },
+ description,
+ phase = 'beta',
+}) => {
+ const { href, ...linkProps } = link
+ const linkedBadge = (
+
+
+ {description || tooltip?.text}
+
+
+
+ )
+
+ return tooltip ? (
-
-
- {tooltip.text}
-
- }
- bs5={}
- />
-
+ {linkedBadge}
+ ) : (
+ linkedBadge
)
}
-export const chooseBadgeClass = (phase?: string) => {
- switch (phase) {
- case 'release':
- return 'info-badge'
- case 'alpha':
- return 'alpha-badge'
- case 'beta':
- default:
- return 'beta-badge'
- }
-}
-
export default BetaBadge
diff --git a/services/web/frontend/js/shared/components/feedback-badge.tsx b/services/web/frontend/js/shared/components/feedback-badge.tsx
index a7d96604a0..ddbf0d5319 100644
--- a/services/web/frontend/js/shared/components/feedback-badge.tsx
+++ b/services/web/frontend/js/shared/components/feedback-badge.tsx
@@ -13,7 +13,7 @@ export const FeedbackBadge: FC<{
}
}, [id, text])
- return
+ return
}
const DefaultContent = () => (
diff --git a/services/web/frontend/js/shared/components/split-test-badge.tsx b/services/web/frontend/js/shared/components/split-test-badge.tsx
index b40ea32bc6..817088e4cd 100644
--- a/services/web/frontend/js/shared/components/split-test-badge.tsx
+++ b/services/web/frontend/js/shared/components/split-test-badge.tsx
@@ -45,9 +45,11 @@ export default function SplitTestBadge({
),
}}
phase={testInfo.phase}
- url={
- testInfo.badgeInfo?.url?.length ? testInfo.badgeInfo?.url : undefined
- }
+ link={{
+ href: testInfo.badgeInfo?.url?.length
+ ? testInfo.badgeInfo?.url
+ : undefined,
+ }}
/>
)
}
diff --git a/services/web/frontend/stylesheets/bootstrap-5/abstracts/variable-overrides.scss b/services/web/frontend/stylesheets/bootstrap-5/abstracts/variable-overrides.scss
index 120c8f27da..c2a56d053e 100644
--- a/services/web/frontend/stylesheets/bootstrap-5/abstracts/variable-overrides.scss
+++ b/services/web/frontend/stylesheets/bootstrap-5/abstracts/variable-overrides.scss
@@ -162,7 +162,7 @@ $primary: $bg-accent-01;
$secondary: $bg-light-primary;
$success: $bg-accent-01;
$info: $bg-info-01;
-$warning: $bg-warning-01;
+$warning: $bg-warning-03;
$danger: $bg-danger-01;
$light: $bg-light-tertiary;
$dark: $neutral-90;
diff --git a/services/web/frontend/stylesheets/bootstrap-5/components/badge.scss b/services/web/frontend/stylesheets/bootstrap-5/components/badge.scss
index 424ac978cd..2bd39295fd 100644
--- a/services/web/frontend/stylesheets/bootstrap-5/components/badge.scss
+++ b/services/web/frontend/stylesheets/bootstrap-5/components/badge.scss
@@ -10,6 +10,10 @@ $max-width: 160px;
&:not(.badge-tag) {
max-width: $max-width;
}
+
+ &.bg-warning {
+ --bs-badge-color: var(--content-warning);
+ }
}
.badge-prepend {
@@ -51,6 +55,7 @@ $max-width: 160px;
@include text-truncate;
padding: var(--bs-badge-padding-y) 0;
+ min-width: 1em;
}
.badge-tag {
diff --git a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/left-menu.scss b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/left-menu.scss
index 0711652c8e..09339d5862 100644
--- a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/left-menu.scss
+++ b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/left-menu.scss
@@ -139,7 +139,7 @@
.left-menu-setting-icon {
position: absolute;
right: 65%;
- top: 30%;
+ top: 25%;
}
}
diff --git a/services/web/test/frontend/components/shared/beta-badge.spec.tsx b/services/web/test/frontend/components/shared/beta-badge.spec.tsx
index 8db49ad8a0..e340136f55 100644
--- a/services/web/test/frontend/components/shared/beta-badge.spec.tsx
+++ b/services/web/test/frontend/components/shared/beta-badge.spec.tsx
@@ -5,7 +5,7 @@ describe('beta badge', function () {
it('renders the url and tooltip text', function () {
cy.mount(