* Move isOnlyEmoji out of RichText
To fix Fast Refresh.
* Make renderChildrenWithEmoji work with any children
* Always go through UITextView for consistency
It already contains the `selectable` and `iOS` checks inside.
* Move `emoji` check into `renderChildrenWithEmoji`
* Remove unnecessary intermediate UITextView nodes
* Make childHasEmoji check recursive
It didn't handle nested arrays etc correctly before.
* Remove the "children must be string" limitation
Should not be necessary now that we correctly handle nested arrays etc.
* Fix unnecessary regex reallocation
This doesn't have a global flag so it's okay to reuse.
* Remove unnecessary <Text> wrapper in RichText
* stop using ref in render
* fix display name fallback on web
* use unicode ellipsis for useGrapheme
* fix overflow issue
* sanitize handle/displayname on web
* Revert "Revert "Render dropdown menu items lazily (#6437)" (#6470)"
This reverts commit 0b38c77faa.
* Lazily initialize menu items
* Split in two files
* Make it work on mobile
This is wonky because our useMenuDialog abstraction only has `isOpen` on web. I couldn't figure out a way to make it work xplat so I'm just tracking it myself manually.
* Fix typo in comment
* update eslint config with jsx runtime
* leverage jsx transform to remove unnecessary react imports and update eslint config
* run yarn lint --fix to remove eslint disables related to react/prop-types that is now disabled
* Convert lightbox to get/set
* Work around software-mansion/react-native-reanimated#6613
* Use get/set in more places
* Port MainScrollProvider to get/set
* Port more to get/set
* Port composer to get/set
* Remove unnecessary thread hops in composer
* Port more things to get/set
* Convert more to get/set, remove redundant runOnJS
* Convert remaining cases to get/set
* [Web] Clicking root link twice refreshes the screen
* Scope it to navigation action
In practice this means -- just for the bottom mobile web tab bar.
* Update Node.js to 20.x in Dockerfile
* Update Node.js types and engines entry to 20.x
* Update Node.js version in .nvmrc
* Use node version from .nvmrc in linting job
* Use Type Assertion for clearTimeout
* Inline useImageAspectRatio
* Switch AutoSizedImage to read dimensions from Expo Image cache
* Include thumbnail dimensions in image data
* Use dims from Expo Image cache in lightbox
* Fix wiring so all thumbnails get dimensions
* Fix type
* Oops