- Convert: backend now returns parentFolderId+isNew; frontend calls
dispatchCreateDoc directly so the new file appears without a page refresh
- Set as main: infer compiler from file extension and POST both rootDocId
and compiler together; updateProject propagates the change to the
editor settings dropdown and project list immediately
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
canRename required selectedEntityIds.size === 1, so right-clicking an
unselected file hid the convert items even though contextMenuEntityId
was correctly set. Replace canRename with !fileTreeReadOnly for the
convert-specific gate, which is the actual write-access check needed.
Also add showExportDocumentSuccess so the user sees the warning toast
on successful conversion instead of silent nothing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
postJSON without options sends Content-Type: application/json with no
body; body-parser's BodyParserWrapper intercepts the resulting
SyntaxError and returns 400 before the route handler runs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add "Convert to Typst (.typ)" in the file tree context menu for .tex
docs, and "Convert to LaTeX (.tex)" for .typ docs. Clicking runs pandoc
on the file content and creates the converted file in the same folder.
- New backend endpoint POST /project/:id/doc/:id/convert/:type that reads
the doc from document-updater, runs pandoc directly, and creates the
result via ProjectEntityUpdateHandler (file tree updates via socket).
- Rewrite the export success toast for typst and latex conversions: no
more link to /contact, replaced with a plain warning that errors are
expected (pandoc does not support all constructs).
- Add i18n keys: convert_to_typst, convert_to_latex,
typst_export_feedback_message, latex_export_feedback_message (EN + FR)
and all four to extracted-translations.json.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- clsi-nginx: allow hyphens in project-id regex — conversion IDs are UUIDs
which nginx was rejecting, causing 500 on file download after conversion
- CLSI ConversionController/Manager: add 'latex' export type (typst→latex via pandoc)
- Web: add 'latex' to SUPPORTED_CONVERSION_TYPES
- Frontend: add Export as LaTeX button (visible only for typst projects)
- Fix visibility logic: export-as-latex shows for typst, export-as-typst shows for latex
- Add export_as_latex translation key (en + fr)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a new "Export as Typst" option in the project title dropdown and
File menu, mirroring the existing docx/markdown/html export pipeline.
Changes:
- CLSI ConversionManager: add 'typst' to LATEX_EXPORT_CONFIGS
(compressOutput: false, pandoc --from latex --to typst)
- Web controller: register 'typst' → 'typ' in SUPPORTED_CONVERSION_TYPES
- Frontend: extend conversionType union and add ExportProjectWithConversionButton
- File menu: add 'export-as-typst' to the download group command structure
- Locales: add export_as_typst key to all 18 locale files
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>
* [clsi] add request flag for isCompileFromHistory
* [clsi] derive cacheKey for history snapshot from compile dir
* [clsi] migrate convert project to document to compile from history
* [clsi] address review feedback
* [web] determine root doc at the time of converting the project
* [web] wait for flush before starting document conversion
* [saas-e2e] add tests for root doc override when converting project
GitOrigin-RevId: 71c578030949b89f3a74e7f7ab882dfa9c98c17a
* merging ide-redesign/components/file-tree into features/file-tree
* moving ide-redesign/contexts/settings-modal-context to features/settings/contexts
* use-collapsible-file-tree.tsx → features/file-tree/hooks
* use-focus-on-setting.tsx → features/settings/hooks
* use-project-notification-preferences.ts → features/settings/hooks
* use-rail-overflow.tsx→ features/ide-react/hooks
* deleting use-switch-enable-new-editor-state.ts
* use-toolbar-menu-editor-commands.tsx → features/source-editor/hooks
* npm run extract-translations
* modifying the test to target correct buttons and removing a test for old component
* adding a test back and modifying it
* changing the test
GitOrigin-RevId: baa1e9a992c88b84313eea82161354d4958cf1ef
* 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
* Simplify paths in `buildImgPath`
* Move favicons from `public` to `public/img/favicons`
* Create links to favicons in `public` (`ln -s img/favicons/* .`)
* Import favicons dynamically in use-status-favicon.ts
* Update pug files with cdn favicon paths
* Update test
* Revert change in layout-no-js.pug
* Fetch web.sitemanifest from CDN
* Revert favicon move
* Fix favicon paths (use `buildBaseAssetPath`)
* Fixup web.sitemanifest path
* Format
* Update `buildImgPath` mock to be more realistic
* Revert web.sitemanifest link to local origin
* Revert "Revert web.sitemanifest link to local origin"
This reverts commit aa13431b743b55c2f536c33e736f657e1c0db598.
GitOrigin-RevId: fe278fec0f1eaae16de9fabc2b13da3e7a316463
* Refactor project context to not use scope store
* Fix Cypress tests for project context changes
* Fix frontend React Testing Library tests for project context changes
* Remove redundant code
* Fix some project types in tests
* Remove unused import and fix a type
* Throw an error if updating the project in the project context before joining the project
* Fix some review panel tests
* Remove unused imports
GitOrigin-RevId: 2f0c928b651f387aa980c29aef7d1ba0649790a7
* Move `hasLintingError` from scope to react state
* Move `permissionsLevel` to IdeReactContext states
* Get `permissionsLevel` from `useIdeReactContext()`
* Set `permissionsLevel` in mocked `IdeReactProvider`
* Replace `permissions` scope by React state
* Fixup `permission` changes
* Remove redundant type
GitOrigin-RevId: 6203c61f9ac429789624196bf67e508310f4577f
* 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
* 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