Сейчас оно работает примерно так: каждый виджет получает маленький ивент-эммитер. В него можно бросать события, а можно читать.
Виджет может кидать-читать только «свои» события, то есть виджет никогда не зависит от другого виджета
А чтобы связать два виджета мы используем специальные функции (мы назвали их релейшнами), которые по сути мапят события одного виджета в события другого. Кроме мапинга они могут делать фильтрацию, тротлинг, да и вообще что угодно.
Релелейшн знает о двух виджетах и хранит всю логику их связи.
Сделал пример релейшна, чтобы было понятно что он делает. Этот уведомляет первый виджет об изменениях во втором.