Fritz2 is what we use currently. We are pretty happy with it. It's a nice modern, reactive kotlin framework. Compose web might be the future but it may be a bit early to jump on right now. I have no experience with it though. Fritz2 is also a bit cutting edge but we've found it to be stable and easy to deal with. And their state management is basically using StateFlow's so that is very nice to deal with. Also, love their component library and styling & theming.
React is OK but it will basically cause you to have to deal with a lot of js interoperability issues, api/idiom mismatch, etc. IMHO react users are better off sticking to typescript. Just involves less problem solving and you are using a well supported thing and you are not constantly fighting the fact that it really wants to be a javascript framework rather than a proper Kotlin framework. If you use kotlin-js, the whole point is getting away from that ecosystem.
Another framework that should be mentioned is kvision. I have little experience with it but it seems like a pretty comprehensive option.