{"remainingRequest":"/Users/sandermoolin/.nvm/versions/node/v10.19.0/lib/node_modules/@vue/cli-service-global/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/sandermoolin/misc/vue-phenomenon/src/VuePhenomenon.vue?vue&type=script&lang=js&","dependencies":[{"path":"/Users/sandermoolin/misc/vue-phenomenon/src/VuePhenomenon.vue","mtime":1601065390250},{"path":"/Users/sandermoolin/.nvm/versions/node/v10.19.0/lib/node_modules/@vue/cli-service-global/node_modules/babel-loader/lib/index.js","mtime":499162500000},{"path":"/Users/sandermoolin/.nvm/versions/node/v10.19.0/lib/node_modules/@vue/cli-service-global/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/sandermoolin/.nvm/versions/node/v10.19.0/lib/node_modules/@vue/cli-service-global/node_modules/vue-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCcKCmV4cG9ydCBkZWZhdWx0IHsKICAgIHByb3BzOiB7CiAgICAgICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IHt9IH0sCiAgICAgICAgaW5zdGFuY2VzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiAoKSA9PiBbXSB9LAogICAgICAgIGFsbG93QWxwaGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LAogICAgfSwKICAgIGRhdGEoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcGhlbm9tOiBudWxsLAogICAgICAgICAgICBhZGRlZEtleXM6IFtdLAogICAgICAgIH0KICAgIH0sCiAgICBhc3luYyBtb3VudGVkKCkgewogICAgICAgIGlmICghd2luZG93KSByZXR1cm4KCiAgICAgICAgaWYgKCF3aW5kb3cuUGhlbm9tZW5vbikgewogICAgICAgICAgICB3aW5kb3cuUGhlbm9tZW5vbiA9IChhd2FpdCBpbXBvcnQoJ3BoZW5vbWVub24nKSkuZGVmYXVsdAogICAgICAgIH0KCiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucyB8fCB7fQoKICAgICAgICB0aGlzLnBoZW5vbSA9IG5ldyB3aW5kb3cuUGhlbm9tZW5vbih7CiAgICAgICAgICAgIGNhbnZhczogdGhpcy4kcmVmcy5jYW52YXMsCiAgICAgICAgICAgIC4uLm9wdHMsCgogICAgICAgICAgICBjb250ZXh0OiB7CiAgICAgICAgICAgICAgICAuLi4ob3B0cy5jb250ZXh0IHx8IHt9KSwKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNldHRpbmdzOiB7CiAgICAgICAgICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywKICAgICAgICAgICAgICAgIC4uLihvcHRzLnNldHRpbmdzIHx8IHt9KSwKICAgICAgICAgICAgfSwKICAgICAgICB9KQoKICAgICAgICAvLyBhZGQgdHJhbnNwYXJlbmN5CiAgICAgICAgaWYgKHRoaXMuYWxsb3dBbHBoYSkgewogICAgICAgICAgICB0aGlzLnBoZW5vbS5nbC5lbmFibGUodGhpcy5waGVub20uZ2wuQkxFTkQpCiAgICAgICAgICAgIHRoaXMucGhlbm9tLmdsLmJsZW5kRnVuYygKICAgICAgICAgICAgICAgIHRoaXMucGhlbm9tLmdsLlNSQ19BTFBIQSwKICAgICAgICAgICAgICAgIHRoaXMucGhlbm9tLmdsLk9ORV9NSU5VU19TUkNfQUxQSEEKICAgICAgICAgICAgKQogICAgICAgIH0KCiAgICAgICAgLy8gZG9uZSBtb3VudGluZyBwaGVub21lbm9uCiAgICAgICAgdGhpcy4kZW1pdCgnaW5pdGlhbGl6ZWQnLCB0aGlzLnBoZW5vbSkKCiAgICAgICAgdGhpcy5yZWZyZXNoSW5zdGFuY2VzKCkKICAgIH0sCiAgICBtZXRob2RzOiB7CiAgICAgICAgcmVmcmVzaEluc3RhbmNlcygpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnBoZW5vbSkgewogICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lCiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BoZW5vbWVub24gbm90IGluaXRpYWxpemVkLicpCiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gVE9ETzogaGFyZCByZWZyZXNoCiAgICAgICAgICAgIC8vIGlmIChoYXJkUmVmcmVzaCkgewogICAgICAgICAgICAvLyB9CgogICAgICAgICAgICBmb3IgKGxldCBpbnN0YW5jZSBvZiB0aGlzLmluc3RhbmNlcykgewogICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBhZGRlZCwgaWdub3JlCiAgICAgICAgICAgICAgICBpZiAodGhpcy5hZGRlZEtleXMuaW5jbHVkZXMoaW5zdGFuY2Uua2V5KSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29uc3QgdmVydGV4ID0KICAgICAgICAgICAgICAgICAgICBnZXQoaW5zdGFuY2UsICdzZXR0aW5ncy52ZXJ0ZXgnLCBudWxsKSB8fAogICAgICAgICAgICAgICAgICAgIGdldCh0aGlzLiRzbG90cywgJ3ZlcnRleFswXS5jaGlsZHJlblswXS50ZXh0JywgJycpCiAgICAgICAgICAgICAgICBjb25zdCBmcmFnbWVudCA9CiAgICAgICAgICAgICAgICAgICAgZ2V0KGluc3RhbmNlLCAnc2V0dGluZ3MuZnJhZ21lbnQnLCBudWxsKSB8fAogICAgICAgICAgICAgICAgICAgIGdldCh0aGlzLiRzbG90cywgJ2ZyYWdtZW50WzBdLmNoaWxkcmVuWzBdLnRleHQnLCAnJykKCiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gWwogICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmtleSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmluc3RhbmNlLnNldHRpbmdzLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB0aGlzLnBoZW5vbS5hZGQoLi4uYXJncykKCiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdhZGRlZCcsIGFyZ3MpCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgfSwKfQo="},{"version":3,"sources":["VuePhenomenon.vue"],"names":[],"mappings":";;;;;;;;;AASA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA","file":"VuePhenomenon.vue","sourceRoot":"../src","sourcesContent":["<template>\n    <section class=\"vue-phenomenon\">\n        <canvas ref=\"canvas\" />\n        <slot name=\"vertex\" />\n        <slot name=\"fragment\" />\n    </section>\n</template>\n\n<script>\nimport get from 'lodash/get'\n\nexport default {\n    props: {\n        options: { type: Object, default: () => {} },\n        instances: { type: Array, default: () => [] },\n        allowAlpha: { type: Boolean, default: true },\n    },\n    data() {\n        return {\n            phenom: null,\n            addedKeys: [],\n        }\n    },\n    async mounted() {\n        if (!window) return\n\n        if (!window.Phenomenon) {\n            window.Phenomenon = (await import('phenomenon')).default\n        }\n\n        const opts = this.options || {}\n\n        this.phenom = new window.Phenomenon({\n            canvas: this.$refs.canvas,\n            ...opts,\n\n            context: {\n                ...(opts.context || {}),\n            },\n\n            settings: {\n                devicePixelRatio: window.devicePixelRatio,\n                ...(opts.settings || {}),\n            },\n        })\n\n        // add transparency\n        if (this.allowAlpha) {\n            this.phenom.gl.enable(this.phenom.gl.BLEND)\n            this.phenom.gl.blendFunc(\n                this.phenom.gl.SRC_ALPHA,\n                this.phenom.gl.ONE_MINUS_SRC_ALPHA\n            )\n        }\n\n        // done mounting phenomenon\n        this.$emit('initialized', this.phenom)\n\n        this.refreshInstances()\n    },\n    methods: {\n        refreshInstances() {\n            if (!this.phenom) {\n                // eslint-disable-next-line\n                console.warn('Phenomenon not initialized.')\n                return\n            }\n\n            // TODO: hard refresh\n            // if (hardRefresh) {\n            // }\n\n            for (let instance of this.instances) {\n                // already added, ignore\n                if (this.addedKeys.includes(instance.key)) {\n                    continue\n                }\n\n                const vertex =\n                    get(instance, 'settings.vertex', null) ||\n                    get(this.$slots, 'vertex[0].children[0].text', '')\n                const fragment =\n                    get(instance, 'settings.fragment', null) ||\n                    get(this.$slots, 'fragment[0].children[0].text', '')\n\n                const args = [\n                    instance.key,\n                    {\n                        vertex,\n                        fragment,\n                        ...instance.settings,\n                    },\n                ]\n                this.phenom.add(...args)\n\n                this.$emit('added', args)\n            }\n        },\n    },\n}\n</script>\n\n<style lang=\"scss\">\n.vue-phenomenon {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n\n    canvas {\n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n    }\n}\n</style>\n"]}]}