From bf789a2635df83c66293705e02efea336340e05b Mon Sep 17 00:00:00 2001
From: David <33458145+davidmcpowell@users.noreply.github.com>
Date: Mon, 13 Jan 2025 15:29:33 +0000
Subject: [PATCH] Merge pull request #22799 from overleaf/dp-new-pdf-toolbar
Add toolbar styles and update pdf toolbar to match new editor designs
GitOrigin-RevId: 4d5d9c6fa3353c10dd135aa35440c8512a5d3226
---
.../components/pdf-compile-button.tsx | 33 +++++++++++++++++++
.../components/pdf-preview-hybrid-toolbar.jsx | 24 ++++++++++++++
.../pdf-preview/components/pdf-js-viewer.tsx | 1 +
.../components/pdf-preview-pane.tsx | 10 +++++-
.../pdf-viewer-controls-menu-button.tsx | 3 ++
.../pdf-viewer-controls-toolbar.tsx | 7 ++++
.../bootstrap-5/pages/editor/pdf.scss | 13 ++++++++
.../bootstrap-5/pages/editor/toolbar.scss | 12 +++++++
8 files changed, 102 insertions(+), 1 deletion(-)
create mode 100644 services/web/frontend/js/features/ide-redesign/components/pdf-compile-button.tsx
create mode 100644 services/web/frontend/js/features/ide-redesign/components/pdf-preview-hybrid-toolbar.jsx
diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-compile-button.tsx b/services/web/frontend/js/features/ide-redesign/components/pdf-compile-button.tsx
new file mode 100644
index 0000000000..e0fa76828b
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/pdf-compile-button.tsx
@@ -0,0 +1,33 @@
+import { useTranslation } from 'react-i18next'
+import { memo } from 'react'
+import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context'
+import OLButton from '@/features/ui/components/ol/ol-button'
+import OLTooltip from '@/features/ui/components/ol/ol-tooltip'
+import MaterialIcon from '@/shared/components/material-icon'
+
+function PdfCompileButton() {
+ const { compiling, startCompile } = useCompileContext()
+ const { t } = useTranslation()
+
+ return (
+
+ {/* TODO: add some indicator that changes have been made */}
+
+
+
+
+ )
+}
+
+export default memo(PdfCompileButton)
diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-preview-hybrid-toolbar.jsx b/services/web/frontend/js/features/ide-redesign/components/pdf-preview-hybrid-toolbar.jsx
new file mode 100644
index 0000000000..771ebad313
--- /dev/null
+++ b/services/web/frontend/js/features/ide-redesign/components/pdf-preview-hybrid-toolbar.jsx
@@ -0,0 +1,24 @@
+import { memo } from 'react'
+import OlButtonToolbar from '@/features/ui/components/ol/ol-button-toolbar'
+import PdfCompileButton from './pdf-compile-button'
+import PdfHybridLogsButton from '@/features/pdf-preview/components/pdf-hybrid-logs-button'
+import PdfHybridDownloadButton from '@/features/pdf-preview/components/pdf-hybrid-download-button'
+
+function PdfPreviewHybridToolbar() {
+ // TODO: add detached pdf logic
+ return (
+
+
+
+
+ {/* TODO: should we have switch to editor/code check/synctex buttons? */}
+
+
+ )
+}
+
+export default memo(PdfPreviewHybridToolbar)
diff --git a/services/web/frontend/js/features/pdf-preview/components/pdf-js-viewer.tsx b/services/web/frontend/js/features/pdf-preview/components/pdf-js-viewer.tsx
index 6600e096d5..04332d2485 100644
--- a/services/web/frontend/js/features/pdf-preview/components/pdf-js-viewer.tsx
+++ b/services/web/frontend/js/features/pdf-preview/components/pdf-js-viewer.tsx
@@ -501,6 +501,7 @@ function PdfJsViewer({ url, pdfFile }: PdfJsViewerProps) {
setPage={handlePageChange}
page={page}
totalPages={totalPages}
+ pdfContainer={pdfJsWrapper?.container}
/>
)}
diff --git a/services/web/frontend/js/features/pdf-preview/components/pdf-preview-pane.tsx b/services/web/frontend/js/features/pdf-preview/components/pdf-preview-pane.tsx
index bbbcaafe14..2488b23ef8 100644
--- a/services/web/frontend/js/features/pdf-preview/components/pdf-preview-pane.tsx
+++ b/services/web/frontend/js/features/pdf-preview/components/pdf-preview-pane.tsx
@@ -9,6 +9,8 @@ import { PdfPreviewMessages } from './pdf-preview-messages'
import CompileTimeWarningUpgradePrompt from './compile-time-warning-upgrade-prompt'
import { PdfPreviewProvider } from './pdf-preview-provider'
import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
+import { useFeatureFlag } from '@/shared/context/split-test-context'
+import PdfPreviewHybridToolbarNew from '@/features/ide-redesign/components/pdf-preview-hybrid-toolbar'
const pdfPreviewPromotions = importOverleafModules('pdfPreviewPromotions') as {
import: { default: ElementType }
@@ -20,10 +22,16 @@ function PdfPreviewPane() {
const classes = classNames('pdf', 'full-size', {
'pdf-empty': !pdfUrl,
})
+ const newEditor = useFeatureFlag('editor-redesign')
+
return (
-
+ {newEditor ? (
+
+ ) : (
+
+ )}
{pdfPreviewPromotions.map(
({ import: { default: Component }, path }) => (
diff --git a/services/web/frontend/js/features/pdf-preview/components/pdf-viewer-controls-menu-button.tsx b/services/web/frontend/js/features/pdf-preview/components/pdf-viewer-controls-menu-button.tsx
index c339a9e2c5..681c38c43f 100644
--- a/services/web/frontend/js/features/pdf-preview/components/pdf-viewer-controls-menu-button.tsx
+++ b/services/web/frontend/js/features/pdf-preview/components/pdf-viewer-controls-menu-button.tsx
@@ -15,6 +15,7 @@ type PdfViewerControlsMenuButtonProps = {
setPage: (page: number) => void
page: number
totalPages: number
+ pdfContainer?: HTMLDivElement
}
export default function PdfViewerControlsMenuButton({
@@ -22,6 +23,7 @@ export default function PdfViewerControlsMenuButton({
setPage,
page,
totalPages,
+ pdfContainer,
}: PdfViewerControlsMenuButtonProps) {
const { t } = useTranslation()
@@ -54,6 +56,7 @@ export default function PdfViewerControlsMenuButton({
show={popoverOpen}
target={targetRef.current}
placement="bottom"
+ container={pdfContainer}
containerPadding={0}
transition
rootClose
diff --git a/services/web/frontend/js/features/pdf-preview/components/pdf-viewer-controls-toolbar.tsx b/services/web/frontend/js/features/pdf-preview/components/pdf-viewer-controls-toolbar.tsx
index 4c87f9efe7..0b44ef5b5d 100644
--- a/services/web/frontend/js/features/pdf-preview/components/pdf-viewer-controls-toolbar.tsx
+++ b/services/web/frontend/js/features/pdf-preview/components/pdf-viewer-controls-toolbar.tsx
@@ -14,6 +14,7 @@ type PdfViewerControlsToolbarProps = {
setPage: (page: number) => void
page: number
totalPages: number
+ pdfContainer?: HTMLDivElement
}
function PdfViewerControlsToolbar({
@@ -23,6 +24,7 @@ function PdfViewerControlsToolbar({
setPage,
page,
totalPages,
+ pdfContainer,
}: PdfViewerControlsToolbarProps) {
const { showLogs } = useCompileContext()
@@ -61,6 +63,7 @@ function PdfViewerControlsToolbar({
setPage={setPage}
page={page}
totalPages={totalPages}
+ pdfContainer={pdfContainer}
/>
,
@@ -75,6 +78,8 @@ type InnerControlsProps = {
setPage: (page: number) => void
page: number
totalPages: number
+ // eslint-disable-next-line react/no-unused-prop-types
+ pdfContainer?: HTMLDivElement
}
function PdfViewerControlsToolbarFull({
@@ -111,6 +116,7 @@ function PdfViewerControlsToolbarSmall({
setPage,
page,
totalPages,
+ pdfContainer,
}: InnerControlsProps) {
return (
@@ -124,6 +130,7 @@ function PdfViewerControlsToolbarSmall({
setPage={setPage}
page={page}
totalPages={totalPages}
+ pdfContainer={pdfContainer}
/>
)
diff --git a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/pdf.scss b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/pdf.scss
index 68b40e2e31..632f9a1796 100644
--- a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/pdf.scss
+++ b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/pdf.scss
@@ -154,6 +154,19 @@
top: var(--toolbar-small-height);
}
+.ide-redesign-main {
+ .pdf-viewer {
+ .pdfjs-viewer {
+ .page {
+ box-shadow:
+ 0 5px 5px 0 #23282f0d,
+ 0 3px 14px 0 #23282f08,
+ 0 8px 10px 0 #23282f14;
+ }
+ }
+ }
+}
+
.pdf-viewer {
iframe {
width: 100%;
diff --git a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/toolbar.scss b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/toolbar.scss
index e38a908c79..464ad52df0 100644
--- a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/toolbar.scss
+++ b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/toolbar.scss
@@ -45,6 +45,18 @@
--editor-toolbar-bg: var(--white);
}
+.ide-redesign-main {
+ --toolbar-alt-bg-color: var(--bg-light-secondary);
+ --toolbar-btn-color: var(--content-primary);
+ --toolbar-btn-hover-bg-color: var(--neutral-80);
+ --toolbar-btn-hover-color: var(--white);
+ --editor-toolbar-bg: var(--white);
+
+ .toolbar {
+ border-bottom: none;
+ }
+}
+
.toolbar {
display: flex;
align-items: center;