SafeValue must use [property]=binding: Keeping in mind our main idea to decouple our system as far as possible, we can keep slicing it into smaller applications. It will lead to the creation of more self-sufficient, autarkic teams and bunches of separately deployable applications.

Here we come to a paradox at first glance conclusion: the more tiny applications there are, the lower system complexity. But looking closely, you'll find out that's the way it is. When you are seeking the ideal level of isolation between your subdomains and their teams, you may insert each subdomain into an individual mono repository:

That's what we call Micro Frontends. Thus, you untied the hands of every individual team to be as autarkic, self-sufficient as possible. Each of them can choose an architectural style, technology stack and decide when rhythm to update to newer framework versions. They are free to choose the best way based on the given requirements of its subdomain.
It is a long play. In perspective, it allows for the upcoming frameworks to be much easier to implement in an existing system and create a new domain.
Sure, you have to reserve some resources. And here is the catch; you have to resolve the shipping shared libraries issue via npm. The versioning, in this case, maybe the cause of the conflict version. (see http://g.co/ng/security#xss)