Commit Graph
1805 Commits
Author SHA1 Message Date
ilkin-overleaf 7cfdd0f75a Merge pull request #36230 from overleaf/ii-workspaces-projects-page
Empty states for the project list views

GitOrigin-RevId: 3ce8e327bb675f3c63763e7599396020a4252025
2026-09-17 12:00:54 +00:00
Jimmy Domagala-TangandTim Gibbon baa9cf78d9 Adding 2025 and 2026 incremental compiles options (#35850)
* feat: adding 2025 and 2026 incremental compiles options

* feat: remove dmtcp from compiler list and autoselect checkpointing version with labs inclusion

* feat: updating seccomp profile for checkpointing

* feat: disable non-premium dmtcp compiles, and align checkpoint version detection between clsi and web

* feat: adding in reminder of checkpoint experiment, and using session based split test retrieval

* Increase Packer build.sh timeout from 1h15m to 1h30m as build takes approx 1h

* fix: moving checkpointing check from tag name based to hasCheckpointing flag set as part of allowed_images, and removing uneeded seccomp rule

* feat: move variant/ image selection to CLSI, and have web control only what options to set for a compile. removing uneeded extra variants from webs list of allowed images

* feat: adding compile timer as a query string as well

---------

Co-authored-by: Tim Gibbon <tim.gibbon@overleaf.com>
GitOrigin-RevId: cdbdf76a62dcd5a585925f18d64b6cb9cd6ed373
2026-09-17 12:00:46 +00:00
John Lees-Miller 35271cb33c Merge pull request #36639 from overleaf/jlm-github-sync-distinguish-404s
Distinguish GitHub's repo-lookup 404 from its commit-comparison 404

GitOrigin-RevId: 67cd1d3af1fde553fc200371f5d2ec020c7245fa
2026-09-17 12:00:40 +00:00
Antoine ClausseandClaude Opus 5 e2e05b69f1 [web] Add pro-value-framing split test copy (#36628)
* feat(web): add pro-value-framing split test copy

Serve quantified, benefit-led plan differentiators on the plans and
interstitial pages to the `enabled` variant of the `pro-value-framing`
split test, in place of the vague "increased/max AI allowance" and
"10/unlimited collaborators" framing.

The variant changes the bullet set and order as well as the strings, so
it swaps in its own short feature list rather than remapping keys: Pro
leads with "Everything in Standard, plus:", Free gains Error Assist and
"Compile simple projects". The plans page comparison table mirrors the
card wording in its AI allowance row.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* test(web): assert plan copy numbers against plan features

Check the quantified claims in the plan copy against the SaaS plan
features: the collaborator limits, and the "24x" compile timeout claims
as the ratio of the paid to the free compileTimeout. The "2x more AI
usage" claim is checked against the allowance tooltips, since the
allowances themselves come from AI_*_QUOTA_GRANT and are not available
in the unit test environment.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Remove overly contrasted color in card

* Remove redundant `makeUISettings2026`

* Simplify valueFramingOverrides

* Fix types

* Revert changes to the table, replace `2x_more_ai_usage` to `2x_the_ai_allowance`

* Remove oververbose PlansValueFraming.test.mjs

* Revert "Remove overly contrasted color in card"

This reverts commit 8e83a0c523c4ebfe8a40a04023f1801080d0e412.

* Apply suggestions from code review

GitOrigin-RevId: 25b0736af47a3a32f4e1dd108ab0eb14c1bc13e3
2026-09-17 12:00:26 +00:00
John Lees-MillerandClaude Opus 5 1ecdd122d0 Add Stripe migration features for stage 7 testing (part 2) (#35890)
* upsert: migrate US/CA PayPal without a payment method when flagged

getPaymentMethod no longer throws for a PayPal billing agreement destined for
Stripe US/CA when the account is flagged ignore_payment_method; instead it
returns null so the customer is migrated without a default payment method
(the send_invoice paymentMethodPending flow). Unflagged accounts still throw.

* finalize: expect the plan-code remap for legacy-plan subscriptions

When a subscription carries legacy_remap=1 metadata, compare the Stripe product's planCode against the recorded target plan code instead of the raw Recurly plan code, so the intentional remap is not misread as drift (the price is preserved, so the amount comparison is unchanged). Clear the legacy_remap metadata during post-migration cleanup.

* finalize: expect the assistant add-on reprice

When a subscription carries assist_addon_repriced=1 metadata, compare the assistant item against the recorded target amount (Stripe minor units) instead of the raw Recurly amount, so the intended reprice is not misread as drift. Clear the reprice metadata during post-migration cleanup.

* create_coupons: create migration coupons by name with amount_off, currency and product scope

Create the pipeline's per-region coupon_specs_<region>.csv coupons by name (idempotent, auto-paginated), supporting amount_off + currency (fixed) or percent_off, duration, and applies_to.products, with no promotion code. Region comes from the existing --region flag. The existing name-based percent-off + promotion-code path is unchanged.

* finalize: schedule the pending change as a phase 2

For a subscription flagged pending_change_scheduled, compare drift against the current Recurly state (not the pending change), then in Step 7 release the toolkit schedule and create a fresh two-phase subscription schedule (current until renewal; pending state from renewal with proration disabled and end_behavior release), clearing the scheduling metadata once the schedule exists.

* finalize: flag address-pending migrations and push the needs_to_update_address trait

When a migrated subscription carries metadata.addressPending, append -address-pending to the finalization status and push needs_to_update_address to customer.io (alongside the existing tax-info-pending handling), so the customer can be driven to add a billing address. The flag stays on the subscription so the customer.updated webhook can enable automatic_tax and clear it once the address resolves.

* webhook: heal address-pending migrations when the tax location resolves

On customer.updated (address/tax change), for a customer whose location is no longer unrecognized_location, enable automatic_tax on their migrated subscriptions still flagged metadata.addressPending and clear the flag. Enabling automatic_tax is rejected by Stripe while the location is still invalid, so the update is a safe idempotent no-op until the address is fixed; the cancellation state is never touched.

* cron: cancel unresolved address-pending subscriptions before they renew untaxed

Backstop for the address-pending cohort: searches the address-pending subscriptions in a region and, for any about to renew (within a configurable lead window) whose customer location is still unrecognized_location, cancels it at period end so it never renews untaxed. Skips subscriptions that are already cancelling and those whose location has resolved (healed by the webhook). Dry-run unless --commit.

* upsert: set tax.validate_location=auto on customer update

Conform PAN-copied customers to the account's default tax-location validation. Uses 'auto' rather than 'immediately' (which throws for country-only addresses and would break the address-pending migration flow).

* finalize-migration: send payment method info to customer.io

Add payment_method (card/paypal/none) and needs_to_add_payment_method
traits to the stripe_migration customer.io payload so the migration
email campaign can personalise per payment method without enumerating
the full cross-join. The payment method is read from the already-fetched
customer/subscription (default_payment_method now expanded on that fetch),
so no extra Stripe request is made. Also report a -payment-method-pending
status suffix in the CSV output.

* upsert: flag customers whose address Stripe cannot resolve

After pushing the Recurly address, read customer.tax.automatic_tax; when it is 'unrecognized_location', record address_unrecognized in the output so the subscription is migrated untaxed (address-pending) instead of failing at the billing-migration toolkit. This is the authoritative, region-agnostic detector (covers US/CA country-only and broken non-US addresses, e.g. India with a postal but no state/city). Adds isCustomerAddressUnrecognized helper + unit tests.

* Close reactivation-without-valid-address loophole

* webhook: detect newly-set address/tax with !== undefined

Review follow-up: the address-pending heal guard used a truthy check, which
would miss an address newly set from empty. Harmonise with _billingChanges,
which already uses !== undefined.

* upsert: set tax.validate_location via customerParams

Review follow-up: move the tax.validate_location='auto' directive into the
assembled customerParams instead of overriding it inline at the update call,
so it also appears in the dry-run output.

* create_coupons: guard migration coupons against ambiguous discount specs

Review follow-up: throw a clear per-coupon error if a migration coupon spec
has neither or both of amount_off/percent_off, catching data-processing
issues instead of silently sending percent_off=NaN.

* Rely on presence of customer.tax

* webhook: cover the address-pending heal path in unit tests

The customer.updated fixtures carried no `tax` hash and the mocked region
client had no `stripe` property, so the one test that reached the heal branch
threw and was swallowed by the caller's error handler. The heal logic had no
real coverage as a result.

Add the missing fixture fields and tests covering the heal itself, the
still-unrecognized early return, the skip rules for unflagged and cancelled
subscriptions, the Stripe rejection path that leaves the flag set, and the
missing-tax guard.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
GitOrigin-RevId: 8162e3e0f01e136d3aa560c22e98f43e36da4eb5
2026-09-17 11:58:48 +00:00
Domagoj Kriskovic ce194c9752 Use named <a> in feedback link Trans and themed-links mixin
GitOrigin-RevId: 812beaa01376c8ce0a423ba4cf1ae25581396fbb
2026-09-17 11:58:36 +00:00
Domagoj Kriskovic d7b4ef33ed Add "New" badge to library nav link and a feedback link on the library page
GitOrigin-RevId: 6c936ca8168dd718c4eaf806f426d5c00078add8
2026-09-17 11:58:32 +00:00
Alf EatonandClaude Fable 5 44315375fa Improve the Dimensions search feature (#36386)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
GitOrigin-RevId: 3d1ca7883102955dac3bc4a2e56c72975d0a3d20
2026-09-17 11:57:33 +00:00
ilkin-overleaf 0113c8ee9f Merge pull request #35936 from overleaf/ii-workspaces-subscription-admin-settings
Shared Workspace settings for subscription admins

GitOrigin-RevId: 61cc45a48aaf1709905e98b3cccf09b50e2afa84
2026-09-17 11:57:14 +00:00
Antoine Clausse a6b7329e47 [web] Render address form above payment element on Stripe checkout (#36209)
* [web] render address form above payment element on Stripe checkout

Changing country across Stripe regions (US/CA vs rest) remounts the Elements
tree and clears any entered card details. Rendering the address form (which
contains the country selector) first lets users settle the country before
entering payment details.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [web] gate checkout address-first order behind checkout-address-order split test

Per PR review: the reorder needs testing, so it is now behind the
checkout-address-order split test (default keeps the current payment-first
order). With the enabled variant the heading becomes "Payment details", since
"Select a payment method" no longer sits above the payment element.

Part of #36429

* Rename `checkout-address-order` to `checkout-address-first`

GitOrigin-RevId: 9c861b1013a284b10757fc416bcdc5610790d582
2026-09-17 11:55:56 +00:00
ilkin-overleaf 0ee4158abe Merge pull request #36392 from overleaf/ii-audit-logs-survey-removal
[web] Remove the feedback survey link from audit logs page

GitOrigin-RevId: f0b662146cec72e1a805387a0566154aab82c892
2026-09-17 11:55:00 +00:00
Domagoj Kriskovic 2ecbe6fb85 Zotero sync: treat the paged pull as a single snapshot (#35638)
* Zotero sync: treat the paged pull as a single snapshot

* fix zod after rebasing

* if extraHeaders, build a new client on each request

GitOrigin-RevId: b73829ad9fddaeb91753b3f9b80c5c5ae0cbfa50
2026-09-17 11:53:06 +00:00
Eric Mc Sween 62e4164269 Merge pull request #36345 from overleaf/em-library-design-review
[web] Library design review fixes

GitOrigin-RevId: dfd1846d275eb975906a2fe8a8c4dee057c51d1f
2026-09-17 11:52:11 +00:00
Antoine Clausse 1daed4efe4 [web] Add cancel-loss-messaging split test (#36363)
* [web] Add cancel-loss-messaging split test

Populate the cancel confirmation step with plan-specific losses when the
cancel-loss-messaging split test is enabled: "Are you sure you want to
cancel?" heading, the subscription end date, and a card listing what the
user loses moving to the Free plan (compile timeout, AI, collaborators,
history), with the lost benefit struck through next to its Free-plan
replacement.

Shown only to non-trial Student/Standard/Pro individual subscribers with
no other retention offer (trial extension or downgrade upsell) — those
keep the existing confirmation.

Copy matches the mockups in the ticket. No new analytics events; the
existing subscription-page-cancel-button-click / subscription-cancelled
funnel is used.

Part of #35765

* [web] Consolidate ActiveSubscription stories, add cancel confirmation story

Replace the 13 fixture-per-story exports with a single Dashboard story
driven by controls (subscription fixture select, flexible licensing,
cancel-loss-messaging variant), using the CSF factories pattern. Add a
CancelConfirmation story that renders the cancel confirmation step
directly so the cancel-loss-messaging variant can be previewed without
clicking through, with a Professional fixture available to see the Pro
loss rows.

* [web] Use withSplitTests for the ActiveSubscription stories

Register cancel-loss-messaging in defaultSplitTestsArgTypes and drive the
stories' variant from the shared withSplitTests decorator (radio control,
SplitTestContext provided from args) instead of hand-rolled meta tags and
SplitTestProvider. Generalize withSplitTests' typing so it composes with
CSF factories (preview.meta) as well as legacy meta objects.

* [web] Fix Storybook indexing of the ActiveSubscription stories

Storybook's static CSF indexer requires preview.meta() to receive an
object literal, so spread withSplitTests' argTypes/decorators into the
meta literal instead of wrapping the whole config in the helper call.

* [web] Compose ActiveSubscription stories from orthogonal controls

- Wrap the stories in #subscription-dashboard-root so the dashboard's
  scoped styles (e.g. the cancel-loss strikethrough) apply in Storybook
- Replace the single fixture dropdown with independent controls (group,
  plan, period, currency, trial, status, pending plan change, add-ons,
  coupons, pending license change), building the subscription from the
  fixtures' base + patches
- Guard impossible mixes with argTypes `if` conditions: individual-only
  controls hide when group is on, and pendingLicenseChange only shows
  for groups

* [web] Add student plan to the ActiveSubscription story controls

The cancel-loss-messaging variant has student-specific rows (AI
Assistant / 10 collaborators), so the plan control needs a student
option. Groups have no student plans, so for group subscriptions the
student choice maps to the Standard group fixture.

* [web] Provide ol-plans in the ActiveSubscription stories

The cancel confirmation's downgrade branch (monthly Standard is
isEligibleForDowngradeUpsell) looks up paid-personal in ol-plans and
spins forever when the meta tag is missing. Provide ol-plans and
ol-groupPlans from the fixtures, matching the test render helper.

GitOrigin-RevId: e8491c8d39ed059e42ea3442e8d70c3ef304b009
2026-09-17 11:52:02 +00:00
Lucie GermainandClaude Opus 5 9cf4fa8bf5 [web] gracefully handle failed oauth token exchange for reference managers (#36377)
* [web] gracefully handle failed oauth token exchange for reference managers

Mendeley/ReadCube redirect back to /:ref_provider/oauth/token-exchange with
`error` and `error_description` instead of `code` when a user declines consent.
completeAuth forwarded the whole query string on to third-party-references,
whose strict zod schema (d8c1679bb08) accepts only oauth_token, oauth_verifier
and code, so the exchange failed and the user got a 500.

The same forwarding also sent `state` on every callback, success or failure.
`state` is web's own CSRF token and is never read by third-party-references, so
it tripped the log-only schema on every single token exchange, and would have
broken linking outright under REQ_VALIDATION_MODE=enforce.

Forward only the credentials the exchange needs, and show a translated
notification in the Reference managers section rather than erroring. Validate
ref_provider against the known providers so the provider name can be
interpolated into the message without reflecting a URL segment.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [web] fix providerName argument and validate before deriving refProvider

Address Copilot review on #36377:

- The token-exchange failure handler passed `false` positionally into the
  `providerName` slot of _redirectWithLinkingError, so a failed exchange would
  have rendered "your false account". Pass providerName and an explicit false.
- _getRefProviderBackendKey(req) ran before parseReq, so refProvider was derived
  from raw, unvalidated req.params. Parse first and derive from the validated
  params via _toRefProviderBackendKey; _getRefProviderBackendKey now delegates
  to it so the other handlers are unchanged.

The completeAuth tests kept their assertions inside ctx.res.callback without
awaiting the controller, so the callback fired after the test had already
returned and the assertions were never enforced — which is why the suite was
green with the providerName bug in it. Await the controller and assert inline.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* [web] add logOnly to the completeAuth schema and guard the provider lookup

logOnly returns the raw input on a schema failure, so ref_provider can be an
arbitrary URL segment. Check it against the display-name table rather than
trusting the schema: unknown providers 404 in both validation modes, and
providerName is guaranteed non-null for the rest of the handler.

Also covers the schema half under REQ_VALIDATION_MODE=enforce, so dropping
ref_provider from completeAuthSchema fails a test rather than passing unnoticed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
GitOrigin-RevId: b98eb5414fe8b672f44aab8c3690f7637d434cd2
2026-09-17 11:51:27 +00:00
Olzhas Askar b4880f691e Merge pull request #36346 from overleaf/oa-fix-counts
[web] Fix counts

GitOrigin-RevId: b1ec87eb19d41c897b205d2ff178ab2b600fb987
2026-09-17 11:51:17 +00:00
Alf EatonandClaude Opus 4.8 98842d4659 Add Draw mode to the symbol palette (#34868)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
GitOrigin-RevId: 4ea4f97023e65fdb8b018f610f77d7dd107c8e76
2026-09-17 11:51:03 +00:00
Olzhas Askar f513b1aa52 Merge pull request #36302 from overleaf/oa-teardown-trial-ineligible-cta
[web] Teardown trial ineligible cta

GitOrigin-RevId: 4d114943bc2839b29b6eae3a133d6c235f98ffcc
2026-09-17 11:50:24 +00:00
Olzhas Askar 58d76ff1a0 Merge pull request #36247 from overleaf/oa-wider-panel
[web] Wider checkout panel

GitOrigin-RevId: ea9edafa4e11b0b04d5a74c664781c3dd0cc5e87
2026-09-17 11:50:20 +00:00
Maria Florencia Besteiro Gonzalez 6b7a77b4b2 Merge pull request #36239 from overleaf/mfb-show-duplicate-in-visual-bib-editor
Show duplicate entries in visual bib editor

GitOrigin-RevId: 32e4e41a751624a2142c7fd2c5e5de5a5d3905f5
2026-09-17 11:50:14 +00:00
Tom Wells 88fb4c48b2 Merge pull request #36290 from overleaf/copilot/update-library-empty-state-illustration
Update library items for better guidance

GitOrigin-RevId: 15f60589f721a8243110dda58ef7b1134e2c5275
2026-09-17 11:49:50 +00:00
David 3325724a9e Merge pull request #36258 from overleaf/dp-fix-library-badge
Use feature flag config for library badge rather than hard-coding

GitOrigin-RevId: a53bd7c739d2d8e6c5dbd5bda1fbc3a87f87b280
2026-09-17 11:49:12 +00:00
roo hutton b886c0b266 Merge pull request #35836 from overleaf/rh-prices-split
[web] Update monthly plan prices for new subscriptions with split test

GitOrigin-RevId: 42d0adaf68647adc93f4c05d5ddeefb356753db2
2026-09-17 11:49:04 +00:00
Kristina c5f3726eda [web] update comment placeholder for mentions (#36167)
GitOrigin-RevId: c702e00004d8dfcf243425503459f558973a657b
2026-09-17 11:48:50 +00:00
Jakob Ackermann 731ed50f78 [clsi] address zod violations (#36199)
* [editor-core] gracefully handle no-op TextOperation

* [web] avoid sending sync to pdf requests without a ?file

* [validation-tools] log deeper nested violations

* [editor-core] fix round trip of EditNoOperation

* [web] use custom error for sync to pdf w/o file, fix tests

* [validation-tools] include request params in log msg for violation

* Revert "[editor-core] gracefully handle no-op TextOperation"

This reverts commit c1d37261d5db72b37dbf39428c54edcfb5423f41.

* [web] gracefully handle rejected sync to pdf from context menu

GitOrigin-RevId: 21de7dc96b23575b0d67b6eb0c68ed9c2f86292b
2026-09-17 11:48:12 +00:00
Davinder Singh 98b79d9532 [WEB] Simplify "New project" dropdown (#34290)
* Simplify the new project dropdown

* Simplify the New project dropdown

* removing artefact of rebase

GitOrigin-RevId: e7e4dc48c10f2297abcd7c5b489ff2308bf9e18b
2026-09-17 11:47:56 +00:00
Jimmy Domagala-Tang 560b7a209a Transition optimized images to project-level toggle (#36093)
* feat: transitioning optimized images from a compile mode to a project level toggle. We still persist it for the proect and between users, and ensure that draft mode does not interact with it (silently disabled while draft mode is on)

* feat: cleaning up unused var, tests, and locales

* feat: updating copy

GitOrigin-RevId: 8010edfab164980f14125739e481d8b512f6b3df
2026-09-17 11:47:49 +00:00
Olzhas Askar 49747e61c9 Merge pull request #36163 from overleaf/oa-cookie-banner
[web] Rephrase the cookie banner

GitOrigin-RevId: 229cf5ead3d6a9f7c8fa1b8dda45508b06b23c42
2026-09-17 11:47:40 +00:00
Alf EatonandClaude Opus 4.8 f0b8e4af11 Add "Jump to command definition" to the editor context menu (#35116)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
GitOrigin-RevId: 5fcaef2004495a5e71bc083cf8fdc2bffce579d5
2026-09-17 11:47:09 +00:00
Mathias Jakobsen 588979097d Merge pull request #36139 from overleaf/jd-command-palette-ui-tweaks
UI tweaks to the command palette & adding a "No results" state

GitOrigin-RevId: 4e3c7aa1498ef03f3a1d9948c3f3df8fa38670c3
2026-09-17 11:46:57 +00:00
Mathias Jakobsen 4e088c54fd Merge pull request #36092 from overleaf/mj-command-palette-pre-release
[web] Pre-labs-release changes for command palette

GitOrigin-RevId: 578cf56f1ef51996ce928466edf50e360fa73b42
2026-09-17 11:46:54 +00:00
Tom Wells e3a75e2396 Merge pull request #36125 from overleaf/tw-bibtex-project-drawer
Add side drawer to the project-level Visual BibTeX Editor

GitOrigin-RevId: b9792dd1162e459511f70e2ac325ccdfc7d5b26f
2026-09-17 11:46:46 +00:00
Tim Down e8fca0a7aa Merge pull request #36129 from overleaf/td-onboarding-split-test-teardown
Remove onboarding-plan-comparison from code

GitOrigin-RevId: 7fc63e777c0924c3844f144f54623cbc30278afa
2026-09-17 11:46:33 +00:00
Tom Wells 90931a6c41 Merge pull request #36007 from overleaf/tw-library-validation-side-drawer
Show reference validation errors in the Library preview drawer

GitOrigin-RevId: 68a6a8879642cd32466240a6d25956d1fe8b2c78
2026-09-17 11:44:36 +00:00
Copilot 4234c9af29 Merge pull request #36023 from overleaf/copilot/update-simple-search-description
Update Simple Search description to mention Library when overleaf-library is enabled

GitOrigin-RevId: f694d38b830bc3699c5b05a25dd0edc3b58dcd89
2026-09-17 11:44:03 +00:00
Tom Wells 1a56eeaf00 Merge pull request #36051 from overleaf/tw-library-bulk-delete
Add bulk delete and restore actions to the Library

GitOrigin-RevId: 72f56eb78c44f496ce6edeb9fdddbd57074125a1
2026-09-17 11:44:00 +00:00
Kristina 68dafe202c [web] remove beta icon from notifications settings & survey links (#34989)
GitOrigin-RevId: bdd19ccf117be8aa051c02dfa50665fdbc874da2
2026-09-17 11:43:56 +00:00
Copilot cb3fbaba84 [web] update notification settings copy for mentions (#35953)
GitOrigin-RevId: cc86f0931f6740f1d509118ee558719bc3559816
2026-09-17 11:43:53 +00:00
Davinder Singh 95b373ed52 Merge pull request #36035 from overleaf/ds-unable-sync-modal-error
[WEB] Adding error message in the unable to sync modal

GitOrigin-RevId: b9d2cdc0db8c87e8f90b77d812dbb6d0c6695622
2026-09-17 11:43:49 +00:00
Davinder Singh 36d0a5c227 Merge pull request #35855 from overleaf/ds-unable-to-sync-modal-improved
[WEB] Adding improved version of the unable to sync modal

GitOrigin-RevId: 1cfe2b3a2e8417028339efddb18385a5224e50c3
2026-09-17 11:43:20 +00:00
Jessica Lawshe bff27fc3cc Merge pull request #35922 from overleaf/jel-domain-notification
[web] Update message on group domains table when no verification created yet

GitOrigin-RevId: 0692f6a976f2ef11cd0b39577f058d171583a89e
2026-09-17 11:42:33 +00:00
Jessica Lawshe 91331a3aff Merge pull request #35482 from overleaf/jel-domain-capture-not-enabled
[web] Update domain capture header and not enabled paragraph

GitOrigin-RevId: 0827d0be44592c71347ece0fb43cd100e8f082b1
2026-09-17 11:42:30 +00:00
Jessica Lawshe 12e02cc69a Merge pull request #35830 from overleaf/jel-domain-verification-text
[web] Update content in domain verification notification

GitOrigin-RevId: eaa58e4c7b53d55ef51a5d2fa318473205e82937
2026-09-17 11:42:17 +00:00
Tom Wells 284c9d9d14 Merge pull request #35999 from overleaf/tw-library-bibtex-bulk-download
Add BibTeX bulk download to Library

GitOrigin-RevId: 30e83a41ae71b397b5388fb7ebdae7b99dd062a8
2026-09-17 11:42:00 +00:00
David f4cdfaa607 Merge pull request #36037 from overleaf/dp-library-trash-navigation-2
Add trash navigation with Projects/References tabs- #36001

GitOrigin-RevId: 675ad078f117c5acd8744024c751209c615a7c2e
2026-09-17 11:41:52 +00:00
David ea989a4788 Merge pull request #35906 from overleaf/dk-library-references-trashed
Soft-delete library references (move to trash)

GitOrigin-RevId: 908a4d41724300c70d56e850cdb519b7a274ad5a
2026-09-17 11:41:40 +00:00
David 7ff96b31ad Merge pull request #35414 from overleaf/dp-library-in-admin
[web] Add read-only library view to the admin user page

GitOrigin-RevId: 892a40a7ef1096570412c68dac79c09f5b70ea53
2026-09-17 11:41:31 +00:00
Tom Wells 3588215c54 Add Abstract tab to the reference preview drawer (#35902)
* Add Abstract tab to the reference preview drawer

* Correct active border colour

* Swap mobile navigation items around

* Fix co-pilot suggestions

* fix: stop auto complete grabbing focus on mount

* fix: focus issues

* Fix failing test

GitOrigin-RevId: a9e808cf40ab0626ed9e2cf8dc732a224aab31d3
2026-09-17 11:39:36 +00:00
Kristina b624adf885 [web] trigger post-offline sync result treatments (#35854)
* trigger `UnableToSyncModal` on refresh
* trigger `UnableToSyncModal` without refresh
* show success toast when offline edits sync
* always show out of sync modal as the final backup

GitOrigin-RevId: 3ed300fef9e6d2ff81e17868309f80ffa40e0576
2026-09-17 11:39:03 +00:00
Maria Florencia Besteiro Gonzalez 297b9bf443 Merge pull request #35860 from overleaf/tw-35479-navigate-prev-next-drawer
Add previous/next buttons to side drawer

GitOrigin-RevId: 720228c8686bcbf3871d7ea338fd76a3ae6d667c
2026-09-17 11:38:15 +00:00