Adds a @media (max-width: 767px) block scoped to .ide-redesign-main
that bumps the CSS font-size tokens one step each and increases the
toolbar height, making buttons, labels, and panel headers readable
on a phone without touching the CodeMirror editor font size (which
is controlled by user settings independently).
Also reverts the unintended rail auto-collapse from the previous
commit — collapsing the sidebar was not the requested change.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Editor:
- Auto-collapse the file-tree rail on mobile so the editor+PDF panels
occupy the full screen width instead of sharing it with a 15% sidebar.
The user can still open the rail from the toolbar; the collapse only
fires on first load or when switching to a mobile viewport.
Project page (Lumiere):
- Move the XS/M/L zoom buttons from the mobile filter-pill toolbar into
a row with the New Project button, so neither is stranded alone.
- The search bar gets its own full-width row above the actions row.
- Desktop layout is unchanged (search + new-project stay side-by-side;
zoom stays in the title row). `display:contents` makes the wrapper
div transparent to the desktop flex container.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tor Browser and Firefox with privacy.resistFingerprinting report a
desktop-sized viewport (~980px) even on a real Android phone. This made
window.matchMedia('(max-width: 767px)') return false, so isMobile was
always false on Tor, leaving the editor in side-by-side (horizontal)
layout instead of the expected vertical stack.
Fix: add a secondary check using `(pointer: coarse) and (max-width:
1024px)`. Touch hardware is not spoofed by fingerprinting resistance,
so this reliably catches phones and tablets regardless of the reported
viewport width. Applied to both getInitialLayout() and the live
isMobile state in main-layout.tsx.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- CLSI thumbnails: bump to 794px/q90 (matches preview quality) for
crisp display on 2x/3x phone screens
- Lumière filter chips → underline tab bar: single scrollable row with
teal active indicator, no more wrapping alignment issues; zoom buttons
separated by a vertical divider on the right
- Fix editor vertical split default on mobile: disable react-resizable-panels
autoSaveId on mobile to prevent a stale collapsed PDF pane from firing
onCollapse → changeLayout('flat') and overriding the verticalSplit
default set by getInitialLayout()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Mobile vertical layout: add key= based on direction so react-resizable-panels
remounts cleanly when switching between horizontal and vertical; also use
isVertical (not just pdfLayout) for the autoSaveId to avoid restoring a
mismatched layout from localStorage
- Language picker: replace stopPropagation pattern with a containment check on
the document click handler — more robust on React pages where Bootstrap JS or
React's event delegation can interfere with stopPropagation
- Presentation download dropdown: use popperConfig strategy:'fixed' so the menu
escapes overflow:hidden table cells; remove forced drop='up' and let Popper
choose; defer URL.revokeObjectURL by 10 s to give the browser time to start
the download before the blob URL is released
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
On mobile (< 768 px) the existing side-by-side layout automatically switches
to a vertical stack (editor on top, PDF/presentation on bottom) without
changing the stored layout preference.
A new "Top / bottom split" option is added to the layout menu so desktop
users can choose the same vertical split explicitly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* [web] extract PythonExecutionContext and PythonRunner to manage pyodide execution per file
* [web] define worker URL in python execution context in order to avoid breaking cjs-based tests
* [web] use null check for doc contents to allow running empty python files
* [web] flush buffered editor ops before refreshing snapshot for python execution
* [web] catch getExecutionContext errors in python runner to prevent unhandled rejections
* [web] add PythonRunner unit tests and extract shared WorkerMock
* refactor: rename snapshot to state in PythonRunner
* fix: remove unnecessary path normalization in PythonExecutionProvider
* fix cypress tests
GitOrigin-RevId: 9c55586d982fe8df5b90374227005c6b83e94d1f
* feat: integrate main layout, toolbar, and rail from redesign into main ide-react folder
* feat: remove additional files no longer used after ide redesign
GitOrigin-RevId: 8fd77f63cb9c67be91995a9dde13b0fe2376d80f
* Import changes from Hackathon
https://github.com/overleaf/internal/pull/24501
* Update compile status: allow errors
* Update favicons. Use the ones from Figma
* Optimize and reuse path from favicon.svg
* Clear status favicon after 5s on active tab
* Rename hook from useCompileNotification to useStatusFavicon
* Add tests
* Revert changes to favicon.svg
* Query favicon on document.head
GitOrigin-RevId: 3972b1981abaf6c80273e0ed5b1bc05eb51bd689
* Add overleaf assist paywall modal component in storybook
* update img alt
* remove data-action
* rename assistant -> assist
* use css var for blue color
* Open Overleaf assist paywall if in "overleaf-assist-bundle" split-test
* dont use optional planCode
* Open overleaf assist paywal via event listener
* rename to mainEditorLayoutModals
* call setAssistantUpgraded when modal is shown
* fix merge mistake
* fix lint error
* fix merge differences
GitOrigin-RevId: 0b3162a5c241d4dbe2773ae773c3e35f02c5c492
* add option to remove chat from backend
* make chat default to enabled
* Check chat is enabled in chat context
---------
Co-authored-by: mserranom <mserranom@gmail.com>
GitOrigin-RevId: 7dda09df4bb74007eb4b1272d4918155b5cddaf6
* Notify about unsaved changes
* Move system message components and types to shared folder
* Add system messages component
GitOrigin-RevId: ab81a24888847bd9a8a390fd1af6b58f471f7a4b
* Defer script loading
* Refactor loading
* Wait for project:joined
* Only mount IdePage once everything has connected
* Add useConnectionState hook and comments
* Remove placeholder components
* Move props into EditorAndSidebar
* Move props into MainLayout
* Tidy editor and sidebar components
* Lazy-load the symbol palette pane and separate the loading pane
GitOrigin-RevId: 4b721a06d6aba0ae0ec91768e6a6e29cf15e2083