lotus / node_modules /.cache /vue-loader /13db4cc579c9fed33d6ac69eba190a90.json
k-l-lambda's picture
updated node_modules
4cadbaf
raw
history blame
45.6 kB
{"remainingRequest":"/home/camus/work/lotus/node_modules/vue-loader/lib/index.js??vue-loader-options!/home/camus/work/lotus/app/views/flex-engraver.vue?vue&type=script&lang=js","dependencies":[{"path":"/home/camus/work/lotus/app/views/flex-engraver.vue","mtime":1732184473655},{"path":"/home/camus/work/lotus/node_modules/cache-loader/dist/cjs.js","mtime":1719800821084},{"path":"/home/camus/work/lotus/node_modules/thread-loader/dist/cjs.js","mtime":1719800821095},{"path":"/home/camus/work/lotus/node_modules/babel-loader/lib/index.js","mtime":1727163989637},{"path":"/home/camus/work/lotus/node_modules/cache-loader/dist/cjs.js","mtime":1719800821084},{"path":"/home/camus/work/lotus/node_modules/vue-loader/lib/index.js","mtime":1719800840033}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CglpbXBvcnQge2Rvd25sb2FkVXJsfSBmcm9tICIuLi91dGlscy5qcyI7CglpbXBvcnQge211dGV4RGVsYXl9IGZyb20gIi4uL2RlbGF5LmpzIjsKCWltcG9ydCBsb2FkSmlzb25QYXJzZXIgZnJvbSAiLi4vbG9hZEppc29uUGFyc2VyLmpzIjsKCWltcG9ydCB7TGlseURvY3VtZW50fSBmcm9tICIuLi8uLi9pbmMvbGlseVBhcnNlciI7CglpbXBvcnQge3JlY292ZXJKU09OfSBmcm9tICIuLi8uLi9pbmMvanNvblJlY292ZXJ5LnRzIjsKCWltcG9ydCB7U3RhZmZUb2tlbiwgU2hlZXREb2N1bWVudH0gZnJvbSAiLi4vLi4vaW5jL3N0YWZmU3ZnIjsKCWltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICIuLi8uLi9pbmMvY29uc3RhbnRzLnRzIjsKCglpbXBvcnQgU291cmNlRWRpdG9yIGZyb20gIi4uL2NvbXBvbmVudHMvc291cmNlLWVkaXRvci52dWUiOwoJaW1wb3J0IFN0b3JlSW5wdXQgZnJvbSAiLi4vY29tcG9uZW50cy9zdG9yZS1pbnB1dC52dWUiOwoJaW1wb3J0IEJvb2xTdG9yZUlucHV0IGZyb20gIi4uL2NvbXBvbmVudHMvYm9vbC1zdG9yZS1pbnB1dC52dWUiOwoJaW1wb3J0IFNoZWV0U2ltcGxlIGZyb20gIi4uL2NvbXBvbmVudHMvc2hlZXQtc2ltcGxlLnZ1ZSI7CglpbXBvcnQgTG9hZGluZyBmcm9tICIuLi9jb21wb25lbnRzL2xvYWRpbmctZG90cy52dWUiOwoKCgoJY29uc3Qgc2FtcGxlTGlseSA9IHN0YWZmU2l6ZSA9PiBgCgkJIyhzZXQtZ2xvYmFsLXN0YWZmLXNpemUgJHtzdGFmZlNpemV9KQoJCVxccGFwZXIgewoJCQlwYXBlci13aWR0aCA9ICR7c3RhZmZTaXplICogMC4xNn1cXGNtCgkJCXBhcGVyLWhlaWdodCA9ICR7c3RhZmZTaXplICogMC4wOH1cXGNtCgkJCXRvcC1tYXJnaW4gPSAwCgkJCWJvdHRvbS1tYXJnaW4gPSAwCgkJCWxlZnQtbWFyZ2luID0gMC4yXFxjbQoJCQlyaWdodC1tYXJnaW4gPSAwCgkJfQoJCVxcbGF5b3V0CgkJewoJCQlpbmRlbnQgPSAwCgkJfQoJCXtjJzF9CglgOwoKCgljb25zdCByZW1vdmVMaWx5cG9uZEJhbmQgPSBzdmcgPT4gc3ZnLnJlcGxhY2UoLyg/Oj4pW148Pl0rbGlseXBvbmQub3JnKD89PCkvZywgIiIpOwoKCgoJZXhwb3J0IGRlZmF1bHQgewoJCW5hbWU6ICJmbGV4LWVuZ3JhdmVyIiwKCgoJCWNvbXBvbmVudHM6IHsKCQkJU291cmNlRWRpdG9yLAoJCQlTdG9yZUlucHV0LAoJCQlCb29sU3RvcmVJbnB1dCwKCQkJU2hlZXRTaW1wbGUsCgkJCUxvYWRpbmcsCgkJfSwKCgoJCWRhdGEgKCkgewoJCQlyZXR1cm4gewoJCQkJY29udGFpbmVyU2l6ZTogewoJCQkJCXdpZHRoOiAxMDAsCgkJCQkJaGVpZ2h0OiAxMDAsCgkJCQkJb2Zmc2V0V2lkdGg6IDEyMTUsCgkJCQkJb2Zmc2V0SGVpZ2h0OiA0OTUsCgkJCQl9LAoJCQkJZHJhZ0hvdmVyOiBmYWxzZSwKCQkJCXNvdXJjZUxpc3Q6IFtdLAoJCQkJY2hvc2VuU291cmNlSW5kZXg6IDAsCgkJCQlzb3VyY2VEaXJ0eTogZmFsc2UsCgkJCQlnYXVnZVN2Z0RvYzogbnVsbCwKCQkJCXN0YWZmU2l6ZVJhbmdlOiB7CgkJCQkJbWluOiAxMCwKCQkJCQltYXg6IDQwLAoJCQkJfSwKCQkJCWNvbnRhaW5lclN2Z3M6IG51bGwsCgkJCQljb250YWluZXJFbmdyYXZpbmc6IGZhbHNlLAoJCQkJc3RhZmZTYW1wbGVTdmdNaW46IG51bGwsCgkJCQlzdGFmZlNhbXBsZVN2Z01heDogbnVsbCwKCQkJCWZpdFN0YWZmU2l6ZTogMjQsCgkJCQlmaXhTdGFmZlNpemU6IGZhbHNlLAoJCQl9OwoJCX0sCgoKCQljb21wdXRlZDogewoJCQljdXJyZW50U291cmNlICgpIHsKCQkJCXJldHVybiB0aGlzLnNvdXJjZUxpc3RbdGhpcy5jaG9zZW5Tb3VyY2VJbmRleF07CgkJCX0sCgoKCQkJY3VycmVudFNvdXJjZUNvbnRlbnQgKCkgewoJCQkJcmV0dXJuIHRoaXMuY3VycmVudFNvdXJjZSAmJiB0aGlzLmN1cnJlbnRTb3VyY2UuY29udGVudDsKCQkJfSwKCgoJCQljb250YWluZXJTaXplSGFzaCAoKSB7CgkJCQlyZXR1cm4gYCR7dGhpcy5jb250YWluZXJTaXplLndpZHRofSwke3RoaXMuY29udGFpbmVyU2l6ZS5oZWlnaHR9YDsKCQkJfSwKCQl9LAoKCgkJYXN5bmMgY3JlYXRlZCAoKSB7CgkJCXdpbmRvdy4kbWFpbiA9IHRoaXM7CgoJCQl0aGlzLmxvYWRTb3VyY2UoKTsKCgkJCXRoaXMubGlseVBhcnNlciA9IGF3YWl0IGxvYWRKaXNvblBhcnNlcihpbXBvcnQoIi4uLy4uL2ppc29uL2xpbHlwb25kLmppc29uIikpOwoJCQljb25zb2xlLmxvZygiTGlseXBvbmQgcGFyc2VyIGxvYWRlZC4iKTsKCgkJCXRoaXMudXBkYXRlU3RhZmZTYW1wbGVzKCk7CgkJfSwKCgoJCWFzeW5jIG1vdW50ZWQgKCkgewoJCQlhd2FpdCB0aGlzLiRuZXh0VGljaygpOwoJCQl0aGlzLnVwZGF0ZUNvbnRhaW5lclNpemUoKTsKCQl9LAoKCgkJYmVmb3JlRGVzdHJveSAoKSB7CgkJCXRoaXMuY2hlY2tBbmRTYXZlU291cmNlKCk7CgkJfSwKCgoJCW1ldGhvZHM6IHsKCQkJdXBkYXRlQ29udGFpbmVyU2l6ZSAoe3dpZHRoT2Zmc2V0ID0gdHJ1ZX0gPSB7fSkgewoJCQkJdGhpcy5jb250YWluZXJTaXplLndpZHRoID0gdGhpcy4kcmVmcy5zaGVldENvbnRhaW5lci5jbGllbnRXaWR0aDsKCQkJCXRoaXMuY29udGFpbmVyU2l6ZS5oZWlnaHQgPSB0aGlzLiRyZWZzLnNoZWV0Q29udGFpbmVyLmNsaWVudEhlaWdodDsKCQkJCS8vY29uc29sZS5sb2coInVwZGF0ZUNvbnRhaW5lclNpemU6IiwgdGhpcy5jb250YWluZXJTaXplLndpZHRoLCB0aGlzLmNvbnRhaW5lclNpemUuaGVpZ2h0KTsKCgkJCQlpZiAod2lkdGhPZmZzZXQpIHsKCQkJCQl0aGlzLmNvbnRhaW5lclNpemUub2Zmc2V0V2lkdGggPSB0aGlzLiRyZWZzLnNoZWV0Q29udGFpbmVyLm9mZnNldFdpZHRoOwoJCQkJCXRoaXMuY29udGFpbmVyU2l6ZS5vZmZzZXRIZWlnaHQgPSB0aGlzLiRyZWZzLnNoZWV0Q29udGFpbmVyLm9mZnNldEhlaWdodDsKCQkJCX0KCQkJfSwKCgoJCQlhc3luYyBvbkRyb3BGaWxlIChldmVudCkgewoJCQkJdGhpcy5kcmFnSG92ZXIgPSBmYWxzZTsKCgkJCQljb25zdCBmaWxlID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdOwoJCQkJaWYgKGZpbGUpIHsKCQkJCQlzd2l0Y2ggKGZpbGUudHlwZSkgewoJCQkJCWNhc2UgInRleHQveC1saWx5cG9uZCI6CgkJCQkJY2FzZSAidGV4dC9saWx5cG9uZC1zb3VyY2UiOgoJCQkJCQljb25zdCBjb250ZW50ID0gYXdhaXQgZmlsZS5yZWFkQXMoIlRleHQiKTsKCQkJCQkJLy9jb25zb2xlLmxvZygiY29udGVudDoiLCBmaWxlLCBjb250ZW50KTsKCQkJCQkJY29uc3QgbmFtZSA9IGZpbGUubmFtZS5yZXBsYWNlKC9cLmx5JC8sICIiKTsKCgkJCQkJCXRoaXMuc291cmNlTGlzdC5wdXNoKHsKCQkJCQkJCW5hbWUsCgkJCQkJCQljb250ZW50LAoJCQkJCQl9KTsKCQkJCQkJdGhpcy5zb3VyY2VEaXJ0eSA9IHRydWU7CgoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0sCgoKCQkJcmVtb3ZlQ3VycmVudFNvdXJjZSAoKSB7CgkJCQl0aGlzLnNvdXJjZUxpc3Quc3BsaWNlKHRoaXMuY2hvc2VuU291cmNlSW5kZXgsIDEpOwoJCQkJdGhpcy5jaG9zZW5Tb3VyY2VJbmRleCA9IE1hdGgubWluKHRoaXMuY2hvc2VuU291cmNlSW5kZXgsIHRoaXMuc291cmNlTGlzdC5sZW5ndGggLSAxKTsKCQkJfSwKCgoJCQlsb2FkU291cmNlICgpIHsKCQkJCWlmIChsb2NhbFN0b3JhZ2UubG90dXNGbGV4RW5ncmF2ZXJTb3VyY2VzKSB7CgkJCQkJdGhpcy5zb3VyY2VMaXN0ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UubG90dXNGbGV4RW5ncmF2ZXJTb3VyY2VzKTsKCQkJCQljb25zb2xlLmxvZygiU291cmNlIGxpc3QgbG9hZGVkLiIpOwoJCQkJfQoKCQkJCXRoaXMuc291cmNlRGlydHkgPSBmYWxzZTsKCQkJfSwKCgoJCQlzYXZlU291cmNlICgpIHsKCQkJCWxvY2FsU3RvcmFnZS5sb3R1c0ZsZXhFbmdyYXZlclNvdXJjZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnNvdXJjZUxpc3QpOwoJCQkJY29uc29sZS5sb2coIlNvdXJjZSBsaXN0IHNhdmVkLiIpOwoKCQkJCXRoaXMuc291cmNlRGlydHkgPSBmYWxzZTsKCQkJfSwKCgoJCQljaGVja0FuZFNhdmVTb3VyY2UgKCkgewoJCQkJaWYgKHRoaXMuc291cmNlRGlydHkpCgkJCQkJdGhpcy5zYXZlU291cmNlKCk7CgkJCX0sCgoKCQkJYXN5bmMgZ2F1Z2UgKCkgewoJCQkJY29uc3QgVEVTVF9TVEFGRl9TSVpFID0gMjA7CgkJCQljb25zdCBQQVBFUl9XSURUSCA9IDEwMDAwOwoJCQkJY29uc3QgUEFQRVJfV0lEVEhfTkFSUk9XID0gMjsKCgkJCQljb25zdCBsaWx5RG9jdW1lbnQgPSBuZXcgTGlseURvY3VtZW50KGF3YWl0IHRoaXMubGlseVBhcnNlci5wYXJzZSh0aGlzLmN1cnJlbnRTb3VyY2VDb250ZW50KSk7CgkJCQkvL2NvbnNvbGUubG9nKCJsaWx5RG9jdW1lbnQ6IiwgbGlseURvY3VtZW50KTsKCgkJCQljb25zdCBnbG9iYWxBdHRyaWJ1dGVzID0gbGlseURvY3VtZW50Lmdsb2JhbEF0dHJpYnV0ZXMoKTsKCQkJCWdsb2JhbEF0dHJpYnV0ZXMuc3RhZmZTaXplLnZhbHVlID0gVEVTVF9TVEFGRl9TSVpFOwoJCQkJZ2xvYmFsQXR0cmlidXRlcy5wYXBlcldpZHRoLnZhbHVlLm51bWJlciA9IFBBUEVSX1dJRFRIOwoJCQkJZ2xvYmFsQXR0cmlidXRlcy5wYXBlckhlaWdodC52YWx1ZS5udW1iZXIgPSAxMDAwOwoJCQkJZ2xvYmFsQXR0cmlidXRlcy5yYWdnZWRMYXN0LnZhbHVlID0gdHJ1ZTsKCQkJCWdsb2JhbEF0dHJpYnV0ZXMudG9wTWFyZ2luLnZhbHVlID0gMDsKCQkJCWdsb2JhbEF0dHJpYnV0ZXMubGVmdE1hcmdpbi52YWx1ZSA9IDA7CgoJCQkJY29uc3Qgc291cmNlID0gbGlseURvY3VtZW50LnRvU3RyaW5nKCk7CgkJCQkvL2NvbnNvbGUubG9nKCJzb3VyY2U6Iiwgc291cmNlKTsKCgkJCQl0cnkgewoJCQkJCWNvbnN0IHJlc3VsdEggPSBhd2FpdCB0aGlzLmVuZ3JhdmUoc291cmNlLCB7dG9rZW5pemU6IHRydWV9KTsKCQkJCQkvL2NvbnNvbGUubG9nKCJnYXVnZToiLCByZXN1bHRIKTsKCgkJCQkJdGhpcy5nYXVnZVN2Z0RvYyA9IHJlc3VsdEguc3Znc1swXTsKCgkJCQkJY29uc29sZS5hc3NlcnQocmVzdWx0SC5zdmdzLmxlbmd0aCA9PT0gMSwgImludmFsaWQgcGFnZSBjb3VudDoiLCByZXN1bHRIKTsKCQkJCQljb25zdCBzaGVldERvY3VtZW50SCA9IHJlY292ZXJKU09OKHJlc3VsdEguZG9jLCB7U3RhZmZUb2tlbiwgU2hlZXREb2N1bWVudH0pOwoJCQkJCWNvbnN0IHN5c3RlbSA9IHNoZWV0RG9jdW1lbnRILnBhZ2VzWzBdLnN5c3RlbXNbMF07CgkJCQkJY29uc3Qgc2l6ZUZhY3RvciA9IChQQVBFUl9XSURUSCAvIHNoZWV0RG9jdW1lbnRILnBhZ2VzWzBdLnZpZXdCb3gud2lkdGgpIC8gVEVTVF9TVEFGRl9TSVpFOwoJCQkJCWNvbnN0IG5hdHVyYWxXaWR0aCA9IHN5c3RlbS53aWR0aCAqIHNpemVGYWN0b3I7CgkJCQkJY29uc3QgbmF0dXJhbEhlaWdodCA9IChzeXN0ZW0uYm90dG9tIC0gc3lzdGVtLnRvcCkgKiBzaXplRmFjdG9yOwoJCQkJCS8vY29uc29sZS5sb2coIm5hdHVyYWwgc2l6ZToiLCBuYXR1cmFsV2lkdGgsIG5hdHVyYWxIZWlnaHQsIHNoZWV0RG9jdW1lbnRIKTsKCgkJCQkJZ2xvYmFsQXR0cmlidXRlcy5wYXBlcldpZHRoLnZhbHVlLm51bWJlciA9IFBBUEVSX1dJRFRIX05BUlJPVzsKCQkJCQljb25zdCByZXN1bHRWID0gYXdhaXQgdGhpcy5lbmdyYXZlKGxpbHlEb2N1bWVudC50b1N0cmluZygpLCB7dG9rZW5pemU6IHRydWV9KTsKCQkJCQljb25zb2xlLmFzc2VydChyZXN1bHRWLnN2Z3MubGVuZ3RoID09PSAxLCAiaW52YWxpZCBwYWdlIGNvdW50OiIsIHJlc3VsdFYpOwoJCQkJCWNvbnN0IHNoZWV0RG9jdW1lbnRWID0gcmVjb3ZlckpTT04ocmVzdWx0Vi5kb2MsIHtTdGFmZlRva2VuLCBTaGVldERvY3VtZW50fSk7CgkJCQkJY29uc3Qgc3lzdGVtcyA9IHNoZWV0RG9jdW1lbnRWLnBhZ2VzWzBdLnN5c3RlbXM7CgkJCQkJY29uc3QgaGVpZ2h0cyA9IEFycmF5KHN5c3RlbXMubGVuZ3RoIC0gMSkuZmlsbChudWxsKS5tYXAoKF8sIGkpID0+IHN5c3RlbXNbaSArIDFdLnkgLSBzeXN0ZW1zW2ldLnkpOwoJCQkJCS8vY29uc29sZS5sb2coImhlaWdodHM6IiwgaGVpZ2h0cyk7CgkJCQkJY29uc3Qgc3lzdGVtU3BhY2luZyA9IE1hdGgubWF4KHN5c3RlbS5ib3R0b20gLSBzeXN0ZW0udG9wLCAuLi5oZWlnaHRzKSAqIHNpemVGYWN0b3IgLSBuYXR1cmFsSGVpZ2h0OwoJCQkJCS8vY29uc29sZS5sb2coInN5c3RlbVNwYWNpbmc6Iiwgc3lzdGVtU3BhY2luZyk7CgoJCQkJCWNvbnN0IG5ld0xpeSA9IG5ldyBMaWx5RG9jdW1lbnQoYXdhaXQgdGhpcy5saWx5UGFyc2VyLnBhcnNlKHRoaXMuY3VycmVudFNvdXJjZUNvbnRlbnQpKTsKCQkJCQkvL2NvbnNvbGUubG9nKCJuZXdMaXk6IiwgbmV3TGl5KTsKCgkJCQkJbmV3TGl5LnJvb3QuYXBwZW5kQXNzaWdubWVudCgibmF0dXJhbFdpZHRoIiwgbmF0dXJhbFdpZHRoKTsKCQkJCQluZXdMaXkucm9vdC5hcHBlbmRBc3NpZ25tZW50KCJuYXR1cmFsSGVpZ2h0IiwgbmF0dXJhbEhlaWdodCk7CgkJCQkJbmV3TGl5LnJvb3QuYXBwZW5kQXNzaWdubWVudCgic3lzdGVtU3BhY2luZyIsIHN5c3RlbVNwYWNpbmcpOwoKCQkJCQkvL2NvbnNvbGUubG9nKCJuZXcgZG9jOiIsIG5ld0xpeS50b1N0cmluZygpKTsKCQkJCQl0aGlzLmN1cnJlbnRTb3VyY2UuY29udGVudCA9IG5ld0xpeS50b1N0cmluZygpOwoKCQkJCQl0aGlzLmNoZWNrQW5kU2F2ZVNvdXJjZSgpOwoJCQkJfQoJCQkJY2F0Y2ggKGVycm9yKSB7CgkJCQkJY29uc29sZS53YXJuKCJFbmdyYXZpbmcgZmFpbGVkOiIsIGVycm9yKTsKCQkJCX0KCQkJfSwKCgoJCQlhc3luYyBlbmdyYXZlIChzb3VyY2UsIHt0b2tlbml6ZX0gPSB7fSkgewoJCQkJY29uc3QgYm9keSA9IG5ldyBGb3JtRGF0YSgpOwoJCQkJYm9keS5hcHBlbmQoInNvdXJjZSIsIHNvdXJjZSk7CgkJCQlpZiAodG9rZW5pemUpCgkJCQkJYm9keS5hcHBlbmQoInRva2VuaXplIiwgdG9rZW5pemUpOwoKCQkJCWNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goIi9lbmdyYXZlIiwgewoJCQkJCW1ldGhvZDogIlBPU1QiLAoJCQkJCWJvZHksCgkJCQl9KTsKCQkJCWlmICghcmVzcG9uc2Uub2spIAoJCQkJCXRocm93IG5ldyBFcnJvcihhd2FpdCByZXNwb25zZS50ZXh0KCkpOwoKCQkJCXJldHVybiByZXNwb25zZS5qc29uKCk7CgkJCX0sCgoKCQkJYXN5bmMgZml0Q29udGFpbmVyICgpIHsKCQkJCWlmICghdGhpcy5saWx5UGFyc2VyIHx8ICF0aGlzLmN1cnJlbnRTb3VyY2VDb250ZW50KQoJCQkJCXJldHVybiBudWxsOwoKCQkJCWNvbnN0IGxpbHlEb2N1bWVudCA9IG5ldyBMaWx5RG9jdW1lbnQoYXdhaXQgdGhpcy5saWx5UGFyc2VyLnBhcnNlKHRoaXMuY3VycmVudFNvdXJjZUNvbnRlbnQpKTsKCgkJCQljb25zdCBuYXR1cmFsV2lkdGggPSBsaWx5RG9jdW1lbnQucm9vdC5nZXRGaWVsZCgibmF0dXJhbFdpZHRoIik7CgkJCQljb25zdCBuYXR1cmFsSGVpZ2h0ID0gbGlseURvY3VtZW50LnJvb3QuZ2V0RmllbGQoIm5hdHVyYWxIZWlnaHQiKTsKCQkJCWNvbnN0IHN5c3RlbVNwYWNpbmcgPSBsaWx5RG9jdW1lbnQucm9vdC5nZXRGaWVsZCgic3lzdGVtU3BhY2luZyIpOwoJCQkJaWYgKCFuYXR1cmFsV2lkdGggfHwgIW5hdHVyYWxIZWlnaHQgfHwgIXN5c3RlbVNwYWNpbmcpIHsKCQkJCQljb25zb2xlLmxvZygibmF0dXJhbCBzaXplIGlzIG5vdCBzZXQuIiwgbmF0dXJhbFdpZHRoLCBuYXR1cmFsSGVpZ2h0KTsKCQkJCQlyZXR1cm4gbnVsbDsKCQkJCX0KCgkJCQljb25zdCBudyA9IG5hdHVyYWxXaWR0aC52YWx1ZTsKCQkJCWNvbnN0IG5oID0gbmF0dXJhbEhlaWdodC52YWx1ZTsKCQkJCWNvbnN0IHNzID0gc3lzdGVtU3BhY2luZy52YWx1ZSArIDAuMDQ7CgoJCQkJY29uc3QgZ2xvYmFsQXR0cmlidXRlcyA9IGxpbHlEb2N1bWVudC5nbG9iYWxBdHRyaWJ1dGVzKCk7CgoJCQkJY29uc3QgcGFwZXJXaWR0aCA9IHRoaXMuY29udGFpbmVyU2l6ZS53aWR0aCAvIGNvbnN0YW50cy5DTV9UT19QWDsKCQkJCWNvbnN0IHBhcGVySGVpZ2h0ID0gKHRoaXMuY29udGFpbmVyU2l6ZS5oZWlnaHQgLSA5KSAvIGNvbnN0YW50cy5DTV9UT19QWDsKCgkJCQljb25zdCBnZXROdW1iZXJVbml0VmFsdWUgPSBrZXkgPT4gZ2xvYmFsQXR0cmlidXRlc1trZXldLnZhbHVlID8gZ2xvYmFsQXR0cmlidXRlc1trZXldLnZhbHVlLm51bWJlciA6IG51bGw7CgoJCQkJY29uc3QgbWFyZ2luTGVmdCA9IGdldE51bWJlclVuaXRWYWx1ZSgibGVmdE1hcmdpbiIpIHx8IGNvbnN0YW50cy5MSUxZX0hPUklaT05UQUxfTUFSR0lOX0RFRkFVTFQ7CgkJCQljb25zdCBtYXJnaW5SaWdodCA9IGdldE51bWJlclVuaXRWYWx1ZSgicmlnaHRNYXJnaW4iKSB8fCBjb25zdGFudHMuTElMWV9IT1JJWk9OVEFMX01BUkdJTl9ERUZBVUxUOwoJCQkJY29uc3QgbWFyZ2luVG9wID0gZ2V0TnVtYmVyVW5pdFZhbHVlKCJ0b3BNYXJnaW4iKSB8fCBjb25zdGFudHMuTElMWV9UT1BfTUFSR0lOX0RFRkFVTFQ7CgkJCQljb25zdCBtYXJnaW5Cb3R0b20gPSBnZXROdW1iZXJVbml0VmFsdWUoImJvdHRvbU1hcmdpbiIpIHx8IGNvbnN0YW50cy5MSUxZX0JPVFRPTV9NQVJHSU5fREVGQVVMVDsKCgkJCQljb25zdCBpbm5lckhlaWdodCA9IHBhcGVySGVpZ2h0IC0gbWFyZ2luVG9wIC0gbWFyZ2luQm90dG9tOwoJCQkJY29uc3QgaW5uZXJXaWR0aCA9IHBhcGVyV2lkdGggLSBtYXJnaW5MZWZ0IC0gbWFyZ2luUmlnaHQ7CgoJCQkJbGV0IHN5c3RlbUNvdW50ID0gMTsKCQkJCWxldCBzdGFmZlNpemUgPSBudWxsOwoKCQkJCWlmICh0aGlzLmZpeFN0YWZmU2l6ZSkgewoJCQkJCXN0YWZmU2l6ZSA9IHRoaXMuZml0U3RhZmZTaXplOwoJCQkJCS8vY29uc3QgeXNjID0gKGlubmVySGVpZ2h0IC8gc3RhZmZTaXplICsgc3MpIC8gKG5oICsgc3MpOwoJCQkJCS8vc3lzdGVtQ291bnQgPSBNYXRoLm1heChNYXRoLmZsb29yKHlzYyksIDEpOwoJCQkJCWNvbnN0IHhzYyA9IChudyAtIGNvbnN0YW50cy5TVEFGRl9IRUFEX0RFRFVDVElPTikgKiBzdGFmZlNpemUgLyAoaW5uZXJXaWR0aCAtIGNvbnN0YW50cy5TVEFGRl9IRUFEX0RFRFVDVElPTiAqIHN0YWZmU2l6ZSk7CgkJCQkJc3lzdGVtQ291bnQgPSBNYXRoLmNlaWwoeHNjIC0gMC4yKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCWZvciAoOyBzeXN0ZW1Db3VudCA8IDFlKzM7ICsrc3lzdGVtQ291bnQpIHsKCQkJCQkJY29uc3QgY3VycmVudFN0YWZmU2l6ZSA9IGlubmVySGVpZ2h0IC8gKChuaCAqIHN5c3RlbUNvdW50ICsgc3MgKiAoc3lzdGVtQ291bnQgLSAxKSkpOwoJCQkJCQlpZiAoY3VycmVudFN0YWZmU2l6ZSA8IHRoaXMuc3RhZmZTaXplUmFuZ2UubWluKSB7CgkJCQkJCQlpZiAoIU51bWJlci5pc0Zpbml0ZShzdGFmZlNpemUpKQoJCQkJCQkJCXN0YWZmU2l6ZSA9IGN1cnJlbnRTdGFmZlNpemU7CgoJCQkJCQkJLS1zeXN0ZW1Db3VudDsKCgkJCQkJCQljb25zb2xlLmxvZygidG9vIHNhbWxsIHZlcnRpY2FsIHByZWZlcmVkIHN0YWZmIHNpemU6IiwgY3VycmVudFN0YWZmU2l6ZSwgc3lzdGVtQ291bnQpOwoKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgoJCQkJCQlzdGFmZlNpemUgPSBNYXRoLm1pbihjdXJyZW50U3RhZmZTaXplLCB0aGlzLnN0YWZmU2l6ZVJhbmdlLm1heCk7CgoJCQkJCQkvLyBjb21wdXRlIHN5c3RlbSBjb3VudCBieSBob3Jpem9udGFsIHNwbGl0dGluZwoJCQkJCQljb25zdCB4c2MgPSAobncgLSBjb25zdGFudHMuU1RBRkZfSEVBRF9ERURVQ1RJT04pICogc3RhZmZTaXplIC8gKGlubmVyV2lkdGggLSBjb25zdGFudHMuU1RBRkZfSEVBRF9ERURVQ1RJT04gKiBzdGFmZlNpemUpOwoJCQkJCQlpZiAoeHNjIDwgMCkgewoJCQkJCQkJY29uc29sZS53YXJuKCJIb3Jpem9udGFsIHNwYWNlIHRvbyBsaXR0bGU6IiwgeHNjLCBpbm5lcldpZHRoIC0gY29uc3RhbnRzLlNUQUZGX0hFQURfREVEVUNUSU9OICogc3RhZmZTaXplKTsKCQkJCQkJCXJldHVybjsKCQkJCQkJfQoKCQkJCQkJaWYgKHhzYyA8IHN5c3RlbUNvdW50ICsgMC4yKSB7CgkJCQkJCQkvL3N0YWZmU2l6ZSA9IE1hdGgubWluKHN0YWZmU2l6ZSwgdGhpcy5zdGFmZlNpemVSYW5nZS5tYXgpOwoJCQkJCQkJc3lzdGVtQ291bnQgPSBNYXRoLm1heChNYXRoLnJvdW5kKHhzYyksIDEpOwoKCQkJCQkJCWNvbnNvbGUubG9nKCJwcm9wZXIgeHNjOiIsIHhzYywgc3lzdGVtQ291bnQpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCgkJCQkJCS8vY29uc29sZS5sb2coInN5c3RlbUNvdW50IGl0ZXJhdGlvbjoiLCBzeXN0ZW1Db3VudCwgc3RhZmZTaXplLCB4c2MpOwoJCQkJCX0KCQkJCQljb25zb2xlLmxvZygic3lzdGVtQ291bnQ6Iiwgc3lzdGVtQ291bnQsIHN0YWZmU2l6ZSk7CgoJCQkJCWlmIChzdGFmZlNpemUgPD0gdGhpcy5zdGFmZlNpemVSYW5nZS5taW4pIHsKCQkJCQkJY29uc29sZS53YXJuKCJWZXJ0aWNhbCBzcGFjZSB0b28gbGl0dGxlOiIsIHN0YWZmU2l6ZSk7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQl9CgkJCQljb25zdCBob3Jpem9udGFsTmF0dXJhbENvdW50ID0gKG53IC0gY29uc3RhbnRzLlNUQUZGX0hFQURfREVEVUNUSU9OKSAqIHN0YWZmU2l6ZSAvIChpbm5lcldpZHRoIC0gY29uc3RhbnRzLlNUQUZGX0hFQURfREVEVUNUSU9OICogc3RhZmZTaXplKTsKCQkJCWNvbnNvbGUubG9nKCJob3Jpem9udGFsTmF0dXJhbENvdW50OiIsIGhvcml6b250YWxOYXR1cmFsQ291bnQsIHN5c3RlbUNvdW50KTsKCgkJCQkvLyB2ZXJ0aWNhbCBtaWRkbGUgYWxpZ24KCQkJCWNvbnN0IHByZWZlcklubmVySGVpZ2h0ID0gc3RhZmZTaXplICogKG5oICogc3lzdGVtQ291bnQgKyBzcyAqIChzeXN0ZW1Db3VudCAtIDEpKTsKCQkJCWNvbnN0IHRvcE1hcmdpbiA9IE1hdGgubWF4KDAuOSAqIChwYXBlckhlaWdodCAtIHByZWZlcklubmVySGVpZ2h0KSAvIDIsIDApOwoJCQkJLy9jb25zb2xlLmxvZygidG9wTWFyZ2luOiIsIHRvcE1hcmdpbik7CgkJCQlnbG9iYWxBdHRyaWJ1dGVzLnRvcE1hcmdpbi52YWx1ZSA9IHtwcm90bzogIk51bWJlclVuaXQiLCBudW1iZXI6IHRvcE1hcmdpbiwgdW5pdDogIlxcY20ifTsKCgkJCQkvLyBob3Jpem9udGFsIGNlbnRlciBhbGlnbiBmb3Igc2luZ2xlIHN5c3RlbQoJCQkJaWYgKHN5c3RlbUNvdW50ID09PSAxKSB7CgkJCQkJY29uc3QgcHJlZmVySW5uZXJXaWR0aCA9IHN0YWZmU2l6ZSAqIG53OwoJCQkJCWNvbnN0IGhvcml6b250YWxNYXJnaW4gPSAwLjkgKiAocGFwZXJXaWR0aCAtIHByZWZlcklubmVyV2lkdGgpIC8gMjsKCQkJCQlpZiAoaG9yaXpvbnRhbE1hcmdpbiA+IDEpIHsKCQkJCQkJZ2xvYmFsQXR0cmlidXRlcy5sZWZ0TWFyZ2luLnZhbHVlID0ge3Byb3RvOiAiTnVtYmVyVW5pdCIsIG51bWJlcjogaG9yaXpvbnRhbE1hcmdpbiwgdW5pdDogIlxcY20ifTsKCQkJCQkJZ2xvYmFsQXR0cmlidXRlcy5yaWdodE1hcmdpbi52YWx1ZSA9IHtwcm90bzogIk51bWJlclVuaXQiLCBudW1iZXI6IGhvcml6b250YWxNYXJnaW4sIHVuaXQ6ICJcXGNtIn07CgkJCQkJfQoJCQkJfQoKCQkJCWdsb2JhbEF0dHJpYnV0ZXMuc3RhZmZTaXplLnZhbHVlID0gc3RhZmZTaXplOwoJCQkJZ2xvYmFsQXR0cmlidXRlcy5wYXBlcldpZHRoLnZhbHVlID0ge3Byb3RvOiAiTnVtYmVyVW5pdCIsIG51bWJlcjogcGFwZXJXaWR0aCwgdW5pdDogIlxcY20ifTsKCQkJCWdsb2JhbEF0dHJpYnV0ZXMucGFwZXJIZWlnaHQudmFsdWUgPSB7cHJvdG86ICJOdW1iZXJVbml0IiwgbnVtYmVyOiBwYXBlckhlaWdodCwgdW5pdDogIlxcY20ifTsKCQkJCWdsb2JhbEF0dHJpYnV0ZXMucmFnZ2VkTGFzdC52YWx1ZSA9IHN5c3RlbUNvdW50IDw9IDEgJiYgaG9yaXpvbnRhbE5hdHVyYWxDb3VudCA8IDAuODsKCgkJCQlpZiAoIXRoaXMuZml4U3RhZmZTaXplKQoJCQkJCXRoaXMuZml0U3RhZmZTaXplID0gc3RhZmZTaXplOwoKCQkJCS8vY29uc29sZS5sb2coImxpbHlEb2N1bWVudDoiLCBsaWx5RG9jdW1lbnQpOwoJCQkJcmV0dXJuIGxpbHlEb2N1bWVudC50b1N0cmluZygpOwoJCQl9LAoKCgkJCWFzeW5jIHJlbmRlclNoZWV0ICgpIHsKCQkJCWNvbnN0IGFkanVzdGVkU291cmNlID0gYXdhaXQgdGhpcy5maXRDb250YWluZXIoKTsKCQkJCWlmICghYWRqdXN0ZWRTb3VyY2UpCgkJCQkJcmV0dXJuOwoKCQkJCXRoaXMuY29udGFpbmVyRW5ncmF2aW5nID0gdHJ1ZTsKCgkJCQljb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmVuZ3JhdmUoYWRqdXN0ZWRTb3VyY2UsIHt0b2tlbml6ZTogZmFsc2V9KTsKCQkJCXRoaXMuY29udGFpbmVyU3ZncyA9IHJlc3VsdC5zdmdzOwoKCQkJCS8vIHJlbW92ZSBsaWx5cG9uZCBiYW5kCgkJCQl0aGlzLmNvbnRhaW5lclN2Z3MgPSB0aGlzLmNvbnRhaW5lclN2Z3MubWFwKHJlbW92ZUxpbHlwb25kQmFuZCk7CgoJCQkJdGhpcy5jb250YWluZXJFbmdyYXZpbmcgPSBmYWxzZTsKCQkJfSwKCgoJCQlhc3luYyBleHBvcnRTY29yZSAoKSB7CgkJCQljb25zdCBhZGp1c3RlZFNvdXJjZSA9IGF3YWl0IHRoaXMuZml0Q29udGFpbmVyKCk7CgkJCQlpZiAoIWFkanVzdGVkU291cmNlKSB7CgkJCQkJY29uc29sZS53YXJuKCJubyBzb3VyY2UuIik7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZW5ncmF2ZShhZGp1c3RlZFNvdXJjZSwge3Rva2VuaXplOiB0cnVlfSk7CgoJCQkJY29uc3QgZGF0YSA9IHsKCQkJCQlkb2M6IHJlY292ZXJKU09OKHJlc3VsdC5kb2MsIHtTdGFmZlRva2VuLCBTaGVldERvY3VtZW50fSksCgkJCQkJbWlkaTogcmVzdWx0Lm1pZGksCgkJCQkJaGFzaFRhYmxlOiByZXN1bHQuaGFzaFRhYmxlLAoJCQkJfTsKCQkJCWNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZGF0YSldKTsKCQkJCWRvd25sb2FkVXJsKFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksICJzY29yZS5qc29uIik7CgkJCX0sCgoKCQkJYXN5bmMgY29weVNvdXJjZSAoKSB7CgkJCQljb25zdCBhZGp1c3RlZFNvdXJjZSA9IGF3YWl0IHRoaXMuZml0Q29udGFpbmVyKCk7CgkJCQluYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChhZGp1c3RlZFNvdXJjZSk7CgoJCQkJY29uc29sZS5sb2coIlNvdXJjZSBjb3B5ZWQuIik7CgkJCX0sCgoKCQkJYXN5bmMgZXhwb3J0U291cmNlTGlzdCAoKSB7CgkJCQljb25zdCB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5zb3VyY2VMaXN0KTsKCQkJCWNvbnN0IGJsb2IgPSBuZXcgQmxvYihbdGV4dF0sIHt0eXBlOiAidGV4dC9wbGFpbiJ9KTsKCQkJCWRvd25sb2FkVXJsKFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksICJGbGV4RW5ncmF2ZXJTb3VyY2VzLmpzb24iKTsKCQkJfSwKCgoJCQlhc3luYyBkZWxheVJlbmRlclNoZWV0ICgpIHsKCQkJCWlmKGF3YWl0IG11dGV4RGVsYXkoInJlbmRlclNoZWV0IiwgNTAwKSkKCQkJCQl0aGlzLnJlbmRlclNoZWV0KCk7CgkJCX0sCgoKCQkJYXN5bmMgZW5ncmF2ZVNhbXBsZSAoc3RhZmZTaXplKSB7CgkJCQljb25zdCBzb3VyY2UgPSBzYW1wbGVMaWx5KHN0YWZmU2l6ZSk7CgkJCQljb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmVuZ3JhdmUoc291cmNlKTsKCQkJCXJldHVybiByZXN1bHQuc3Znc1swXTsKCQkJfSwKCgoJCQlhc3luYyB1cGRhdGVTdGFmZlNhbXBsZU1pbiAoKSB7CgkJCQl0aGlzLnN0YWZmU2FtcGxlU3ZnTWluID0gcmVtb3ZlTGlseXBvbmRCYW5kKGF3YWl0IHRoaXMuZW5ncmF2ZVNhbXBsZSh0aGlzLnN0YWZmU2l6ZVJhbmdlLm1pbikpOwoJCQl9LAoKCgkJCWFzeW5jIHVwZGF0ZVN0YWZmU2FtcGxlTWF4ICgpIHsKCQkJCXRoaXMuc3RhZmZTYW1wbGVTdmdNYXggPSByZW1vdmVMaWx5cG9uZEJhbmQoYXdhaXQgdGhpcy5lbmdyYXZlU2FtcGxlKHRoaXMuc3RhZmZTaXplUmFuZ2UubWF4KSk7CgkJCX0sCgoKCQkJdXBkYXRlU3RhZmZTYW1wbGVzICgpIHsKCQkJCXRoaXMudXBkYXRlU3RhZmZTYW1wbGVNaW4oKTsKCQkJCXRoaXMudXBkYXRlU3RhZmZTYW1wbGVNYXgoKTsKCQkJfSwKCQl9LAoKCgkJd2F0Y2g6IHsKCQkJY3VycmVudFNvdXJjZUNvbnRlbnQgKHZhbHVlLCBvbGRWYWx1ZSkgewoJCQkJLy9jb25zb2xlLmxvZygib2xkVmFsdWU6Iiwgb2xkVmFsdWUpOwoJCQkJaWYgKHZhbHVlICYmIG9sZFZhbHVlICE9PSB1bmRlZmluZWQpCgkJCQkJdGhpcy5zb3VyY2VEaXJ0eSA9IHRydWU7CgkJCX0sCgoKCQkJYXN5bmMgY2hvc2VuU291cmNlSW5kZXggKCkgewoJCQkJdGhpcy5nYXVnZVN2Z0RvYyA9IG51bGw7CgkJCQl0aGlzLmNoZWNrQW5kU2F2ZVNvdXJjZSgpOwoKCQkJCWF3YWl0IHRoaXMuJG5leHRUaWNrKCk7CgkJCQl0aGlzLnNvdXJjZURpcnR5ID0gZmFsc2U7CgoJCQkJdGhpcy5yZW5kZXJTaGVldCgpOwoJCQl9LAoKCgkJCWNvbnRhaW5lclNpemVIYXNoOiAiZGVsYXlSZW5kZXJTaGVldCIsCgoKCQkJZml4U3RhZmZTaXplICh2YWx1ZSkgewoJCQkJaWYgKCF2YWx1ZSkKCQkJCQl0aGlzLmRlbGF5UmVuZGVyU2hlZXQoKTsKCQkJfSwKCQl9LAoJfTsK"},{"version":3,"sources":["flex-engraver.vue"],"names":[],"mappings":";AAuEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;;;AAIA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;;AAGA;AACA;AACA;AACA;AACA;AACA","file":"flex-engraver.vue","sourceRoot":"app/views","sourcesContent":["<template>\n\t<div class=\"flex-engraver\"\n\t\t:class=\"{'drag-hover': dragHover}\"\n\t\t@dragover.prevent=\"dragHover = true\"\n\t\t@dragleave=\"dragHover = false\"\n\t\t@drop.prevent=\"onDropFile\"\n\t>\n\t\t<header>\n\t\t\t<StoreInput v-show=\"false\" v-model=\"containerSize.offsetWidth\" localKey=\"lotus-flexEngraverContainerWidth\" />\n\t\t\t<StoreInput v-show=\"false\" v-model=\"containerSize.offsetHeight\" localKey=\"lotus-flexEngraverContainerHeight\" />\n\t\t\t<StoreInput v-show=\"false\" v-model=\"chosenSourceIndex\" localKey=\"lotus-flexEngraverChosenSourceIndex\" />\n\t\t\t<StoreInput v-show=\"false\" v-model=\"staffSizeRange.min\" localKey=\"lotus-flexEngraverStaffSizeRangeMin\" />\n\t\t\t<StoreInput v-show=\"false\" v-model=\"staffSizeRange.max\" localKey=\"lotus-flexEngraverStaffSizeRangeMaX\" />\n\t\t\t<StoreInput v-show=\"false\" v-model=\"fitStaffSize\" localKey=\"lotus-flexEngraverFitStaffSize\" />\n\t\t\t<BoolStoreInput v-show=\"false\" v-model=\"fixStaffSize\" localKey=\"lotus-flexEngraverFixStaffSize\" />\n\t\t\t<select class=\"source-list\" v-model=\"chosenSourceIndex\">\n\t\t\t\t<option v-for=\"(source, i) of sourceList\" :key=\"i\" :value=\"i\">{{source.name}}</option>\n\t\t\t</select>\n\t\t\t<span class=\"dirty\" @click=\"saveSource\">{{sourceDirty ? \"*\" : \" \"}}</span>\n\t\t\t<button @click=\"removeCurrentSource\">&#x1f5d1;</button>\n\t\t\t<button @click=\"gauge\">&#x1f4cf;</button>\n\t\t\t<button @click=\"renderSheet\">&#x1f3bc;</button>\n\t\t\t<!--button @click=\"exportScore\">json</button-->\n\t\t\t<button @click=\"copySource\" title=\"copy lilypond source\">&#x2398;</button>\n\t\t\t<button @click=\"exportSourceList\" title=\"export scores json\">&#x2913;</button>\n\t\t\t<div class=\"gauge-view\" v-if=\"gaugeSvgDoc\">\n\t\t\t\t<SheetSimple v-if=\"gaugeSvgDoc\" :documents=\"[gaugeSvgDoc]\" />\n\t\t\t</div>\n\t\t</header>\n\t\t<main>\n\t\t\t<SourceEditor v-if=\"currentSource\" :source.sync=\"currentSource.content\" />\n\t\t\t<div class=\"viewer\">\n\t\t\t\t<div class=\"sheet-container\" ref=\"sheetContainer\"\n\t\t\t\t\t:style=\"{\n\t\t\t\t\t\twidth: `${containerSize.offsetWidth}px`,\n\t\t\t\t\t\theight: `${containerSize.offsetHeight}px`,\n\t\t\t\t\t}\"\n\t\t\t\t\t@mousemove=\"updateContainerSize\"\n\t\t\t\t>\n\t\t\t\t\t<SheetSimple v-if=\"containerSvgs\" :documents=\"containerSvgs\" />\n\t\t\t\t\t<Loading v-show=\"containerEngraving\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"container-size\">\n\t\t\t\t\t<span>{{containerSize.width}}</span>\n\t\t\t\t\t&times;\n\t\t\t\t\t<span>{{containerSize.height}}</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"staff-size\" v-if=\"fitStaffSize\">\n\t\t\t\t\t<em>{{fitStaffSize.toFixed(2)}}</em> pt\n\t\t\t\t\t<span class=\"adjuster\">\n\t\t\t\t\t\t<input type=\"checkbox\" v-model=\"fixStaffSize\" title=\"fix staff size\" />\n\t\t\t\t\t\t<input class=\"slider\" type=\"range\" :disabled=\"!fixStaffSize\"\n\t\t\t\t\t\t\tv-model.number=\"fitStaffSize\" :min=\"staffSizeRange.min\" :max=\"staffSizeRange.max\" step=\"any\"\n\t\t\t\t\t\t\t@change=\"delayRenderSheet\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span class=\"min\">\n\t\t\t\t\t\t\t<input type=\"number\" v-model=\"staffSizeRange.min\" @change=\"updateStaffSampleMin\" />\n\t\t\t\t\t\t\t<SheetSimple v-if=\"staffSampleSvgMin\" :documents=\"[staffSampleSvgMin]\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span class=\"max\">\n\t\t\t\t\t\t\t<input type=\"number\" v-model=\"staffSizeRange.max\" @change=\"updateStaffSampleMax\" />\n\t\t\t\t\t\t\t<SheetSimple v-if=\"staffSampleSvgMax\" :documents=\"[staffSampleSvgMax]\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</main>\n\t</div>\n</template>\n\n<script>\n\timport {downloadUrl} from \"../utils.js\";\n\timport {mutexDelay} from \"../delay.js\";\n\timport loadJisonParser from \"../loadJisonParser.js\";\n\timport {LilyDocument} from \"../../inc/lilyParser\";\n\timport {recoverJSON} from \"../../inc/jsonRecovery.ts\";\n\timport {StaffToken, SheetDocument} from \"../../inc/staffSvg\";\n\timport * as constants from \"../../inc/constants.ts\";\n\n\timport SourceEditor from \"../components/source-editor.vue\";\n\timport StoreInput from \"../components/store-input.vue\";\n\timport BoolStoreInput from \"../components/bool-store-input.vue\";\n\timport SheetSimple from \"../components/sheet-simple.vue\";\n\timport Loading from \"../components/loading-dots.vue\";\n\n\n\n\tconst sampleLily = staffSize => `\n\t\t#(set-global-staff-size ${staffSize})\n\t\t\\\\paper {\n\t\t\tpaper-width = ${staffSize * 0.16}\\\\cm\n\t\t\tpaper-height = ${staffSize * 0.08}\\\\cm\n\t\t\ttop-margin = 0\n\t\t\tbottom-margin = 0\n\t\t\tleft-margin = 0.2\\\\cm\n\t\t\tright-margin = 0\n\t\t}\n\t\t\\\\layout\n\t\t{\n\t\t\tindent = 0\n\t\t}\n\t\t{c'1}\n\t`;\n\n\n\tconst removeLilypondBand = svg => svg.replace(/(?:>)[^<>]+lilypond.org(?=<)/g, \"\");\n\n\n\n\texport default {\n\t\tname: \"flex-engraver\",\n\n\n\t\tcomponents: {\n\t\t\tSourceEditor,\n\t\t\tStoreInput,\n\t\t\tBoolStoreInput,\n\t\t\tSheetSimple,\n\t\t\tLoading,\n\t\t},\n\n\n\t\tdata () {\n\t\t\treturn {\n\t\t\t\tcontainerSize: {\n\t\t\t\t\twidth: 100,\n\t\t\t\t\theight: 100,\n\t\t\t\t\toffsetWidth: 1215,\n\t\t\t\t\toffsetHeight: 495,\n\t\t\t\t},\n\t\t\t\tdragHover: false,\n\t\t\t\tsourceList: [],\n\t\t\t\tchosenSourceIndex: 0,\n\t\t\t\tsourceDirty: false,\n\t\t\t\tgaugeSvgDoc: null,\n\t\t\t\tstaffSizeRange: {\n\t\t\t\t\tmin: 10,\n\t\t\t\t\tmax: 40,\n\t\t\t\t},\n\t\t\t\tcontainerSvgs: null,\n\t\t\t\tcontainerEngraving: false,\n\t\t\t\tstaffSampleSvgMin: null,\n\t\t\t\tstaffSampleSvgMax: null,\n\t\t\t\tfitStaffSize: 24,\n\t\t\t\tfixStaffSize: false,\n\t\t\t};\n\t\t},\n\n\n\t\tcomputed: {\n\t\t\tcurrentSource () {\n\t\t\t\treturn this.sourceList[this.chosenSourceIndex];\n\t\t\t},\n\n\n\t\t\tcurrentSourceContent () {\n\t\t\t\treturn this.currentSource && this.currentSource.content;\n\t\t\t},\n\n\n\t\t\tcontainerSizeHash () {\n\t\t\t\treturn `${this.containerSize.width},${this.containerSize.height}`;\n\t\t\t},\n\t\t},\n\n\n\t\tasync created () {\n\t\t\twindow.$main = this;\n\n\t\t\tthis.loadSource();\n\n\t\t\tthis.lilyParser = await loadJisonParser(import(\"../../jison/lilypond.jison\"));\n\t\t\tconsole.log(\"Lilypond parser loaded.\");\n\n\t\t\tthis.updateStaffSamples();\n\t\t},\n\n\n\t\tasync mounted () {\n\t\t\tawait this.$nextTick();\n\t\t\tthis.updateContainerSize();\n\t\t},\n\n\n\t\tbeforeDestroy () {\n\t\t\tthis.checkAndSaveSource();\n\t\t},\n\n\n\t\tmethods: {\n\t\t\tupdateContainerSize ({widthOffset = true} = {}) {\n\t\t\t\tthis.containerSize.width = this.$refs.sheetContainer.clientWidth;\n\t\t\t\tthis.containerSize.height = this.$refs.sheetContainer.clientHeight;\n\t\t\t\t//console.log(\"updateContainerSize:\", this.containerSize.width, this.containerSize.height);\n\n\t\t\t\tif (widthOffset) {\n\t\t\t\t\tthis.containerSize.offsetWidth = this.$refs.sheetContainer.offsetWidth;\n\t\t\t\t\tthis.containerSize.offsetHeight = this.$refs.sheetContainer.offsetHeight;\n\t\t\t\t}\n\t\t\t},\n\n\n\t\t\tasync onDropFile (event) {\n\t\t\t\tthis.dragHover = false;\n\n\t\t\t\tconst file = event.dataTransfer.files[0];\n\t\t\t\tif (file) {\n\t\t\t\t\tswitch (file.type) {\n\t\t\t\t\tcase \"text/x-lilypond\":\n\t\t\t\t\tcase \"text/lilypond-source\":\n\t\t\t\t\t\tconst content = await file.readAs(\"Text\");\n\t\t\t\t\t\t//console.log(\"content:\", file, content);\n\t\t\t\t\t\tconst name = file.name.replace(/\\.ly$/, \"\");\n\n\t\t\t\t\t\tthis.sourceList.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.sourceDirty = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\n\t\t\tremoveCurrentSource () {\n\t\t\t\tthis.sourceList.splice(this.chosenSourceIndex, 1);\n\t\t\t\tthis.chosenSourceIndex = Math.min(this.chosenSourceIndex, this.sourceList.length - 1);\n\t\t\t},\n\n\n\t\t\tloadSource () {\n\t\t\t\tif (localStorage.lotusFlexEngraverSources) {\n\t\t\t\t\tthis.sourceList = JSON.parse(localStorage.lotusFlexEngraverSources);\n\t\t\t\t\tconsole.log(\"Source list loaded.\");\n\t\t\t\t}\n\n\t\t\t\tthis.sourceDirty = false;\n\t\t\t},\n\n\n\t\t\tsaveSource () {\n\t\t\t\tlocalStorage.lotusFlexEngraverSources = JSON.stringify(this.sourceList);\n\t\t\t\tconsole.log(\"Source list saved.\");\n\n\t\t\t\tthis.sourceDirty = false;\n\t\t\t},\n\n\n\t\t\tcheckAndSaveSource () {\n\t\t\t\tif (this.sourceDirty)\n\t\t\t\t\tthis.saveSource();\n\t\t\t},\n\n\n\t\t\tasync gauge () {\n\t\t\t\tconst TEST_STAFF_SIZE = 20;\n\t\t\t\tconst PAPER_WIDTH = 10000;\n\t\t\t\tconst PAPER_WIDTH_NARROW = 2;\n\n\t\t\t\tconst lilyDocument = new LilyDocument(await this.lilyParser.parse(this.currentSourceContent));\n\t\t\t\t//console.log(\"lilyDocument:\", lilyDocument);\n\n\t\t\t\tconst globalAttributes = lilyDocument.globalAttributes();\n\t\t\t\tglobalAttributes.staffSize.value = TEST_STAFF_SIZE;\n\t\t\t\tglobalAttributes.paperWidth.value.number = PAPER_WIDTH;\n\t\t\t\tglobalAttributes.paperHeight.value.number = 1000;\n\t\t\t\tglobalAttributes.raggedLast.value = true;\n\t\t\t\tglobalAttributes.topMargin.value = 0;\n\t\t\t\tglobalAttributes.leftMargin.value = 0;\n\n\t\t\t\tconst source = lilyDocument.toString();\n\t\t\t\t//console.log(\"source:\", source);\n\n\t\t\t\ttry {\n\t\t\t\t\tconst resultH = await this.engrave(source, {tokenize: true});\n\t\t\t\t\t//console.log(\"gauge:\", resultH);\n\n\t\t\t\t\tthis.gaugeSvgDoc = resultH.svgs[0];\n\n\t\t\t\t\tconsole.assert(resultH.svgs.length === 1, \"invalid page count:\", resultH);\n\t\t\t\t\tconst sheetDocumentH = recoverJSON(resultH.doc, {StaffToken, SheetDocument});\n\t\t\t\t\tconst system = sheetDocumentH.pages[0].systems[0];\n\t\t\t\t\tconst sizeFactor = (PAPER_WIDTH / sheetDocumentH.pages[0].viewBox.width) / TEST_STAFF_SIZE;\n\t\t\t\t\tconst naturalWidth = system.width * sizeFactor;\n\t\t\t\t\tconst naturalHeight = (system.bottom - system.top) * sizeFactor;\n\t\t\t\t\t//console.log(\"natural size:\", naturalWidth, naturalHeight, sheetDocumentH);\n\n\t\t\t\t\tglobalAttributes.paperWidth.value.number = PAPER_WIDTH_NARROW;\n\t\t\t\t\tconst resultV = await this.engrave(lilyDocument.toString(), {tokenize: true});\n\t\t\t\t\tconsole.assert(resultV.svgs.length === 1, \"invalid page count:\", resultV);\n\t\t\t\t\tconst sheetDocumentV = recoverJSON(resultV.doc, {StaffToken, SheetDocument});\n\t\t\t\t\tconst systems = sheetDocumentV.pages[0].systems;\n\t\t\t\t\tconst heights = Array(systems.length - 1).fill(null).map((_, i) => systems[i + 1].y - systems[i].y);\n\t\t\t\t\t//console.log(\"heights:\", heights);\n\t\t\t\t\tconst systemSpacing = Math.max(system.bottom - system.top, ...heights) * sizeFactor - naturalHeight;\n\t\t\t\t\t//console.log(\"systemSpacing:\", systemSpacing);\n\n\t\t\t\t\tconst newLiy = new LilyDocument(await this.lilyParser.parse(this.currentSourceContent));\n\t\t\t\t\t//console.log(\"newLiy:\", newLiy);\n\n\t\t\t\t\tnewLiy.root.appendAssignment(\"naturalWidth\", naturalWidth);\n\t\t\t\t\tnewLiy.root.appendAssignment(\"naturalHeight\", naturalHeight);\n\t\t\t\t\tnewLiy.root.appendAssignment(\"systemSpacing\", systemSpacing);\n\n\t\t\t\t\t//console.log(\"new doc:\", newLiy.toString());\n\t\t\t\t\tthis.currentSource.content = newLiy.toString();\n\n\t\t\t\t\tthis.checkAndSaveSource();\n\t\t\t\t}\n\t\t\t\tcatch (error) {\n\t\t\t\t\tconsole.warn(\"Engraving failed:\", error);\n\t\t\t\t}\n\t\t\t},\n\n\n\t\t\tasync engrave (source, {tokenize} = {}) {\n\t\t\t\tconst body = new FormData();\n\t\t\t\tbody.append(\"source\", source);\n\t\t\t\tif (tokenize)\n\t\t\t\t\tbody.append(\"tokenize\", tokenize);\n\n\t\t\t\tconst response = await fetch(\"/engrave\", {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tbody,\n\t\t\t\t});\n\t\t\t\tif (!response.ok) \n\t\t\t\t\tthrow new Error(await response.text());\n\n\t\t\t\treturn response.json();\n\t\t\t},\n\n\n\t\t\tasync fitContainer () {\n\t\t\t\tif (!this.lilyParser || !this.currentSourceContent)\n\t\t\t\t\treturn null;\n\n\t\t\t\tconst lilyDocument = new LilyDocument(await this.lilyParser.parse(this.currentSourceContent));\n\n\t\t\t\tconst naturalWidth = lilyDocument.root.getField(\"naturalWidth\");\n\t\t\t\tconst naturalHeight = lilyDocument.root.getField(\"naturalHeight\");\n\t\t\t\tconst systemSpacing = lilyDocument.root.getField(\"systemSpacing\");\n\t\t\t\tif (!naturalWidth || !naturalHeight || !systemSpacing) {\n\t\t\t\t\tconsole.log(\"natural size is not set.\", naturalWidth, naturalHeight);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst nw = naturalWidth.value;\n\t\t\t\tconst nh = naturalHeight.value;\n\t\t\t\tconst ss = systemSpacing.value + 0.04;\n\n\t\t\t\tconst globalAttributes = lilyDocument.globalAttributes();\n\n\t\t\t\tconst paperWidth = this.containerSize.width / constants.CM_TO_PX;\n\t\t\t\tconst paperHeight = (this.containerSize.height - 9) / constants.CM_TO_PX;\n\n\t\t\t\tconst getNumberUnitValue = key => globalAttributes[key].value ? globalAttributes[key].value.number : null;\n\n\t\t\t\tconst marginLeft = getNumberUnitValue(\"leftMargin\") || constants.LILY_HORIZONTAL_MARGIN_DEFAULT;\n\t\t\t\tconst marginRight = getNumberUnitValue(\"rightMargin\") || constants.LILY_HORIZONTAL_MARGIN_DEFAULT;\n\t\t\t\tconst marginTop = getNumberUnitValue(\"topMargin\") || constants.LILY_TOP_MARGIN_DEFAULT;\n\t\t\t\tconst marginBottom = getNumberUnitValue(\"bottomMargin\") || constants.LILY_BOTTOM_MARGIN_DEFAULT;\n\n\t\t\t\tconst innerHeight = paperHeight - marginTop - marginBottom;\n\t\t\t\tconst innerWidth = paperWidth - marginLeft - marginRight;\n\n\t\t\t\tlet systemCount = 1;\n\t\t\t\tlet staffSize = null;\n\n\t\t\t\tif (this.fixStaffSize) {\n\t\t\t\t\tstaffSize = this.fitStaffSize;\n\t\t\t\t\t//const ysc = (innerHeight / staffSize + ss) / (nh + ss);\n\t\t\t\t\t//systemCount = Math.max(Math.floor(ysc), 1);\n\t\t\t\t\tconst xsc = (nw - constants.STAFF_HEAD_DEDUCTION) * staffSize / (innerWidth - constants.STAFF_HEAD_DEDUCTION * staffSize);\n\t\t\t\t\tsystemCount = Math.ceil(xsc - 0.2);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor (; systemCount < 1e+3; ++systemCount) {\n\t\t\t\t\t\tconst currentStaffSize = innerHeight / ((nh * systemCount + ss * (systemCount - 1)));\n\t\t\t\t\t\tif (currentStaffSize < this.staffSizeRange.min) {\n\t\t\t\t\t\t\tif (!Number.isFinite(staffSize))\n\t\t\t\t\t\t\t\tstaffSize = currentStaffSize;\n\n\t\t\t\t\t\t\t--systemCount;\n\n\t\t\t\t\t\t\tconsole.log(\"too samll vertical prefered staff size:\", currentStaffSize, systemCount);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstaffSize = Math.min(currentStaffSize, this.staffSizeRange.max);\n\n\t\t\t\t\t\t// compute system count by horizontal splitting\n\t\t\t\t\t\tconst xsc = (nw - constants.STAFF_HEAD_DEDUCTION) * staffSize / (innerWidth - constants.STAFF_HEAD_DEDUCTION * staffSize);\n\t\t\t\t\t\tif (xsc < 0) {\n\t\t\t\t\t\t\tconsole.warn(\"Horizontal space too little:\", xsc, innerWidth - constants.STAFF_HEAD_DEDUCTION * staffSize);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (xsc < systemCount + 0.2) {\n\t\t\t\t\t\t\t//staffSize = Math.min(staffSize, this.staffSizeRange.max);\n\t\t\t\t\t\t\tsystemCount = Math.max(Math.round(xsc), 1);\n\n\t\t\t\t\t\t\tconsole.log(\"proper xsc:\", xsc, systemCount);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//console.log(\"systemCount iteration:\", systemCount, staffSize, xsc);\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(\"systemCount:\", systemCount, staffSize);\n\n\t\t\t\t\tif (staffSize <= this.staffSizeRange.min) {\n\t\t\t\t\t\tconsole.warn(\"Vertical space too little:\", staffSize);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst horizontalNaturalCount = (nw - constants.STAFF_HEAD_DEDUCTION) * staffSize / (innerWidth - constants.STAFF_HEAD_DEDUCTION * staffSize);\n\t\t\t\tconsole.log(\"horizontalNaturalCount:\", horizontalNaturalCount, systemCount);\n\n\t\t\t\t// vertical middle align\n\t\t\t\tconst preferInnerHeight = staffSize * (nh * systemCount + ss * (systemCount - 1));\n\t\t\t\tconst topMargin = Math.max(0.9 * (paperHeight - preferInnerHeight) / 2, 0);\n\t\t\t\t//console.log(\"topMargin:\", topMargin);\n\t\t\t\tglobalAttributes.topMargin.value = {proto: \"NumberUnit\", number: topMargin, unit: \"\\\\cm\"};\n\n\t\t\t\t// horizontal center align for single system\n\t\t\t\tif (systemCount === 1) {\n\t\t\t\t\tconst preferInnerWidth = staffSize * nw;\n\t\t\t\t\tconst horizontalMargin = 0.9 * (paperWidth - preferInnerWidth) / 2;\n\t\t\t\t\tif (horizontalMargin > 1) {\n\t\t\t\t\t\tglobalAttributes.leftMargin.value = {proto: \"NumberUnit\", number: horizontalMargin, unit: \"\\\\cm\"};\n\t\t\t\t\t\tglobalAttributes.rightMargin.value = {proto: \"NumberUnit\", number: horizontalMargin, unit: \"\\\\cm\"};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tglobalAttributes.staffSize.value = staffSize;\n\t\t\t\tglobalAttributes.paperWidth.value = {proto: \"NumberUnit\", number: paperWidth, unit: \"\\\\cm\"};\n\t\t\t\tglobalAttributes.paperHeight.value = {proto: \"NumberUnit\", number: paperHeight, unit: \"\\\\cm\"};\n\t\t\t\tglobalAttributes.raggedLast.value = systemCount <= 1 && horizontalNaturalCount < 0.8;\n\n\t\t\t\tif (!this.fixStaffSize)\n\t\t\t\t\tthis.fitStaffSize = staffSize;\n\n\t\t\t\t//console.log(\"lilyDocument:\", lilyDocument);\n\t\t\t\treturn lilyDocument.toString();\n\t\t\t},\n\n\n\t\t\tasync renderSheet () {\n\t\t\t\tconst adjustedSource = await this.fitContainer();\n\t\t\t\tif (!adjustedSource)\n\t\t\t\t\treturn;\n\n\t\t\t\tthis.containerEngraving = true;\n\n\t\t\t\tconst result = await this.engrave(adjustedSource, {tokenize: false});\n\t\t\t\tthis.containerSvgs = result.svgs;\n\n\t\t\t\t// remove lilypond band\n\t\t\t\tthis.containerSvgs = this.containerSvgs.map(removeLilypondBand);\n\n\t\t\t\tthis.containerEngraving = false;\n\t\t\t},\n\n\n\t\t\tasync exportScore () {\n\t\t\t\tconst adjustedSource = await this.fitContainer();\n\t\t\t\tif (!adjustedSource) {\n\t\t\t\t\tconsole.warn(\"no source.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst result = await this.engrave(adjustedSource, {tokenize: true});\n\n\t\t\t\tconst data = {\n\t\t\t\t\tdoc: recoverJSON(result.doc, {StaffToken, SheetDocument}),\n\t\t\t\t\tmidi: result.midi,\n\t\t\t\t\thashTable: result.hashTable,\n\t\t\t\t};\n\t\t\t\tconst blob = new Blob([JSON.stringify(data)]);\n\t\t\t\tdownloadUrl(URL.createObjectURL(blob), \"score.json\");\n\t\t\t},\n\n\n\t\t\tasync copySource () {\n\t\t\t\tconst adjustedSource = await this.fitContainer();\n\t\t\t\tnavigator.clipboard.writeText(adjustedSource);\n\n\t\t\t\tconsole.log(\"Source copyed.\");\n\t\t\t},\n\n\n\t\t\tasync exportSourceList () {\n\t\t\t\tconst text = JSON.stringify(this.sourceList);\n\t\t\t\tconst blob = new Blob([text], {type: \"text/plain\"});\n\t\t\t\tdownloadUrl(URL.createObjectURL(blob), \"FlexEngraverSources.json\");\n\t\t\t},\n\n\n\t\t\tasync delayRenderSheet () {\n\t\t\t\tif(await mutexDelay(\"renderSheet\", 500))\n\t\t\t\t\tthis.renderSheet();\n\t\t\t},\n\n\n\t\t\tasync engraveSample (staffSize) {\n\t\t\t\tconst source = sampleLily(staffSize);\n\t\t\t\tconst result = await this.engrave(source);\n\t\t\t\treturn result.svgs[0];\n\t\t\t},\n\n\n\t\t\tasync updateStaffSampleMin () {\n\t\t\t\tthis.staffSampleSvgMin = removeLilypondBand(await this.engraveSample(this.staffSizeRange.min));\n\t\t\t},\n\n\n\t\t\tasync updateStaffSampleMax () {\n\t\t\t\tthis.staffSampleSvgMax = removeLilypondBand(await this.engraveSample(this.staffSizeRange.max));\n\t\t\t},\n\n\n\t\t\tupdateStaffSamples () {\n\t\t\t\tthis.updateStaffSampleMin();\n\t\t\t\tthis.updateStaffSampleMax();\n\t\t\t},\n\t\t},\n\n\n\t\twatch: {\n\t\t\tcurrentSourceContent (value, oldValue) {\n\t\t\t\t//console.log(\"oldValue:\", oldValue);\n\t\t\t\tif (value && oldValue !== undefined)\n\t\t\t\t\tthis.sourceDirty = true;\n\t\t\t},\n\n\n\t\t\tasync chosenSourceIndex () {\n\t\t\t\tthis.gaugeSvgDoc = null;\n\t\t\t\tthis.checkAndSaveSource();\n\n\t\t\t\tawait this.$nextTick();\n\t\t\t\tthis.sourceDirty = false;\n\n\t\t\t\tthis.renderSheet();\n\t\t\t},\n\n\n\t\t\tcontainerSizeHash: \"delayRenderSheet\",\n\n\n\t\t\tfixStaffSize (value) {\n\t\t\t\tif (!value)\n\t\t\t\t\tthis.delayRenderSheet();\n\t\t\t},\n\t\t},\n\t};\n</script>\n\n<style lang=\"scss\">\n\t$header-height: 200px;\n\n\n\t.flex-engraver\n\t{\n\t\twidth: 100%;\n\t\theight: 100vh;\n\n\t\theader\n\t\t{\n\t\t\tposition: absolute;\n\t\t\twidth: 100%;\n\t\t\theight: $header-height;\n\t\t\tbackground: #fafafa;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\talign-items: center;\n\t\t\tfont-size: 36px;\n\t\t\toverflow: hidden;\n\n\t\t\t& > *\n\t\t\t{\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-size: inherit;\n\t\t\t\tmargin: 0 .5em;\n\t\t\t}\n\n\t\t\t.source-list\n\t\t\t{\n\t\t\t\tmin-width: 8em;\n\t\t\t}\n\n\t\t\t.gauge-view\n\t\t\t{\n\t\t\t\theight: 100%;\n\t\t\t}\n\n\t\t\t.dirty\n\t\t\t{\n\t\t\t\tfont-weight: bold;\n\t\t\t\tcolor: orange;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\n\t\tmain\n\t\t{\n\t\t\tpadding-top: $header-height;\n\t\t\theight: 100%;\n\t\t\tbackground: #eee;\n\t\t\twhite-space: nowrap;\n\n\t\t\tem\n\t\t\t{\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\n\t\t\t.source-editor\n\t\t\t{\n\t\t\t\theight: calc(100% - #{$header-height});\n\t\t\t\tvertical-align: top;\n\t\t\t}\n\n\t\t\t.viewer\n\t\t\t{\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\tfont-size: 36px;\n\n\t\t\t\t.sheet-container\n\t\t\t\t{\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tresize: both;\n\t\t\t\t\tmargin: 2em;\n\t\t\t\t\toutline: solid 1px #ccc;\n\t\t\t\t\toverflow: scroll;\n\t\t\t\t\tbackground: white;\n\n\t\t\t\t\t.sheet\n\t\t\t\t\t{\n\t\t\t\t\t\t.page\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t.loading-dots\n\t\t\t\t\t{\n\t\t\t\t\t\tbackground-color: transparent;\n\n\t\t\t\t\t\t.ellipsis\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tzoom: 200%;\n\n\t\t\t\t\t\t\t& > div\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbackground-color: steelblue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t.container-size\n\t\t\t\t{\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tbottom: 0;\n\t\t\t\t\tright: 2em;\n\t\t\t\t}\n\n\t\t\t\t.staff-size\n\t\t\t\t{\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tbottom: 0;\n\t\t\t\t\tleft: 2em;\n\n\t\t\t\t\tinput\n\t\t\t\t\t{\n\t\t\t\t\t\tfont-size: inherit;\n\t\t\t\t\t}\n\n\t\t\t\t\t.fit-staff-size\n\t\t\t\t\t{\n\t\t\t\t\t\tborder: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t.adjuster\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\tmargin: 0 .6em;\n\t\t\t\t\t\tzoom: 1.5;\n\n\t\t\t\t\t\t.slider\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: 200px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.min, .max\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\tfont-size: 16px;\n\t\t\t\t\t\t\ttop: 3em;\n\t\t\t\t\t\t\ttext-align: center;\n\n\t\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\twidth: 2em;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t.sheet\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\ttop: 120%;\n\t\t\t\t\t\t\t\tleft: 50%;\n\t\t\t\t\t\t\t\ttransform: translate(-50%, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.min\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.max\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tright: -2em;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.staff-size-viewer\n\t\t\t{\n\t\t\t\tposition: absolute;\n\t\t\t\tright: 0;\n\t\t\t\tbottom: 0;\n\n\t\t\t\tinput\n\t\t\t\t{\n\t\t\t\t\twidth: 4em;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.drag-hover\n\t\t{\n\t\t\theader\n\t\t\t{\n\t\t\t\tbackground-color: #cfc;\n\t\t\t\toutline: 4px #4f4 dashed;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"]}]}