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(