diff --git a/services/web/app/views/_mixins/faq_search-marketing.pug b/services/web/app/views/_mixins/faq_search-marketing.pug index 677e6f03a3..b45168ec70 100644 --- a/services/web/app/views/_mixins/faq_search-marketing.pug +++ b/services/web/app/views/_mixins/faq_search-marketing.pug @@ -21,7 +21,7 @@ mixin faq_search-marketing(headerText, headerClass) data-ol-clear-search hidden ) - button.sr-only( + button.visually-hidden( type='button' hidden data-ol-clear-search @@ -31,7 +31,7 @@ mixin faq_search-marketing(headerText, headerClass) .row(role='region' aria-label='search results') .col-md-12 div(data-ol-search-results-wrapper) - span.sr-only(aria-live='polite' data-ol-search-sr-help-message) + span.visually-hidden(aria-live='polite' data-ol-search-sr-help-message) div(data-ol-search-results) .row-spaced-small.search-result.card.card-thin( hidden diff --git a/services/web/app/views/layout/navbar-marketing-bootstrap-5.pug b/services/web/app/views/layout/navbar-marketing-bootstrap-5.pug index 9f9decbefb..75cc065e73 100644 --- a/services/web/app/views/layout/navbar-marketing-bootstrap-5.pug +++ b/services/web/app/views/layout/navbar-marketing-bootstrap-5.pug @@ -1,4 +1,5 @@ include ../_mixins/navbar +include ../_mixins/material_symbol nav.navbar.navbar-default.navbar-main.navbar-expand-lg( class={ @@ -44,7 +45,7 @@ nav.navbar.navbar-default.navbar-main.navbar-expand-lg( aria-expanded='false' aria-label='Toggle ' + translate('navigation') ) - i.fa.fa-bars(aria-hidden='true') + +material-symbol('menu') #navbar-main-collapse.navbar-collapse.collapse ul.nav.navbar-nav.navbar-right.ms-auto(role='menubar') diff --git a/services/web/app/views/layout/navbar-marketing.pug b/services/web/app/views/layout/navbar-marketing.pug index 4d374bd8ad..bb26ff8d40 100644 --- a/services/web/app/views/layout/navbar-marketing.pug +++ b/services/web/app/views/layout/navbar-marketing.pug @@ -16,7 +16,7 @@ nav.navbar.navbar-default.navbar-main( - var enableUpgradeButton = projectDashboardReact && usersBestSubscription && (usersBestSubscription.type === 'free' || usersBestSubscription.type === 'standalone-ai-add-on') if enableUpgradeButton //- prettier-ignore - a.btn.btn-primary.pull-right.me-2.visible-xs( + a.btn.btn-primary.float-end.me-2.visible-xs( href='/user/subscription/plans' event-tracking='upgrade-button-click' event-tracking-mb='true' diff --git a/services/web/app/views/layout/navbar-website-redesign.pug b/services/web/app/views/layout/navbar-website-redesign.pug index 8963037758..210cf3a120 100644 --- a/services/web/app/views/layout/navbar-website-redesign.pug +++ b/services/web/app/views/layout/navbar-website-redesign.pug @@ -11,7 +11,7 @@ nav.navbar.navbar-default.navbar-main.website-redesign-navbar i.fa.fa-bars(aria-hidden='true') - var enableUpgradeButton = projectDashboardReact && usersBestSubscription && (usersBestSubscription.type === 'free' || usersBestSubscription.type === 'standalone-ai-add-on') if enableUpgradeButton - a.btn.btn-primary.pull-right.me-2.visible-xs( + a.btn.btn-primary.float-end.me-2.visible-xs( href='/user/subscription/plans' event-tracking='upgrade-button-click' event-tracking-mb='true' diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index b0e70cafe3..ef2a9c6a2c 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -272,6 +272,7 @@ "collaborate_online_and_offline": "", "collaborator_chat": "", "collabs_per_proj": "", + "collabs_per_proj_multiple": "", "collabs_per_proj_single": "", "collapse": "", "column_width": "", diff --git a/services/web/frontend/js/features/contact-form/search.js b/services/web/frontend/js/features/contact-form/search.js index 1787a068be..eaa34bdeeb 100644 --- a/services/web/frontend/js/features/contact-form/search.js +++ b/services/web/frontend/js/features/contact-form/search.js @@ -1,6 +1,7 @@ import _ from 'lodash' import { formatWikiHit, searchWiki } from '../algolia-search/search-wiki' import { sendMB } from '../../infrastructure/event-tracking' +import { materialIcon } from '@/features/utils/material-icon' export function setupSearch(formEl) { const inputEl = formEl.querySelector('[name="subject"]') @@ -45,11 +46,8 @@ export function setupSearch(formEl) { contentEl.innerHTML = pageName linkEl.append(contentEl) - const iconEl = document.createElement('i') - iconEl.className = 'material-symbols dropdown-item-trailing-icon' - iconEl.textContent = 'open_in_new' - iconEl.setAttribute('aria-hidden', 'true') - iconEl.translate = false + const iconEl = materialIcon('open_in_new') + iconEl.classList.add('dropdown-item-trailing-icon') linkEl.append(iconEl) resultsEl.append(liEl) diff --git a/services/web/frontend/js/features/editor-left-menu/components/left-menu-button.tsx b/services/web/frontend/js/features/editor-left-menu/components/left-menu-button.tsx index 4d4efe6dbc..f1cd54750f 100644 --- a/services/web/frontend/js/features/editor-left-menu/components/left-menu-button.tsx +++ b/services/web/frontend/js/features/editor-left-menu/components/left-menu-button.tsx @@ -43,7 +43,7 @@ export default function LeftMenuButton({ {children} {disabledAccesibilityText ? ( - {disabledAccesibilityText} + {disabledAccesibilityText} ) : null} ) diff --git a/services/web/frontend/js/features/editor-navigation-toolbar/components/layout-dropdown-button.tsx b/services/web/frontend/js/features/editor-navigation-toolbar/components/layout-dropdown-button.tsx index ff0fbda5f1..addd6a013e 100644 --- a/services/web/frontend/js/features/editor-navigation-toolbar/components/layout-dropdown-button.tsx +++ b/services/web/frontend/js/features/editor-navigation-toolbar/components/layout-dropdown-button.tsx @@ -172,7 +172,7 @@ export const LayoutDropdownButtonUi = ({ return ( <> {processing && ( -
+
{t('layout_processing')}
)} diff --git a/services/web/frontend/js/features/faq-search/index.js b/services/web/frontend/js/features/faq-search/index.js index 8774ee235a..1ddf26beb4 100644 --- a/services/web/frontend/js/features/faq-search/index.js +++ b/services/web/frontend/js/features/faq-search/index.js @@ -102,6 +102,7 @@ function setupSearch(formEl) { // display initial results handleChange() + updateClearBtnVisibility() } document.querySelectorAll('[data-ol-faq-search]').forEach(setupSearch) diff --git a/services/web/frontend/js/features/form-helpers/hydrate-form.js b/services/web/frontend/js/features/form-helpers/hydrate-form.js index 89bd1a657d..3d546203fc 100644 --- a/services/web/frontend/js/features/form-helpers/hydrate-form.js +++ b/services/web/frontend/js/features/form-helpers/hydrate-form.js @@ -4,7 +4,7 @@ import { canSkipCaptcha, validateCaptchaV2 } from './captcha' import inputValidator from './input-validator' import { disableElement, enableElement } from '../utils/disableElement' import { isBootstrap5 } from '@/features/utils/bootstrap-5' -import createIcon from '@/features/form-helpers/create-icon' +import { materialIcon } from '@/features/utils/material-icon' // Form helper(s) to handle: // - Attaching to the relevant form elements @@ -165,7 +165,7 @@ function createNotificationFromMessageBS5(message) { if (materialIcon) { const iconEl = document.createElement('div') iconEl.className = 'notification-icon' - const iconSpan = createIcon(materialIcon) + const iconSpan = materialIcon(materialIcon) iconEl.append(iconSpan) messageEl.append(iconEl) } @@ -313,7 +313,7 @@ function showMessagesNewStyle(formEl, messageBag) { } // create the left icon - const icon = createIcon( + const icon = materialIcon( message.type === 'error' ? 'error' : 'check_circle' ) const messageIcon = document.createElement('div') diff --git a/services/web/frontend/js/features/form-helpers/input-validator.js b/services/web/frontend/js/features/form-helpers/input-validator.js index f01c4af3da..25038b6a1a 100644 --- a/services/web/frontend/js/features/form-helpers/input-validator.js +++ b/services/web/frontend/js/features/form-helpers/input-validator.js @@ -1,5 +1,5 @@ import { isBootstrap5 } from '@/features/utils/bootstrap-5' -import createIcon from '@/features/form-helpers/create-icon' +import { materialIcon } from '@/features/utils/material-icon' export default function inputValidator(inputEl) { const messageEl = document.createElement('div') @@ -15,7 +15,7 @@ export default function inputValidator(inputEl) { // In Bootstrap 5, add an icon if (isBootstrap5()) { - const iconEl = createIcon('error') + const iconEl = materialIcon('error') messageInnerEl.append(iconEl) } messageInnerEl.append(messageTextNode) diff --git a/services/web/frontend/js/features/group-management/components/group-members.tsx b/services/web/frontend/js/features/group-management/components/group-members.tsx index c49fa62af0..4e94645c94 100644 --- a/services/web/frontend/js/features/group-management/components/group-members.tsx +++ b/services/web/frontend/js/features/group-management/components/group-members.tsx @@ -113,7 +113,7 @@ export default function GroupMembers() { className="page-header mb-4" data-testid="page-header-members-details" > -
+
{selectedUsers.length === 0 && groupSizeDetails()} {removeMemberLoading ? ( diff --git a/services/web/frontend/js/features/group-management/components/managers-table.tsx b/services/web/frontend/js/features/group-management/components/managers-table.tsx index 3f701b698d..d91b4acc67 100644 --- a/services/web/frontend/js/features/group-management/components/managers-table.tsx +++ b/services/web/frontend/js/features/group-management/components/managers-table.tsx @@ -153,7 +153,7 @@ export function ManagersTable({ className="page-header mb-4" data-testid="page-header-members-details" > -
+
{removeMemberInflightCount > 0 ? ( {t('removing')}… diff --git a/services/web/frontend/js/features/history/components/change-list/owner-paywall-prompt.tsx b/services/web/frontend/js/features/history/components/change-list/owner-paywall-prompt.tsx index 8053792db9..f4c528670c 100644 --- a/services/web/frontend/js/features/history/components/change-list/owner-paywall-prompt.tsx +++ b/services/web/frontend/js/features/history/components/change-list/owner-paywall-prompt.tsx @@ -1,16 +1,8 @@ import { useTranslation } from 'react-i18next' -import Icon from '../../../../shared/components/icon' import { useCallback, useEffect, useState } from 'react' import * as eventTracking from '../../../../infrastructure/event-tracking' import StartFreeTrialButton from '../../../../shared/components/start-free-trial-button' - -function FeatureItem({ text }: { text: string }) { - return ( -
  • - {text} -
  • - ) -} +import UpgradeBenefits from '@/shared/components/upgrade-benefits' export function OwnerPaywallPrompt() { const { t } = useTranslation() @@ -34,16 +26,7 @@ export function OwnerPaywallPrompt() { {t('upgrade_to_get_feature', { feature: 'full project history' })}

    -
      - - - - - - -
    +

    - {t('history_view_a11y_description')} + + {t('history_view_a11y_description')} + setIsOpen(!isOpen)} - /> + > + + ) } diff --git a/services/web/frontend/js/features/pdf-preview/components/pdf-log-entry-raw-content.tsx b/services/web/frontend/js/features/pdf-preview/components/pdf-log-entry-raw-content.tsx index 2ace1667f3..7c3258f8c6 100644 --- a/services/web/frontend/js/features/pdf-preview/components/pdf-log-entry-raw-content.tsx +++ b/services/web/frontend/js/features/pdf-preview/components/pdf-log-entry-raw-content.tsx @@ -3,7 +3,6 @@ import { useResizeObserver } from '../../../shared/hooks/use-resize-observer' import { useTranslation } from 'react-i18next' import classNames from 'classnames' import OLButton from '@/features/ui/components/ol/ol-button' -import Icon from '../../../shared/components/icon' export default function PdfLogEntryRawContent({ rawContent, @@ -53,17 +52,10 @@ export default function PdfLogEntryRawContent({ setExpanded(value => !value)} > - {expanded ? ( - <> - {t('collapse')} - - ) : ( - <> - {t('expand')} - - )} + {expanded ? t('collapse') : t('expand')}

    )} diff --git a/services/web/frontend/js/features/pdf-preview/components/pdf-zoom-dropdown.tsx b/services/web/frontend/js/features/pdf-preview/components/pdf-zoom-dropdown.tsx index 75d0663c80..d0dc2cdbaa 100644 --- a/services/web/frontend/js/features/pdf-preview/components/pdf-zoom-dropdown.tsx +++ b/services/web/frontend/js/features/pdf-preview/components/pdf-zoom-dropdown.tsx @@ -172,7 +172,7 @@ function PdfZoomDropdown({ function Shortcut({ keys }: { keys: string[] }) { return ( - + {keys.map((key, idx) => ( - + {t('select_color', { name })} {!pickingCustomColor && color === selectedColor && ( diff --git a/services/web/frontend/js/features/project-list/components/notifications/accessibility-survey-banner.tsx b/services/web/frontend/js/features/project-list/components/notifications/accessibility-survey-banner.tsx index 0cbf782262..a77dd450f7 100644 --- a/services/web/frontend/js/features/project-list/components/notifications/accessibility-survey-banner.tsx +++ b/services/web/frontend/js/features/project-list/components/notifications/accessibility-survey-banner.tsx @@ -27,7 +27,7 @@ function AccessibilitySurveyBanner() { return ( {t('help_improve_screen_reader_fill_out_this_survey')}

    } diff --git a/services/web/frontend/js/features/settings/components/linking/status.tsx b/services/web/frontend/js/features/settings/components/linking/status.tsx index c2c95c68b2..670a272cdf 100644 --- a/services/web/frontend/js/features/settings/components/linking/status.tsx +++ b/services/web/frontend/js/features/settings/components/linking/status.tsx @@ -1,5 +1,6 @@ import { ReactNode } from 'react' -import Icon from '../../../../shared/components/icon' +import MaterialIcon from '@/shared/components/material-icon' +import OLSpinner from '@/features/ui/components/ol/ol-spinner' type Status = 'pending' | 'success' | 'error' @@ -28,29 +29,20 @@ function StatusIcon({ status }: StatusIconProps) { switch (status) { case 'success': return ( - ) case 'error': return ( - ) case 'pending': - return ( - - ) + return default: return null } diff --git a/services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx b/services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx index a224d704f8..157f23b116 100644 --- a/services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx +++ b/services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx @@ -216,7 +216,7 @@ export default function AddCollaborators({ readOnly }: { readOnly?: boolean }) { -
    +
    - + {t('paste_with_formatting')} @@ -155,7 +154,7 @@ export const PastedContentMenu: FC<{ }} > - + {t('paste_without_formatting')} diff --git a/services/web/frontend/js/features/source-editor/components/table-generator/toolbar/column-width-modal/modal.tsx b/services/web/frontend/js/features/source-editor/components/table-generator/toolbar/column-width-modal/modal.tsx index cc56059182..d23031f7bd 100644 --- a/services/web/frontend/js/features/source-editor/components/table-generator/toolbar/column-width-modal/modal.tsx +++ b/services/web/frontend/js/features/source-editor/components/table-generator/toolbar/column-width-modal/modal.tsx @@ -163,7 +163,10 @@ const ColumnWidthModalBody = () => {