* feat: adding usage rate limiting to workbench and aligning editor context values for suggestionsLeft
* feat: prepend word token to headers of token rate limiter to prevent confusion with usage rate limiter
* Shared AI paywalls (#31948)
* feat: renaming hasPremiumSuggestion and adding token limits to editor context and project load
* feat: adding new ai features paywall component
* feat: rename getRemainingFeatureUses to token based naming for token based limiter, removed checking for feature usage on anonymous users, and removed guard on null userId since we shouldnt be calling getRemainingFeatureUses on a nonexistent user
* feat: using token rate limit headers to set token rate values in editor context
* feat: update workbench to be available without refreshing if rate limit reset occurs within session
* fix: move paywall out of inert section
* Hide new paywalls behind FF and open plans page on upgrade attempt (#32023)
* feat: hide new paywalls behind FF
* feat: update ai paywall buttons to navigate to plans page post quota plans change release
* feat: showing a fair limit notificaiton pre-quota change, and updating paywall to not fire if user has premium already (#32056)
GitOrigin-RevId: 565fb128d55543fea34c383bc4abeaa3dd148d09
* [clsi] initial implementation of compile from history
* [clsi] copy changes
* [saas-e2e] extend test case with nested folder
* [saas-e2e] add test case for tracked changes
* [web] fix accumulating changes from multiple chunks
* [web] optimize size check for compile request payload
* [clsi] deduplicate globalBlobs
* [clsi] add validation for request body details
* [clsi] add metrics for compile from history
* [clsi] download binary files concurrently
* [clsi] skip download of empty file blob
* [clsi] break down e2e compile time metric by compileFromHistory
GitOrigin-RevId: 0dadef93e89d8a172c35cb130a1042d9d1bec42a
* tearing down the test, and removing the timeout help message
* running make cleanup_unused_locales
* npm run extract:translations
GitOrigin-RevId: 54ee19d18a86a9061ff23d6dbd8375ae0bdf73c2
* Replace placeholders with labels
* Add 'Close dialog' label to modal close button to distinguish from footer Close button
* Add and translate heading on the not found page
* Update textarea to have id matching label's for attribute
Simplify test for template description textarea
* Label PDF zoom level dropdown button
* Improve test selectors to use semantic roles and accessible names
GitOrigin-RevId: d215ddca30ddf844cfffbcf0e528a601b134d772
* [web] add clsi-cache prompts
* [web] add new editor variant to segmentation
* [web] add tests for useNewEditorVariant
* [web] adjust start of using clsi-cache in split-test
GitOrigin-RevId: c9c5b1eff2ceefb65ef82516d9074cb971cb4c48
* feat: allow for monthly tl builds experiment
* feat: add in-editor notification when rolling image has updated
* feat: add in-editor notification when rolling image has updated
* feat: allowing for different messages in experiment when user is optend in
* feat: add a banner notification in the error logs when the user is on the rolling build
* moving rolling check from context to util
* Update services/web/frontend/js/features/pdf-preview/components/rolling-build-selected-reminder.tsx
Co-authored-by: Alf Eaton <alf.eaton@overleaf.com>
---------
Co-authored-by: Alf Eaton <alf.eaton@overleaf.com>
GitOrigin-RevId: fb669db28a7194babb299413f20209e76dcbd351
* Update test for the loading spinner component
* Create a story for the loading spinner component
* Move role and use CSS for spacing instead
* Add a classname prop
* Reuse LoadingSpinner
* Use OLSpinner instead of Spinner
* Use data-testid since status role was moved
* Wait for journals to load
* Use `isLoading` prop instead and fix the button's height
* Use `isLoading` prop instead
* Use LoadingSpinner instead and remove spacing
* Update test for the loading spinner component
* Use `isLoading` prop instead
* Add aria-describedby to layout button for processing state
* Replace `spinner` to `ol-spinner`
* Scope status
* Remove redundant `div.loading`
---------
Co-authored-by: Antoine Clausse <antoine.clausse@overleaf.com>
GitOrigin-RevId: 8f43b991f8f458b2abd5a4661913ac9b972d892a
* Create eslint rule for requiring loadingLabel prop when isLoading is specified on OLButton
* Add `loadingLabel` props for OLButton components with `isLoading`
* Clarify loading label and button loading state
GitOrigin-RevId: 89279d5b4c346f9c3b67a59d0db822a2ff04314a