В
firefox есть такая нестандартная фича как
-moz-element, которая идеально подходит под задачу:
Увы, она никогда не станет стандартной, да и из ff её могут рано или поздно выпилить.
В остальном, решения, собственно, два:
1. Делать всю рабочую область на собственном
canvas движке(можно попробовать что-то
такое), и тогда просто получать копию холста на меньший
canvas. Это более оптимально но требует переписывание всего и сложности основной работы.
2. Держать два идентичных компонента делящих
одно состояние(на пример через внешний
Vue.observable\
reactive или
vuex), один из которых уменьшать с помощью
transform: scale().
html2canvas, предложенный выше, имеет очень ограниченную область применения и вряд ли тут сработает, но можете попробовать
P.S. Есть ещё один вариант: на любое обновление(тут поймать обновление в зависимости от вашей архитектуры может быть либо очень просто, либо очень сложно) делать верхнему компоненту тупо
this.$el.cloneNode(true) и класть полученную копию в нужное место с тем же
transform: scale(), но это может весьма сильно тормозить в зависимости от количества элементов и частоты обновления.