fetch - и получаем responce - это значит что мы получили ответ от сервера, но ещё не получили всё содержимое ответа(потому что интернет по проводам течёт не моментально). На этом этапе нам уже доступен статус и заголовки ответа, с которыми мы можем произвести какие-то действия(например если статус 404 - не пытаться читать ответ). Соответственно .json() уже ждёт полной загрузки и выполняет JSON.parse над ним. response загрузка может быть и целиком завершена, но не было никакого смысла выделять это в особый случай.
document.removeEventListener('mouseup', ...), а то слушатели в процессе жизни приложения будут всё накапливаться и накапливаться. На всякий случай.)
Server прилетает несколько позже, чем случается nextTick. MutationObserver и, может быть, ResizeObserver, чтоб всё было динамично. Или вместо директивы сделать компонент-обёртку и работать с логикой в Vue, а не вручную. Тут не скажу какой поход лучше, ибо всё ещё лень вникать.)
body класс .mobile и все мобильные медиа-запросы сделать актуальными только если есть этот класс.
import simpleRestProvider from 'ra-data-simple-rest'; или срабатывает неправильно именно при сборке. Мб ты вообще импорты как-то запорол, типа declare module '*', не знаю...
<string>some лучше использовать some as string, особенно если используете React. А ещё лучше, конечно, ничего не кастовать руками, по возможности.)