давай вот как сделаем. не расскажем все что будет делать код, а посмотрим, что людям нужно скорее всего?

### публичный api окошка

now that I think about it им нужна просто функция `uploadcare.widget.showDialog(settings, currentFile = null)`, которая вернет промиз про файл

и наш виджет сможет использовать ее же

### внутренний api окошка

наверное (тут я реально уже меньше уверен), нам троим нужно, чтобы можно было привязать к какому-то деферреду окошко. "привязать" означает:

* если окошко закрывается то деферред режектится
* есть деферред зарезолвился как угодно то окошко закрывается
* если состояние деферреда меняется то содержимое окошка меняется, и как оно меняется – решать деферреду

я думаю что эти пункта вполне подходят под методы `reject`, `always` и `progress` деферреда (%