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;