* Convert event-tracking to TypeScript
* Convert local-storage to TypeScript
* Convert mapSeries to TypeScript
* Convert SessionStorage to TypeScript
* Convert account-upgrade to TypeScript
* Convert isValidTeXFile to TypeScript
* Convert date functions to TypeScript
* Convert EventEmitter to TypeScript
* Convert isNetworkError to TypeScript
* Convert webpack-public-path to TypeScript
* Convert displayNameForUser to TypeScript
GitOrigin-RevId: 79c5a2d1101fcd520f3116f0f4af29d974189d94
* Support for adding reviewer role
* show reviewer in track changes user list
* added "review" in assertClientCanViewProject
* test if reviewer can read project
* added collaboratorsGetter tests
* eit toggle-track-changes when track changes changes
* Support for changing privilege to reviewers for invited users (#22159)
* Add reviewer in change privilege level handler
* added reviewer translation
* added acceptance tests
* fix tests
* Set track changes state permissions for reviewer role (#22167)
* Add reviewer in change privilege level handler
* added reviewer translation
* added acceptance tests
* fix tests
* Set track changes state permissions for reviewer role
* added authorization helper tests
* added ensureUserCanReviewProjectContent middleware
* allow changing track changes only with write permissions
* removed canUserReviewProjectContent
* List projects where user is added as a reviewer (#22249)
* List projects where user is added as reviewer
* list projects in /user/projects
* fix tests
GitOrigin-RevId: 54064a7f961fe06f188ab449cd469cdaaf01b20a
* [storybook] Rerender story when switching BS3/BS5
* [storybook] Add SCSS loader to storybook
* [storybook] Add some AI error assistant stories
* Rename ai-error-assistant.less to .scss
* Update less variables to sass
* Remove duplicated selector
* Replace react-bootstrap components by `OL...`
* Update Checkboxes after BS5 update
* Add IDs so clicking on labels work
* Add BS5 class name in SCSS
Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio
* Rename ID `answer-not-detailed` -> `answer-not-best-fix`
* Pass name and value to BS3Radio/BS3Checkbox
* [storybook] Add delay before AI suggestion (shows the animation)
* Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed
Without this, clicks on second form are updating the first form!
Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/
* [storybook] Update `LabsAiPromoBanner`
* Use CSS variables instead of hardcoded values
* Make radio input flex
* Replace `blue-10` by `bg-info-03`
* Fix `SuggestFixButton`
* Fix `AiErrorAssistantCopyCode`
* Fix button loading in BS5
* Use OLBadge
* Fix Button variants
* Update `suggestFixAction`
* Migrate Tooltip and Button to BS5 in LabsExperimentWidget
* Update BS3/BS5 button classname in AiErrorAssistantCopyCode
Co-authored-by: Rebeka <rebeka.dekany@overleaf.com>
* [storybook] Allow to choose props of `LabsExperimentWidget`
* Fixup `OLTooltip`: Display the tooltip on disabled button in BS5
* Update Tooltips to BS5
---------
Co-authored-by: Rebeka <rebeka.dekany@overleaf.com>
GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
* [web] Set Subscription pages to have `layout-react`
* [web] import `header-footer-react` in Subscription pages (!!)
* [web] Add `ol-user` meta tag to the subscription pages (!!)
⚠️ invite_logged_out.pug should be updated instead of setting the user as `{}`
* [web] Fix unit test
* [web] Update User types to handle a logged out user, add `LOGGED_OUT_USER` const
* [web] Add type `User` to `getSessionUser`
* [web] Remove `LOGGED_OUT_USER` const
* [web] Just pass `{ id: null }` as the user
* [web] Remove comment in pugs, it breaks things
* [web] Don't pass the full user to the frontend!!!
Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
---------
Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 1768f1f13de924a18be43c1a08614000500dcbec