-
Notifications
You must be signed in to change notification settings - Fork 39
/
.requestcache
1 lines (1 loc) · 416 KB
/
.requestcache
1
{"https://unpkg.com/aframe-extras.object-model@^3.2.x/package.json":{"name":"aframe-extras.object-model","version":"3.2.2","description":"Loader for THREE.ObjectLoader-compatible models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.4.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-outline@^1.1.0/package.json":{"name":"aframe-outline","version":"1.1.0","description":"Two-pass Outline effect component for A-Frame","main":"index.js","scripts":{"all":"npm run build && npm run build-uglify","build":"webpack index.js build/aframe-outline.js","build-uglify":"webpack -p index.js build/aframe-outline.min.js"},"repository":{"type":"git","url":"git+https://github.com/takahirox/aframe-outline.git"},"keywords":["aframe","aframe-vr","vr","three","threejs","mozvr","webvr"],"author":"Takahiro <hogehoge@gachapin.jp> (https://github.com/takahirox)","license":"MIT","bugs":{"url":"https://github.com/takahirox/aframe-outline/issues"},"homepage":"https://github.com/takahirox/aframe-outline#readme","devDependencies":{"aframe":"^0.4.0","three":"^0.83.0","webpack":"^1.13.3"}},"https://unpkg.com/aframe-stats-in-vr-component@0.1.x/package.json":{"name":"aframe-stats-in-vr-component","version":"0.1.3","description":"stats-in-vr component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-stats-in-vr-component.js && webpack -p index.js dist/aframe-stats-in-vr-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:docs":"node scripts/docs-lint.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers Firefox","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/chenzlabs/stats-in-vr.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Michael Chen <machenmusik@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/chenzlabs/stats-in-vr/issues"},"homepage":"https://github.com/chenzlabs/stats-in-vr#readme","devDependencies":{"aframe":"^0.4.0","browserify":"^13.0.0","browserify-css":"^0.9.1","budo":"^8.2.2","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.0","envify":"^3.4.1","ghpages":"^0.0.8","inquirer":"^1.0.2","karma":"^1.3.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"^1.2.4","mocha":"^3.0.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.5","sinon-chai":"^2.8.0","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-physics-system@^1.2.x/package.json":{"name":"aframe-physics-system","version":"1.2.0","description":"Physics system for A-Frame VR, built on Cannon.js","main":"index.js","scripts":{"dev":"budo browser.js:bundle.js -d examples --port 8000","dist":"browserify browser.js -o dist/aframe-physics-system.js && uglifyjs -c -o dist/aframe-physics-system.min.js -- dist/aframe-physics-system.js","test":"karma start ./tests/karma.conf.js","test:once":"karma start ./tests/karma.conf.js --single-run","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers Firefox","preversion":"npm run test:once","preversion:readme":"replace 'aframe-physics-system/v\\d+\\.\\d+\\.\\d+' \"aframe-physics-system/v$npm_package_version\" ./README.md","version":"npm run preversion:readme && npm run dist && git add -A dist README.md","postversion":"git push && git push --tags && npm publish"},"repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-physics-system.git"},"keywords":["aframe","aframevr","vr","three","physics","cannon","webgl","webvr"],"author":"Don McCurdy <dm@donmccurdy.com> (https://www.donmccurdy.com)","license":"MIT","bugs":{"url":"https://github.com/donmccurdy/aframe-physics-system/issues"},"homepage":"https://github.com/donmccurdy/aframe-physics-system#readme","dependencies":{"cannon":"github:donmccurdy/cannon.js#v0.6.2-dev1","three-to-cannon":"^1.0.2"},"peerDependencies":{"aframe":"^0.4.0"},"devDependencies":{"aframe":"^0.4.0","browserify":"^13.1.0","budo":"^9.2.1","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.4","envify":"^4.0.0","karma":"^1.3.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.2.0","karma-mocha-reporter":"^2.2.0","karma-sinon-chai":"^1.2.4","mocha":"^3.1.2","replace":"^0.3.0","sinon":"^1.17.6","sinon-chai":"^2.8.0","uglify-js":"^2.7.3"}},"https://unpkg.com/aframe-gearvr-controls-component@0.1.x/package.json":{"name":"aframe-gearvr-controls-component","version":"0.1.4","description":"GearVR Controller Component component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-gearvr-controls-component.js && webpack -p index.js dist/aframe-gearvr-controls-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:docs":"node scripts/docs-lint.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers Firefox","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/chenzlabs/gearvr-controls.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Michael Chen <machenmusik@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/chenzlabs/gearvr-controls/issues"},"homepage":"https://github.com/chenzlabs/gearvr-controls#readme","devDependencies":{"aframe":"aframevr/aframe#8ad5261","browserify":"^13.0.0","browserify-css":"^0.9.1","budo":"^8.2.2","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.0","envify":"^3.4.1","ghpages":"^0.0.8","inquirer":"^1.0.2","karma":"^1.3.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"^1.2.4","mocha":"^3.0.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.5","sinon-chai":"^2.8.0","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-speech-command-component@0.3.x/package.json":{"name":"aframe-speech-command-component","version":"0.3.1","description":"Speech Command component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-speech-command-component.js && webpack -p index.js dist/aframe-speech-command-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/lmalave/aframe-speech-command-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","voice-command"],"author":"Leonardo Malave <leo@malave.tech>","license":"MIT","bugs":{"url":"https://github.com/lmalave/aframe-speech-command-component/issues"},"homepage":"https://github.com/lmalave/aframe-speech-command-component#readme","devDependencies":{"aframe":"^0.3.2","browserify":"^13.0.0","budo":"^8.2.2","ghpages":"^0.0.8","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-speech-command-component@0.4.x/package.json":{"name":"aframe-speech-command-component","version":"0.4.2","description":"Speech Command component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-speech-command-component.js && webpack -p index.js dist/aframe-speech-command-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/lmalave/aframe-speech-command-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","voice-command"],"author":"Leonardo Malave <leo@malave.tech>","license":"MIT","bugs":{"url":"https://github.com/lmalave/aframe-speech-command-component/issues"},"homepage":"https://github.com/lmalave/aframe-speech-command-component#readme","devDependencies":{"aframe":"^0.3.2","browserify":"^13.0.0","budo":"^8.2.2","ghpages":"^0.0.8","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-deferred-renderer@^1.0.0/package.json":{"name":"aframe-deferred-renderer","version":"1.0.1","description":"A-Frame Deferred Renderer component","main":"index.js","scripts":{"all":"npm run build && npm run build-uglify","build":"webpack index.js build/aframe-deferred-renderer.js","build-uglify":"webpack -p index.js build/aframe-deferred-renderer.min.js"},"repository":{"type":"git","url":"git+https://github.com/takahirox/aframe-deferred-renderer.git"},"keywords":["aframe","aframe-vr","vr","three","threejs","mozvr","webvr"],"author":"Takahiro <hogehoge@gachapin.jp> (https://github.com/takahirox)","license":"MIT","bugs":{"url":"https://github.com/takahirox/aframe-deferred-renderer/issues"},"homepage":"https://github.com/takahirox/aframe-deferred-renderer#readme","devDependencies":{"aframe":"^0.4.0","three":"^0.83.0","webpack":"^1.13.3"}},"https://unpkg.com/aframe-firebase-component@^3.0.0/package.json":{"name":"aframe-firebase-component","version":"3.0.0","description":"Firebase component for multiuser A-Frame.","main":"index.js","browser":"dist/aframe-firebase-component.min.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-firebase-component.js && webpack -p index.js dist/aframe-firebase-component.min.js","postpublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","test":"karma start ./tests/karma.conf.js","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/aframe-firebase-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/aframe-firebase-component/issues"},"homepage":"https://github.com/ngokevin/aframe-firebase-component#readme","devDependencies":{"aframe":"aframevr/aframe#master","aframe-template-component":"^1.5.0","browserify":"^13.0.0","browserify-css":"^0.9.1","budo":"^8.2.2","chai":"^3.5.0","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","inquirer":"^1.0.2","karma":"^0.13.15","karma-browserify":"^4.4.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^0.2.3","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.6","karma-mocha":"^0.2.0","karma-mocha-reporter":"^1.1.0","karma-sinon-chai":"^1.1.0","mocha":"^2.3.3","randomcolor":"^0.4.4","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.3","sinon-chai":"^2.8.0","webpack":"^1.13.0"},"dependencies":{"firebase":"^3.0.0","url-parse":"^1.1.1"}},"https://unpkg.com/aframe-crawling-cursor@^1.0.2/package.json":{"name":"aframe-crawling-cursor","version":"1.0.4","description":"A A-Frame component to move cursor along objects' surface.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-crawling-cursor.js && webpack -p index.js dist/aframe-crawling-cursor.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/jujunjun110/crawling-cursor.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Jun Ito ( https://twitter.com/jujunjun110 )","license":"MIT","bugs":{"url":"https://github.com/jujunjun110/aframe-crawling-cursor/issues"},"homepage":"https://github.com/jujunjun110/aframe-crawling-cursor#readme","devDependencies":{"aframe":"^0.3.0","browserify":"^13.0.0","browserify-css":"^0.9.1","budo":"^8.2.2","ghpages":"^0.0.8","inquirer":"^1.0.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]},"directories":{"example":"examples"}},"https://unpkg.com/aframe-text-component@0.1.x/package.json":{"name":"aframe-text-component","version":"0.1.0","description":"Text component for A-Frame VR.","main":"index.js","scripts":{"test":"karma start ./tests/karma.conf.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/aframe-text-component.git"},"keywords":["aframe","aframe-component","layout","aframe-vr","vr","aframe-layout","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/aframe-text-component/issues"},"homepage":"https://github.com/ngokevin/aframe-text-component#readme","devDependencies":{"aframe-core":"^0.1.3","browserify-css":"^0.8.3","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4"}},"https://unpkg.com/aframe-extras.animation-mixer@^3.2.x/package.json":{"name":"aframe-extras.animation-mixer","version":"3.2.2","description":"Animation mixer for JSON and glTF models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.4.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-teleport-controls@0.1.x/package.json":{"name":"aframe-teleport-controls","version":"0.1.0","description":"A-Frame teleport controls component","author":"Fernando Serrano <fernandojsg@gmail.com> (http://fernandojsg.com/)","license":"MIT","main":"index.js","scripts":{"build":"cross-env NODE_ENV=production webpack --config webpack.dev.js","start":"webpack-dev-server --config webpack.dev.js --progress --colors --hot -d --open --inline --content-base examples","dist":"webpack index.js dist/aframe-teleport-controls.js && webpack -p index.js dist/aframe-teleport-controls.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && gh-pages -d gh-pages"},"repository":{"type":"git","url":"git+https://github.com/fernandojsg/aframe-teleport-controls.git"},"peerDependencies":{"aframe":"^0.3.2"},"keywords":["aframe","a-frame","aframe-component","aframe-vr","vr","webgl","webvr","mozvr"],"bugs":{"url":"https://github.com/fernandojsg/aframe-teleport-controls/issues"},"homepage":"https://github.com/fernandojsg/aframe-teleport-controls#readme","devDependencies":{"aframe":"^0.3.2","cross-env":"^3.1.3","gh-pages":"^0.11.0","semistandard":"^8.0.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0","webpack-dev-server":"^1.16.2"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-physics-system@^1.0.x/package.json":{"name":"aframe-physics-system","version":"1.2.0","description":"Physics system for A-Frame VR, built on Cannon.js","main":"index.js","scripts":{"dev":"budo browser.js:bundle.js -d examples --port 8000","dist":"browserify browser.js -o dist/aframe-physics-system.js && uglifyjs -c -o dist/aframe-physics-system.min.js -- dist/aframe-physics-system.js","test":"karma start ./tests/karma.conf.js","test:once":"karma start ./tests/karma.conf.js --single-run","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers Firefox","preversion":"npm run test:once","preversion:readme":"replace 'aframe-physics-system/v\\d+\\.\\d+\\.\\d+' \"aframe-physics-system/v$npm_package_version\" ./README.md","version":"npm run preversion:readme && npm run dist && git add -A dist README.md","postversion":"git push && git push --tags && npm publish"},"repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-physics-system.git"},"keywords":["aframe","aframevr","vr","three","physics","cannon","webgl","webvr"],"author":"Don McCurdy <dm@donmccurdy.com> (https://www.donmccurdy.com)","license":"MIT","bugs":{"url":"https://github.com/donmccurdy/aframe-physics-system/issues"},"homepage":"https://github.com/donmccurdy/aframe-physics-system#readme","dependencies":{"cannon":"github:donmccurdy/cannon.js#v0.6.2-dev1","three-to-cannon":"^1.0.2"},"peerDependencies":{"aframe":"^0.4.0"},"devDependencies":{"aframe":"^0.4.0","browserify":"^13.1.0","budo":"^9.2.1","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.4","envify":"^4.0.0","karma":"^1.3.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.2.0","karma-mocha-reporter":"^2.2.0","karma-sinon-chai":"^1.2.4","mocha":"^3.1.2","replace":"^0.3.0","sinon":"^1.17.6","sinon-chai":"^2.8.0","uglify-js":"^2.7.3"}},"https://unpkg.com/aframe-bmfont-text-component@0.1.x/package.json":{"name":"aframe-bmfont-text-component","version":"0.1.4","description":"BMFont Text component for A-Frame.","main":"index.js","scripts":{"build":"browserify docs/main.js -o docs/build.js","dev":"budo docs/main.js:build.js --dir docs --port 8000 --live --open","dist":"webpack index.js dist/aframe-bmfont-text-component.js && webpack -p index.js dist/aframe-bmfont-text-component.min.js","postpublish":"npm run dist","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/bryik/aframe-bmfont-text-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Ben Pyrik <ben@wsundine.com>","license":"MIT","bugs":{"url":"https://github.com/bryik/aframe-bmfont-text-component/issues"},"homepage":"https://github.com/bryik/aframe-bmfont-text-component#readme","devDependencies":{"aframe":"^0.3.1","browserify":"^13.1.0","browserify-css":"^0.9.1","budo":"^9.0.0","eslint":"^3.3.1","eslint-config-semistandard":"^6.0.2","eslint-config-standard":"^5.3.1","eslint-plugin-promise":"^1.3.2","eslint-plugin-react":"^5.2.2","eslint-plugin-standard":"^1.3.2","inquirer":"^1.1.2","shelljs":"^0.7.3","webpack":"^1.13.2"},"dependencies":{"load-bmfont":"^1.2.3","object-assign":"^4.1.0","three-bmfont-text":"^2.1.0"}},"https://unpkg.com/aframe-particle-system-component@^1.0.4/package.json":{"name":"aframe-particle-system-component","version":"1.0.6","description":"Particle systems for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-particle-system-component.js && webpack -p index.js dist/aframe-particle-system-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/IdeaSpaceVR/aframe-particle-system-component.git"},"keywords":["ideaspace","ideaspacevr","webvr","aframe-vr","aframe-component","aframe","mozvr","vr"],"author":"IdeaSpace <info@ideaspacevr.org> (https://www.ideaspacevr.org)","license":"MIT","bugs":{"url":"https://github.com/IdeaSpaceVR/aframe-particle-system-component/issues"},"homepage":"https://github.com/IdeaSpaceVR/aframe-particle-system-component#readme","devDependencies":{"aframe":"^0.3.2","browserify":"^13.0.0","browserify-css":"^0.9.1","budo":"^8.2.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"directories":{"example":"examples"}},"https://unpkg.com/aframe-stereo-component@0.2.x/package.json":{"name":"aframe-stereo-component","version":"0.2.0","description":"Stereoscopic component for A-Frame VR.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack browser.js dist/aframe-stereo-component.js && webpack -p browser.js dist/aframe-stereo-component.min.js","postpublish":"npm run dist","preghpages":"npm run build && rm -rf gh-pages && cp -r examples gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","test":"karma start ./tests/karma.conf.js","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"https://github.com/oscarmarinmiro/aframe-stereo-component.git"},"keywords":["aframe","aframe-component","layout","aframe-vr","vr","aframe-layout","mozvr","webvr","stereo","stereoscopic","video","equirectangular"],"author":"Óscar Marín Miró <oscar@outliers.es> @oscarmarinmiro","license":"MIT","bugs":{"url":"https://github.com/oscarmarinmiro/aframe-stereo-component/issues"},"homepage":"https://github.com/oscarmarinmiro/aframe-stereo-component#readme","devDependencies":{"aframe":"^0.2.0","browserify":"^12.0.1","browserify-css":"^0.8.3","budo":"^7.1.0","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"0.0.3","inquirer":"^0.12.0","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","shelljs":"^0.6.0","webpack":"^1.12.9"}},"https://unpkg.com/aframe-sun-sky@^3.0.1/package.json":{"name":"aframe-sun-sky","version":"3.0.1","description":"Gradient sky with adjustable sun in A-Frame","main":"index.js","scripts":{"dist":"webpack --module-bind 'glsl=shader' index.js dist/aframe-sun-sky.js && webpack --module-bind 'glsl=shader' -p index.js dist/aframe-sun-sky.min.js","postpublish":"npm run dist"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-shader","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe/tree/components/sun-sky#readme","devDependencies":{"aframe":"^0.3.0"}},"https://unpkg.com/aframe-animation-component@^3.0.x/package.json":{"name":"aframe-animation-component","version":"3.0.4","description":"Animations in A-Frame using anime.js","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-animation-component.js && webpack -p index.js dist/aframe-animation-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe/tree/components/animation#readme","devDependencies":{"aframe":"^0.3.0","aframe-bmfont-text-component":"^0.1.4","aframe-layout-component":"^1.2.0","aframe-template-component":"^3.1.1","browserify":"^13.0.0","budo":"^8.2.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]},"dependencies":{"animejs":"^1.1.0"}},"https://unpkg.com/aframe-text-component@0.4.x/package.json":{"name":"aframe-text-component","version":"0.4.0","description":"Geometry-based text in A-Frame","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8008 --live --open","dist":"webpack index.js dist/aframe-text-component.js && webpack -p index.js dist/aframe-text-component.min.js","postpublish":"npm run dist","test":"karma start ./tests/karma.conf.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe/tree/components/text#readme","devDependencies":{"aframe":"aframevr/aframe#master","browserify":"^12.0.1","budo":"^8.1.0","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","watchify":"^3.6.1","webpack":"^1.12.9"}},"https://unpkg.com/aframe-mountain-component@0.3.x/package.json":{"name":"aframe-mountain-component","version":"0.3.2","description":"Mountain terrain in A-Frame using randomly-generated height maps","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8008 --live --open","dist":"webpack index.js dist/aframe-mountain-component.js && webpack -p index.js dist/aframe-mountain-component.min.js","postpublish":"npm run dist"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe/tree/components/mountain#readme","devDependencies":{"aframe":"^0.3.1","browserify":"^12.0.1","budo":"^8.1.0","webpack":"^1.12.9"}},"https://unpkg.com/aframe-text-component@0.3.x/package.json":{"name":"aframe-text-component","version":"0.3.0","description":"Text component for A-Frame VR.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8008 --live --open","dist":"webpack index.js dist/aframe-text-component.js && webpack -p index.js dist/aframe-text-component.min.js","postpublish":"npm run dist","preghpages":"npm run build && rm -rf gh-pages && cp -r examples gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","test":"karma start ./tests/karma.conf.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/aframe-text-component.git"},"keywords":["aframe","aframe-component","layout","aframe-vr","vr","aframe-layout","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/aframe-text-component/issues"},"homepage":"https://github.com/ngokevin/aframe-text-component#readme","devDependencies":{"aframe":"^0.2.0","browserify":"^12.0.1","browserify-css":"^0.8.3","budo":"^8.1.0","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"0.0.3","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","watchify":"^3.6.1","webpack":"^1.12.9"}},"https://unpkg.com/aframe-alongpath-component@^0.2.0/package.json":{"name":"aframe-alongpath-component","version":"0.2.2","description":"A-Frame Component that allows entities to follow predefined paths","main":"index.js","directories":{"example":"examples"},"scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-alongpath-component.js && webpack -p index.js dist/aframe-alongpath-component.min.js","lint":"semistandard -v | snazzy","postpublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/protyze/aframe-alongpath-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"protyze <jan.azzati@gmail.com>","license":"GPL-3.0","bugs":{"url":"https://github.com/protyze/aframe-alongpath-component/issues"},"homepage":"https://github.com/protyze/aframe-alongpath-component#readme","dependencies":{"aframe":"^0.3.1"},"devDependencies":{"browserify":"^12.0.1","browserify-css":"^0.8.3","budo":"^7.1.0","webpack":"^1.12.9","ghpages":"0.0.3","shx":"^0.1.1","snazzy":"^4.0.0","semistandard":"^8.0.0","shelljs":"^0.7.0","inquirer":"^1.0.2"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-layout-component@3.x.x/package.json":{"name":"aframe-layout-component","version":"3.0.1","description":"Layout component for A-Frame.","main":"index.js","browser":"dist/aframe-layout-component.min.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8005 --live --open","dist":"webpack index.js dist/aframe-layout-component.js && webpack -p index.js dist/aframe-layout-component.min.js","postpublish":"npm run dist","preghpages":"npm run build && rm -rf gh-pages && cp -r examples gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","test":"karma start ./tests/karma.conf.js","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/aframe-layout-component.git"},"keywords":["aframe","aframe-component","layout","aframe-vr","vr","aframe-layout","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/aframe-layout-component/issues"},"homepage":"https://github.com/ngokevin/aframe-layout-component#readme","devDependencies":{"aframe":"^0.2.0","browserify":"^12.0.1","browserify-css":"^0.8.3","budo":"^7.1.0","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"0.0.3","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","webpack":"^1.12.9"}},"https://unpkg.com/aframe-layout-component@4.x.x/package.json":{"name":"aframe-layout-component","version":"4.0.1","description":"Position and layout child entities in 3D space for A-Frame","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8005 --live --open","dist":"webpack index.js dist/aframe-layout-component.js && webpack -p index.js dist/aframe-layout-component.min.js","postpublish":"npm run dist","test":"karma start ./tests/karma.conf.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","layout","aframe-vr","vr","aframe-layout","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe/tree/components/layout#readme","devDependencies":{"aframe":"^0.4.0","browserify":"^12.0.1","budo":"^7.1.0","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","webpack":"^1.14.0"}},"https://unpkg.com/aframe-auto-detect-controllers-component@0.1.x/package.json":{"name":"aframe-auto-detect-controllers-component","version":"0.1.3","description":"Auto-Detect Controllers component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-auto-detect-controllers-component.js && webpack -p index.js dist/aframe-auto-detect-controllers-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:docs":"node scripts/docs-lint.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers Firefox","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/chenzlabs/auto-detect-controllers.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Michael Chen <machenmusik@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/chenzlabs/auto-detect-controllers/issues"},"homepage":"https://github.com/chenzlabs/auto-detect-controllers#readme","devDependencies":{"aframe":"aframevr/aframe#39553a7","browserify":"^13.0.0","browserify-css":"^0.9.1","budo":"^8.2.2","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.0","envify":"^3.4.1","ghpages":"^0.0.8","inquirer":"^1.0.2","karma":"^1.3.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"^1.2.4","mocha":"^3.0.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.5","sinon-chai":"^2.8.0","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-extras.json-model@^3.2.x/package.json":{"name":"aframe-extras.json-model","version":"3.2.2","description":"Loader for THREE.JSONLoader-compatible models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.4.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-text-component@0.1.x/README.md":{"text":"## aframe-text-component\n\nA text component for [A-Frame](https://aframe.io) VR.\n\n## Usage\n\n```bash\nnpm install aframe-text-component\n```\n\n```js\nAFrame = require('aframe-core');\nAFrame.registerComponent('text', require('aframe-text-component'));\n```\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| bevelEnabled | | false |\n| bevelSize | | 8 |\n| bevelThickness | | 12 |\n| curveSegments | | 12 |\n| font | | helvetiker |\n| height | | 50 |\n| size | | 12 |\n| style | | normal |\n| text | | None |\n| weight | | normal |\n","url":"https://unpkg.com/aframe-text-component@0.1.x/README.md"},"https://unpkg.com/aframe-extras.animation-mixer@^3.2.x/README.md":{"text":"\n# aframe-extras.animation-mixer\n\nAnimation mixer for JSON and glTF models.\n ","url":"https://unpkg.com/aframe-extras.animation-mixer@^3.2.x/README.md"},"https://unpkg.com/aframe-physics-system@^1.0.x/README.md":{"text":"# Physics for A-Frame VR\n\n[![Build Status](https://travis-ci.org/donmccurdy/aframe-physics-system.svg?branch=master)](https://travis-ci.org/donmccurdy/aframe-physics-system)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/donmccurdy/aframe-physics-system/master/LICENSE)\n\nComponents for A-Frame physics integration, built on [CANNON.js](http://schteppe.github.io/cannon.js/).\n\n![d6590832-8bdb-11e6-9336-658b00bc0460 3](https://cloud.githubusercontent.com/assets/1848368/19297499/806d059a-9013-11e6-9b20-c03294acbc4c.png)\n\n> Image credit [@andgokevin](https://twitter.com/andgokevin).\n\n## Usage (Scripts)\n\nIn the [dist/](https://github.com/donmccurdy/aframe-physics-system/tree/master/dist) folder, download the full or minified build. Include the script on your page, and all components are automatically registered for you:\n\n```html\n<script src=\"//cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.2.0/dist/aframe-physics-system.min.js\"></script>\n```\n\nCDN builds for aframe-physics-system/v1.2.0:\n\n- [aframe-physics-system.js](https://cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.2.0/dist/aframe-physics-system.js) *(development)*\n- [aframe-physics-system.min.js](https://cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.2.0/dist/aframe-physics-system.min.js) *(production)*\n\n## Usage (NPM)\n\n```\nnpm install --save aframe-physics-system\n```\n\n```javascript\n// my-app.js\nvar physics = require('aframe-physics-system');\nphysics.registerAll();\n```\n\nOnce installed, you'll need to compile your JavaScript using something like [Browserify](http://browserify.org/) or [Webpack](http://webpack.github.io/). Example:\n\n```bash\nnpm install -g browserify\nbrowserify my-app.js -o bundle.js\n```\n\n`bundle.js` may then be included in your page. See [here](http://browserify.org/#middle-section) for a better introduction to Browserify.\n\n## Components – `dynamic-body` and `static-body`\n\nThe `dynamic-body` and `static-body` components may be added to any `<a-entity/>` that contains a mesh. Generally, each scene will have at least one `static-body` for the ground, and one or more `dynamic-body` instances that the player can interact with.\n\n- **dynamic-body**: A freely-moving object. Dynamic bodies have mass, collide with other objects, bounce or slow during collisions, and fall if gravity is enabled.\n- **static-body**: A fixed-position or animated object. Other objects may collide with static bodies, but static bodies themselves are unaffected by gravity and collisions.\n\n| Property | Dependencies | Default | Description |\n|----------------|------------------|---------|---------------------------------------------|\n| shape | — | `auto` | `auto`, `box`, `cylinder`, `sphere`, `hull` |\n| mass | `dynamic-body` | 5 | Simulated mass of the object, > 0. |\n| linearDamping | `dynamic-body` | 0.01 | Resistance to movement. |\n| angularDamping | `dynamic-body` | 0.01 | Resistance to rotation. |\n| sphereRadius | `shape:sphere` | — | Override default radius of bounding sphere. |\n| cylinderAxis | `shape:cylinder` | — | Override default axis of bounding cylinder. |\n\n### Basics\n\n```html\n<!-- The debug:true option creates a wireframe around each physics body. If you don't see a wireframe,\n the physics system may be unable to parse your model without a shape:box or shape:hull option. -->\n<a-scene physics=\"debug: true\">\n\n <!-- Camera -->\n <a-entity camera look-controls></a-entity>\n\n <!-- Floor -->\n <a-plane static-body></a-plane>\n\n <!-- Immovable box -->\n <a-box static-body position=\"0 0.5 -5\" width=\"3\" height=\"1\" depth=\"1\"></a-box>\n\n <!-- Dynamic box -->\n <a-box dynamic-body position=\"5 0.5 0\" width=\"1\" height=\"1\" depth=\"1\"></a-box>\n\n</a-scene>\n```\n\n## Components – `constraint`\n\nThe `constraint` component is used to bind physics bodies together using hinges, fixed distances, or fixed attachment points.\n\nExample:\n\n```html\n<a-box id=\"other-box\" dynamic-body />\n<a-box constraint=\"target: #other-box;\" dynamic-body /> \n```\n\n| Property | Dependencies | Default | Description |\n| --- | --- | --- | --- |\n| type | — | `lock` | Type of constraint. Options: `lock`, `distance`, and more to come. |\n| target | — | — | Selector for a single entity to which current entity should be bound. |\n| maxForce | — | 1e6 | Maximum force that may be exerted to enforce this constraint. |\n| collideConnected | — | true | If true, connected bodies may collide with one another. |\n| wakeUpBodies | — | true | If true, sleeping bodies are woken up by this constraint. |\n| distance | `type:distance` | auto | Distance at which bodies should be fixed. Default, or 0, for current distance. |\n\n## Using the CANNON.js API\n\nFor more advanced physics, use the CANNON.js API with custom JavaScript and A-Frame components. The [CANNON.js documentation](http://schteppe.github.io/cannon.js/docs/) and source code offer good resources for learning to work with physics in JavaScript.\n\nIn A-Frame, each entity's `CANNON.Body` instance is exposed on the `el.body` property. To apply a quick push to an object, you might do the following:\n\n```html\n<a-scene>\n <a-entity id=\"nyan\" dynamic-body=\"shape: hull\" obj-model=\"obj: url(nyan-cat.obj)\"></a-entity>\n <a-plane static-body></a-plane>\n</a-scene>\n```\n\n```javascript\nvar el = sceneEl.querySelector('#nyan');\nel.body.applyImpulse(\n /* impulse */ new CANNON.Vec3(0, 1, -1),\n /* world position */ new CANNON.Vec3().copy(el.getComputedAttribute('position'))\n);\n```\n\n## Body Shapes\n\nBody components will attempt to find an appropriate CANNON.js shape to fit your model. When defining an object you may choose a shape or leave the default, `auto`. Select a shape carefully, as there are performance implications with different choices:\n\n* **Auto** (`auto`) – Chooses automatically from the available shapes.\n* **Box** (`box`) – Great performance, compared to Hull or Trimesh shapes, and may be fitted to custom models.\n* **Cylinder** (`cylinder`) – See `box`. Adds `cylinderAxis` option.\n* **Sphere** (`sphere`) – See `box`. Adds `sphereRadius` option.\n* **Convex** (`hull`) – Wraps a model like shrink-wrap. Convex shapes are more performant and better supported than Trimesh, but may still have some performance impact when used as dynamic objects.\n* **Primitives** – Plane/Cylinder/Sphere. Used automatically with the corresponding A-Frame primitives.\n* **Trimesh** – *Deprecated.* Not available as a custom shape, but may be chosen as a last resort for custom geometry. Trimeshes adapt to fit custom geometry (e.g. a `.OBJ` or `.DAE` file), but have very minimal support. Arbitrary trimesh shapes are difficult to model in any JS physics engine, will \"fall through\" certain other shapes, and have serious performance limitations.\n* **Compound** – *In progress.* Compound shapes require a bit of work to set up, but allow you to use multiple primitives to define a physics shape around custom models. These will generally perform better, and behave more accurately, than Trimesh or Convex shapes. For example, a stool might be modeled as a cylinder-shaped seat, on four long cylindrical legs.\n\nFor more details, see the CANNON.js [collision matrix](https://github.com/schteppe/cannon.js#features).\n\nExample using a bounding box for a custom model:\n\n```html\n<!-- Box -->\n<a-entity obj-model=\"obj: url(...)\" dynamic-body=\"shape: box; mass: 2\"></a-entity>\n\n<!-- Cylinder -->\n<a-entity obj-model=\"obj: url(...)\" dynamic-body=\"shape: cylinder; cylinderAxis: y; mass: 5\"></a-entity>\n```\n\n## Collision Events\n\nCANNON.js generates events when a collision is detected, which are propagated onto the associated A-Frame entity. Example:\n\n```javascript\nvar playerEl = document.querySelector('[camera]');\nplayerEl.addEventListener('collide', function (e) {\n console.log('Player has collided with body #' + e.detail.body.id);\n\n e.detail.target.el; // Original entity (playerEl).\n e.detail.body.el; // Other entity, which playerEl touched.\n e.detail.contact; // Stats about the collision (CANNON.ContactEquation).\n e.detail.contact.ni; // Normal (direction) of the collision (CANNON.Vec3).\n});\n```\n\nNote that CANNON.js cannot perfectly detect collisions with very fast-moving bodies. Doing so requires Continuous Collision Detection, which can be both slow and difficult to implement. If this is an issue for your scene, consider (1) slowing objects down, (2) detecting collisions manually (collisions with the floor are easy – `position.y - height / 2 <= 0`), or (3) attempting a PR to CANNON.js. See: [Collision with fast bodies](https://github.com/schteppe/cannon.js/issues/202).\n\n## Configuration\n\nContact materials define what happens when two objects meet, including physical properties such as friction and restitution (bounciness). The default, scene-wide contact materials may be configured on the scene element:\n\n```html\n<a-scene physics=\"friction: 0.1; restitution: 0.5\">\n <!-- ... -->\n</a-scene>\n```\n\n| Property | Default | Description |\n|---------------------------------|---------|----------------------------------------------------|\n| debug | true | Whether to show wireframes for debugging. |\n| gravity | -9.8 | Force of gravity (in m/s^2). |\n| iterations | 10 | The number of solver iterations determines quality of the constraints in the world. The more iterations, the more correct simulation. More iterations need more computations though. If you have a large gravity force in your world, you will need more iterations. |\n| maxInterval | 0.0667 | Maximum simulated time (in milliseconds) that may be taken by the physics engine per frame. Effectively prevents weird \"jumps\" when the player returns to the scene after a few minutes, at the expense of pausing physics during this time. |\n| friction | 0.01 | Coefficient of friction. |\n| restitution | 0.3 | Coefficient of restitution (bounciness). |\n| contactEquationStiffness | 1e8 | Stiffness of the produced contact equations. |\n| contactEquationRelaxation | 3 | Relaxation time of the produced contact equations. |\n| frictionEquationStiffness | 1e8 | Stiffness of the produced friction equations. |\n| frictionEquationRegularization | 3 | Relaxation time of the produced friction equations |\n\nMore advanced configuration, including specifying different collision behaviors for different objects, is available through the CANNON.js JavaScript API.\n\nResources:\n\n* [CANNON.World](http://schteppe.github.io/cannon.js/docs/classes/World.html)\n* [CANNON.ContactMaterial](http://schteppe.github.io/cannon.js/docs/classes/ContactMaterial.html)\n\n","url":"https://unpkg.com/aframe-physics-system@^1.0.x/README.md"},"https://unpkg.com/aframe-bmfont-text-component@0.1.x/README.md":{"text":"## aframe-bmfont-text-component\r\n\r\nThis component is useful for rendering bitmap and signed distance field font text in [A-Frame](https://aframe.io). Basically, it wraps Matt DesLauriers' [three-bmfont-text](https://github.com/Jam3/three-bmfont-text) and [load-bmfont](https://github.com/Jam3/load-bmfont).\r\n\r\n![screenshot](http://i.imgur.com/pDDlzAX.png)\r\n\r\n## Properties\r\n\r\n| Property | Description | Default Value |\r\n|:-------------:|:----------------------------:|:---------------------:|\r\n| text | the text you want to appear | None |\r\n| width | width of the text box | None |\r\n| align | 'left', 'center', 'right' | left |\r\n| letterSpacing | the letter spacing in pixels | 0 |\r\n| lineHeight | the line height in pixels | 38 |\r\n| fnt | path to 'fnt' file | https://cdn.rawgit... |\r\n| fntImage | path to font image file | https://cdn.rawgit... |\r\n| mode | 'pre' and 'nowrap' | 'normal' |\r\n| color | by RGB, hex, or name | #000 |\r\n| opacity | Extent of transparency. | 1.0 |\r\n\r\nMore details on these properties [here](https://github.com/Jam3/three-bmfont-text#usage).\r\n\r\nExplanation of 'mode' property [here](https://github.com/mattdesl/word-wrapper).\r\n\r\n## Usage\r\n\r\nWrite some text:\r\n\r\n```html\r\n<a-entity bmfont-text=\"text: Hello World;\"></a-entity>\r\n```\r\n\r\nRather than add the bmfont-text component to a blank entity, you can try using the **text primitive**:\r\n\r\n```html\r\n<a-text text=\"Hello World;\"></a-text>\r\n```\r\n\r\nThis is more convenient, but experimental and buggy (e.g. color failing to apply).\r\n\r\nTo change the size of the text, use the [scale](https://aframe.io/docs/0.2.0/components/scale.html) component or position the text closer or further away.\r\n\r\nText can be wrapped by specifying width, but I'm not sure what units three-bmfont-text uses. You will have to play around a bit.\r\n\r\n## Custom Fonts\r\n\r\nA guide for generating SDF fonts can be found [here](https://github.com/libgdx/libgdx/wiki/Distance-field-fonts); here is an example comparing [Arial Black and DejaVu](http://i.imgur.com/iWtXHm5.png). Bitmap fonts also work, but do not look nearly as good.\r\n\r\nDifferent fonts can be specified with the 'fnt' and 'fntImage' properties.\r\n\r\n```html\r\n<a-entity bmfont-text=\"text: Hello World; fnt:../fonts/DejaVu-sdf.fnt; fntImage:../fonts/DejaVu-sdf.png\">\r\n</a-entity>\r\n```\r\n\r\nThanks to [RawGit](http://rawgit.com/), these default to hosted \"DejaVu-sdf.fnt\" and \"DejaVu-sdf.png\" files.\r\n\r\n## Limitations\r\n\r\nThis component does not make use of all of the features of [three-bmfont-text](https://github.com/Jam3/three-bmfont-text) and its sister modules, if you require more advanced functionality such as tabSize and start and end indices, I recommend forking this component and modifying it. Pull requests are welcome, but please include a test example.\r\n\r\nBitmap font rendering limits you to the characters included in the font (Unicode this is not). SDF font (in particular) tends to smooth sharp edges though [there are ways around this](https://lambdacube3d.wordpress.com/2014/11/12/playing-around-with-font-rendering/).\r\n\r\n#### Additional Information\r\n\r\nIf you are interested in text rendering in WebGL/ThreeJS/A-Frame and want to learn more, I recommend reading the documentation for [three-bmfont-text](https://github.com/Jam3/three-bmfont-text). \r\n\r\nHere are some additional resources:\r\n\r\n- ['It’s 2015 and drawing text is still hard (WebGL, ThreeJS)' by Parris Khachi](https://www.eventbrite.com/engineering/its-2015-and-drawing-text-is-still-hard-webgl-threejs/)\r\n- [Valve's original paper](http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf)\r\n- ['Hacking with THREE.js' by Matt DesLauriers](http://slides.com/mattdeslauriers/hacking-with-three-js#/13)\r\n\r\n## Installation\r\n\r\n#### Browser\r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>My A-Frame Scene</title>\r\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\r\n <script src=\"https://rawgit.com/bryik/aframe-bmfont-text-component/master/dist/aframe-bmfont-text-component.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <a-entity bmfont-text=\"text: Hello world\"></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n#### NPM\r\n\r\nInstall via NPM:\r\n\r\n```bash\r\nnpm install aframe-bmfont-text-component\r\n```\r\n\r\nThen register and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('aframe-bmfont-text-component');\r\n```\r\n","url":"https://unpkg.com/aframe-bmfont-text-component@0.1.x/README.md"},"https://unpkg.com/aframe-crawling-cursor@^1.0.2/README.md":{"text":"# Crawling Cursor\n\nAn A-Frame component to move cursor along object's surface.\n\n**[DEMO PAGE (link)](https://jujunjun110.github.io/crawlingcursor/)**\n\n![DEMO](demo.gif)\n\n## API\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| target | selector(#id) of a cursor | null |\n\n## Usage\n\n1.add `id` on `cursor` object.\n```html\n<a-cursor id=\"my-cursor\"></a-cursor>\n```\n\n2.add `raycaster` component and `crawling-cursor` component with a target cursor selector on `camera` object. \n```html\n<a-camera raycaster crawling-cursor=\"target: #my-cursor\"></a-camera>\n```\n\nnote: If you want some object to avoid intersection, add `ignore-ray` class to them.\n```html \n<!-- cursor will not be along with this box -->\n<a-box class=\"ignore-ray\"></a-box>\n```\n\n## Installation \n\n### browser\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\n <script src=\"https://cdn.rawgit.com/jujunjun110/aframe-crawling-cursor/master/dist/aframe-crawling-cursor.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-cursor id=\"my-cursor\"></a-cursor>\n <a-camera raycaster crawling-cursor=\"target: #my-cursor\"></a-camera>\n </a-scene>\n</body>\n```\n\n### npm \nInstall via npm:\n\n`$npm install aframe-crawling-cursor`\n\nThen register and use. \n\n```javascript\nrequire('aframe');\nrequire('aframe-crawling-cursor');\n```\n","url":"https://unpkg.com/aframe-crawling-cursor@^1.0.2/README.md"},"https://unpkg.com/aframe-animation-component@^3.0.x/README.md":{"text":"## aframe-animation-component\n\nAn animation component for [A-Frame](https://aframe.io) using\n[anime.js](https://github.com/juliangarnier/anime).\n\n![animation](https://cloud.githubusercontent.com/assets/674727/16903995/34a56db0-4c42-11e6-9bd1-356b291f2d93.gif)\n\n### Why?\n\nA-Frame has an `<a-animation>` API out of the box. Why build a component version?\n\n- **Imperative Ergonomics:** Imperatively set animations and all of its\n properties with a single `setAttribute` call. With `<a-animation>`, we must\n do `createElement`, multiple `setAttribute`s, `appendChild`, and\n `addEventListener('loaded')`.\n- **Synchronous:** Setting a component is synchronous, meaning it takes effect\n immediately. With `<a-animation>`, we must wait for it to append to the DOM\n and register a callback listener.\n- **Consistency with the Framework:** The animation component fits into\n A-Frame's entity-component-system framework. The `<a-animation>` tag is the\n only outlier in which we must use a DOM element to modify an entity.\n- **Simpler API:** The animation component uses anime.js, a popular and simple\n JavaScript animation library. `<a-animation>`'s API is loosely based off of\n Web Animations draft specification which is overly complex.\n- **Easier Maintenance:** The animation component uses A-Frame's component API\n as well as anime.js. `<a-animation>` uses the Custom Element polyfill directly\n with tween.js. anime.js's features makes the animation codebase much slimmer\n (140 vs 550 lines of code).\n- **Features:** The animation component has the features of the newly popular\n anime.js library (e.g., color interpolation).\n- **Faster Development:** Being detached from the A-Frame core library means faster\n iteration of features. Due to being easier to maintain, having more features, and\n not being tied to A-Frame versions, we can add things quickly such as timeline support.\n\n### API\n\n#### Component Name\n\nBase name is `animation`. Although we can attach multiple animations to one\nentity by name-spacing the component with double underscores (`__`):\n\n```html\n<a-entity animation=\"property: rotation\"\n animation__2=\"property: position\"\n animation__color=\"property: material.color\"></a-entity>\n```\n\n#### Properties\n\n| Property | Description | Default Value | Values |\n| -------- | ----------- | ------------- | ------ |\n| delay | How long (milliseconds) to wait before starting. | 0 | |\n| dir | Which dir to go from `from` to `to`. | normal | alternate, reverse |\n| dur | How long (milliseconds) each cycle of the animation is. | 1000 | |\n| easing | Easing function of animation. To ease in, ease out, ease in and out. | easeInQuad | See [easings](#easings) |\n| elasticity | How much to bounce (higher is stronger). | 400 | |\n| loop | Whether to repeat animation indefinitely. | false | |\n| pauseEvents | Comma-separated list of events to listen to to pause. | null |\n| property | Property to animate. Can be a component name, a dot-delimited property of a component (e.g., `material.color`), or a plain attribute. | | |\n| round | Whether to round values. | false | |\n| startEvents | Comma-separated list of events to listen to before playing. Animation will not autoplay if specified. | null |\n\n\n#### Easings\n\nChoose one type from the `Type` column, and combine it with one function from\nthe `Function` column. For example: `easeInOutElastic`. The only exception is\n`linear` which stands on its own.\n\n| Type | Function |\n| -------- | -------- |\n| easeIn | Quad |\n| easeOut | Cubic |\n| easeInOut | Quart |\n| | Quint |\n| | Expo |\n| | Sine |\n| | Circ |\n| | Elastic |\n| | Back |\n| | Bounce |\n\n#### Events\n\n| Property | Description |\n| -------- | ----------- |\n| animationbegin | Animation began. |\n| animationcomplete | Animation completed. |\n| animation__<ID>-begin | Animation completed. Different event emitted depending on animation name. |\n| animation__<ID>-complete | Animation completed. Different event emitted depending on animation name. |\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-animation-component/master/dist/aframe-animation-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-cylinder color=\"#F55\" radius=\"0.1\"\n animation=\"property: color; dir: alternate; dur: 1000;\n easing: easeInSine; loop: true; to: #5F5\"\n animation__scale=\"property: scale; dir: alternate; dur: 200;\n easing: easeInSine; loop: true; to: 1.2 1 1.2\"\n animation__yoyo=\"property: position; dir: alternate; dur: 1000;\n easing: easeInSine; loop: true; to: 0 2 0\">\n </a-cylinder>\n </a-scene>\n</body>\n```\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-animation-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-animation-component');\n```\n","url":"https://unpkg.com/aframe-animation-component@^3.0.x/README.md"},"https://unpkg.com/aframe-particle-system-component@^1.0.4/README.md":{"text":"# aframe-particle-system-component\n\nCreate particle systems with A-Frame.\n\n![particle-system](https://cloud.githubusercontent.com/assets/674727/19012611/92d694fa-876f-11e6-8b6b-1b93dcd586a8.gif)\n\n[EXAMPLES](http://ideaspacevr.github.io/aframe-particle-system-component/)\n\n### Properties\n\n| Property | Description | Default Value |\n| --------- | ----------- | ------------- |\n| preset | Preset configuration. Possible values are: `default`, `dust`, `snow`, `rain`. | `default` |\n| maxAge | The particle's maximum age in seconds. | `6` |\n| positionSpread | Describes this emitter's position variance on a per-particle basis. | `0 0 0` |\n| type | The default distribution this emitter should use to control its particle's spawn position and force behaviour. Possible values are `1` (box), `2` (sphere), `3` (disc) | 1 (box) |\n| rotationAxis | Describes this emitter's axis of rotation. Possible values are `x`, `y` and `z`. | `x` |\n| rotationAngle | The angle of rotation, given in radians. `Dust` preset is `3.14`. | `0` |\n| accelerationValue | Describes this emitter's base acceleration. | `0, -10, 0` |\n| accelerationSpread | Describes this emitter's acceleration variance on a per-particle basis. | `10 0 10` |\n| velocityValue | Describes this emitter's base velocity. | `0 25 0` |\n| velocitySpread | Describes this emitter's acceleration variance on a per-particle basis. | `10 7.5 10` |\n| color | Describes a particle's color. This property is a \"value-over-lifetime\" property, meaning an array of values can be given to describe specific value changes over a particle's lifetime. | `#0000FF,#FF0000` |\n| size | Describes a particle's size. | `1` |\n| direction | The direction of the emitter. If value is `1`, emitter will start at beginning of particle's lifecycle. If value is `-1`, emitter will start at end of particle's lifecycle and work it's way backwards. | `1` |\n| duration | The duration in seconds that this emitter should live for. If not specified, the emitter will emit particles indefinitely. | `null` |\n| particleCount | The total number of particles this emitter will hold. NOTE: this is not the number of particles emitted in a second, or anything like that. The number of particles emitted per-second is calculated by particleCount / maxAge (approximately!) | `1000` |\n| texture | The texture used by this emitter. | `./images/star2.png` |\n| randomize | When a particle is re-spawned, whether it's position should be re-randomised or not. Can incur a performance hit. | `false` |\n| opacity | Either a single number to describe the opacity of a particle. | `1` |\n| maxParticleCount | | `250000` |\n\nI am just exposing a subset of all API parameters through this component. See http://squarefeet.github.io/ShaderParticleEngine/docs/api/ for a complete API description.\n\n### Usage Examples\n\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: dust\"></a-entity>\n```\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: snow\"></a-entity>\n```\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: rain\"></a-entity>\n```\n\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: dust; texture: ./images/star2.png; color: #0000FF,#00FF00,#FF0000\"></a-entity>\n```\n\n\n### Browser Installation\n\nInstall and use by directly including the [browser files](dist). Make sure the images directory (particle textures) is in the same\ndirectory as the component.\n\n```html\n<!DOCTYPE html>\n<html>\n <head>\n <meta charset=\"utf-8\">\n <title>A-Frame Particle System Component Example</title>\n <meta name=\"description\" content=\"Hello, World!\">\n <script src=\"./aframe.min.js\"></script>\n <script src=\"./aframe-particle-system-component.js\"></script>\n </head>\n <body>\n <a-scene>\n\n <!-- particle system uses 'default' preset, setting custom colors //-->\n <a-entity position=\"0 2.25 -15\" particle-system=\"color: #EF0000,#44CC00\"></a-entity>\n\n <a-sphere position=\"0 1.25 -1\" radius=\"1.25\" color=\"#EF2D5E\"></a-sphere>\n <a-box position=\"-1 0.5 1\" rotation=\"0 45 0\" width=\"1\" height=\"1\" depth=\"1\" color=\"#4CC3D9\"></a-box>\n <a-cylinder position=\"1 0.75 1\" radius=\"0.5\" height=\"1.5\" color=\"#FFC65D\"></a-cylinder>\n <a-plane rotation=\"-90 0 0\" width=\"4\" height=\"4\" color=\"#7BC8A4\"></a-plane>\n\n <a-sky color=\"#000000\"></a-sky>\n\n </a-scene>\n </body>\n</html>\n```\n\n### npm\n\nhttps://www.npmjs.com/package/aframe-particle-system-component\n\n### Local Development\n\n```\nnpm install\nnpm run dev\n```\n\n### Credits\n\nBased on the ShaderParticleEngine by Squarefeet: https://github.com/squarefeet/ShaderParticleEngine\n","url":"https://unpkg.com/aframe-particle-system-component@^1.0.4/README.md"},"https://unpkg.com/aframe-stereo-component@0.2.x/README.md":{"text":"## aframe-stereo-component\n\nA stereo component for [A-Frame](https://aframe.io) VR.\n\nThis component builds on the ['layer' concept of THREE.js] (https://github.com/mrdoob/three.js/issues/6437) and is really two components in one:\n- **'stereocam' component**, with tells an aframe camera which 'eye' to render in case of monoscopic display (without 'Entering VR'). The camera will render all entities without the stereo component, but if it encounters an entity with the 'stereo' component active, it will render only those in the same eye as defined here.\n- **'stereo' component**, which tells aframe to include an entity in either the 'right' eye or 'left' eye (you can also specify 'both', but this has the same effect as not using the 'stereo' component. *The component also enables stereoscopic video rendering projected on spheres*, so if a sphere (see example below) has the 'stereo' component enabled, if will only project half of the video texture (which one depends on the 'eye' property), so the result is stereoscopic video rendering, if you include two spheres. The component expects videos in side-by-side equirectangular projection (see the video example below).\n\nIf a video is used in a sphere with the 'stereo' component active, **the component will also enable playback in mobile devices, by attaching a 'click' event on the rendering canvas**. Thus, in mobile devices you must click on the screen (via cardboard v2.0 button or with your finger) for the video to start playing.\n\nYou can see demos for both examples below [here] (http://oscarmarinmiro.github.io/aframe-stereo-component)\n\n### 'stereocam' component properties (only for camera)\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| eye | which eye is enabled in monoscopic display ('left' or 'right') | 'left |\n\n### 'stereo' component properties (for other entities)\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| eye | in which eye the entity is render VR mode ('left' or 'right') | 'left |\n| mode | this property is for spheres holding a video texture. mode can be 'full' or 'half', depending if the original video is full 360 or only spans 180 degrees horizontally (half-dome)| 'full' |\n\n### Usage\n\n![\"Stereoscopic video\"](/video_stereo.png?raw=true \"Stereoscopic video\")\n\n#### Browser Installation. 360 stereoscopic video example\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<html>\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/latest/aframe.min.js\"></script>\n <script src=\"aframe-stereo-component.js.min.js\"></script>\n</head>\n<body>\n <a-scene>\n\n <a-assets>\n\n<!--\n stereoscopic panoramic render by\n http://pedrofe.com/rendering-for-oculus-rift-with-arnold/\n http://www.meryproject.com/\n -->\n <!-- side by side equirectangular projected video -->\n <video id=\"Mary\" src=\"examples/basic_development/textures/MaryOculus.webm\" loop></video>\n\n </a-assets>\n\n <!-- we tell here the camera to render (outside VR mode, in monoscopic mode) everything without the 'stereo' component active\n and it it's active, only render those entities in the 'left' eye -->\n \n <a-camera position=\"0 0 10\" cursor-visible=\"false\" stereocam=\"eye:left;\"></a-camera>\n \n <!-- native sphere, will render on 'left' eye, and will take only the first half of the video for projection -->\n \n <a-entity geometry=\"primitive: sphere;\n radius: 100;\n segmentsWidth: 64;\n segmentsHeight: 64;\"\n material=\"shader: flat; src: #Mary;\"\n scale=\"-1 1 1\" stereo=\"eye:left\">\n </a-entity>\n \n <!-- native sphere, will render on 'right' eye, and will take only the second half of the video for projection -->\n \n <a-entity geometry=\"primitive: sphere;\n radius: 100;\n segmentsWidth: 64;\n segmentsHeight: 64;\"\n material=\"shader: flat; src: #Mary;\"\n scale=\"-1 1 1\" stereo=\"eye:right\">\n </a-entity>\n\n\n </a-scene>\n\n </body>\n </html>\n\n\n```\n\n![\"Two cubes in a scene, each one for each eye\"](/cubes_stereo.png?raw=true \"Two cubes in a scene, each one for each eye\")\n\n#### Browser Installation. Two cubes, each one for each eye\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<html>\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/latest/aframe.min.js\"></script>\n <script src=\"aframe-stereo-component.js.min.js\"></script>\n</head>\n<body>\n <a-scene>\n <a-sky color=\"#FFF\"></a-sky>\n <a-light color=\"#333\" position=\"0 5 0\" type=\"ambient\" intensity=\"0.2\"></a-light>\n <a-light type=\"point\" color=\"#EEE\" intensity=\"1.0\" position=\"3 3 10\"></a-light>\n \n <!-- 'left' eye entities will pass trough the camera in non-VR mode -->\n \n <a-camera position=\"0 0 10\" cursor-color=\"black\" stereocam=\"eye:left;\"></a-camera>\n\n <!-- in VR mode, the first box is displayed only in the left eye, the second one in the right eye -->\n \n <a-entity geometry=\"primitive: box\" material=\"color: #C03546\" stereo=\"eye:left\"></a-entity>\n <a-entity geometry=\"primitive: box\" material=\"color: #3546C0\" position=\"0 5 0\" stereo=\"eye: right\"></a-entity>\n \n </a-scene>\n\n </body>\n </html>\n\n\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-layer-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-layer-component');\n```\n\n#### Credits\n\nThe video used in the examples is from http://pedrofe.com/rendering-for-oculus-rift-with-arnold/, from the project http://www.meryproject.com/\n\nBoilerplate code from https://github.com/ngokevin/aframe-component-boilerplate\n\nCode for adjusting sphere face vertex is from https://github.com/mrdoob/three.js/blob/master/examples/webvr_video.html\n","url":"https://unpkg.com/aframe-stereo-component@0.2.x/README.md"},"https://unpkg.com/aframe-firebase-component@^3.0.0/README.md":{"text":"## aframe-firebase-component\n\n> Learn [how to get started with Firebase](https://firebase.google.com/docs/web/setup).\n\nA Firebase component for [A-Frame](https://aframe.io).\n\nComes with a Firebase broadcast component for multiuser experiences\nout-of-the-box by syncing entities' component data to Firebase realtime\ndatabase. The parent-child relationships between entities are maintained as\nwell as long as all entities in the hierarchy have the `broadcast` component\nattached.\n\nTo deploy with GitHub pages when setting up Firebase with the [Firebase\nConsole](https://firebase.google.com/console/), go into *Auth*, and add your\nGitHub pages domain (e.g., `ngokevin.github.io`). This will whitelist your\ndomain.\n\nIf you want to allow unauthenticated users (most should), then go into\n*Database*, click on *Rules*, and set both the `.read` and `.write` to `true`.\n\n### Properties\n\n#### firebase\n\nFirebase configuration component for `<a-scene>`. The `apiKey`, `authDomain`,\n`databaseURL`, and `storageBucket` are provided by Firebase (go to the Firebase\nconsole for your app and click on \"Add Firebase to your web app\").\n\nThe optional `channel` name allows multiple A-Frame apps, or multiple\ninstances/rooms of the same app, to share one Firebase bucket. If no channel is\ngiven, 'default' is used. The channel name can also be specified in the URL:\n`mysite.com?aframe-firebase-channel=oahu`\n\nThe optional `interval` sets how often (in milliseconds) data is sent to Firebase. \nDefault interval is 10 milliseconds.\n\n| Property | Description | Required \n| -------- | ----------- | -------- \n| apiKey | API key for Firebase. | yes \n| authDomain | Firebase authentication domain. | yes \n| channel | Name of room/namespace. | no \n| databaseURL | Firebase database URL. | yes \n| interval | Milliseconds between broadcasts.| no \n| storageBucket | Firebase storage bucket URL. | yes \n\n\n#### firebase-broadcast\n\nBroadcast component data to be synced across all clients using Firebase realtime database.\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| components | List of comma-delimited component names to broadcast | position, rotation |\n| componentsOnce | Sync initial value only; for components that don't change |\n\nFor example:\n\n```html\n<a-entity firebase-broadcast=\"components: material, geometry\"><a-entity>\n```\n\nTo broadcast individual component properties, use the `component|property` syntax:\n\n```html\n<a-entity firebase-broadcast=\"components: material|color, geometry|width\"><a-entity>\n```\n\n### Accessing the Firebase Object\n\nYou can access the Firebase object:\n\n```js\ndocument.querySelector('a-scene').systems.firebase.firebase\n```\n\nIf you wanted to add game logic or features such as chat.\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.2.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-firebase-component/master/dist/aframe-firebase-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene firebase=\"apiKey: abc;\n authDomain: mysite.firebaseapp.com;\n databaseURL: https://mysite.firebaseio.com;\n storageBucket: mysite.appspot.com\">\n <a-assets>\n <!-- Using mixins to decrease amount of data send over the wire. -->\n <a-mixin id=\"avatar-head\"\n geometry=\"primitive: box; depth: 0.3; height: 0.3; width: 0.3\"\n material=\"color: #222\"></a-mixin>\n </a-assets>\n\n <a-entity id=\"avatar\" mixin=\"avatar-head\"\n camera look-controls wasd-controls\n firebase-broadcast=\"components: mixin, position, rotation\"\n position=\"0 1.8 5\">\n </a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-firebase-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-firebase-component');\n```\n\n#### FAQ\n\n*Why can't I see anyone else?*\n\nTry positioning everyone at a different start point. In\n`examples/presentation/components/`, there is a `random-position-at` component\nthat starts everyone at a different position (more specifically at one of the\nchairs).\n\n## Authors\n\n- [Kevin Ngo](https://twitter.com/andgokevin), Mozilla\n- [Amber Roy](https://twitter.com/amberroyvr), AltspaceVR\n","url":"https://unpkg.com/aframe-firebase-component@^3.0.0/README.md"},"https://unpkg.com/aframe-sun-sky@^3.0.1/README.md":{"text":"## aframe-sky-shader\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/kframe/tree/master/components/sun-sky/dist/aframe-sun-sky.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-sun-sky></a-sun-sky>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-sun-sky\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-sun-sky');\n```\n","url":"https://unpkg.com/aframe-sun-sky@^3.0.1/README.md"},"https://unpkg.com/aframe-text-component@0.4.x/README.md":{"text":"## aframe-text-component\n\nA text geometry component for [A-Frame](https://aframe.io). The text geometry\ncomponent wraps\n[THREE.TextGeometry](https://threejs.org/docs/?q=textge#Reference/Geometries/TextGeometry).\n\n![screenshot](https://cloud.githubusercontent.com/assets/674727/21373560/c4c7507c-c6d4-11e6-86a5-88cb3ae8d0cb.png)\n\n## Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| bevelEnabled | | false |\n| bevelSize | | 8 |\n| bevelThickness | | 12 |\n| curveSegments | | 12 |\n| font | Path to a typeface.json file or selector to `<a-asset-item>`. | https://rawgit.com/ngokevin/kframe/master/components/text/lib/helvetiker_regular.typeface.json |\n| height | | 0.05 |\n| size | | 0.5 |\n| style | | normal |\n| text | | None |\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-text-component/master/dist/aframe-text-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-assets>\n <a-asset-item id=\"optimerBoldFont\" src=\"https://rawgit.com/mrdoob/three.js/dev/examples/fonts/optimer_bold.typeface.json\"></a-asset-item>\n </a-assets>\n\n <a-entity text=\"text: What's up\"></a-entity>\n <a-entity text=\"text: Dog?; font: #optimerBoldFont\"></a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-text-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-text-component');\n```\n\n## Using Different Fonts\n\nThe text component uses `typeface.json` files, which are Web Fonts converted to\nJSON for three.js. Typeface fonts can be generated from fonts using this\n[typeface font generator](http://gero3.github.io/facetype.js/). You can also\nfind some sample generated fonts in the `examples/fonts` directory in the\n[three.js repository](https://github.com/mrdoob/three.js).\n\nBy default, the text geometry component points to Helvetiker (Regular). Each\nfont is fairly large, from at least 60KB to hundreds of KBs.\n\nTo include a font for use with the text component, it is recommended to define\nit in `<a-asset-item>` and point to the font with a selector.\n\nFor example in HTML:\n\n```html\n<html>\n <head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.2.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-text-component/master/dist/aframe-text-component.min.js\"></script>\n <script src=\"myfont.typeface.js\"></script>\n </head>\n <body>\n <a-scene>\n <a-assets>\n <a-asset-item id=\"optimerBoldFont\" src=\"https://rawgit.com/mrdoob/three.js/dev/examples/fonts/optimer_bold.typeface.json\"></a-asset-item>\n <a-mixin id=\"boldFont\" text=\"font: #optimerBoldFont\"></a-mixin>\n </a-assets>\n\n <a-entity mixin=\"boldFont\" text=\"text: What's up\"></a-entity>\n <a-entity text=\"text: Dog?; font: #optimerBoldFont\"></a-entity>\n </a-scene>\n </body>\n</html>\n```\n\nOr in JS, we can bundle and set a font directly with `setAttribute` such that\nwe don't have to XHR the font file separately at runtime:\n\n```js\nrequire('aframe');\nrequire('aframe-text-component');\n\nvar fontJson = require('./fonts/myfont.typeface.json');\nvar el = document.createElement('a-entity');\nel.setAttribute('text', {font: fontJson});\n```\n\n## Applying a Material\n\nThe text geometry component defines just the geometry. We can apply any\nthree.js material to the geometry:\n\n```html\n<a-entity text=\"text: HELLO\" material=\"color: red; src: #texture\"></a-entity>\n```\n\nSee the [Vaporwave\nExample](https://ngokevin.github.io/kframe/components/text/examples/vaporwave/)\nby [Ada Rose Edwards](https://twitter.com/lady_ada_king) for an example on applying\nmaterials.\n","url":"https://unpkg.com/aframe-text-component@0.4.x/README.md"},"https://unpkg.com/aframe-gearvr-controls-component@0.1.x/README.md":{"text":"## aframe-gearvr-controls-component\n\nA GearVR Controller component for [A-Frame](https://aframe.io).\n\n![GearVR Touchpad](https://chenzlabs.github.io/gearvr-controls/tapgearvr.jpg)\n\n[trackedcontrols]: https://github.com/aframevr/aframe/blob/master/docs/components/tracked-controls.md\n[lookcontrols]: https://github.com/aframevr/aframe/blob/master/docs/components/look-controls.md\n[handcontrols]: https://github.com/aframevr/aframe/blob/master/docs/components/hand-controls.md\n\nThe gearvr-controls component interfaces with the Gear VR Touchpad\ncontroller exposed by the Carmel and Samsung Internet VR browsers.\nThe [tracked-controls component][trackedcontrols] cannot provide its usual\nfunctionality, since the Gear VR touchpad has no pose. Instead,\nthe [look-controls component][lookcontrols] is used to mimic a 3DOF controller.\n(Note that a dummy instance of tracked-controls is currently added anyway\nfor compatibility, since other components such as aframe-teleport-controls\nquery for entities with that component attached.)\n\nThis component adds button mappings and events, but does not currently provide\na controller model since it is assumed that end users will use this indirectly\nthrough higher level components such as the [hand-controls component][handcontrols]. \n\nAs there is only one Gear VR Touchpad, currently this component should only be\nbound to one hand (e.g. to the right hand, not the left).\n\n## Example\n\n```html\n<a-entity gearvr-controls></a-entity>\n```\n\n## Value\n\n| Property | Description | Default Value |\n|----------------------|----------------------------------------------------|----------------------|\n| hand | The hand that will be tracked (i.e., right, left). | right |\n| model | Whether the controller model is loaded. | false |\n| rotationOffset | Offset to apply to model rotation. | 0 |\n\n## Events\n\n| Event Name | Description |\n| ---------- | ----------- |\n| trackpaddown | Trackpad pressed. |\n| trackpadup | Trackpad released. |\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/chenzlabs/gearvr-controls/master/dist/aframe-gearvr-controls-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity gearvr-controls></a-entity>\n </a-scene>\n</body>\n```\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-gearvr-controls-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-gearvr-controls-component');\n```\n","url":"https://unpkg.com/aframe-gearvr-controls-component@0.1.x/README.md"},"https://unpkg.com/aframe-physics-system@^1.2.x/README.md":{"text":"# Physics for A-Frame VR\n\n[![Build Status](https://travis-ci.org/donmccurdy/aframe-physics-system.svg?branch=master)](https://travis-ci.org/donmccurdy/aframe-physics-system)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/donmccurdy/aframe-physics-system/master/LICENSE)\n\nComponents for A-Frame physics integration, built on [CANNON.js](http://schteppe.github.io/cannon.js/).\n\n![d6590832-8bdb-11e6-9336-658b00bc0460 3](https://cloud.githubusercontent.com/assets/1848368/19297499/806d059a-9013-11e6-9b20-c03294acbc4c.png)\n\n> Image credit [@andgokevin](https://twitter.com/andgokevin).\n\n## Usage (Scripts)\n\nIn the [dist/](https://github.com/donmccurdy/aframe-physics-system/tree/master/dist) folder, download the full or minified build. Include the script on your page, and all components are automatically registered for you:\n\n```html\n<script src=\"//cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.2.0/dist/aframe-physics-system.min.js\"></script>\n```\n\nCDN builds for aframe-physics-system/v1.2.0:\n\n- [aframe-physics-system.js](https://cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.2.0/dist/aframe-physics-system.js) *(development)*\n- [aframe-physics-system.min.js](https://cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.2.0/dist/aframe-physics-system.min.js) *(production)*\n\n## Usage (NPM)\n\n```\nnpm install --save aframe-physics-system\n```\n\n```javascript\n// my-app.js\nvar physics = require('aframe-physics-system');\nphysics.registerAll();\n```\n\nOnce installed, you'll need to compile your JavaScript using something like [Browserify](http://browserify.org/) or [Webpack](http://webpack.github.io/). Example:\n\n```bash\nnpm install -g browserify\nbrowserify my-app.js -o bundle.js\n```\n\n`bundle.js` may then be included in your page. See [here](http://browserify.org/#middle-section) for a better introduction to Browserify.\n\n## Components – `dynamic-body` and `static-body`\n\nThe `dynamic-body` and `static-body` components may be added to any `<a-entity/>` that contains a mesh. Generally, each scene will have at least one `static-body` for the ground, and one or more `dynamic-body` instances that the player can interact with.\n\n- **dynamic-body**: A freely-moving object. Dynamic bodies have mass, collide with other objects, bounce or slow during collisions, and fall if gravity is enabled.\n- **static-body**: A fixed-position or animated object. Other objects may collide with static bodies, but static bodies themselves are unaffected by gravity and collisions.\n\n| Property | Dependencies | Default | Description |\n|----------------|------------------|---------|---------------------------------------------|\n| shape | — | `auto` | `auto`, `box`, `cylinder`, `sphere`, `hull` |\n| mass | `dynamic-body` | 5 | Simulated mass of the object, > 0. |\n| linearDamping | `dynamic-body` | 0.01 | Resistance to movement. |\n| angularDamping | `dynamic-body` | 0.01 | Resistance to rotation. |\n| sphereRadius | `shape:sphere` | — | Override default radius of bounding sphere. |\n| cylinderAxis | `shape:cylinder` | — | Override default axis of bounding cylinder. |\n\n### Basics\n\n```html\n<!-- The debug:true option creates a wireframe around each physics body. If you don't see a wireframe,\n the physics system may be unable to parse your model without a shape:box or shape:hull option. -->\n<a-scene physics=\"debug: true\">\n\n <!-- Camera -->\n <a-entity camera look-controls></a-entity>\n\n <!-- Floor -->\n <a-plane static-body></a-plane>\n\n <!-- Immovable box -->\n <a-box static-body position=\"0 0.5 -5\" width=\"3\" height=\"1\" depth=\"1\"></a-box>\n\n <!-- Dynamic box -->\n <a-box dynamic-body position=\"5 0.5 0\" width=\"1\" height=\"1\" depth=\"1\"></a-box>\n\n</a-scene>\n```\n\n## Components – `constraint`\n\nThe `constraint` component is used to bind physics bodies together using hinges, fixed distances, or fixed attachment points.\n\nExample:\n\n```html\n<a-box id=\"other-box\" dynamic-body />\n<a-box constraint=\"target: #other-box;\" dynamic-body /> \n```\n\n| Property | Dependencies | Default | Description |\n| --- | --- | --- | --- |\n| type | — | `lock` | Type of constraint. Options: `lock`, `distance`, and more to come. |\n| target | — | — | Selector for a single entity to which current entity should be bound. |\n| maxForce | — | 1e6 | Maximum force that may be exerted to enforce this constraint. |\n| collideConnected | — | true | If true, connected bodies may collide with one another. |\n| wakeUpBodies | — | true | If true, sleeping bodies are woken up by this constraint. |\n| distance | `type:distance` | auto | Distance at which bodies should be fixed. Default, or 0, for current distance. |\n\n## Using the CANNON.js API\n\nFor more advanced physics, use the CANNON.js API with custom JavaScript and A-Frame components. The [CANNON.js documentation](http://schteppe.github.io/cannon.js/docs/) and source code offer good resources for learning to work with physics in JavaScript.\n\nIn A-Frame, each entity's `CANNON.Body` instance is exposed on the `el.body` property. To apply a quick push to an object, you might do the following:\n\n```html\n<a-scene>\n <a-entity id=\"nyan\" dynamic-body=\"shape: hull\" obj-model=\"obj: url(nyan-cat.obj)\"></a-entity>\n <a-plane static-body></a-plane>\n</a-scene>\n```\n\n```javascript\nvar el = sceneEl.querySelector('#nyan');\nel.body.applyImpulse(\n /* impulse */ new CANNON.Vec3(0, 1, -1),\n /* world position */ new CANNON.Vec3().copy(el.getComputedAttribute('position'))\n);\n```\n\n## Body Shapes\n\nBody components will attempt to find an appropriate CANNON.js shape to fit your model. When defining an object you may choose a shape or leave the default, `auto`. Select a shape carefully, as there are performance implications with different choices:\n\n* **Auto** (`auto`) – Chooses automatically from the available shapes.\n* **Box** (`box`) – Great performance, compared to Hull or Trimesh shapes, and may be fitted to custom models.\n* **Cylinder** (`cylinder`) – See `box`. Adds `cylinderAxis` option.\n* **Sphere** (`sphere`) – See `box`. Adds `sphereRadius` option.\n* **Convex** (`hull`) – Wraps a model like shrink-wrap. Convex shapes are more performant and better supported than Trimesh, but may still have some performance impact when used as dynamic objects.\n* **Primitives** – Plane/Cylinder/Sphere. Used automatically with the corresponding A-Frame primitives.\n* **Trimesh** – *Deprecated.* Not available as a custom shape, but may be chosen as a last resort for custom geometry. Trimeshes adapt to fit custom geometry (e.g. a `.OBJ` or `.DAE` file), but have very minimal support. Arbitrary trimesh shapes are difficult to model in any JS physics engine, will \"fall through\" certain other shapes, and have serious performance limitations.\n* **Compound** – *In progress.* Compound shapes require a bit of work to set up, but allow you to use multiple primitives to define a physics shape around custom models. These will generally perform better, and behave more accurately, than Trimesh or Convex shapes. For example, a stool might be modeled as a cylinder-shaped seat, on four long cylindrical legs.\n\nFor more details, see the CANNON.js [collision matrix](https://github.com/schteppe/cannon.js#features).\n\nExample using a bounding box for a custom model:\n\n```html\n<!-- Box -->\n<a-entity obj-model=\"obj: url(...)\" dynamic-body=\"shape: box; mass: 2\"></a-entity>\n\n<!-- Cylinder -->\n<a-entity obj-model=\"obj: url(...)\" dynamic-body=\"shape: cylinder; cylinderAxis: y; mass: 5\"></a-entity>\n```\n\n## Collision Events\n\nCANNON.js generates events when a collision is detected, which are propagated onto the associated A-Frame entity. Example:\n\n```javascript\nvar playerEl = document.querySelector('[camera]');\nplayerEl.addEventListener('collide', function (e) {\n console.log('Player has collided with body #' + e.detail.body.id);\n\n e.detail.target.el; // Original entity (playerEl).\n e.detail.body.el; // Other entity, which playerEl touched.\n e.detail.contact; // Stats about the collision (CANNON.ContactEquation).\n e.detail.contact.ni; // Normal (direction) of the collision (CANNON.Vec3).\n});\n```\n\nNote that CANNON.js cannot perfectly detect collisions with very fast-moving bodies. Doing so requires Continuous Collision Detection, which can be both slow and difficult to implement. If this is an issue for your scene, consider (1) slowing objects down, (2) detecting collisions manually (collisions with the floor are easy – `position.y - height / 2 <= 0`), or (3) attempting a PR to CANNON.js. See: [Collision with fast bodies](https://github.com/schteppe/cannon.js/issues/202).\n\n## Configuration\n\nContact materials define what happens when two objects meet, including physical properties such as friction and restitution (bounciness). The default, scene-wide contact materials may be configured on the scene element:\n\n```html\n<a-scene physics=\"friction: 0.1; restitution: 0.5\">\n <!-- ... -->\n</a-scene>\n```\n\n| Property | Default | Description |\n|---------------------------------|---------|----------------------------------------------------|\n| debug | true | Whether to show wireframes for debugging. |\n| gravity | -9.8 | Force of gravity (in m/s^2). |\n| iterations | 10 | The number of solver iterations determines quality of the constraints in the world. The more iterations, the more correct simulation. More iterations need more computations though. If you have a large gravity force in your world, you will need more iterations. |\n| maxInterval | 0.0667 | Maximum simulated time (in milliseconds) that may be taken by the physics engine per frame. Effectively prevents weird \"jumps\" when the player returns to the scene after a few minutes, at the expense of pausing physics during this time. |\n| friction | 0.01 | Coefficient of friction. |\n| restitution | 0.3 | Coefficient of restitution (bounciness). |\n| contactEquationStiffness | 1e8 | Stiffness of the produced contact equations. |\n| contactEquationRelaxation | 3 | Relaxation time of the produced contact equations. |\n| frictionEquationStiffness | 1e8 | Stiffness of the produced friction equations. |\n| frictionEquationRegularization | 3 | Relaxation time of the produced friction equations |\n\nMore advanced configuration, including specifying different collision behaviors for different objects, is available through the CANNON.js JavaScript API.\n\nResources:\n\n* [CANNON.World](http://schteppe.github.io/cannon.js/docs/classes/World.html)\n* [CANNON.ContactMaterial](http://schteppe.github.io/cannon.js/docs/classes/ContactMaterial.html)\n\n","url":"https://unpkg.com/aframe-physics-system@^1.2.x/README.md"},"https://unpkg.com/aframe-extras.object-model@^3.2.x/README.md":{"text":"\n# aframe-extras.object-model\n\nLoader for THREE.ObjectLoader-compatible models.\n ","url":"https://unpkg.com/aframe-extras.object-model@^3.2.x/README.md"},"https://unpkg.com/aframe-stats-in-vr-component@0.1.x/README.md":{"text":"## aframe-stats-in-vr-component\r\n\r\nstats-in-vr component for [A-Frame](https://aframe.io).\r\n\r\n![Screenshot](https://chenzlabs.github.io/stats-in-vr/pc-screenshot.png)\r\nThe stats-in-vr component allows the A-Frame scene stats component to be visible in VR.\r\n\r\n## Example\r\n\r\n```html\r\n<a-scene stats-in-vr></a-scene>\r\n```\r\n\r\n## Value\r\n\r\n| Property | Description | Default Value |\r\n|----------------------|----------------------------------------------------|----------------------|\r\n| enabled | Whether enabled or not. | true |\r\n| position | Position of camera-locked stats panel. | '0 -0.35 -0.5' |\r\n| scale | Scale of camera-locked stats panel. | '0.5 0.5 1' |\r\n\r\n## Events\r\n\r\n| Event Name | Description |\r\n| ---------- | ----------- |\r\n\r\n### Installation\r\n\r\n#### Browser\r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>My A-Frame Scene</title>\r\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\r\n <script src=\"https://rawgit.com/chenzlabs/stats-in-vr/master/dist/aframe-stats-in-vr-component.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene stats-in-vr></a-scene>\r\n</body>\r\n```\r\n\r\n#### npm\r\n\r\nInstall via npm:\r\n\r\n```bash\r\nnpm install aframe-stats-in-vr-component\r\n```\r\n\r\nThen register and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('aframe-stats-in-vr-component');\r\n```\r\n","url":"https://unpkg.com/aframe-stats-in-vr-component@0.1.x/README.md"},"https://unpkg.com/aframe-text-component@0.3.x/README.md":{"text":"## aframe-text-component\n\nA text geometry component for [A-Frame](https://aframe.io) VR. The text geometry\ncomponent (shape) can be paired with the [material component](https://aframe.io/docs/components/material.html) (appearance).\n\n![screenshot](https://cloud.githubusercontent.com/assets/674727/11915616/59342aca-a663-11e5-9b6b-8a0b243fe5da.png)\n\n## Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| bevelEnabled | | false |\n| bevelSize | | 8 |\n| bevelThickness | | 12 |\n| curveSegments | | 12 |\n| font | | helvetiker |\n| height | | 0.05 |\n| size | | 0.5 |\n| style | | normal |\n| text | | None |\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.2.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-text-component/master/dist/aframe-text-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity text=\"text: What's up\"></a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-text-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-text-component');\n```\n\n## Using Different Fonts\n\nThe text component uses `typeface.js`, fonts defined in JS files for three.js.\ntypeface fonts can be generated from regular fonts using this [typeface\nfont generator](http://gero3.github.io/facetype.js/). You can also find some\nsample generated fonts, currently in the `examples/fonts` directory in the [three.js\nrepository](https://github.com/mrdoob/three.js).\n\nBy default, the text component only comes with one typeface font, Helvetiker\n(Regular). Each font is fairly large, from at least 60KB to hundreds of KBs.\n\nTo include a font for use with the text component, append or require the\ntypeface font *after* this component. This component uses `FontUtils` which\nshould be initialized before adding fonts.\n\nFor example in HTML:\n\n```html\n<html>\n <head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.2.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-text-component/master/dist/aframe-text-component.min.js\"></script>\n <script src=\"myfont.typeface.js\"></script>\n </head>\n <body>\n <a-scene>\n <a-assets>\n <a-mixin id=\"font\" text=\"font: myfont\"></a-mixin>\n </a-assets>\n <a-entity mixin=\"font\" text=\"text: Hello\"></a-entity>\n <a-entity mixin=\"font\" text=\"text: World\"></a-entity>\n </a-scene>\n </body>\n</html>\n```\n\nOr in JS:\n\n```js\nrequire('aframe');\nrequire('aframe-text-component');\nrequire('./fonts/myfont.typeface');\n```\n","url":"https://unpkg.com/aframe-text-component@0.3.x/README.md"},"https://unpkg.com/aframe-auto-detect-controllers-component@0.1.x/README.md":{"text":"## aframe-auto-detect-controllers-component\r\n\r\nAuto-Detect Controllers component for [A-Frame](https://aframe.io).\r\n\r\n![Image of Controllers](http://cdn.uploadvr.com/wp-content/uploads/bfi_thumb/touch-vive-1000x562-mv5fiu8b2zbkc5p3gvlnwjc4hi5x1wrq2ro332248k.jpg)\r\n\r\n[trackedcontrols]: https://github.com/aframevr/aframe/blob/master/docs/components/tracked-controls.md\r\n[oculustouchcontrols]: https://github.com/aframevr/aframe/blob/master/docs/components/oculus-touch-controls.md\r\n[vivecontrols]: https://github.com/aframevr/aframe/blob/master/docs/components/vive-controls.md\r\n[gearvrcontrols]: https://github.com/chenzlabs/gearvr-controls/blob/master/README.md\r\n\r\nThe auto-detect-controllers component interfaces with the Gamepad API\r\nto detect Oculus Touch or Vive tracked-position controllers, \r\nand when discovered it injects the appropriate controls e.g.\r\n[tracked-controls][trackedcontrols], [oculus-touch-controls][oculustouchcontrols] or [vive-controls][vivecontrols].\r\n\r\nIf [gearvr-controls][gearvrcontrols] is included, it will also detect and inject that component.\r\nSee https://github.com/chenzlabs/gearvr-controls for more information on that component.\r\n\r\nBy default, the appropriate controls will be injected with their built-in model enabled,\r\nso the user will see Vive or Oculus Touch controller models depending on which is detected.\r\n(Note however that `gearvr-controls` does not supply a controller model.)\r\n\r\nIn some cases, it may be desirable for the developer to build their own model and/or functionality\r\natop the detected controller component, in which case there are two options:\r\n- Set `model` to false, in which case the injected component is instructed not to use its built-in model.\r\n- Set `trackedcontrols` to true, in which case the more generic component without model will be injected.\r\n\r\n## Example\r\n\r\n```html\r\n<a-entity auto-detect-controllers></a-entity>\r\n```\r\n\r\nTo also use `gearvr-controls`:\r\n\r\n```html\r\n<!-- include gearvr-controls component... -->\r\n<script src=\"https://rawgit.com/chenzlabs/gearvr-controls/master/dist/aframe-gearvr-controls-component.min.js\"></script>\r\n\r\n<!-- then somewhere inside a-scene... -->\r\n<a-entity auto-detect-controllers></a-entity>\r\n```\r\n\r\n## Value\r\n\r\n| Property | Description | Default Value |\r\n|----------------------|----------------------------------------------------|----------------------|\r\n| hand | When detected, inject controls with this hand. | 'right' |\r\n| singlehand | Single-hand controllers inject with this hand. | 'right' |\r\n| trackedcontrols | Inject `tracked-controls` not e.g. `vive-controls` | false |\r\n| model | Inject with this model property value. | true |\r\n\r\n## Events\r\n\r\n| Event Name | Description |\r\n| ---------- | ----------- |\r\n\r\n### Installation\r\n\r\n#### Browser\r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>My A-Frame Scene</title>\r\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\r\n <script src=\"https://rawgit.com/chenzlabs/auto-detect-controllers/master/dist/aframe-auto-detect-controllers-component.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <!-- If detected, will use built-in controller model (e.g. Oculus Touch or Vive) -->\r\n <a-entity id=\"lefthand\" auto-detect-controllers=\"hand:left\"></a-entity>\r\n <a-entity id=\"righthand\" auto-detect-controllers=\"hand:right\"></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n#### npm\r\n\r\nInstall via npm:\r\n\r\n```bash\r\nnpm install aframe-auto-detect-controllers-component\r\n```\r\n\r\nThen register and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('aframe-auto-detect-controllers-component');\r\n```\r\n","url":"https://unpkg.com/aframe-auto-detect-controllers-component@0.1.x/README.md"},"https://unpkg.com/aframe-extras.json-model@^3.2.x/README.md":{"text":"\n# aframe-extras.json-model\n\nLoader for THREE.JSONLoader-compatible models.\n ","url":"https://unpkg.com/aframe-extras.json-model@^3.2.x/README.md"},"https://unpkg.com/aframe-layout-component@4.x.x/README.md":{"text":"## aframe-layout-component\n\nLayout component for [A-Frame](https://aframe.io).\n\n![Layout](https://cloud.githubusercontent.com/assets/674727/21413536/eb325152-c7ac-11e6-8f1b-3a5f4714dfbe.png)\n\nAutomatically positions child entities in 3D space, with several layouts to\nchoose from. Define the layout on the parent entity:\n\n```html\n<a-entity layout=\"type: line; margin: 2\">\n <a-box></a-box>\n <a-box></a-box>\n <a-box></a-box>\n</a-entity>\n```\n\nAnd then the positions will automatically be calculated and set:\n\n```html\n<a-entity layout=\"type: line; margin: 2\">\n <a-box position=\"0 0 0\"></a-box>\n <a-box position=\"2 0 0\"></a-box>\n <a-box position=\"4 0 0\"></a-box>\n</a-entity>\n```\n\nAs entities are added or removed, the layout component will trigger a reflow on\nthe positions.\n\nWe move then entire group around while maintaining the layout:\n\n```html\n<a-entity layout=\"type: line; margin: 2\" position=\"0 5 -5\">\n <a-box position=\"0 0 0\"></a-box>\n <a-box position=\"2 0 0\"></a-box>\n <a-box position=\"4 0 0\"></a-box>\n</a-entity>\n```\n\n### Properties\n\n| Property | Description | Default Value |\n| --------- | ----------- | ------------- |\n| type | Type of layout. Can be one of `box`, `circle`, `cube`, `dodecahedron`, `line`, `pyramid`. | `line` |\n| column | Number of columns (for type `box`). | 1 |\n| margin | Margin in meters (for type `box`, `line`). | 1 |\n| radius | Radius in meters (for type `circle`, `cube`, `dodecahedron`, `pyramid`. | 1 |\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.2.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-layout-component/master/dist/aframe-layout-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity layout=\"type: circle; radius: 10\">\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n </a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-layout-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-layout-component');\n```\n","url":"https://unpkg.com/aframe-layout-component@4.x.x/README.md"},"https://unpkg.com/aframe-teleport-controls@0.1.x/README.md":{"text":"# aframe-teleport-controls\r\nTeleport component (Work in progress)\r\n\r\n![Screenshot](https://github.com/fernandojsg/aframe-teleport-controls/raw/master/teleport.png)\r\n\r\n## Properties\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| type | Type of teleport: line or parabolic | parabolic |\r\n| button | Button used to launch the teleport | trackpad |\r\n| collisionEntity | Selector of the mesh used to check the collisions. If no value provided a plane Y=0 is used | |\r\n| hitEntity | Entity used to show at the hitting position. If no value provided a cylinder will be used as default. | |\r\n| hitCylinderColor | Color used for the default `hitEntity` primitives | #99ff99 |\r\n| hitCylinderRadius | Radius used for the default `hitEntity` primitives | 0.25 |\r\n| hitCylinderHeight | Height used for the default `hitEntity` primitives | 0.3 |\r\n| maxLength | Max. length for line teleport | 10 |\r\n| curveHitColor | Color used for the curve when hit the mesh | #99ff99 |\r\n| curveMissColor | Color used for the curve when it doesn't hit anything | #ff0000 |\r\n| curveNumberPoints | Number of points used in the curve | 30 |\r\n| curveLineWidth | Line width of the curve | 0.025 |\r\n| curveShootingSpeed | Curve shooting speed, as bigger value, farther distance. | 5 |\r\n| maxLength | Max length of the ray when using type=line teleport | 10 |\r\n| landingNormal | Normal vector to detect collisions with the `collisionEntity` | (0, 1, 0) |\r\n| landingMaxAngle | Angle threshold (in degrees) used together with `landingNormal` to detect if the mesh is so steep to jump to it. | 45 |\r\n\r\n### Usage\r\n\r\n#### Browser Installation\r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>My A-Frame Scene</title>\r\n <script src=\"https://aframe.io/releases/0.3.2/aframe.min.js\"></script>\r\n <script src=\"https://rawgit.com/fernandojsg/aframe-teleport-controls/master/dist/aframe-teleport-controls.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <a-entity teleport-controls vive-controls=\"hand: left\"></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n#### NPM Installation\r\n\r\nInstall via NPM:\r\n\r\n```bash\r\nnpm install aframe-teleport-controls\r\n```\r\n\r\nThen register and use.\r\n\r\n```js\r\nrequire('aframe-teleport-controls');\r\n```\r\n","url":"https://unpkg.com/aframe-teleport-controls@0.1.x/README.md"},"https://unpkg.com/aframe-outline@^1.1.0/Readme.md":{"text":"# A-Frame Outline component\r\n\r\naframe-outline is two-pass Outline effect component for A-Frame.\r\n\r\n![screenshot](./screenshot.png \"screenshot\")\r\n\r\n## Properties\r\n\r\n### aframe-outline\r\n\r\n| Properties | type | Default Value | Description |\r\n| ----------- | ------ | ------------- | ----------- |\r\n| thickness | number | 0.003 | Outline thickness. |\r\n| color | color | '#000' | Outline color. |\r\n| alpha | number | 1.0 | Outline alpha. |\r\n\r\n## Browser\r\n\r\n### How to use\r\n\r\nTo apply outline effect in a scene, add `outline` attribute in `<a-scene>` like `<a-scene outline>`.\r\n\r\n```html\r\n<head>\r\n <script src=\"https://cdn.rawgit.com/aframevr/aframe/v0.4.0/dist/aframe-master.min.js\"></script>\r\n <script src=\"https://rawgit.com/takahirox/aframe-outline/master/build/aframe-outline.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene outline>\r\n <a-entity position=\"0 10 20\">\r\n <a-camera></a-camera>\r\n </a-entity>\r\n\r\n <a-entity geometry=\"primitive:sphere\"></a-entity>\r\n\r\n <a-entity light=\"type:directional;color:#888\" position=\"-10 -10 -10\"></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n## NPM\r\n\r\n### How to install\r\n\r\n```\r\n$ npm install aframe-outline\r\n```\r\n\r\n### How to build\r\n\r\n```\r\n$ npm install\r\n$ npm run all\r\n```\r\n\r\n### How to load\r\n\r\n```\r\nrequire('aframe');\r\nrequire('aframe-outline');\r\n```\r\n","url":"https://unpkg.com/aframe-outline@^1.1.0/Readme.md"},"https://unpkg.com/aframe-speech-command-component@0.3.x/README.md":{"text":"\n## aframe-speech-command-component\n\nA speech command component for [A-Frame](https://aframe.io).\n\n![](https://lmalave.github.io/aframe-speech-command-component/examples/images/show_hide_menu.png)\n\nThe `aframe-speech-command-component` components provide speech commands that you can easily integrate into an aframe scene. \n\nThe speech command can set an attribute of a target element, or can also execute a function on a target Component.\n\nThe `dist/aframe-speech-command-component.js` file defines 2 components:\n\n* A `speech-command` component that can be added to any entity to define an action to take based on a speech command\n* An `annyang-speech-recognition` component that provides the speech recognition implementation based on the annyang Speech Recognition library: [https://github.com/TalAter/annyang](https://github.com/TalAter/annyang)\n\nAlthough this implementation uses annyang for speech recognition, any speech recognition javascript library can be integrated using the same pattern as `annyang-speech-recognition`\n\n### API\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| **command** | the text of the speech command | |\n| **type** | \"attribute\" to change an attribute or \"function\" to execute a function | |\n| **targetElement** | the component to execute the function on. | |\n| **targetComponent** | the element that contains the attribute to change or contains the component to execute the function on. This is optional since by default the target will be entity that the component belongs to. | |\n| **function** | the name of the function. For now the function must take no parameters. | |\n| **attribute** |the attribute to change | |\n| **value** | \"the value to change the attribute to | |\n| **keyCode** | n optional numeric ASCII code to use as a shortcut (useful for development when quiet is a necessity) | |\n\n#### Example: setting an attribute on target element\n\n```xml\n<a-entity speech-command=\"command: city; type: attribute; targetElement: #image-360; attribute: src; value: #city;\"></a-entity>\n```\n#### Example: executing a function on target Component\n\n```xml\n<a-entity speech-command=\"command: go; type: function; targetElement: #cursor; targetComponent: teleporter; function: teleport; keyCode: 13\"></a-entity>\n```\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\nTo integrate aframe-speech-command-component to an aframe scene, the following must be added:\n\n* The `annyang` speech recognition script and the aframe-speech-command-component.js script (found in the dist folder)\n```html\n <script src=\"//cdnjs.cloudflare.com/ajax/libs/annyang/2.5.0/annyang.min.js\"></script>\n <script src=\"aframe-speech-command-component.js\"></script>\n```\n\n* An entity with the `annyang-speech-recognition` component\n```html\n <a-entity id=\"annyang\" annyang-speech-recognition></a-entity>\n```\n\n* One or more entities with the `speech-command` component\n```html\n<a-entity id=\"menu\"\n speech-command__show=\"command: show menu; type: attribute; attribute: visible; value: true;\"\n speech-command__hide=\"command: hide menu; type: attribute; attribute: visible; value: false;\">\n ...\n ...\n</a-entity>\n```\nNote that multiple instances of the `speech-command` component are allowed on the same entity as shown above.\n\n###### Browser Compatibility\n\nThis implementation is currently only compatible with the Google Chrome browser since it is based on that browser's Speech Recognition API. \n\nThe following are verified compatibility tests and results:\n\n| Browser | OS | Works? |\n| -------- | ----------- | ------------- |\n| Chrome 55 | Mac OS 10.12 | Yes |\n| Chrome 55 | Android 6.0.1 | Yes |\n| Chrome 55 | iOS 10 | No |\n\nOther versions of Chrome should also work, such as Chrome on Windows 10.\n\nFirefox also has experimental support the Speech Recogntion API in versions Gecko 44+, \nso the aframe-speech-command-component may be compatible with those browsers as well. More information can be found here:\n[https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API/Using_the_Web_Speech_API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API/Using_the_Web_Speech_API)\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install \n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-speech-command-component');\n```\n\n## Public Demo\n\nDemos are available publicly at:\n\n[https://lmalave.github.io/aframe-speech-command-component/examples/index.html](https://lmalave.github.io/aframe-speech-command-component/examples/index.html)\n \n#### Image gallery demo\n\nSay \"show menu\" to bring up menu\n\nSay \"go to cubes\", \"go to city\", or \"go to lake\" to show any of the 3 images\n\nSay \"hide menu\" to hide menu\n\nThis scene is based on the Image Gallery aframe.io demo: [https://github.com/aframevr/360-image-gallery-boilerplate](https://github.com/aframevr/360-image-gallery-boilerplate)\n\n#### Teleporter demo\n\nSay \"start move\" to activate raycaster\n\nSay \"go to\" to teleport to location of marker (with raycaster activated)\n\nSay \"cancel move\" to deactivate raycaster\n\nThis scene is based on the Hello Metaverse aframe.io demo: [https://aframe.io/examples/showcase/hello-metaverse/](https://aframe.io/examples/showcase/hello-metaverse/)\n\n\n### Running demos locally\n\nA node.js app is provided here with the Image Gallery and Teleport demos described above. \n \nTo run, first execute: `npm install`\n\nThen execute: `npm start`\n\nThe application will then be running on http://localhost:8000 and your default browser should automatically open on this page\n\n## Troubleshooting\n\n#### speech commands not working\nIf the speech commands are not working, first verify that the page has access to the \nmicrophone. \n\nWhen you first load a page with speech commands in the browser, you should see the following prompt\nto grant access to the microphone:\n\n![](https://lmalave.github.io/aframe-speech-command-component/examples/images/chrome_microphone_access_request.png)\n\n\nIf the page has already been granted access to the microphone, you should see a red dot on the tab and a camera icon in the URL bar, as shown below:\n\n![](https://lmalave.github.io/aframe-speech-command-component/examples/images/chrome_microphone_status.png)\n","url":"https://unpkg.com/aframe-speech-command-component@0.3.x/README.md"},"https://unpkg.com/aframe-speech-command-component@0.4.x/README.md":{"text":"\n## aframe-speech-command-component\n\nA speech command component for [A-Frame](https://aframe.io).\n\n![](https://lmalave.github.io/aframe-speech-command-component/examples/images/show_hide_menu.png)\n\nThe `aframe-speech-command-component` components provide speech commands that you can easily integrate into an aframe scene. \n\nThe speech command can set an attribute of a target element, or can also execute a function on a target Component.\n\nThe `dist/aframe-speech-command-component.js` file defines 2 components:\n\n* A `speech-command` component that can be added to any entity to define an action to take based on a speech command\n* An `annyang-speech-recognition` component that provides the speech recognition implementation based on the annyang Speech Recognition library: [https://github.com/TalAter/annyang](https://github.com/TalAter/annyang)\n\nAlthough this implementation uses annyang for speech recognition, any speech recognition javascript library can be integrated using the same pattern as `annyang-speech-recognition`\n\n### API\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| **command** | the text of the speech command | |\n| **type** | \"attribute\" to change an attribute or \"function\" to execute a function | |\n| **targetElement** | the component to execute the function on. | |\n| **targetComponent** | the element that contains the attribute to change or contains the component to execute the function on. This is optional since by default the target will be entity that the component belongs to. | |\n| **function** | the name of the function. For now the function must take no parameters. | |\n| **attribute** |the attribute to change | |\n| **value** | \"the value to change the attribute to | |\n| **keyCode** | n optional numeric ASCII code to use as a shortcut (useful for development when quiet is a necessity) | |\n\n#### Example: setting an attribute on target element\n\n```xml\n<a-entity speech-command=\"command: city; type: attribute; targetElement: #image-360; attribute: src; value: #city;\"></a-entity>\n```\n#### Example: executing a function on target Component\n\n```xml\n<a-entity speech-command=\"command: go; type: function; targetElement: #cursor; targetComponent: teleporter; function: teleport; keyCode: 13\"></a-entity>\n```\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\nTo integrate aframe-speech-command-component to an aframe scene, the following must be added:\n\n* The `annyang` speech recognition script and the aframe-speech-command-component.js script (found in the dist folder)\n```html\n <script src=\"//cdnjs.cloudflare.com/ajax/libs/annyang/2.5.0/annyang.min.js\"></script>\n <script src=\"aframe-speech-command-component.js\"></script>\n```\n\n* An entity with the `annyang-speech-recognition` component\n```html\n <a-entity id=\"annyang\" annyang-speech-recognition></a-entity>\n```\n\n* One or more entities with the `speech-command` component\n```html\n<a-entity id=\"menu\"\n speech-command__show=\"command: show menu; type: attribute; attribute: visible; value: true;\"\n speech-command__hide=\"command: hide menu; type: attribute; attribute: visible; value: false;\">\n ...\n ...\n</a-entity>\n```\nNote that multiple instances of the `speech-command` component are allowed on the same entity as shown above.\n\n###### Browser Compatibility\n\nThis implementation is currently only compatible with the Google Chrome browser since it is based on that browser's Speech Recognition API. \n\nThe following are verified compatibility tests and results:\n\n| Browser | OS | Works? |\n| -------- | ----------- | ------------- |\n| Chrome 55 | Mac OS 10.12 | Yes |\n| Chrome 55 | Android 6.0.1 | Yes |\n| Chrome 55 | iOS 10 | No |\n\nOther versions of Chrome should also work, such as Chrome on Windows 10.\n\nFirefox also has experimental support the Speech Recogntion API in versions Gecko 44+, \nso the aframe-speech-command-component may be compatible with those browsers as well. More information can be found here:\n[https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API/Using_the_Web_Speech_API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API/Using_the_Web_Speech_API)\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install \n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-speech-command-component');\n```\n\n## Public Demo\n\nDemos are available publicly at:\n\n[https://lmalave.github.io/aframe-speech-command-component/examples/index.html](https://lmalave.github.io/aframe-speech-command-component/examples/index.html)\n \n#### Image gallery demo\n\nSay \"show menu\" to bring up menu\n\nSay \"go to cubes\", \"go to city\", or \"go to lake\" to show any of the 3 images\n\nSay \"hide menu\" to hide menu\n\nThis scene is based on the Image Gallery aframe.io demo: [https://github.com/aframevr/360-image-gallery-boilerplate](https://github.com/aframevr/360-image-gallery-boilerplate)\n\n#### Teleporter demo\n\nSay \"start move\" to activate raycaster\n\nSay \"go to\" to teleport to location of marker (with raycaster activated)\n\nSay \"cancel move\" to deactivate raycaster\n\nThis scene is based on the Hello Metaverse aframe.io demo: [https://aframe.io/examples/showcase/hello-metaverse/](https://aframe.io/examples/showcase/hello-metaverse/)\n\n\n### Running demos locally\n\nA node.js app is provided here with the Image Gallery and Teleport demos described above. \n \nTo run, first execute: `npm install`\n\nThen execute: `npm start`\n\nThe application will then be running on http://localhost:8000 and your default browser should automatically open on this page\n\n## Troubleshooting\n\n#### speech commands not working\nIf the speech commands are not working, first verify that the page has access to the \nmicrophone. \n\nWhen you first load a page with speech commands in the browser, you should see the following prompt\nto grant access to the microphone:\n\n![](https://lmalave.github.io/aframe-speech-command-component/examples/images/chrome_microphone_access_request.png)\n\n\nIf the page has already been granted access to the microphone, you should see a red dot on the tab and a camera icon in the URL bar, as shown below:\n\n![](https://lmalave.github.io/aframe-speech-command-component/examples/images/chrome_microphone_status.png)\n","url":"https://unpkg.com/aframe-speech-command-component@0.4.x/README.md"},"https://unpkg.com/aframe-alongpath-component@^0.2.0/README.md":{"text":"## aframe-alongpath-component\nA component for [A-Frame](https://aframe.io) that allows entities to follow predefined paths.\n\nThanks to https://jsbin.com/dasefeh/edit?html,output for the basic concept.\n\n![](http://lab.immersiveweb.ch/assets/aframe-alongpath-component.gif)\n\n### Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| path | One or more point on the path the entity should follow (Format: \"x,y,z x,y,z x,y,z\") | '' |\n| closed | Whether or not the path should be closed automatically | false |\n| dur | Duration in milliseconds for the object to follow the entire path | 1000 |\n| delay | Number of milliseconds to wait for the animation to begin | 2000 |\n| loop | Whether or not the animation should loop | false |\n| inspect | Whether or not the animation path should be visible and editable in A-Frame Inspector| false |\n\n### Usage with A-Frame Inspector\n\nYou can use the [A-Frame Inspector](https://github.com/aframevr/aframe-inspector) to manually modify the predefined paths. To do so, you can open the Inspector as usual, then set the \"inspector\" Property to true. This will cause the path to be displayed visually as a line while the predefined path-points (received from the \"path\"-Property) are showed as a small box. You can now change the path in the inspector by selecting one of the boxes and changing its position using the transformation tools of the editor. The path will change instantly.\n\n![](http://lab.immersiveweb.ch/assets/aframe-alongpath-component-inspector.gif)\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/protyze/aframe-alongpath-component/master/dist/aframe-alongpath-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-sphere color=\"red\" radius=\"0.25\" position=\"0 0 0\"\n alongpath=\"path:2,2,-5 -2,1,-2.5 0,1,-1; closed:false; dur:5000; delay:4000; inspector:false;\">\n </a-sphere>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-alongpath-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-alongpath-component');\n```","url":"https://unpkg.com/aframe-alongpath-component@^0.2.0/README.md"},"https://unpkg.com/aframe-deferred-renderer@^1.0.0/Readme.md":{"text":"# A-Frame Deferred Renderer component\r\n\r\naframe-deferred-renderer is an A-Frame Deferred Renderer component.\r\nDeferred Rendering achieves a good performance with many lights.\r\n\r\n![screenshot](./screenshot.png \"screenshot\")\r\n\r\n## Properties\r\n\r\n### aframe-deferred-renderer\r\n\r\n| Properties | type | Default Value | Description |\r\n| ------------ | ------- | ------------- | ----------- |\r\n| lightPrePass | boolean | true | If true light pre-pass mode is used. Otherwise classic mode is used. |\r\n\r\n## Browser\r\n\r\n### How to use\r\n\r\n```html\r\n<head>\r\n <script src=\"https://cdn.rawgit.com/aframevr/aframe/v0.4.0/dist/aframe-master.min.js\"></script>\r\n <script src=\"https://rawgit.com/takahirox/aframe-deferred-renderer/master/build/aframe-deferred-renderer.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene deferred-renderer>\r\n <a-entity position=\"0 10 20\">\r\n <a-camera></a-camera>\r\n </a-entity>\r\n\r\n <a-entity geometry=\"primitive:sphere\"></a-entity>\r\n\r\n <a-entity light=\"type:point;color:#AAA;distance:10\" position=\"0 0 0\"></a-entity>\r\n <a-entity light=\"type:point;color:#AAA;distance:10\" position=\"10 10 10\"></a-entity>\r\n <a-entity light=\"type:point;color:#AAA;distance:10\" position=\"-10 -10 -10\"></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n## NPM\r\n\r\n### How to install\r\n\r\n```\r\n$ npm install aframe-deferred-renderer\r\n```\r\n\r\n### How to build\r\n\r\n```\r\n$ npm install\r\n$ npm run all\r\n```\r\n\r\n### How to load\r\n\r\n```\r\nrequire('aframe');\r\nrequire('aframe-deferred-renderer');\r\n```\r\n","url":"https://unpkg.com/aframe-deferred-renderer@^1.0.0/Readme.md"},"https://unpkg.com/aframe-mountain-component@0.3.x/README.md":{"text":"## aframe-mountain-component\n\nMountain component and primitive for A-Frame.\n\n![Screenshot](https://cloud.githubusercontent.com/assets/674727/18611595/c98bc48e-7cf2-11e6-8e2a-2110fbfe0ff0.png)\n\nUses Perlin noise to create a height map, create a shaded texture from that\nheight map using a `<canvas>`, and using the height map to create vertices on a\nBufferGeometry.\n\n## Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| color | Base color of mountain. | rgb(92, 32, 0) |\n| shadowColor | Diffuse color of mountain. | rgb(128, 96, 96) |\n| sunPosition | Sun position to shade mountain. | 1, 1, 1 |\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/kframe/tree/master/components/mountain/dist/aframe-mountain-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-mountain color=\"red\"></a-mountain>\n <!-- <a-entity mountain=\"color: red\"></a-entity> -->\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-mountain-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-mountain-component');\n```\n","url":"https://unpkg.com/aframe-mountain-component@0.3.x/README.md"},"https://unpkg.com/aframe-layout-component@3.x.x/README.md":{"text":"## aframe-layout-component\n\nLayout component for [A-Frame](https://aframe.io).\n\n![](https://cloud.githubusercontent.com/assets/674727/11851982/662a8dee-a3ea-11e5-92cf-4b814e2c494d.png)\n\nAutomatically positions child entities in 3D space, with several layouts to\nchoose from. Define the layout on the parent entity:\n\n```html\n<a-entity layout=\"type: line; margin: 2\">\n <a-box></a-box>\n <a-box></a-box>\n <a-box></a-box>\n</a-entity>\n```\n\nAnd then the positions will automatically be calculated and set:\n\n```html\n<a-entity layout=\"type: line; margin: 2\">\n <a-box position=\"0 0 0\"></a-box>\n <a-box position=\"2 0 0\"></a-box>\n <a-box position=\"4 0 0\"></a-box>\n</a-entity>\n```\n\nAs entities are added or removed, the layout component will trigger a reflow on\nthe positions.\n\nWe move then entire group around while maintaining the layout:\n\n```html\n<a-entity layout=\"type: line; margin: 2\" position=\"0 5 -5\">\n <a-box position=\"0 0 0\"></a-box>\n <a-box position=\"2 0 0\"></a-box>\n <a-box position=\"4 0 0\"></a-box>\n</a-entity>\n```\n\n### Properties\n\n| Property | Description | Default Value |\n| --------- | ----------- | ------------- |\n| type | Type of layout. Can be one of `box`, `circle`, `cube`, `dodecahedron`, `line`, `pyramid`. | `line` |\n| column | Number of columns (for type `box`). | 1 |\n| margin | Margin in meters (for type `box`, `line`). | 1 |\n| radius | Radius in meters (for type `circle`, `cube`, `dodecahedron`, `pyramid`. | 1 |\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.2.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-layout-component/master/dist/aframe-layout-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity layout=\"type: circle; radius: 10\">\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n <a-entity geometry=\"primitive: box\" material></a-entity>\n </a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-layout-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-layout-component');\n```\n","url":"https://unpkg.com/aframe-layout-component@3.x.x/README.md"},"https://unpkg.com/super-hands@0.2.x/package.json":{"name":"super-hands","version":"0.2.1","description":"All-in-one natural hand controller interaction component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/super-hands.js && webpack -p index.js dist/super-hands.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/wmurphyrd/aframe-super-hands-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","super-hands","controls","tracked-controls","hand-controls","grab","drag-drop","stretch"],"author":"William Murphy william@datatitian.com","license":"MIT","bugs":{"url":"https://github.com/wmurphyrd/aframe-super-hands-component/issues"},"homepage":"https://github.com/wmurphyrd/aframe-super-hands-component#readme","devDependencies":{"aframe":"^0.4.0","aframe-event-set-component":"^3.0.1","aframe-extras":"^3.2.1","aframe-physics-system":"^1.2.0","browserify":"^13.0.0","budo":"^8.2.2","ghpages":"^0.0.8","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/super-hands@0.2.x/README.md":{"text":"## Super Hands\r\n\r\nEffortlessly add natural, intuitive hand controller interaction in\r\n[A-Frame](https://aframe.io).\r\n\r\n![Demo Gif](readme_files/super-hands-demo.gif) \r\n\r\n![Super Hans Can't Make a Fist](readme_files/peep-show-super-hans.gif)\r\n\r\n### Description\r\n\r\nThe `super-hands` component interprets input from tracked controllers and \r\ncollision detection components\r\ninto interaction gestures and communicates those gestures to \r\ntarget entities for them to respond. \r\n\r\nThe currently implemented gestures are:\r\n\r\n* Hover: Holding a controller in the collision space of an entity\r\n* Grab: Pressing a button while hovering an entity, potentially also moving it\r\n* Stretch: Grabbing an entity with two hands and resizing \r\n* Drag-drop: Dragging an entity onto another entity\r\n\r\nFor an entity to respond to the `super-hands` gestures, it needs to have \r\ncomponents attached to translate the gestures into actions. `super-hands` \r\nincludes components for typical reactions to the implemented gestures: \r\n`hoverable`, `grabbable`, `stretchable`, and `drag-droppable`.\r\n\r\n![Separation of Gesture and Response API](readme_files/super-hands-api.png)\r\n\r\nSeparating the reaction to be the responsibility of the entity affected allows for extensibility. \r\nIn response to a grab, you may want some entities to lock to the controller and move, \r\nothers to rotate around a fixed point, and others still to spawn a new entity but remain unchanged. \r\nWith this API schema, these options can be handled by adding or creating different reaction\r\ncomponents to the entities in your scene, and `super-hands` can work with all of them. \r\n\r\n#### Examples\r\n\r\n[Visit the Examples Page to see super-hands in action](https://wmurphyrd.github.io/aframe-super-hands-component/examples/)\r\n\r\n### News\r\n\r\n* Initial launch\r\n\r\n#### Known Issues\r\n\r\n* Collision zones for stretched entities don't update to new scale (`sphere-collider` does not take entity scale into account)\r\n\r\n#### Compatibility\r\n\r\nMade for A-Frame v.0.4.0. \r\n\r\n### API\r\n\r\n#### super-hands component\r\n\r\n`super-hands` should be added to same entities as your controller\r\ncomponent and collision detector (e.g. [aframe-extras sphere-collider](https://github.com/donmccurdy/aframe-extras/blob/master/src/misc) \r\nor the in-development, physics system-based [physics-collider](https://github.com/donmccurdy/aframe-physics-system/pull/14)).\r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| colliderState | Name of state added to entities by your chosen collider | `'collided'` (default for `sphere-collider` and `physics-collider`) |\r\n| colliderEvent | Event that your chosen collider emits when identifying a new collision | `'hit'` (default for `sphere-collider` and `physics-collider`) |\r\n| grabStartButtons | Array of button event types that can initiate grab | Trigger, grip, thumb press events |\r\n| grabEndButtons | Array of button event types that can terminate grab | Trigger, grip, thumb release events |\r\n| stretchStartButtons | Array of button event types that can initiate stretch | Trigger, grip, thumb press events |\r\n| stretchEndButtons | Array of button event types that can terminate stretch | Trigger, grip, thumb release events |\r\n| dragDropStartButtons | Array of button event types that can initiate dragging/hovering | Trigger, grip, thumb press events |\r\n| dragDropEndButtons | Array of button event types that can execute drag-drop | Trigger, grip, thumb release events |\r\n\r\nDefault button events include specific events for `vive-controls`, `hand-controls` and \r\n`oculus-touch-controls`.\r\n\r\nDefault start events: 'gripdown', 'trackpaddown', 'triggerdown', 'gripclose', \r\n'pointup', 'thumbup', 'pointingstart', 'pistolstart', 'thumbstickdown'\r\n\r\nDefault end events: 'gripup', 'trackpadup', 'triggerup', 'gripopen', \r\n'pointdown', 'thumbdown', 'pointingend', 'pistolend', 'thumbstickup'\r\n\r\n##### Events\r\n\r\nEvents will be emitted by the entity being interacted with. \r\nThe entity that `super-hands` is attached to is sent in the event `details` as the property `hand`.\r\n\r\n| Type | Description | Target | details object |\r\n| --- | --- | --- | --- |\r\n| hover-start | Collided with entity | collided entity | hand: `super-hands` entity |\r\n| hover-end | No longer collided with entity | collided entity | hand: `super-hands` entity |\r\n| grab-start | Button pressed while collided with entity and hand is empty | collided entity | hand: `super-hands` entity |\r\n| grab-end | Button released after grab-start | collided entity | hand: `super-hands` entity |\r\n| stretch-start | Both controllers have button pressed while collided with entity | collided entity | hand: `super-hands` entity, secondHand: second controller entity |\r\n| stretch-end | Release of button after stretch-start | collided entity | hand: `super-hands` entity |\r\n| dragover-start | Collision with entity while holding another entity | collided entity & held entity | hand: `super-hands` entity, hovered: collided entity, carried: held entity |\r\n| dragover-end | No longer collided with entity from dragover-start | collided entity & held entity | hand: `super-hands` entity, hovered: collided entity, carried: held entity |\r\n| drag-drop | Button released while holding an entity and collided with another | collided entity & held entity | hand: `super-hands` entity, dropped: carried entity, on: receiving entity |\r\n\r\nNotes: \r\n\r\n* References to buttons being \"released\" and \"pressed\" are dependent on the schema settings. \r\nFor example, to make grab 'sticky', you could set grabStartButtons to \r\n'triggerdown' and grabEndButtons to 'gripdown' (as in the \r\n[sticky example](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#sticky)).\r\nThis way the grab-end event would not fire until the grip button was *pressed*, \r\neven if the trigger was *released* earlier. \r\n* Only one entity at a time will be targeted for each event type, \r\neven if multiple overlapping collision zones exist. `super-hands` tracks a \r\nFIFO queue of collided entities to determine which will be affected.\r\n\r\n#### hoverable component\r\n\r\nUsed to indicate when the controller is within range to interact with an entity\r\nby adding the 'hovered' state. When using a mixin, including another mixin\r\nin the assets withe same id + '-hovered' will activate automatically, as in\r\n[the examples](https://wmurphyrd.github.io/aframe-super-hands-component/examples/).\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| hovered | Added to entity while it is collided with the controller |\r\n\r\n#### grabbable component\r\n\r\nMakes and entity move along with the controller while it is grabbed.\r\n\r\nThis works best with [aframe-physics-system](https://github.com/donmccurdy/aframe-physics-system) \r\nto manage grabbed entity movement, but it will fallback to manual `position` updates \r\n(without rotational translation) if physics is not available or is disabled with `usePhysics = never`. \r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| usePhysics | Whether to use physics system constraints to handle movement, 'ifavailable', 'only', or 'never' | 'auto' |\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| grabbed | Added to entity while it is being carried |\r\n\r\n#### stretchable component\r\n\r\nMakes and entity rescale while grabbed by both controllers as they are moved closer together or further apart.\r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| usePhysics | Whether to update physics body shapes with scale changes, 'ifavailable' or 'never' | 'ifavailable' |\r\n\r\nThere is no CANNON api method for updating physics body scale, but `stretchable` will manually rescale basic shapes. Currently rescalable shapes are: box. \r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| stretched | Added to entity while it is grabbed with two hands |\r\n\r\n#### drag-droppable component\r\n\r\n`drag-droppable` is a shell component that only manages the 'hovered' state for the entity. \r\nThis can be combined with with a '-hovered' mixin to easily highlight when an entity is \r\nhovering in a drag-drop location. \r\n\r\nFor more interactivity, consider using `event-set` from [kframe](http://github.com/ngokevin/kframe) \r\nwith the `drag-dropped` event or creating your own component.\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| dragover | Added to while a carried entity is colliding with a a `drag-droppable` entity |\r\n\r\nAdd `drag-droppable` to both the carried entity and the receiving entity if you want both of them to \r\nreceive the hovered state. \r\n\r\n\r\n### Installation\r\n\r\n#### Browser \r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>My A-Frame Scene</title>\r\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\r\n <script src=\"https://rawgit.com/wmurphyrd/aframe-super-hands-component/master/dist/super-hands.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <a-entity super-hands></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n#### npm \r\n\r\nInstall via npm:\r\n\r\n```bash\r\nnpm install super-hands\r\n```\r\n\r\nThen require and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('super-hands');\r\n```\r\n","url":"https://unpkg.com/super-hands@0.2.x/README.md"},"https://unpkg.com/aframe-event-set-component@^3.0.x/package.json":{"name":"aframe-event-set-component","version":"3.0.1","description":"Component to set properties in response to events.","main":"index.js","browser":"dist/aframe-event-set-component.min.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-event-set-component.js && webpack -p index.js dist/aframe-event-set-component.min.js","lint":"semistandard -v | snazzy","postpublish":"npm run dist","preghpages":"npm run build && rm -rf gh-pages && cp -r examples gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/aframe-event-set-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/aframe-event-set-component/issues"},"homepage":"https://github.com/ngokevin/aframe-event-set-component#readme","devDependencies":{"aframe":"aframevr/aframe#master","browserify":"^12.0.1","browserify-css":"^0.8.3","budo":"^7.1.0","ghpages":"0.0.3","inquirer":"^0.12.0","semistandard":"^8.0.0","shelljs":"^0.6.0","snazzy":"^4.0.0","webpack":"^1.12.9"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-event-set-component@^3.0.x/README.md":{"text":"## aframe-event-set-component\n\n> If you are using A-Frame 0.2.0, see the older [0.2.0 version](https://github.com/ngokevin/aframe-event-set-component/tree/v0.2.0) of this component.\n\nAn [A-Frame](https://aframe.io) component to register event listeners that set\nproperties. Replacement for the undocumented Declarative Events API in A-Frame\n0.2.0.\n\n### Properties\n\nThe Event Set component can register multiple event handlers that set multiple\nproperties. Use double-underscores (`__`) to namespace individual instances of\nthe component:\n\n```html\n<a-entity event-set__1=\"_event: click; material.color: red; scale: 2 2 2,\n event-set__2=\"_event: mouseenter; material.color: blue\">\n```\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| _event | Event name. | '' |\n| _target | Query selector if setting property on another entity. | '' |\n\n`_event` and `_target` are prefixed with underscores to avoid name collisions\nif case another component has `event` or `target` properties. Any key-value\nproperty pairs provided beyond `_event` and `_target` will be what is set once\nthe event is emitted.\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/ngokevin/aframe-event-set-component/master/dist/aframe-event-set-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity geometry=\"primitive: box\" material=\"color: green\"\n event-set__1=\"_event: click; material.color: red; scale: 2 2 2\"\n event-set__2=\"_event: mouseenter; material.color: blue\"></a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-event-set-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-event-set-component');\n```\n","url":"https://unpkg.com/aframe-event-set-component@^3.0.x/README.md"},"https://unpkg.com/aframe-mouse-cursor-component@0.4.0/package.json":{"name":"aframe-mouse-cursor-component","version":"0.4.0","description":"A-Frame Mouse Cursor Component for A-Frame VR.","main":"dist/aframe-mouse-cursor-component.js","scripts":{"build":"webpack -p examples/main.js examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live -- -t babelify","dist":"webpack index.js dist/aframe-mouse-cursor-component.js && webpack -p index.js dist/aframe-mouse-cursor-component.min.js","postpublish":"npm run dist","preghpages":"npm run build && rm -rf gh-pages && cp -r examples gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages"},"repository":{"type":"git","url":"git+https://github.com/mayognaise/aframe-mouse-cursor-component.git"},"keywords":["aframe","aframe-component","layout","aframe-vr","vr","aframe-layout","mozvr","webvr"],"author":"Mayo Tobita <tobimayo@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/mayognaise/aframe-mouse-cursor-component/issues"},"homepage":"https://github.com/mayognaise/aframe-mouse-cursor-component#readme","devDependencies":{"aframe":"^0.4.1","aframe-event-set-component":"^0.1.2","babel-core":"^6.7.6","babel-loader":"^6.2.4","babel-preset-es2015":"^6.6.0","babelify":"^7.2.0","browserify":"^13.0.0","budo":"^8.2.1","ghpages":"0.0.3","webpack":"^1.12.15"},"dependencies":{"lodash.flattendeep":"^4.4.0"}},"https://unpkg.com/aframe-mouse-cursor-component@0.4.0/README.md":{"text":"# A-Frame Mouse Cursor Component\n\nThis is similar to `cursor` component besides the mouse behaves as cursor.\n\nFor detail, please check [cursor page](https://aframe.io/docs/components/cursor.html).\n\n**[DEMO](https://mayognaise.github.io/aframe-mouse-cursor-component/basic/index.html)**\n\n![example](example.gif)\n\n## Properties\n\nThere is no property.\n\n\n## States\n\nThe `mouse-cursor` will add states to the cursor entity on certain events.\n\n**There is no `hovering` or `hovered` state for mobile.**\n\n| State Name | Description |\n| -------- | ----------- |\n| hovering | Added when the cursor is hovering over another entity. |\n\nThe cursor will add states to the target entity on certain events.\n\n| State Name | Description |\n| -------- | ----------- |\n| hovered | Added when target entity is being hovered by the cursor. |\n\n\n## Events\n\n**There is no `mouseenter` or `mouseleave` events but `click` event for mobile.**\n\n| Event Name | Description |\n| -------- | ----------- |\n| click | Triggered when an entity is clicked. |\n| mouseenter | Triggered on mouseenter of the canvas. |\n| mouseleave | Triggered on mouseleave of the canvas. |\n\nFor events, please check [demo page](https://mayognaise.github.io/aframe-mouse-cursor-component/basic/index.html).\n\n\n## Usage\n\n**The `mouse-cursor` component is usually used alongside the [camera component][components-camera].**\n\n### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.2.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/mayognaise/aframe-mouse-cursor-component/master/dist/aframe-mouse-cursor-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity camera mouse-cursor>\n </a-scene>\n</body>\n```\n\n### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm i -D aframe-mouse-cursor-component\n```\n\nThen register and use.\n\n```js\nimport 'aframe'\nimport 'aframe-mouse-cursor-component'\n```\n\n## Change log\n\n### 0.2.1\n\n- Now mouse cursor works in stereo mode on both desktop/mobile\n- `click` event won't be fired when mouse moves a lot after mouse down\n\n\n","url":"https://unpkg.com/aframe-mouse-cursor-component@0.4.0/README.md"},"https://unpkg.com/aframe-rain@^1.0.2/package.json":{"name":"aframe-rain","version":"1.0.2","description":"A-Frame rain component","main":"index.js","scripts":{"all":"npm run build && npm run build-uglify","build":"webpack index.js build/aframe-rain.js","build-uglify":"webpack -p index.js build/aframe-rain.min.js"},"repository":{"type":"git","url":"git+https://github.com/takahirox/aframe-rain.git"},"keywords":["aframe","aframe-vr","vr","three","threejs","mozvr","webvr"],"author":"Takahiro <hogehoge@gachapin.jp> (https://github.com/takahirox)","license":"MIT","bugs":{"url":"https://github.com/takahirox/aframe-rain/issues"},"homepage":"https://github.com/takahirox/aframe-rain#readme","devDependencies":{"aframe":"^0.4.0","three":"^0.83.0","webpack":"^1.13.3"}},"https://unpkg.com/aframe-rain@^1.0.2/Readme.md":{"text":"# A-Frame Rain component\r\n\r\naframe-rain is Rainfall effect component for A-Frame which displays a lot of\r\nrain drop/splash objects by using instancing technique with good performance.\r\n\r\n![screenshot](./screenshot.png \"screenshot\")\r\n\r\nCloser rain drop height is shorter and further rain drop is more transparent,\r\nimplemented similar to Fog effect technique.\r\n\r\n## Demo\r\n\r\n[Demo](https://cdn.rawgit.com/takahirox/aframe-rain/v1.0.2/index.html)\r\n\r\n## Properties\r\n\r\n### aframe-rain\r\n\r\n| Properties | type | Default Value | Description |\r\n| ------------- | ------- | ------------- | ----------- |\r\n| color | color | '#ddf' | Rain drop/splash color |\r\n| count | int | 5000 | The number of drops/splashes |\r\n| depthDensity | number | 0.05 | Depth density which affects rain drop height/opacity. The name is from Fog density |\r\n| dropHeight | number | 1.0 | Rain drop height |\r\n| dropRadius | number | 0.005 | Rain drop radius |\r\n| height | number | 30.0 | How high rain drops fall from |\r\n| opacity | number | 0.4 | Rain drop/splash opacity |\r\n| splash | boolean | true | If displays rain splash on ground |\r\n| splashBounce | number | 4.0 | Rain splash bound strongness |\r\n| splashGravity | number | 9.8 * 4.0 | Rain splash gravity |\r\n| vector | vec3 | '0, -40.0 0' | Rain drop vector. y must be < 0.0 |\r\n| width | number | 30.0 | Area where rain drop/sphash effect |\r\n\r\n## Browser\r\n\r\n### How to use\r\n\r\nTo apply Rain effect in a scene, add `rain` attribute in `<a-scene>` like `<a-scene rain>`.\r\n\r\n```html\r\n<head>\r\n <script src=\"https://cdn.rawgit.com/aframevr/aframe/v0.4.0/dist/aframe-master.min.js\"></script>\r\n <script src=\"https://rawgit.com/takahirox/aframe-rain/master/build/aframe-rain.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene rain>\r\n <a-entity position=\"0 0 10\">\r\n <a-camera></a-camera>\r\n </a-entity>\r\n\r\n <a-entity geometry=\"primitive:sphere\"></a-entity>\r\n\r\n <a-sky color=\"#222\"></a-sky>\r\n\r\n <a-entity light=\"type:directional;color:#666\" position=\"-10 -10 -10\"></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n## NPM\r\n\r\n### How to install\r\n\r\n```\r\n$ npm install aframe-rain\r\n```\r\n\r\n### How to build\r\n\r\n```\r\n$ npm install\r\n$ npm run all\r\n```\r\n\r\n### How to load\r\n\r\n```\r\nrequire('aframe');\r\nrequire('aframe-rain');\r\n```","url":"https://unpkg.com/aframe-rain@^1.0.2/Readme.md"},"https://unpkg.com/aframe-lerp-component@^1.0.2/package.json":{"name":"aframe-lerp-component","version":"1.0.2","description":"A Linear Interpolation component for A-Frame.","main":"index.js","cdn":"dist/aframe-lerp-component.min.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-lerp-component.js && webpack -p index.js dist/aframe-lerp-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/haydenjameslee/aframe-lerp-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","lerp"],"author":"Hayden Lee <haydenjameslee@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/haydenjameslee/aframe-lerp-component/issues"},"homepage":"https://github.com/haydenjameslee/aframe-lerp-component#readme","devDependencies":{"aframe":"^0.4.0","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-lerp-component@^1.0.2/README.md":{"text":"## aframe-lerp-component\n\nA linear interpolation component for [A-Frame](https://aframe.io).\n\nChanges the position, rotation, or scale when you call `el.setAttribute('position', ...)` from the current value to the new value in time `duration`.\n\nUse directly by calling `el.components.lerp.toPosition(from, to)`\n\n\n![GIF Example](http://i.giphy.com/26xBP0MH0KHaCrhE4.gif)\n\n\n### API\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| duration | Time to move from `from` to `to` in milliseconds (ms) | 100 |\n| properties | Array of properties to lerp. Eg. to only lerp position and rotation set to `position, rotation` | position, rotation, scale |\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-lerp-component/dist/aframe-lerp-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity lerp=\"duration: 100; properties: position, rotation, scale\"></a-entity>\n </a-scene>\n</body>\n```\n\n<!-- If component is accepted to the Registry, uncomment this. -->\n<!--\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\nversion of the component straight into your HTML file, respective to your\nversion of A-Frame:\n\n```sh\nangle install aframe-lerp-component\n```\n-->\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-lerp-component\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-lerp-component');\n```\n","url":"https://unpkg.com/aframe-lerp-component@^1.0.2/README.md"},"https://unpkg.com/aframe-leap-hands@^0.x.x/package.json":{"name":"aframe-leap-hands","version":"0.7.0","description":"Leap Motion components for A-Frame VR","main":"index.js","scripts":{"dev":"budo examples/index.js:examples/budo.js --port 8000","test":"echo \"Error: no test specified\" && exit 1","dist":"webpack browser.js dist/aframe-leap-hands.js && webpack -p browser.js dist/aframe-leap-hands.min.js","version":"npm run dist && git add -A dist","postversion":"git push && git push --tags && npm publish"},"repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-leap-hands.git"},"keywords":["aframe","aframevr","leap","leapmotion","vr","hand"],"author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","bugs":{"url":"https://github.com/donmccurdy/aframe-leap-hands/issues"},"homepage":"https://github.com/donmccurdy/aframe-leap-hands#readme","dependencies":{"circular-array":"0.0.1","leapjs":"^0.6.4"},"devDependencies":{"aframe":"^0.5.0","aframe-extras":"^3.2.6","browserify":"^14.1.0","budo":"^9.4.7","webpack":"^2.2.1"},"peerDependencies":{"aframe":"^0.5.0"}},"https://unpkg.com/aframe-leap-hands@^0.x.x/README.md":{"text":"# A-Frame VR `leap-hand` for Leap Motion\n\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/donmccurdy/aframe-leap-hands/master/LICENSE)\n![Work in progress](https://img.shields.io/badge/status-experimental-orange.svg)\n\nA-Frame VR component for Leap Motion controller.\n\n![screenshot](https://dl.dropboxusercontent.com/u/42869844/tmp/leaphands.JPG)\n\n## Installation\n\nUsing NPM and Browserify or Webpack:\n\n```bash\nnpm install --save aframe-leap-hands\n```\n\n```javascript\nrequire('aframe-leap-hands').registerAll();\n```\n\n## Usage\n\n```html\n<a-entity camera=\"near: 0.01\" look-controls position=\"0 1.5 0\">\n <a-entity leap-hand=\"hand: left\"></a-entity>\n <a-entity leap-hand=\"hand: right\"></a-entity>\n</a-entity>\n```\n\n## References:\n\n### Official\n\n+ [Leap JS](https://github.com/leapmotion/leapjs)\n+ [Leap JS Plugins](https://github.com/leapmotion/leapjs-plugins)\n+ [Leap JS cont'd](https://developer.leapmotion.com/javascript)\n+ [Leap JS Network](https://github.com/leapmotion/leapjs-network)\n+ [Leap JS Widgets](https://github.com/leapmotion/leapjs-widgets)\n+ [Leap JS Rigged THREE.js Hand](https://github.com/leapmotion/leapjs-rigged-hand)\n\n### Third-party\n\n+ THREE.LeapMotion Wrapper [discussion](https://community.leapmotion.com/t/three-js-wrapper/769) and [GitHub](https://github.com/scottbyrns/THREE.LeapMotion)\n","url":"https://unpkg.com/aframe-leap-hands@^0.x.x/README.md"},"https://unpkg.com/aframe-extras.object-model@^3.3.x/package.json":{"name":"aframe-extras.object-model","version":"3.3.0","description":"Loader for THREE.ObjectLoader-compatible models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.json-model@^3.3.x/package.json":{"name":"aframe-extras.json-model","version":"3.3.0","description":"Loader for THREE.JSONLoader-compatible models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-physics-system@^1.3.x/package.json":{"name":"aframe-physics-system","version":"1.3.0","description":"Physics system for A-Frame VR, built on Cannon.js","main":"index.js","scripts":{"dev":"budo browser.js:bundle.js -d examples --port 8000","dist":"browserify browser.js -o dist/aframe-physics-system.js && uglifyjs -c -o dist/aframe-physics-system.min.js -- dist/aframe-physics-system.js","test":"karma start ./tests/karma.conf.js","test:once":"karma start ./tests/karma.conf.js --single-run","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers Firefox","preversion":"npm run test:once","preversion:readme":"replace 'aframe-physics-system/v\\d+\\.\\d+\\.\\d+' \"aframe-physics-system/v$npm_package_version\" ./README.md","version":"npm run preversion:readme && npm run dist && git add -A dist README.md","postversion":"git push && git push --tags && npm publish"},"repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-physics-system.git"},"keywords":["aframe","aframevr","vr","three","physics","cannon","webgl","webvr"],"author":"Don McCurdy <dm@donmccurdy.com> (https://www.donmccurdy.com)","license":"MIT","bugs":{"url":"https://github.com/donmccurdy/aframe-physics-system/issues"},"homepage":"https://github.com/donmccurdy/aframe-physics-system#readme","dependencies":{"cannon":"github:donmccurdy/cannon.js#v0.6.2-dev1","three-to-cannon":"^1.0.4"},"peerDependencies":{"aframe":"^0.5.0"},"devDependencies":{"aframe":"^0.5.0","browserify":"^13.1.0","budo":"^9.2.1","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.4","envify":"^4.0.0","karma":"^1.3.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.2.0","karma-mocha-reporter":"^2.2.0","karma-sinon-chai":"^1.2.4","mocha":"^3.1.2","replace":"^0.3.0","sinon":"^1.17.6","sinon-chai":"^2.8.0","uglify-js":"^2.7.3"}},"https://unpkg.com/aframe-extras.object-model@^3.3.x/README.md":{"text":"\n# aframe-extras.object-model\n\nLoader for THREE.ObjectLoader-compatible models.\n ","url":"https://unpkg.com/aframe-extras.object-model@^3.3.x/README.md"},"https://unpkg.com/aframe-extras.json-model@^3.3.x/README.md":{"text":"\n# aframe-extras.json-model\n\nLoader for THREE.JSONLoader-compatible models.\n ","url":"https://unpkg.com/aframe-extras.json-model@^3.3.x/README.md"},"https://unpkg.com/aframe-physics-system@^1.3.x/README.md":{"text":"# Physics for A-Frame VR\n\n[![Build Status](https://travis-ci.org/donmccurdy/aframe-physics-system.svg?branch=master)](https://travis-ci.org/donmccurdy/aframe-physics-system)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/donmccurdy/aframe-physics-system/master/LICENSE)\n\nComponents for A-Frame physics integration, built on [CANNON.js](http://schteppe.github.io/cannon.js/).\n\n![d6590832-8bdb-11e6-9336-658b00bc0460 3](https://cloud.githubusercontent.com/assets/1848368/19297499/806d059a-9013-11e6-9b20-c03294acbc4c.png)\n\n> Image credit [@andgokevin](https://twitter.com/andgokevin).\n\n## Usage (Scripts)\n\nIn the [dist/](https://github.com/donmccurdy/aframe-physics-system/tree/master/dist) folder, download the full or minified build. Include the script on your page, and all components are automatically registered for you:\n\n```html\n<script src=\"//cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.3.0/dist/aframe-physics-system.min.js\"></script>\n```\n\nCDN builds for aframe-physics-system/v1.3.0:\n\n- [aframe-physics-system.js](https://cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.3.0/dist/aframe-physics-system.js) *(development)*\n- [aframe-physics-system.min.js](https://cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.3.0/dist/aframe-physics-system.min.js) *(production)*\n\n## Usage (NPM)\n\n```\nnpm install --save aframe-physics-system\n```\n\n```javascript\n// my-app.js\nvar physics = require('aframe-physics-system');\nphysics.registerAll();\n```\n\nOnce installed, you'll need to compile your JavaScript using something like [Browserify](http://browserify.org/) or [Webpack](http://webpack.github.io/). Example:\n\n```bash\nnpm install -g browserify\nbrowserify my-app.js -o bundle.js\n```\n\n`bundle.js` may then be included in your page. See [here](http://browserify.org/#middle-section) for a better introduction to Browserify.\n\n## Components – `dynamic-body` and `static-body`\n\nThe `dynamic-body` and `static-body` components may be added to any `<a-entity/>` that contains a mesh. Generally, each scene will have at least one `static-body` for the ground, and one or more `dynamic-body` instances that the player can interact with.\n\n- **dynamic-body**: A freely-moving object. Dynamic bodies have mass, collide with other objects, bounce or slow during collisions, and fall if gravity is enabled.\n- **static-body**: A fixed-position or animated object. Other objects may collide with static bodies, but static bodies themselves are unaffected by gravity and collisions.\n\n| Property | Dependencies | Default | Description |\n|----------------|------------------|---------|---------------------------------------------|\n| shape | — | `auto` | `auto`, `box`, `cylinder`, `sphere`, `hull` |\n| mass | `dynamic-body` | 5 | Simulated mass of the object, > 0. |\n| linearDamping | `dynamic-body` | 0.01 | Resistance to movement. |\n| angularDamping | `dynamic-body` | 0.01 | Resistance to rotation. |\n| sphereRadius | `shape:sphere` | — | Override default radius of bounding sphere. |\n| cylinderAxis | `shape:cylinder` | — | Override default axis of bounding cylinder. |\n\n### Basics\n\n```html\n<!-- The debug:true option creates a wireframe around each physics body. If you don't see a wireframe,\n the physics system may be unable to parse your model without a shape:box or shape:hull option. -->\n<a-scene physics=\"debug: true\">\n\n <!-- Camera -->\n <a-entity camera look-controls></a-entity>\n\n <!-- Floor -->\n <a-plane static-body></a-plane>\n\n <!-- Immovable box -->\n <a-box static-body position=\"0 0.5 -5\" width=\"3\" height=\"1\" depth=\"1\"></a-box>\n\n <!-- Dynamic box -->\n <a-box dynamic-body position=\"5 0.5 0\" width=\"1\" height=\"1\" depth=\"1\"></a-box>\n\n</a-scene>\n```\n\n## Components – `constraint`\n\nThe `constraint` component is used to bind physics bodies together using hinges, fixed distances, or fixed attachment points.\n\nExample:\n\n```html\n<a-box id=\"other-box\" dynamic-body />\n<a-box constraint=\"target: #other-box;\" dynamic-body /> \n```\n\n| Property | Dependencies | Default | Description |\n| --- | --- | --- | --- |\n| type | — | `lock` | Type of constraint. Options: `lock`, `distance`, and more to come. |\n| target | — | — | Selector for a single entity to which current entity should be bound. |\n| maxForce | — | 1e6 | Maximum force that may be exerted to enforce this constraint. |\n| collideConnected | — | true | If true, connected bodies may collide with one another. |\n| wakeUpBodies | — | true | If true, sleeping bodies are woken up by this constraint. |\n| distance | `type:distance` | auto | Distance at which bodies should be fixed. Default, or 0, for current distance. |\n\n## Using the CANNON.js API\n\nFor more advanced physics, use the CANNON.js API with custom JavaScript and A-Frame components. The [CANNON.js documentation](http://schteppe.github.io/cannon.js/docs/) and source code offer good resources for learning to work with physics in JavaScript.\n\nIn A-Frame, each entity's `CANNON.Body` instance is exposed on the `el.body` property. To apply a quick push to an object, you might do the following:\n\n```html\n<a-scene>\n <a-entity id=\"nyan\" dynamic-body=\"shape: hull\" obj-model=\"obj: url(nyan-cat.obj)\"></a-entity>\n <a-plane static-body></a-plane>\n</a-scene>\n```\n\n```javascript\nvar el = sceneEl.querySelector('#nyan');\nel.body.applyImpulse(\n /* impulse */ new CANNON.Vec3(0, 1, -1),\n /* world position */ new CANNON.Vec3().copy(el.getComputedAttribute('position'))\n);\n```\n\n## Body Shapes\n\nBody components will attempt to find an appropriate CANNON.js shape to fit your model. When defining an object you may choose a shape or leave the default, `auto`. Select a shape carefully, as there are performance implications with different choices:\n\n* **Auto** (`auto`) – Chooses automatically from the available shapes.\n* **Box** (`box`) – Great performance, compared to Hull or Trimesh shapes, and may be fitted to custom models.\n* **Cylinder** (`cylinder`) – See `box`. Adds `cylinderAxis` option.\n* **Sphere** (`sphere`) – See `box`. Adds `sphereRadius` option.\n* **Convex** (`hull`) – Wraps a model like shrink-wrap. Convex shapes are more performant and better supported than Trimesh, but may still have some performance impact when used as dynamic objects.\n* **Primitives** – Plane/Cylinder/Sphere. Used automatically with the corresponding A-Frame primitives.\n* **Trimesh** – *Deprecated.* Not available as a custom shape, but may be chosen as a last resort for custom geometry. Trimeshes adapt to fit custom geometry (e.g. a `.OBJ` or `.DAE` file), but have very minimal support. Arbitrary trimesh shapes are difficult to model in any JS physics engine, will \"fall through\" certain other shapes, and have serious performance limitations.\n* **Compound** – *In progress.* Compound shapes require a bit of work to set up, but allow you to use multiple primitives to define a physics shape around custom models. These will generally perform better, and behave more accurately, than Trimesh or Convex shapes. For example, a stool might be modeled as a cylinder-shaped seat, on four long cylindrical legs.\n\nFor more details, see the CANNON.js [collision matrix](https://github.com/schteppe/cannon.js#features).\n\nExample using a bounding box for a custom model:\n\n```html\n<!-- Box -->\n<a-entity obj-model=\"obj: url(...)\" dynamic-body=\"shape: box; mass: 2\"></a-entity>\n\n<!-- Cylinder -->\n<a-entity obj-model=\"obj: url(...)\" dynamic-body=\"shape: cylinder; cylinderAxis: y; mass: 5\"></a-entity>\n```\n\n## Collision Events\n\nCANNON.js generates events when a collision is detected, which are propagated onto the associated A-Frame entity. Example:\n\n```javascript\nvar playerEl = document.querySelector('[camera]');\nplayerEl.addEventListener('collide', function (e) {\n console.log('Player has collided with body #' + e.detail.body.id);\n\n e.detail.target.el; // Original entity (playerEl).\n e.detail.body.el; // Other entity, which playerEl touched.\n e.detail.contact; // Stats about the collision (CANNON.ContactEquation).\n e.detail.contact.ni; // Normal (direction) of the collision (CANNON.Vec3).\n});\n```\n\nNote that CANNON.js cannot perfectly detect collisions with very fast-moving bodies. Doing so requires Continuous Collision Detection, which can be both slow and difficult to implement. If this is an issue for your scene, consider (1) slowing objects down, (2) detecting collisions manually (collisions with the floor are easy – `position.y - height / 2 <= 0`), or (3) attempting a PR to CANNON.js. See: [Collision with fast bodies](https://github.com/schteppe/cannon.js/issues/202).\n\n## Configuration\n\nContact materials define what happens when two objects meet, including physical properties such as friction and restitution (bounciness). The default, scene-wide contact materials may be configured on the scene element:\n\n```html\n<a-scene physics=\"friction: 0.1; restitution: 0.5\">\n <!-- ... -->\n</a-scene>\n```\n\n| Property | Default | Description |\n|---------------------------------|---------|----------------------------------------------------|\n| debug | true | Whether to show wireframes for debugging. |\n| gravity | -9.8 | Force of gravity (in m/s^2). |\n| iterations | 10 | The number of solver iterations determines quality of the constraints in the world. The more iterations, the more correct simulation. More iterations need more computations though. If you have a large gravity force in your world, you will need more iterations. |\n| maxInterval | 0.0667 | Maximum simulated time (in milliseconds) that may be taken by the physics engine per frame. Effectively prevents weird \"jumps\" when the player returns to the scene after a few minutes, at the expense of pausing physics during this time. |\n| friction | 0.01 | Coefficient of friction. |\n| restitution | 0.3 | Coefficient of restitution (bounciness). |\n| contactEquationStiffness | 1e8 | Stiffness of the produced contact equations. |\n| contactEquationRelaxation | 3 | Relaxation time of the produced contact equations. |\n| frictionEquationStiffness | 1e8 | Stiffness of the produced friction equations. |\n| frictionEquationRegularization | 3 | Relaxation time of the produced friction equations |\n\nMore advanced configuration, including specifying different collision behaviors for different objects, is available through the CANNON.js JavaScript API.\n\nResources:\n\n* [CANNON.World](http://schteppe.github.io/cannon.js/docs/classes/World.html)\n* [CANNON.ContactMaterial](http://schteppe.github.io/cannon.js/docs/classes/ContactMaterial.html)\n\n","url":"https://unpkg.com/aframe-physics-system@^1.3.x/README.md"},"https://unpkg.com/super-hands@0.3.x/package.json":{"name":"super-hands","version":"0.3.0","description":"All-in-one natural hand controller interaction component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/super-hands.js && webpack -p index.js dist/super-hands.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers Firefox"},"repository":{"type":"git","url":"git+https://github.com/wmurphyrd/aframe-super-hands-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","super-hands","controls","tracked-controls","hand-controls","grab","drag-drop","stretch"],"author":"William Murphy william@datatitian.com","license":"MIT","bugs":{"url":"https://github.com/wmurphyrd/aframe-super-hands-component/issues"},"homepage":"https://github.com/wmurphyrd/aframe-super-hands-component#readme","devDependencies":{"aframe":"^0.5.0","aframe-physics-system":"^1.3.0","babel-loader":"^6.2.10","babel-preset-es2015":"^6.22.0","babelify":"^7.3.0","browserify":"^13.0.0","browserify-istanbul":"^2.0.0","budo":"^8.2.2","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.0","ghpages":"^0.0.8","istanbul":"^0.4.5","karma":"^1.4.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"^1.2.4","mocha":"^3.0.2","mozilla-download":"^1.1.1","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.5","sinon-chai":"^2.8.0","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/super-hands@0.3.x/README.md":{"text":"## Super Hands\r\n\r\n[![Build Status](https://travis-ci.org/wmurphyrd/aframe-super-hands-component.svg?branch=master)](https://travis-ci.org/wmurphyrd/aframe-super-hands-component)\r\n[![npm Dowloads](https://img.shields.io/npm/dt/super-hands.svg?style=flat-square)](https://www.npmjs.com/package/super-hands)\r\n[![npm Version](http://img.shields.io/npm/v/super-hands.svg?style=flat-square)](https://www.npmjs.com/package/super-hands)\r\n\r\nEffortlessly add natural, intuitive hand controller interaction in\r\n[A-Frame](https://aframe.io).\r\n\r\n![Demo Gif](readme_files/super-hands-demo.gif) \r\n\r\n![Super Hans Can't Make a Fist](readme_files/peep-show-super-hans.gif)\r\n\r\n### Description\r\n\r\nThe `super-hands` component interprets input from tracked controllers and \r\ncollision detection components\r\ninto interaction gestures and communicates those gestures to \r\ntarget entities for them to respond. \r\n\r\nThe currently implemented gestures are:\r\n\r\n* Hover: Holding a controller in the collision space of an entity\r\n* Grab: Pressing a button while hovering an entity, potentially also moving it\r\n* Stretch: Grabbing an entity with two hands and resizing \r\n* Drag-drop: Dragging an entity onto another entity\r\n\r\nFor an entity to respond to the `super-hands` gestures, it needs to have \r\ncomponents attached to translate the gestures into actions. `super-hands` \r\nincludes components for typical reactions to the implemented gestures: \r\n`hoverable`, `grabbable`, `stretchable`, and `drag-droppable`.\r\n\r\n![Separation of Gesture and Response API](readme_files/super-hands-api.png)\r\n\r\nSeparating the reaction to be the responsibility of the entity affected allows for extensibility. \r\nIn response to a grab, you may want some entities to lock to the controller and move, \r\nothers to rotate around a fixed point, and others still to spawn a new entity but remain unchanged. \r\nWith this API schema, these options can be handled by adding or creating different reaction\r\ncomponents to the entities in your scene, and `super-hands` can work with all of them. \r\n\r\n### Installation\r\n\r\n#### Browser \r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>Most Basic Super-Hands Example</title>\r\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\r\n <script src=\"//cdn.rawgit.com/donmccurdy/aframe-extras/v3.3.0/dist/aframe-extras.min.js\"></script>\r\n <script src=\"https://rawgit.com/wmurphyrd/aframe-super-hands-component/master/dist/super-hands.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <!-- Make sure your super-hands entities also have controller and collider components -->\r\n <a-entity hand-controls=\"left\" super-hands sphere-collider=\"objects: a-box\"></a-entity>\r\n <a-entity hand-controls=\"right\" super-hands sphere-collider=\"objects: a-box\"></a-entity>\r\n <!-- hover and drag-drop won't have any obvious effect without some additional entities or components. See the examples page for more -->\r\n <a-box hoverable grabbable stretchable drag-droppable</a-box>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n#### npm \r\n\r\nInstall via npm:\r\n\r\n```bash\r\nnpm install super-hands\r\n```\r\n\r\nThen require and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('super-hands');\r\n```\r\n\r\n\r\n#### Examples\r\n\r\n[Visit the Examples Page to see super-hands in action](https://wmurphyrd.github.io/aframe-super-hands-component/examples/)\r\n\r\n### News\r\n\r\nv0.3.0\r\n\r\n* Confirmed compatibility with A-Frame v0.5.0 (no changes)\r\n\r\nv0.2.4\r\n\r\n* Fix error with systm registration that broke most everything\r\n\r\nv0.2.3\r\n\r\n* Fix `usePhysics: only` not being honored by `grabbable`\r\n* Fix handling of edge cases in `stretchable`\r\n* `super-hands` now respects with custom button mappings applied after initalization\r\n* Added `super-hands` system to better manage links between two controllers\r\n* Adding unit testing to prepare for updates\r\n\r\n#### Known Issues\r\n\r\n* Collision zones for stretched entities don't update to new scale (`sphere-collider` does not take entity scale into account)\r\n\r\n#### Compatibility\r\n\r\n| A-Frame Version | super-hands Version |\r\n| --- | --- |\r\n| v0.5.x | ^v0.3.0 |\r\n| v0.4.x | v0.2.4 |\r\n\r\n### API\r\n\r\n#### super-hands component\r\n\r\n`super-hands` should be added to same entities as your controller\r\ncomponent and collision detector (e.g. [aframe-extras sphere-collider](https://github.com/donmccurdy/aframe-extras/blob/master/src/misc) \r\nor the in-development, physics system-based [physics-collider](https://github.com/donmccurdy/aframe-physics-system/pull/14)).\r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| colliderState | Name of state added to entities by your chosen collider | `'collided'` (default for `sphere-collider` and `physics-collider`) |\r\n| colliderEvent | Event that your chosen collider emits when identifying a new collision | `'hit'` (default for `sphere-collider` and `physics-collider`) |\r\n| grabStartButtons | Array of button event types that can initiate grab | Trigger, grip, thumb press events |\r\n| grabEndButtons | Array of button event types that can terminate grab | Trigger, grip, thumb release events |\r\n| stretchStartButtons | Array of button event types that can initiate stretch | Trigger, grip, thumb press events |\r\n| stretchEndButtons | Array of button event types that can terminate stretch | Trigger, grip, thumb release events |\r\n| dragDropStartButtons | Array of button event types that can initiate dragging/hovering | Trigger, grip, thumb press events |\r\n| dragDropEndButtons | Array of button event types that can execute drag-drop | Trigger, grip, thumb release events |\r\n\r\nDefault button events include specific events for `vive-controls`, `hand-controls` and \r\n`oculus-touch-controls`.\r\n\r\nDefault start events: 'gripdown', 'trackpaddown', 'triggerdown', 'gripclose', \r\n'pointup', 'thumbup', 'pointingstart', 'pistolstart', 'thumbstickdown'\r\n\r\nDefault end events: 'gripup', 'trackpadup', 'triggerup', 'gripopen', \r\n'pointdown', 'thumbdown', 'pointingend', 'pistolend', 'thumbstickup'\r\n\r\n##### Events\r\n\r\nEvents will be emitted by the entity being interacted with. \r\nThe entity that `super-hands` is attached to is sent in the event `details` as the property `hand`.\r\n\r\n| Type | Description | Target | details object |\r\n| --- | --- | --- | --- |\r\n| hover-start | Collided with entity | collided entity | hand: `super-hands` entity |\r\n| hover-end | No longer collided with entity | collided entity | hand: `super-hands` entity |\r\n| grab-start | Button pressed while collided with entity and hand is empty | collided entity | hand: `super-hands` entity |\r\n| grab-end | Button released after grab-start | collided entity | hand: `super-hands` entity |\r\n| stretch-start | Both controllers have button pressed while collided with entity | collided entity | hand: `super-hands` entity, secondHand: second controller entity |\r\n| stretch-end | Release of button after stretch-start | collided entity | hand: `super-hands` entity |\r\n| dragover-start | Collision with entity while holding another entity | collided entity & held entity | hand: `super-hands` entity, hovered: collided entity, carried: held entity |\r\n| dragover-end | No longer collided with entity from dragover-start | collided entity & held entity | hand: `super-hands` entity, hovered: collided entity, carried: held entity |\r\n| drag-drop | Button released while holding an entity and collided with another | collided entity & held entity | hand: `super-hands` entity, dropped: carried entity, on: receiving entity |\r\n\r\nNotes: \r\n\r\n* References to buttons being \"released\" and \"pressed\" are dependent on the schema settings. \r\nFor example, to make grab 'sticky', you could set grabStartButtons to \r\n'triggerdown' and grabEndButtons to 'gripdown' (as in the \r\n[sticky example](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#sticky)).\r\nThis way the grab-end event would not fire until the grip button was *pressed*, \r\neven if the trigger was *released* earlier. \r\n* Only one entity at a time will be targeted for each event type, \r\neven if multiple overlapping collision zones exist. `super-hands` tracks a \r\nFIFO queue of collided entities to determine which will be affected.\r\n\r\n#### hoverable component\r\n\r\nUsed to indicate when the controller is within range to interact with an entity\r\nby adding the 'hovered' state. When using a mixin, including another mixin\r\nin the assets withe same id + '-hovered' will activate automatically, as in\r\n[the examples](https://wmurphyrd.github.io/aframe-super-hands-component/examples/).\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| hovered | Added to entity while it is collided with the controller |\r\n\r\n#### grabbable component\r\n\r\nMakes and entity move along with the controller while it is grabbed.\r\n\r\nThis works best with [aframe-physics-system](https://github.com/donmccurdy/aframe-physics-system) \r\nto manage grabbed entity movement, but it will fallback to manual `position` updates \r\n(without rotational translation) if physics is not available or is disabled with `usePhysics = never`. \r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| usePhysics | Whether to use physics system constraints to handle movement, 'ifavailable', 'only', or 'never' | 'ifavailable' |\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| grabbed | Added to entity while it is being carried |\r\n\r\n#### stretchable component\r\n\r\nMakes and entity rescale while grabbed by both controllers as they are moved closer together or further apart.\r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| usePhysics | Whether to update physics body shapes with scale changes, 'ifavailable' or 'never' | 'ifavailable' |\r\n\r\nThere is no CANNON api method for updating physics body scale, but `stretchable` will manually rescale basic shapes. Currently rescalable shapes are: box. \r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| stretched | Added to entity while it is grabbed with two hands |\r\n\r\n#### drag-droppable component\r\n\r\n`drag-droppable` is a shell component that only manages the 'hovered' state for the entity. \r\nThis can be combined with with a '-hovered' mixin to easily highlight when an entity is \r\nhovering in a drag-drop location. \r\n\r\nFor more interactivity, consider using `event-set` from [kframe](http://github.com/ngokevin/kframe) \r\nwith the `drag-dropped` event or creating your own component.\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| dragover | Added to while a carried entity is colliding with a a `drag-droppable` entity |\r\n\r\nAdd `drag-droppable` to both the carried entity and the receiving entity if you want both of them to \r\nreceive the hovered state. \r\n","url":"https://unpkg.com/super-hands@0.3.x/README.md"},"https://unpkg.com/aframe-text-geometry-component@0.5.x/package.json":{"name":"aframe-text-geometry-component","version":"0.5.0","description":"Geometry-based text for A-Frame","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:examples/build.js --port 8008 --live --open","dist":"webpack index.js dist/aframe-text-geometry-component.js && webpack -p index.js dist/aframe-text-geometry-component.min.js","postpublish":"npm run dist","test":"karma start ./tests/karma.conf.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe/tree/components/text-geometry#readme","devDependencies":{"aframe":"^0.5.0","browserify":"^12.0.1","budo":"^8.1.0","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","watchify":"^3.6.1","webpack":"^1.12.9"}},"https://unpkg.com/aframe-text-geometry-component@0.5.x/README.md":{"text":"## aframe-text-geometry-component\n\nA text geometry component for [A-Frame](https://aframe.io). The text geometry\ncomponent wraps\n[THREE.TextGeometry](https://threejs.org/docs/?q=textge#Reference/Geometries/TextGeometry).\n\n![screenshot](https://cloud.githubusercontent.com/assets/674727/21373560/c4c7507c-c6d4-11e6-86a5-88cb3ae8d0cb.png)\n\n## Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| bevelEnabled | | false |\n| bevelSize | | 8 |\n| bevelThickness | | 12 |\n| curveSegments | | 12 |\n| font | Path to a typeface.json file or selector to `<a-asset-item>`. | https://rawgit.com/ngokevin/kframe/master/components/text/lib/helvetiker_regular.typeface.json |\n| height | | 0.05 |\n| size | | 0.5 |\n| style | | normal |\n| value | | '' |\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-text-geometry-component@^0.5.0/dist/aframe-text-geometry-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-assets>\n <a-asset-item id=\"optimerBoldFont\" src=\"https://rawgit.com/mrdoob/three.js/dev/examples/fonts/optimer_bold.typeface.json\"></a-asset-item>\n </a-assets>\n\n <a-entity text-geometry=\"value: What's up\"></a-entity>\n <a-entity text-geometry=\"value: Dog?; font: #optimerBoldFont\"></a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-text-geometry-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-text-geometry-component');\n```\n\n## Using Different Fonts\n\nThe text component uses `typeface.json` files, which are Web Fonts converted to\nJSON for three.js. Typeface fonts can be generated from fonts using this\n**[typeface font generator](http://gero3.github.io/facetype.js/)**. Select JSON\nformat and we recommend restricting the character set to only the characters\nyou need. You may also have to check *reverse font direction* if you get odd font results.\n\nYou can also find some sample generated fonts in the `examples/fonts` directory\nin the [three.js repository](https://github.com/mrdoob/three.js).\n\nBy default, the text geometry component points to Helvetiker (Regular). Each\nfont is fairly large, from at least 60KB to hundreds of KBs.\n\nTo include a font for use with the text component, it is recommended to define\nit in `<a-asset-item>` and point at it with a selector.\n\nFor example in HTML:\n\n```html\n<html>\n <head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-text-geometry-component/dist/aframe-text-geometry-component.min.js\"></script>\n <script src=\"myfont.typeface.js\"></script>\n </head>\n <body>\n <a-scene>\n <a-assets>\n <a-asset-item id=\"optimerBoldFont\" src=\"https://rawgit.com/mrdoob/three.js/dev/examples/fonts/optimer_bold.typeface.json\"></a-asset-item>\n <a-mixin id=\"boldFont\" text=\"font: #optimerBoldFont\"></a-mixin>\n </a-assets>\n\n <a-entity mixin=\"boldFont\" text-geometry=\"value: What's up\"></a-entity>\n <a-entity text-geometry=\"value: Dog?; font: #optimerBoldFont\"></a-entity>\n </a-scene>\n </body>\n</html>\n```\n\nOr in JS, we can bundle and set a font directly with `setAttribute` such that\nwe don't have to XHR the font file separately at runtime:\n\n```js\nrequire('aframe');\nrequire('aframe-text-geometry-component');\n\nvar fontJson = require('./fonts/myfont.typeface.json');\nvar el = document.createElement('a-entity');\nel.setAttribute('text', {font: fontJson});\n```\n\n## Applying a Material\n\nThe text geometry component defines just the geometry. We can apply any\nthree.js material to the geometry:\n\n```html\n<a-entity text=\"value: HELLO\" material=\"color: red; src: #texture\"></a-entity>\n```\n\nSee the [Vaporwave\nExample](https://ngokevin.github.io/kframe/components/text/examples/vaporwave/)\nby [Ada Rose Edwards](https://twitter.com/lady_ada_king) for an example on applying\nmaterials.\n","url":"https://unpkg.com/aframe-text-geometry-component@0.5.x/README.md"},"https://unpkg.com/aframe-ui-widgets@1.0.2/package.json":{"name":"aframe-ui-widgets","version":"1.0.2","description":"UI Widgets for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-ui-widgets.js && webpack -p index.js dist/aframe-ui-widgets.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/caseyyee/aframe-ui-widgets.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","ui","widgets"],"author":"caseyyee.ca@gmail.com","license":"MIT","bugs":{"url":"https://github.com/caseyyee/aframe-ui-widgets/issues"},"homepage":"https://github.com/caseyyee/aframe-ui-widgets#readme","devDependencies":{"aframe":"^0.5.0","browserify":"^13.0.0","budo":"^8.2.2","ghpages":"^0.0.8","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-ui-widgets@1.0.2/README.md":{"text":"## UI widgets for [A-Frame](https://aframe.io).\n\n### [Give it a whirl!](https://caseyyee.github.io/aframe-ui-widgets/examples/)\n\n![A-Frame UI Widgets](https://raw.githubusercontent.com/caseyyee/aframe-ui-widgets/master/img/preview.gif)\n\nWorks with HTC VIVE and Oculus touch in a WebVR enabled browser.\n\n\n### Basic usage\n\n````html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\n\n <!-- Include component script into your project along with A-Frame. -->\n <script src=\"https://rawgit.com/caseyyee/aframe-ui-widgets/master/dist/ui-widgets.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <!-- Adds hand controls -->\n <a-entity hand-controls=\"left\"></a-entity>\n <a-entity hand-controls=\"right\"></a-entity>\n\n <!-- Can also be controlled used with cursor -->\n <a-camera>\n <a-cursor></a-cursor>\n </a-camera>\n\n <!-- Adds UI button widget -->\n <a-entity id=\"mybutton\" ui-button></a-entity>\n </a-scene>\n <script>\n var mybutton = document.querySelector('#mybutton');\n mybutton.addEventListener('pressed', function () {\n // do stuff here.\n });\n </script>\n</body>\n````\n\n### Skinnable with custom styles\n\nUsing mixins, you can define a UI component styles.\n\n````html\n<a-assets>\n <a-mixin id=\"beveled-square\" geometry=\"primitive: cone; radiusTop: 0.15; radiusBottom: 0.19; height: 0.02; segmentsRadial: 4; segmentsHeight: 1\" rotation=\"0 45 0\"></a-mixin>\n <a-mixin id=\"square\" geometry=\"primitive: box; width: 0.18; height: 0.025; depth: 0.18;\" position=\"0 0.02 0\"></a-mixin>\n <a-mixin id=\"blue\" material=\"color: #1E2768;\"></a-mixin>\n <a-mixin id=\"darkgreen\" material=\"color: #22FF90;\"></a-mixin>\n <a-mixin id=\"yellow\" material=\"color: #FFF88E;\"></a-mixin>\n <a-mixin id=\"offset\" position=\"0 0.01 0\"></a-mixin>\n</a-assets>\n\n<a-entity id=\"button\" ui-button=\"base: beveled-square, blue; top: square, darkgreen; pressed: yellow, offset\"></a-entity>\n````\n\n\n### UI Components\n\n#### Button\n\n````html\n<a-entity ui-button></a-entity>\n````\n##### Properties\n| Property | Description | Default Value\n| ------------- | ------------- | -------------\n| base | mixins to use for button base.\n| top | mixins to use for button top.\n| pressed | mixins to use for when button is pressed (added to top).\n| color | default button color | #960960\n| pressedColor | default button-pressed color | #FC2907\n| baseColor | default button-base color | #618EFF\n| topY | default button top height | 0.02\n| pressedY | default button pressed height | 0.012\n\n##### Events\n| Event | Description\n| ------------- | -------------\n| buttondown | Emitted when button is pushed down.\n| buttonup | Emitted when button is released.\n| pressed | Emitted when button has been has been pushed down and released.\n\n\n#### Toggle switch\n\n````html\n<a-entity ui-toggle></a-entity>\n````\n\n##### Properties\n| Property | Description | Default Value\n| ------------- | ------------- | -------------\n| value | sets toggle position. | 0\n\n#### Events\n| Event | Description\n| ------------- | -------------\n| change | Emitted when switch has been toggled.\n\n\n\n#### Slider\n\n````html\n<a-entity ui-slider></a-entity>\n````\n\n##### Properties\n| Property | Description\n| ------------- | -------------\n| min | sets minimum value | 0\n| max | sets maximum value | 1\n| value | sets value | 0\n\n##### Change\n| Event | Description\n| ------------- | -------------\n| change | Emitted when slider has been moved.\n\n\n#### Rotary Knob\n\n````html\n<a-entity ui-rotary></a-entity>\n````\n\n##### Events\n| Event | Description\n| ------------- | -------------\n| change | Emitted when rotary has been turned.\n\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-ui-widgets\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-ui-widgets');\n```\n","url":"https://unpkg.com/aframe-ui-widgets@1.0.2/README.md"},"https://unpkg.com/aframe-controller-cursor-component@^0.2.x/package.json":{"name":"aframe-controller-cursor-component","version":"0.2.2","description":"Cursor component for tracked controls in A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-controller-cursor-component.js && webpack -p index.js dist/aframe-controller-cursor-component.min.js","lint":"semistandard -v | snazzy","postpublish":"npm run dist","ghpages":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/bryik/aframe-controller-cursor-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"bryik <ben@wsundine.com>","license":"MIT","bugs":{"url":"https://github.com/aframe-controller-cursor-component/issues"},"homepage":"https://github.com/aframe-controller-cursor-component#readme","devDependencies":{"aframe":"^0.5.0","browserify":"^13.1.0","browserify-css":"^0.9.1","budo":"^9.0.0","inquirer":"^1.1.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.3","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.2"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-controller-cursor-component@^0.2.x/README.md":{"text":"## aframe-controller-cursor-component\r\n\r\n[A-Frame](https://aframe.io) component for adding a laser-style cursor to a\r\ntracked controls (e.g., HTC Vive, Oculus Touch).\r\n\r\n<p align=\"center\">\r\n <img src=\"http://i.imgur.com/QCgZWd7.gif\"/>\r\n</p>\r\n\r\n### API\r\n\r\n| Property | Description | Default Value |\r\n|----------|--------------------------------|---------------|\r\n| color | Laser color. | #74BEC1 |\r\n| radius | Laser radius (top and bottom). | 0.001 |\r\n\r\n### Usage\r\n\r\nAttach the component to an entity alongside a tracked controls entity.\r\n\r\n```html\r\n<a-entity hand-controls=\"right\" controller-cursor></a-entity>\r\n```\r\n\r\nThe controller cursor component is based on A-Frame's [built-in\r\ncursor](https://aframe.io/docs/master/components/cursor.html), many of the\r\nevents and states are shared.\r\n\r\n`mouseup` and `mousedown` are mapped to the trigger. Pulling the trigger will\r\nemit the same events as clicking.\r\n\r\n### Notes\r\n\r\nTo avoid intersecting with the laser, the raycaster's `near` property is set to\r\n0.03. Thus, you may see odd results when the top of the controller is held\r\nextremely close to the entity you wish to intersect.\r\n\r\nThis component was built for the Vive controller model. If you are using a\r\ndifferent model, you may need to modify the raycaster and position of the\r\nlaser. In the future, this should be made more easily configurable.\r\n\r\n#### Browser\r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>My A-Frame Scene</title>\r\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\r\n <script src=\"https://unpkg.com/aframe-controller-cursor-component/dist/aframe-controller-component.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <a-entity vive-controls=\"hand: left\"></a-entity>\r\n <a-entity vive-controls=\"hand: right\" controller-cursor></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n#### npm\r\n\r\nInstall via npm:\r\n\r\n```bash\r\nnpm install aframe-controller-cursor-component\r\n```\r\n\r\nThen register and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('aframe-controller-cursor-component');\r\n```\r\n","url":"https://unpkg.com/aframe-controller-cursor-component@^0.2.x/README.md"},"https://unpkg.com/aframe-teleport-controls@0.2.x/package.json":{"name":"aframe-teleport-controls","version":"0.2.0","description":"A-Frame teleport controls component","author":"Fernando Serrano <fernandojsg@gmail.com> (http://fernandojsg.com/)","license":"MIT","main":"index.js","scripts":{"build":"cross-env NODE_ENV=production webpack --config webpack.dev.js","start":"webpack-dev-server --config webpack.dev.js --progress --colors --hot -d --open --inline --content-base examples","dist":"webpack index.js dist/aframe-teleport-controls.js && webpack -p index.js dist/aframe-teleport-controls.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && gh-pages -d gh-pages","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/fernandojsg/aframe-teleport-controls.git"},"keywords":["aframe","a-frame","aframe-component","aframe-vr","vr","webgl","webvr","mozvr"],"bugs":{"url":"https://github.com/fernandojsg/aframe-teleport-controls/issues"},"homepage":"https://github.com/fernandojsg/aframe-teleport-controls#readme","devDependencies":{"aframe":"^0.5.0","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","cross-env":"^3.1.3","gh-pages":"^0.11.0","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","semistandard":"^8.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0","webpack-dev-server":"^1.16.2"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-teleport-controls@0.2.x/README.md":{"text":"# aframe-teleport-controls\n\nTeleport component\n\n![Screenshot](https://github.com/fernandojsg/aframe-teleport-controls/raw/master/teleport.png)\n\n## Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| type | Type of teleport: line or parabolic | parabolic |\n| button | Button used to launch the teleport | trackpad |\n| collisionEntities | Selector of the meshes used to check the collisions. If no value provided a plane Y=0 is used | |\n| hitEntity | Entity used to show at the hitting position. If no value provided a cylinder will be used as default. | |\n| hitCylinderColor | Color used for the default `hitEntity` primitives | #99ff99 |\n| hitCylinderRadius | Radius used for the default `hitEntity` primitives | 0.25 |\n| hitCylinderHeight | Height used for the default `hitEntity` primitives | 0.3 |\n| maxLength | Max. length for line teleport | 10 |\n| curveHitColor | Color used for the curve when hit the mesh | #99ff99 |\n| curveMissColor | Color used for the curve when it doesn't hit anything | #ff0000 |\n| curveNumberPoints | Number of points used in the curve | 30 |\n| curveLineWidth | Line width of the curve | 0.025 |\n| curveShootingSpeed | Curve shooting speed, as bigger value, farther distance. | 5 |\n| maxLength | Max length of the ray when using type=line teleport | 10 |\n| landingNormal | Normal vector to detect collisions with the `collisionEntity` | (0, 1, 0) |\n| landingMaxAngle | Angle threshold (in degrees) used together with `landingNormal` to detect if the mesh is so steep to jump to it. | 45 |\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/fernandojsg/aframe-teleport-controls/master/dist/aframe-teleport-controls.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity teleport-controls vive-controls=\"hand: left\"></a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-teleport-controls\n```\n\nThen register and use.\n\n```js\nrequire('aframe-teleport-controls');\n```\n","url":"https://unpkg.com/aframe-teleport-controls@0.2.x/README.md"},"https://unpkg.com/aframe-animation-component@^3.2.x/package.json":{"name":"aframe-animation-component","version":"3.2.3","description":"Animations in A-Frame using anime.js","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:examples/build.js --port 8000 --live --open","dist":"webpack index.js dist/aframe-animation-component.js && webpack -p index.js dist/aframe-animation-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe/tree/components/animation#readme","devDependencies":{"aframe":"^0.4.1","aframe-bmfont-text-component":"^0.1.4","aframe-layout-component":"^1.2.0","aframe-template-component":"^3.1.1","browserify":"^13.0.0","budo":"^8.2.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]},"dependencies":{"animejs":"^1.1.0"}},"https://unpkg.com/aframe-animation-component@^3.2.x/README.md":{"text":"## aframe-animation-component\n\nAn animation component for [A-Frame](https://aframe.io) using\n[anime.js](https://github.com/juliangarnier/anime).\n\n![animation](https://cloud.githubusercontent.com/assets/674727/23724348/3991d594-0401-11e7-9b90-31ef43ee7e54.gif)\n\n### Why?\n\nA-Frame has an `<a-animation>` API out of the box. Why build a component version?\n\n- **Imperative Ergonomics:** Imperatively set animations and all of its\n properties with a single `setAttribute` call. With `<a-animation>`, we must\n do `createElement`, multiple `setAttribute`s, `appendChild`, and\n `addEventListener('loaded')`.\n- **Synchronous:** Setting a component is synchronous, meaning it takes effect\n immediately. With `<a-animation>`, we must wait for it to append to the DOM\n and register a callback listener.\n- **Consistency with the Framework:** The animation component fits into\n A-Frame's entity-component-system framework. The `<a-animation>` tag is the\n only outlier in which we must use a DOM element to modify an entity.\n- **Simpler API:** The animation component uses anime.js, a popular and simple\n JavaScript animation library. `<a-animation>`'s API is loosely based off of\n Web Animations draft specification which is overly complex.\n- **Easier Maintenance:** The animation component uses A-Frame's component API\n as well as anime.js. `<a-animation>` uses the Custom Element polyfill directly\n with tween.js. anime.js's features makes the animation codebase much slimmer\n (140 vs 550 lines of code).\n- **Features:** The animation component has the features of the newly popular\n anime.js library (e.g., color interpolation).\n- **Faster Development:** Being detached from the A-Frame core library means faster\n iteration of features. Due to being easier to maintain, having more features, and\n not being tied to A-Frame versions, we can add things quickly such as timeline support.\n- **anime.js**: anime.js has great performance over Tween.js and tons of great animation features.\n\n### API\n\n#### Component Name\n\nBase name is `animation`. Although we can attach multiple animations to one\nentity by name-spacing the component with double underscores (`__`):\n\n```html\n<a-entity animation=\"property: rotation\"\n animation__2=\"property: position\"\n animation__color=\"property: material.color\"></a-entity>\n```\n\n#### Properties\n\n| Property | Description | Default Value | Values |\n| -------- | ----------- | ------------- | ------ |\n| delay | How long (milliseconds) to wait before starting. | 0 | |\n| dir | Which dir to go from `from` to `to`. | normal | alternate, reverse |\n| dur | How long (milliseconds) each cycle of the animation is. | 1000 | |\n| easing | Easing function of animation. To ease in, ease out, ease in and out. | easeInQuad | See [easings](#easings) |\n| elasticity | How much to bounce (higher is stronger). | 400 | |\n| loop | Whether to repeat animation indefinitely. | false | |\n| pauseEvents | Comma-separated list of events to listen to to pause. | null |\n| property | Property to animate. Can be a component name, a dot-delimited property of a component (e.g., `material.color`), or a plain attribute. | | |\n| round | Whether to round values. | false | |\n| startEvents | Comma-separated list of events to listen to before playing. Animation will not autoplay if specified. | null |\n\n\n#### Easings\n\nChoose one type from the `Type` column, and combine it with one function from\nthe `Function` column. For example: `easeInOutElastic`. The only exception is\n`linear` which stands on its own.\n\n| Type | Function |\n| -------- | -------- |\n| easeIn | Quad |\n| easeOut | Cubic |\n| easeInOut | Quart |\n| | Quint |\n| | Expo |\n| | Sine |\n| | Circ |\n| | Elastic |\n| | Back |\n| | Bounce |\n\n#### Events\n\n| Property | Description |\n| -------- | ----------- |\n| animationbegin | Animation began. |\n| animationcomplete | Animation completed. |\n| animation__[ID]-begin | Animation completed. Different event emitted depending on animation name. |\n| animation__[ID]-complete | Animation completed. Different event emitted depending on animation name. |\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-animation-component@^3.2.0/dist/aframe-animation-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-cylinder color=\"#F55\" radius=\"0.1\"\n animation=\"property: color; dir: alternate; dur: 1000;\n easing: easeInSine; loop: true; to: #5F5\"\n animation__scale=\"property: scale; dir: alternate; dur: 200;\n easing: easeInSine; loop: true; to: 1.2 1 1.2\"\n animation__yoyo=\"property: position; dir: alternate; dur: 1000;\n easing: easeInSine; loop: true; to: 0 2 0\">\n </a-cylinder>\n </a-scene>\n</body>\n```\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-animation-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-animation-component');\n```\n","url":"https://unpkg.com/aframe-animation-component@^3.2.x/README.md"},"https://unpkg.com/aframe-leap-hands@^0.7.x/package.json":{"name":"aframe-leap-hands","version":"0.7.1","description":"Leap Motion components for A-Frame VR","main":"index.js","scripts":{"dev":"budo examples/index.js:examples/budo.js --port 8000","test":"echo \"Error: no test specified\" && exit 1","dist":"webpack browser.js dist/aframe-leap-hands.js && webpack -p browser.js dist/aframe-leap-hands.min.js","version":"npm run dist && git add -A dist","postversion":"git push && git push --tags && npm publish"},"repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-leap-hands.git"},"keywords":["aframe","aframevr","leap","leapmotion","vr","hand"],"author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","bugs":{"url":"https://github.com/donmccurdy/aframe-leap-hands/issues"},"homepage":"https://github.com/donmccurdy/aframe-leap-hands#readme","dependencies":{"circular-array":"0.0.1","leapjs":"^0.6.4"},"devDependencies":{"aframe":"^0.5.0","aframe-extras":"^3.2.6","browserify":"^14.1.0","budo":"^9.4.7","webpack":"^2.2.1"},"peerDependencies":{"aframe":"^0.5.0"}},"https://unpkg.com/aframe-leap-hands@^0.7.x/README.md":{"text":"# A-Frame VR `leap-hand` for Leap Motion\n\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/donmccurdy/aframe-leap-hands/master/LICENSE)\n![Work in progress](https://img.shields.io/badge/status-experimental-orange.svg)\n\nA-Frame VR component for Leap Motion controller.\n\n![4d731aec-193d-463c-8189-d54c5e023206-20847-0002ac9dc2db9992](https://cloud.githubusercontent.com/assets/1848368/23005782/0909f4aa-f3cc-11e6-83f3-072b53374000.gif)\n\n\n## Installation\n\nUsing NPM and Browserify or Webpack:\n\n```bash\nnpm install --save aframe-leap-hands\n```\n\n```javascript\nrequire('aframe-leap-hands').registerAll();\n```\n\n## Usage\n\n```html\n<a-entity camera=\"near: 0.01\" look-controls position=\"0 1.5 0\">\n <a-entity leap-hand=\"hand: left\"></a-entity>\n <a-entity leap-hand=\"hand: right\"></a-entity>\n</a-entity>\n```\n\n## References:\n\n### Official\n\n+ [Leap JS](https://github.com/leapmotion/leapjs)\n+ [Leap JS Plugins](https://github.com/leapmotion/leapjs-plugins)\n+ [Leap JS cont'd](https://developer.leapmotion.com/javascript)\n+ [Leap JS Network](https://github.com/leapmotion/leapjs-network)\n+ [Leap JS Widgets](https://github.com/leapmotion/leapjs-widgets)\n+ [Leap JS Rigged THREE.js Hand](https://github.com/leapmotion/leapjs-rigged-hand)\n\n### Third-party\n\n+ THREE.LeapMotion Wrapper [discussion](https://community.leapmotion.com/t/three-js-wrapper/769) and [GitHub](https://github.com/scottbyrns/THREE.LeapMotion)\n","url":"https://unpkg.com/aframe-leap-hands@^0.7.x/README.md"},"https://unpkg.com/aframe-stereo-component@0.5.x/package.json":{"name":"aframe-stereo-component","version":"0.5.0","description":"Stereoscopic component for A-Frame VR.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack browser.js dist/aframe-stereo-component.js && webpack -p browser.js dist/aframe-stereo-component.min.js","postpublish":"npm run dist","preghpages":"npm run build && rm -rf gh-pages && cp -r examples gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","test":"karma start ./tests/karma.conf.js","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"https://github.com/oscarmarinmiro/aframe-stereo-component.git"},"keywords":["aframe","aframe-component","layout","aframe-vr","vr","aframe-layout","mozvr","webvr","stereo","stereoscopic","video","equirectangular"],"author":"Óscar Marín Miró <oscar@outliers.es> @oscarmarinmiro","license":"MIT","bugs":{"url":"https://github.com/oscarmarinmiro/aframe-stereo-component/issues"},"homepage":"https://github.com/oscarmarinmiro/aframe-stereo-component#readme","devDependencies":{"aframe":"^0.5.0","browserify":"^12.0.1","browserify-css":"^0.8.3","budo":"^7.1.0","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"0.0.3","inquirer":"^0.12.0","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","shelljs":"^0.6.0","webpack":"^1.12.9"}},"https://unpkg.com/aframe-stereo-component@0.5.x/README.md":{"text":"## aframe-stereo-component\n\nA stereo component for [A-Frame](https://aframe.io) VR.\n\nThis component builds on the ['layer' concept of THREE.js] (https://github.com/mrdoob/three.js/issues/6437) and is really two components in one:\n- **'stereocam' component**, with tells an aframe camera which 'eye' to render in case of monoscopic display (without 'Entering VR'). The camera will render all entities without the stereo component, but if it encounters an entity with the 'stereo' component active, it will render only those in the same eye as defined here.\n- **'stereo' component**, which tells aframe to include an entity in either the 'right' eye or 'left' eye (you can also specify 'both', but this has the same effect as not using the 'stereo' component. *The component also enables stereoscopic video rendering projected on spheres*, so if a sphere (see example below) has the 'stereo' component enabled, if will only project half of the video texture (which one depends on the 'eye' property), so the result is stereoscopic video rendering, if you include two spheres. The component expects videos in side-by-side equirectangular projection (see the video example below).\n\nIf a video is used in a sphere with the 'stereo' component active, **the component will also enable playback in mobile devices, by attaching a 'click' event on the rendering canvas**. Thus, in mobile devices you must click on the screen (via cardboard v2.0 button or with your finger) for the video to start playing.\n\n**NOTE: for some reason (?) if the video elment is put inside scene 'assets' tag, a cross-origin issue is raised **\n\nYou can see demos for both examples below [here] (http://oscarmarinmiro.github.io/aframe-stereo-component)\n\n### 'stereocam' component properties (only for camera)\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| eye | which eye is enabled in monoscopic display ('left' or 'right') | 'left |\n\n### 'stereo' component properties (for other entities)\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| eye | in which eye the entity is render VR mode ('left' or 'right') | 'left |\n| mode | this property is for spheres holding a video texture. mode can be 'full' or 'half', depending if the original video is full 360 or only spans 180 degrees horizontally (half-dome)| 'full' |\n| split | this property indicates whether to split the video texture horizontally (left and right hemispheres), or vertically, (top and bottom hemispheres) | 'horizontal'\n\n### Usage\n\n![\"Stereoscopic video\"](/video_stereo.png?raw=true \"Stereoscopic video\")\n\n#### Browser Installation. 360 stereoscopic video example\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<html>\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/latest/aframe.min.js\"></script>\n <script src=\"aframe-stereo-component.js.min.js\"></script>\n</head>\n<body>\n <a-scene>\n\n\n<!--\n stereoscopic panoramic render by\n http://pedrofe.com/rendering-for-oculus-rift-with-arnold/\n http://www.meryproject.com/\n -->\n <!-- side by side equirectangular projected video -->\n <video id=\"Mary\" src=\"examples/basic_development/textures/MaryOculus.webm\" loop></video>\n\n\n <!-- we tell here the camera to render (outside VR mode, in monoscopic mode) everything without the 'stereo' component active\n and it it's active, only render those entities in the 'left' eye -->\n\n <a-camera position=\"0 0 10\" cursor-visible=\"false\" stereocam=\"eye:left;\"></a-camera>\n\n <!-- native sphere, will render on 'left' eye, and will take only the first half of the video for projection -->\n\n <a-entity geometry=\"primitive: sphere;\n radius: 100;\n segmentsWidth: 64;\n segmentsHeight: 64;\"\n material=\"shader: flat; src: #Mary;\"\n scale=\"-1 1 1\" stereo=\"eye:left\">\n </a-entity>\n\n <!-- native sphere, will render on 'right' eye, and will take only the second half of the video for projection -->\n\n <a-entity geometry=\"primitive: sphere;\n radius: 100;\n segmentsWidth: 64;\n segmentsHeight: 64;\"\n material=\"shader: flat; src: #Mary;\"\n scale=\"-1 1 1\" stereo=\"eye:right\">\n </a-entity>\n\n\n </a-scene>\n\n </body>\n </html>\n\n\n```\n\n![\"Two cubes in a scene, each one for each eye\"](/cubes_stereo.png?raw=true \"Two cubes in a scene, each one for each eye\")\n\n#### Browser Installation. Two cubes, each one for each eye\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<html>\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/latest/aframe.min.js\"></script>\n <script src=\"aframe-stereo-component.js.min.js\"></script>\n</head>\n<body>\n <a-scene>\n <a-sky color=\"#FFF\"></a-sky>\n <a-light color=\"#333\" position=\"0 5 0\" type=\"ambient\" intensity=\"0.2\"></a-light>\n <a-light type=\"point\" color=\"#EEE\" intensity=\"1.0\" position=\"3 3 10\"></a-light>\n\n <!-- 'left' eye entities will pass trough the camera in non-VR mode -->\n\n <a-camera position=\"0 0 10\" cursor-color=\"black\" stereocam=\"eye:left;\"></a-camera>\n\n <!-- in VR mode, the first box is displayed only in the left eye, the second one in the right eye -->\n\n <a-entity geometry=\"primitive: box\" material=\"color: #C03546\" stereo=\"eye:left\"></a-entity>\n <a-entity geometry=\"primitive: box\" material=\"color: #3546C0\" position=\"0 5 0\" stereo=\"eye: right\"></a-entity>\n\n </a-scene>\n\n </body>\n </html>\n\n```\n\n#### Stereoscopic videos that are split vertically - Top and Bottom\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<html>\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/latest/aframe.min.js\"></script>\n <script src=\"aframe-stereo-component.js.min.js\"></script>\n</head>\n<body>\n <a-scene>\n <!-- top and bottom equirectangular projected video -->\n <video id=\"video\" src=\"path/to/top-bottom/mp4\" loop></video>\n\n\n <!-- here we tell the camera to render (outside VR mode, in monoscopic mode) everything without the 'stereo' component active\n and if it's active, only render those entities in the 'left' eye -->\n <a-camera position=\"0 0 10\" cursor-visible=\"false\" stereocam=\"eye:left;\"></a-camera>\n\n <!-- native sphere, will render on 'left' eye, and will take only the first half (top) of the video for projection -->\n <a-entity geometry=\"primitive: sphere; radius: 100; segmentsWidth: 64; segmentsHeight: 64;\"\n material=\"shader: flat; src: #video;\"\n scale=\"-1 1 1\" stereo=\"eye:left; split: vertical\">\n </a-entity>\n\n <!-- native sphere, will render on 'right' eye, and will take only the second half (bottom) of the video for projection -->\n <a-entity geometry=\"primitive: sphere; radius: 100; segmentsWidth: 64; segmentsHeight: 64;\"\n material=\"shader: flat; src: #video;\"\n scale=\"-1 1 1\" stereo=\"eye:right; split: vertical\">\n </a-entity>\n </a-scene>\n </body>\n </html>\n```\n\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-stereo-component\n```\n\nThen register and use.\n\n```js\nvar AFRAME = require('aframe');\nvar stereoComponent = require('aframe-stereo-component').stereo_component;\nvar stereocamComponent = require('aframe-stereo-component').stereocam_component;\n\nAFRAME.registerComponent('stereo', stereoComponent);\nAFRAME.registerComponent('stereocam', stereocamComponent);\n```\n\n#### Credits\n\nThe video used in the examples is from http://pedrofe.com/rendering-for-oculus-rift-with-arnold/, from the project http://www.meryproject.com/\n\nBoilerplate code from https://github.com/ngokevin/aframe-component-boilerplate\n\nCode for adjusting sphere face vertex is from https://github.com/mrdoob/three.js/blob/master/examples/webvr_video.html\n","url":"https://unpkg.com/aframe-stereo-component@0.5.x/README.md"},"https://unpkg.com/aframe-alongpath-component@^1.0.x/package.json":{"name":"aframe-alongpath-component","version":"1.0.4","description":"A-Frame Component that allows entities to follow predefined paths","main":"index.js","directories":{"example":"examples"},"scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-alongpath-component.js && webpack -p index.js dist/aframe-alongpath-component.min.js","lint":"semistandard -v | snazzy","postpublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/protyze/aframe-alongpath-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"protyze <jan.azzati@gmail.com>","license":"GPL-3.0","bugs":{"url":"https://github.com/protyze/aframe-alongpath-component/issues"},"homepage":"https://github.com/protyze/aframe-alongpath-component#readme","dependencies":{"aframe":"^0.5.0","aframe-curve-component":"^0.1.2"},"devDependencies":{"browserify":"^12.0.1","browserify-css":"^0.8.3","budo":"^7.1.0","webpack":"^1.12.9","ghpages":"0.0.3","shx":"^0.1.1","snazzy":"^4.0.0","semistandard":"^8.0.0","shelljs":"^0.7.0","inquirer":"^1.0.2"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-alongpath-component@^1.0.x/README.md":{"text":"## aframe-alongpath-component\nA component for [A-Frame](https://aframe.io) that allows entities to follow predefined paths.\n\nNew in Version 1.0.0:\n\nThe alongpath component went through a refactoring process. The entire logic of creating curves/paths has been extracted into the [Curve component](https://github.com/protyze/aframe-curve-component). This allows for more flexibility and less complexity and refocusing solely on the task of moving objects along a path.\n\nWith this Version it is now possible to promote single path-points to be \"Trigger-Points\" - meaning that they will fire an event as soon as the Entity moves past these points.\n\n\n![](http://lab.immersiveweb.ch/assets/aframe_alongpath_component.gif)\n\n### Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| curve | Selector to reference to the corresponding [curve](https://github.com/protyze/aframe-curve-component) | '' |\n| triggers | Selector to identify the Trigger-Points that should fire the alongpath-trigger-activated-Event when the entity moves close to it. | 'a-curve-point' |\n| triggerRadius | Defines how close the entity should be to the Trigger-Point to activate it. | 0.01 |\n| dur | Duration in milliseconds for the object to follow the entire path | 1000 |\n| delay | Number of milliseconds to wait for the animation to begin | 2000 |\n| loop | Whether or not the animation should loop | false |\n| rotate | Whether or not the Entity should adjust it's rotation while moving along the path | false |\n| resetonplay | Whether or not the Movement on the path should be reset on the play event | true |\n\n### Events\n\n| Event | Description |\n| -------- | ----------- |\n| movingstarted | The Entity is about to start moving along the path |\n| movingended | The Entity has completed moving along the path |\n| alongpath-trigger-activated | The Entity has activated a Trigger-Point (Fired on the corresponding 'curve-point') |\n| alongpath-trigger-deactivated | The Entity has deactivated a Trigger-Point (Fired on the corresponding 'curve-point') |\n\n### States\n\n| State | Description |\n| -------- | ----------- |\n| moveonpath | The Entity currently moving along the path |\n| endofpath | The Entity has completed moving along the path|\n| alongpath-active-trigger | The moving entity has activated a Trigger-Point (which has now this active state) |\n\n### Usage with A-Frame Inspector\n\nYou can use the [A-Frame Inspector](https://github.com/aframevr/aframe-inspector) to manually modify the predefined paths. To do so, you can open the Inspector as usual, and start moving around the a-curve-point Entities of the curve. The path will change instantly.\n\n![](http://lab.immersiveweb.ch/assets/aframe-alongpath-component-inspector.gif)\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://rawgit.com/aframevr/aframe/master/dist/aframe-master.min.js\"></script>\n <script src=\"https://rawgit.com/protyze/aframe-alongpath-component/master/dist/aframe-alongpath-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-curve id=\"track1\">\n <a-curve-point position=\"-2 2 -3\"></a-curve-point>\n <a-curve-point position=\"0 1 -3\"></a-curve-point>\n <a-curve-point position=\"2 2 -3\"></a-curve-point>\n </a-curve>\n \n <a-box alongpath=\"curve: #track1\"></a-box>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-alongpath-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-curve-component');\nrequire('aframe-alongpath-component');\n```\n\nThanks to https://jsbin.com/dasefeh/edit?html,output for the basic concept.","url":"https://unpkg.com/aframe-alongpath-component@^1.0.x/README.md"},"https://unpkg.com/aframe-slice9-component@1.0.x/package.json":{"name":"aframe-slice9-component","version":"1.0.0","description":"A Slice9 component for A-Frame.","main":"index.js","cdn":"dist/aframe-slice9-component.min.js","scripts":{"dev":"budo index.js:dist/aframe-slice9-component.min.js --port 7000 --live --open","dist":"webpack index.js dist/aframe-slice9-component.js && webpack -p index.js dist/aframe-slice9-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","ghpages":"ghpages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/fernandojsg/aframe-slice9-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","slice9"],"author":"Fernando Serrano <fernandojsg@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/fernandojsg/aframe-slice9-component/issues"},"homepage":"https://github.com/fernandojsg/aframe-slice9-component#readme","devDependencies":{"browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-slice9-component@1.0.x/README.md":{"text":"## aframe-slice9-component\n\nA Slice9 component for A-Frame.\n\nFor [A-Frame](https://aframe.io).\n\n### API\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| width | | 1 |\n| height | | 1 |\n| left | | 0 |\n| right | | 0 |\n| bottom | | 0 |\n| top | | 0 |\n| side | | front |\n| padding | | 0.1 |\n| color | | #fff |\n| opacity | | 1.0 |\n| transparent | | true |\n| debug | | false |\n| map | | '' |\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-slice9-component/dist/aframe-slice9-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity slice9=\"foo: bar\"></a-entity>\n </a-scene>\n</body>\n```\n\n<!-- If component is accepted to the Registry, uncomment this. -->\n<!--\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\nversion of the component straight into your HTML file, respective to your\nversion of A-Frame:\n\n```sh\nangle install aframe-slice9-component\n```\n-->\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-slice9-component\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-slice9-component');\n```\n","url":"https://unpkg.com/aframe-slice9-component@1.0.x/README.md"},"https://unpkg.com/aframe-line-component@1.0.0/package.json":{"name":"aframe-line-component","version":"1.0.0","description":"A Line component for A-Frame.","main":"index.js","cdn":"dist/aframe-line-component.min.js","scripts":{"dev":"budo index.js:dist/aframe-line-component.min.js --port 7000 --live --open","dist":"webpack index.js dist/aframe-line-component.js && webpack -p index.js dist/aframe-line-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","ghpages":"ghpages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/fernandojsg/aframe-line-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","line"],"author":"Fernando Serrano <fernandojsg@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/fernandojsg/aframe-line-component/issues"},"homepage":"https://github.com/fernandojsg/aframe-line-component#readme","devDependencies":{"browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-line-component@1.0.0/README.md":{"text":"## aframe-line-component\n\n[![Version](http://img.shields.io/npm/v/aframe-line-component.svg?style=flat-square)](https://npmjs.org/package/aframe-line-component)\n[![License](http://img.shields.io/npm/l/aframe-line-component.svg?style=flat-square)](https://npmjs.org/package/aframe-line-component)\n\nA Line component for A-Frame.\n\nFor [A-Frame](https://aframe.io).\n\n![line example](https://raw.githubusercontent.com/fernandojsg/aframe-line-component/master/screenshot.png)\n\n### API\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| start | Start line position | 0 0 0 |\n| end | End line position | 0 0 0 |\n| color | Line color | #fff |\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-line-component/dist/aframe-line-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity line=\"foo: bar\"></a-entity>\n </a-scene>\n</body>\n```\n\n<!-- If component is accepted to the Registry, uncomment this. -->\n<!--\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\nversion of the component straight into your HTML file, respective to your\nversion of A-Frame:\n\n```sh\nangle install aframe-line-component\n```\n-->\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-line-component\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-line-component');\n```\n","url":"https://unpkg.com/aframe-line-component@1.0.0/README.md"},"https://unpkg.com/aframe-audioanalyser-component@3.0.x/package.json":{"name":"aframe-audioanalyser-component","version":"3.0.3","description":"Audio visualizations in A-Frame using Web Audio (AnalyserNode)","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:examples/build.js --port 8000 --live --open","dist":"webpack index.js dist/aframe-audioanalyser-component.js && webpack -p index.js dist/aframe-audioanalyser-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/tree/components/audio-analyser#readme","devDependencies":{"aframe-bmfont-text-component":"^0.1.4","aframe-entity-generator-component":"^0.1.0","aframe-layout-component":"^1.2.0","aframe-template-component":"^3.2.1","browserify":"^12.0.1","budo":"^7.1.0","shelljs":"^0.6.0","webpack":"^1.12.9"}},"https://unpkg.com/aframe-audioanalyser-component@3.0.x/README.md":{"text":"## aframe-audioanalyser-component\n\nAudio visualizations for [A-Frame](https://aframe.io) using Web Audio (`AnalyserNode`).\n\n![analyser](https://cloud.githubusercontent.com/assets/674727/18812560/9ad8acf6-828d-11e6-9cea-a39487e5ffdc.gif)\n\nThese components mostly provide processed Web Audio data (beat detection,\nlevels, volume, waveform). How that is visualized is up to you (by writing\ncomponents that use this data to have a visual effect). Components will generally\nimplement the `tick` handler and read the analyser data. See the examples for\nsome example visualization components.\n\nNot tested on mobile.\n\n### Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| enableBeatDetection | Whether or not to detect beats. Disable if not using. | true |\n| enableLevels | Whether or not to store frequency data. Disable if not using. | true |\n| enableVolume | Whether or not to calculate average volume. Disable if not using. | true |\n| enableWaveform | Whether or not to store waveform data. Disable if not using. | true |\n| fftSize | Frequency domain. | 2048 |\n| smoothingTimeConstant | How smooth the frequency data is returned. | 0.8 |\n| src | Selector to an audio element or path to audio file. | '' |\n| unique | Whether to share the audio instance with other visualizing entities. | false |\n\n### Members\n\n| Member | Description | Type |\n| -------- | ----------- | ------------- |\n| analyser | Web Audio AnalyserNode | AnalyserNode |\n| volume | Whether or not to store frequency data. Disable if not using. | number |\n| waveform | Whether or not to calculate average volume. Disable if not using. | Uint8Array |\n| levels | Whether or not to store waveform data. Disable if not using. | Uint8Array |\n\nTo access the analyser node:\n\n```\nel.components.audioanalyser.analyser;\n```\n\n### Events\n\n| Event Name | Description |\n| -------- | ----------- |\n| audioanalyser-beat | Beat detected with beat detection. |\n| audioanalyser-ready | AnalyserNode initialized. |\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>Audio Visualizer</title>\n <script src=\"https://aframe.io/releases/0.3.1/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-audioanalyser-component@^3.0.0/dist/aframe-audioanalyser-components.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-assets>\n <audio id=\"song\" src=\"rickroll.mp3\" autoplay loop></audio>\n </a-assets>\n <a-entity\n audio-analyser=\"#song\"\n component-that-does-stuff-with-audio-analyser-data\n ></a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-audioanalyser-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-audioanalyser-component');\n```\n","url":"https://unpkg.com/aframe-audioanalyser-component@3.0.x/README.md"},"https://unpkg.com/aframe-extras.animation-mixer@^3.4.x/package.json":{"name":"aframe-extras.animation-mixer","version":"3.4.0","description":"Animation mixer for JSON and glTF models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.animation-mixer@^3.4.x/README.md":{"text":"\n# aframe-extras.animation-mixer\n\nAnimation mixer for JSON and glTF models.\n ","url":"https://unpkg.com/aframe-extras.animation-mixer@^3.4.x/README.md"},"https://unpkg.com/aframe-firebase-component@^4.0.x/package.json":{"name":"aframe-firebase-component","version":"4.0.2","description":"Multi-user in A-Frame using Firebase","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:examples/build.js --port 8000 --live --open","dist":"webpack index.js dist/aframe-firebase-component.js && webpack -p index.js dist/aframe-firebase-component.min.js","postpublish":"npm run dist","test":"karma start ./tests/karma.conf.js"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe/tree/components/firebase#readme","devDependencies":{"aframe":"^0.4.1","aframe-template-component":"^1.5.0","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.5.0","chai-shallow-deep-equal":"^1.3.0","karma":"^0.13.15","karma-browserify":"^4.4.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^0.2.3","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.6","karma-mocha":"^0.2.0","karma-mocha-reporter":"^1.1.0","karma-sinon-chai":"^1.1.0","mocha":"^2.3.3","randomcolor":"^0.4.4","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.3","sinon-chai":"^2.8.0","webpack":"^1.13.0"},"dependencies":{"firebase":"^3.0.0","url-parse":"^1.1.1"}},"https://unpkg.com/aframe-firebase-component@^4.0.x/README.md":{"text":"## aframe-firebase-component\n\n> Learn [how to get started with Firebase](https://firebase.google.com/docs/web/setup).\n\nA Firebase component for [A-Frame](https://aframe.io).\n\n![](https://cloud.githubusercontent.com/assets/674727/24439774/2640bef6-1405-11e7-90d7-c39b4f876ce1.png)\n\nComes with a Firebase broadcast component for multiuser experiences\nout-of-the-box by syncing entities' component data to Firebase realtime\ndatabase. The parent-child relationships between entities are maintained as\nwell as long as all entities in the hierarchy have the `broadcast` component\nattached.\n\nTo deploy with GitHub pages when setting up Firebase with the [Firebase\nConsole](https://firebase.google.com/console/), go into *Auth*, and add your\nGitHub pages domain (e.g., `ngokevin.github.io`). This will whitelist your\ndomain.\n\nIf you want to allow unauthenticated users (most should), then go into\n*Database*, click on *Rules*, and set both the `.read` and `.write` to `true`.\n\n### Properties\n\n#### firebase\n\nFirebase configuration component for `<a-scene>`. The `apiKey`, `authDomain`,\n`databaseURL`, and `storageBucket` are provided by Firebase (go to the Firebase\nconsole for your app and click on \"Add Firebase to your web app\").\n\nThe optional `channel` name allows multiple A-Frame apps, or multiple\ninstances/rooms of the same app, to share one Firebase bucket. If no channel is\ngiven, 'default' is used. The channel name can also be specified in the URL:\n`mysite.com?aframe-firebase-channel=oahu`\n\nThe optional `interval` sets how often (in milliseconds) data is sent to Firebase.\nDefault interval is 10 milliseconds.\n\n| Property | Description | Required\n| -------- | ----------- | --------\n| apiKey | API key for Firebase. | yes\n| authDomain | Firebase authentication domain. | yes\n| channel | Name of room/namespace. | no\n| databaseURL | Firebase database URL. | yes\n| interval | Milliseconds between broadcasts.| no\n| storageBucket | Firebase storage bucket URL. | yes\n\n\n#### firebase-broadcast\n\nBroadcast component data to be synced across all clients using Firebase realtime database.\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| components | List of comma-delimited component names to broadcast | position, rotation |\n| componentsOnce | Sync initial value only; for components that don't change |\n\nFor example:\n\n```html\n<a-entity firebase-broadcast=\"components: material, geometry\"><a-entity>\n```\n\nTo broadcast individual component properties, use the `component|property` syntax:\n\n```html\n<a-entity firebase-broadcast=\"components: material|color, geometry|width\"><a-entity>\n```\n\n### Accessing the Firebase Object\n\nYou can access the Firebase object:\n\n```js\ndocument.querySelector('a-scene').systems.firebase.firebase\n```\n\nIf you wanted to add game logic or features such as chat.\n\n### Usage\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-firebase-component@^4.0.0/dist/aframe-firebase-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene firebase=\"apiKey: abc;\n authDomain: mysite.firebaseapp.com;\n databaseURL: https://mysite.firebaseio.com;\n storageBucket: mysite.appspot.com\">\n <a-assets>\n <!-- Using mixins to decrease amount of data send over the wire. -->\n <a-mixin id=\"avatar-head\"\n geometry=\"primitive: box; depth: 0.3; height: 0.3; width: 0.3\"\n material=\"color: #222\"></a-mixin>\n </a-assets>\n\n <a-entity id=\"avatar\" mixin=\"avatar-head\"\n camera look-controls wasd-controls\n firebase-broadcast=\"components: mixin, position, rotation\"\n position=\"0 1.8 5\">\n </a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-firebase-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-firebase-component');\n```\n\n#### FAQ\n\n*Why can't I see anyone else?*\n\nTry positioning everyone at a different start point. In\n`examples/presentation/components/`, there is a `random-position-at` component\nthat starts everyone at a different position (more specifically at one of the\nchairs).\n\n## Authors\n\n- [Kevin Ngo](https://twitter.com/andgokevin), Mozilla\n- [Amber Roy](https://twitter.com/amberroyvr), AltspaceVR\n","url":"https://unpkg.com/aframe-firebase-component@^4.0.x/README.md"},"https://unpkg.com/aframe-extras.ocean@^3.5.x/package.json":{"name":"aframe-extras.ocean","version":"3.6.0","description":"Flat-shaded, animated ocean primitive and component.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.tube@^3.5.x/package.json":{"name":"aframe-extras.tube","version":"3.6.0","description":"Tube following a custom path, primitive and component.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.json-model@^3.5.x/package.json":{"name":"aframe-extras.json-model","version":"3.6.0","description":"Loader for THREE.JSONLoader-compatible models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.object-model@^3.5.x/package.json":{"name":"aframe-extras.object-model","version":"3.6.0","description":"Loader for THREE.ObjectLoader-compatible models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.animation-mixer@^3.5.x/package.json":{"name":"aframe-extras.animation-mixer","version":"3.6.0","description":"Animation mixer for JSON and glTF models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.grid@^3.5.x/package.json":{"name":"aframe-extras.grid","version":"3.6.0","description":"Square grid primitive for scene debugging.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.ocean@^3.5.x/README.md":{"text":"\n# aframe-extras.ocean\n\nFlat-shaded, animated ocean primitive and component.\n ","url":"https://unpkg.com/aframe-extras.ocean@^3.5.x/README.md"},"https://unpkg.com/aframe-extras.object-model@^3.5.x/README.md":{"text":"\n# aframe-extras.object-model\n\nLoader for THREE.ObjectLoader-compatible models.\n ","url":"https://unpkg.com/aframe-extras.object-model@^3.5.x/README.md"},"https://unpkg.com/aframe-extras.tube@^3.5.x/README.md":{"text":"\n# aframe-extras.tube\n\nTube following a custom path, primitive and component.\n ","url":"https://unpkg.com/aframe-extras.tube@^3.5.x/README.md"},"https://unpkg.com/aframe-extras.animation-mixer@^3.5.x/README.md":{"text":"\n# aframe-extras.animation-mixer\n\nAnimation mixer for JSON and glTF models.\n ","url":"https://unpkg.com/aframe-extras.animation-mixer@^3.5.x/README.md"},"https://unpkg.com/aframe-extras.grid@^3.5.x/README.md":{"text":"\n# aframe-extras.grid\n\nSquare grid primitive for scene debugging.\n ","url":"https://unpkg.com/aframe-extras.grid@^3.5.x/README.md"},"https://unpkg.com/aframe-extras.json-model@^3.5.x/README.md":{"text":"\n# aframe-extras.json-model\n\nLoader for THREE.JSONLoader-compatible models.\n ","url":"https://unpkg.com/aframe-extras.json-model@^3.5.x/README.md"},"https://unpkg.com/aframe-particle-system-component@1.0.9/package.json":{"name":"aframe-particle-system-component","version":"1.0.9","description":"Particle systems for A-Frame.","main":"index.js","directories":{"example":"examples"},"devDependencies":{"browserify":"^13.0.0","browserify-css":"^0.9.1","budo":"^8.2.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"scripts":{"dev":"budo index.js:../../dist/aframe-particle-system-component.min.js --port 8000 --live --open","dist":"webpack index.js dist/aframe-particle-system-component.js && webpack -p index.js dist/aframe-particle-system-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/IdeaSpaceVR/aframe-particle-system-component.git"},"keywords":["ideaspace","ideaspacevr","webvr","aframe-vr","aframe-component","aframe","mozvr","vr"],"author":"IdeaSpace <info@ideaspacevr.org> (https://www.ideaspacevr.org)","license":"MIT","bugs":{"url":"https://github.com/IdeaSpaceVR/aframe-particle-system-component/issues"},"homepage":"https://github.com/IdeaSpaceVR/aframe-particle-system-component#readme"},"https://unpkg.com/aframe-particle-system-component@1.0.4/package.json":{"name":"aframe-particle-system-component","version":"1.0.4","description":"Particle systems for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-example-component.js && webpack -p index.js dist/aframe-example-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","unboil":"node scripts/unboil.js"},"repository":{"type":"git","url":"git+https://github.com/IdeaSpaceVR/aframe-particle-system-component.git"},"keywords":["ideaspace","ideaspacevr","webvr","aframe-vr","aframe-component","aframe","mozvr","vr"],"author":"IdeaSpace <info@ideaspacevr.org> (https://www.ideaspacevr.org)","license":"MIT","bugs":{"url":"https://github.com/IdeaSpaceVR/aframe-particle-system-component/issues"},"homepage":"https://github.com/IdeaSpaceVR/aframe-particle-system-component#readme","devDependencies":{"aframe":"^0.3.2","browserify":"^13.0.0","browserify-css":"^0.9.1","budo":"^8.2.2","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"}},"https://unpkg.com/aframe-particle-system-component@1.0.9/README.md":{"text":"# aframe-particle-system-component\n\nParticle system component for [A-Frame](https://aframe.io).\n\n![Particle System](https://cloud.githubusercontent.com/assets/674727/24214966/6d43ef14-0ef4-11e7-973f-c561b81d175f.gif)\n\n### Examples\n\n- [Stars](https://ideaspacevr.github.io/aframe-particle-system-component/examples/stars/)\n- [Dust](https://ideaspacevr.github.io/aframe-particle-system-component/examples/dust/)\n- [Rain](https://ideaspacevr.github.io/aframe-particle-system-component/examples/rain/)\n- [Snow](https://ideaspacevr.github.io/aframe-particle-system-component/examples/snow/)\n- [Colors](https://ideaspacevr.github.io/aframe-particle-system-component/examples/colors/)\n\n### Properties\n\nThis component exposes only a subset of the [ShaderParticleEngine API](http://squarefeet.github.io/ShaderParticleEngine/docs/api/).\n\n| Property | Description | Default Value |\n|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------|\n| preset | Preset configuration. Possible values are: `default`, `dust`, `snow`, `rain`. | `default` |\n| maxAge | The particle's maximum age in seconds. | `6` |\n| positionSpread | Describes this emitter's position variance on a per-particle basis. | `0 0 0` |\n| type | The default distribution this emitter should use to control its particle's spawn position and force behaviour. Possible values are `1` (box), `2` (sphere), `3` (disc) | 1 (box) |\n| rotationAxis | Describes this emitter's axis of rotation. Possible values are `x`, `y` and `z`. | `x` |\n| rotationAngle | The angle of rotation, given in radians. `Dust` preset is `3.14`. | `0` |\n| accelerationValue | Describes this emitter's base acceleration. | `0, -10, 0` |\n| accelerationSpread | Describes this emitter's acceleration variance on a per-particle basis. | `10 0 10` |\n| velocityValue | Describes this emitter's base velocity. | `0 25 0` |\n| velocitySpread | Describes this emitter's acceleration variance on a per-particle basis. | `10 7.5 10` |\n| color | Describes a particle's color. This property is a \"value-over-lifetime\" property, meaning an array of values can be given to describe specific value changes over a particle's lifetime. | `#0000FF,#FF0000` |\n| size | Describes a particle's size. | `1` |\n| direction | The direction of the emitter. If value is `1`, emitter will start at beginning of particle's lifecycle. If value is `-1`, emitter will start at end of particle's lifecycle and work it's way backwards. | `1` |\n| duration | The duration in seconds that this emitter should live for. If not specified, the emitter will emit particles indefinitely. | `null` |\n| particleCount | The total number of particles this emitter will hold. NOTE: this is not the number of particles emitted in a second, or anything like that. The number of particles emitted per-second is calculated by particleCount / maxAge (approximately!) | `1000` |\n| texture | The texture used by this emitter. | `./images/star2.png` |\n| randomize | When a particle is re-spawned, whether it's position should be re-randomised or not. Can incur a performance hit. | `false` |\n| opacity | Either a single number to describe the opacity of a particle. | `1` |\n| maxParticleCount | | `250000` |\n\n### Usage\n\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: dust\"></a-entity>\n```\n\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: snow\"></a-entity>\n```\n\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: rain\"></a-entity>\n```\n\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: dust; texture: ./images/star2.png; color: #0000FF,#00FF00,#FF0000\"></a-entity>\n```\n\n### Browser Installation\n\nInstall and use by directly including the [browser files](dist).\n\n```html\n<!DOCTYPE html>\n<html>\n <head>\n <meta charset=\"utf-8\">\n <title>A-Frame Particle System Component Example</title>\n <meta name=\"description\" content=\"Hello, World!\">\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-particle-system@1.0.x/dist/aframe-particle-system-component.min.js\"></script>\n </head>\n <body>\n <a-scene>\n <!-- Particle system uses 'default' preset, setting custom colors. -->\n <a-entity position=\"0 2.25 -15\" particle-system=\"color: #EF0000,#44CC00\"></a-entity>\n\n <a-sphere position=\"0 1.25 -1\" radius=\"1.25\" color=\"#EF2D5E\"></a-sphere>\n <a-box position=\"-1 0.5 1\" rotation=\"0 45 0\" width=\"1\" height=\"1\" depth=\"1\" color=\"#4CC3D9\"></a-box>\n <a-cylinder position=\"1 0.75 1\" radius=\"0.5\" height=\"1.5\" color=\"#FFC65D\"></a-cylinder>\n <a-plane rotation=\"-90 0 0\" width=\"4\" height=\"4\" color=\"#7BC8A4\"></a-plane>\n\n <a-sky color=\"#000000\"></a-sky>\n </a-scene>\n </body>\n</html>\n```\n\n### npm\n\nhttps://www.npmjs.com/package/aframe-particle-system-component\n\n```\nnpm install aframe-particle-system-component\n```\n\n### Local Development\n\n```\nnpm install\nnpm run dev\n```\n\n### Credits\n\nBased on the [ShaderParticleEngine by Squarefeet](https://github.com/squarefeet/ShaderParticleEngine).\n","url":"https://unpkg.com/aframe-particle-system-component@1.0.9/README.md"},"https://unpkg.com/aframe-particle-system-component@1.0.4/README.md":{"text":"# aframe-particle-system-component\n\nCreate particle systems with A-Frame.\n\n![particle-system](https://cloud.githubusercontent.com/assets/674727/19012611/92d694fa-876f-11e6-8b6b-1b93dcd586a8.gif)\n\n[EXAMPLES](http://ideaspacevr.github.io/aframe-particle-system-component/)\n\n### Properties\n\n| Property | Description | Default Value |\n| --------- | ----------- | ------------- |\n| preset | Preset configuration. Possible values are: `default`, `dust`, `snow`, `rain`. | `default` |\n| maxAge | The particle's maximum age in seconds. | `6` |\n| positionSpread | Describes this emitter's position variance on a per-particle basis. | `0 0 0` |\n| type | The default distribution this emitter should use to control its particle's spawn position and force behaviour. Possible values are `1` (box), `2` (sphere), `3` (disc) | 1 (box) |\n| rotationAxis | Describes this emitter's axis of rotation. Possible values are `x`, `y` and `z`. | `x` |\n| rotationAngle | The angle of rotation, given in radians. `Dust` preset is `3.14`. | `0` |\n| accelerationValue | Describes this emitter's base acceleration. | `0, -10, 0` |\n| accelerationSpread | Describes this emitter's acceleration variance on a per-particle basis. | `10 0 10` |\n| velocityValue | Describes this emitter's base velocity. | `0 25 0` |\n| velocitySpread | Describes this emitter's acceleration variance on a per-particle basis. | `10 7.5 10` |\n| color | Describes a particle's color. This property is a \"value-over-lifetime\" property, meaning an array of values can be given to describe specific value changes over a particle's lifetime. | `#0000FF,#FF0000` |\n| size | Describes a particle's size. | `1` |\n| direction | The direction of the emitter. If value is `1`, emitter will start at beginning of particle's lifecycle. If value is `-1`, emitter will start at end of particle's lifecycle and work it's way backwards. | `1` |\n| duration | The duration in seconds that this emitter should live for. If not specified, the emitter will emit particles indefinitely. | `null` |\n| particleCount | The total number of particles this emitter will hold. NOTE: this is not the number of particles emitted in a second, or anything like that. The number of particles emitted per-second is calculated by particleCount / maxAge (approximately!) | `1000` |\n| texture | The texture used by this emitter. | `./images/star2.png` |\n| randomize | When a particle is re-spawned, whether it's position should be re-randomised or not. Can incur a performance hit. | `false` |\n| opacity | Either a single number to describe the opacity of a particle. | `1` |\n| maxParticleCount | | `250000` |\n\nI am just exposing a subset of all API parameters through this component. See http://squarefeet.github.io/ShaderParticleEngine/docs/api/ for a complete API description.\n\n### Usage Examples\n\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: dust\"></a-entity>\n```\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: snow\"></a-entity>\n```\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: rain\"></a-entity>\n```\n\n```html\n<a-entity position=\"0 2.25 -15\" particle-system=\"preset: dust; texture: ./images/star2.png; color: #0000FF,#00FF00,#FF0000\"></a-entity>\n```\n\n\n### Browser Installation\n\nInstall and use by directly including the [browser files](dist). Make sure the images directory (particle textures) is in the same\ndirectory as the component.\n\n```html\n<!DOCTYPE html>\n<html>\n <head>\n <meta charset=\"utf-8\">\n <title>A-Frame Particle System Component Example</title>\n <meta name=\"description\" content=\"Hello, World!\">\n <script src=\"./aframe.min.js\"></script>\n <script src=\"./aframe-particle-system-component.js\"></script>\n </head>\n <body>\n <a-scene>\n\n <!-- particle system uses 'default' preset, setting custom colors //-->\n <a-entity position=\"0 2.25 -15\" particle-system=\"color: #EF0000,#44CC00\"></a-entity>\n\n <a-sphere position=\"0 1.25 -1\" radius=\"1.25\" color=\"#EF2D5E\"></a-sphere>\n <a-box position=\"-1 0.5 1\" rotation=\"0 45 0\" width=\"1\" height=\"1\" depth=\"1\" color=\"#4CC3D9\"></a-box>\n <a-cylinder position=\"1 0.75 1\" radius=\"0.5\" height=\"1.5\" color=\"#FFC65D\"></a-cylinder>\n <a-plane rotation=\"-90 0 0\" width=\"4\" height=\"4\" color=\"#7BC8A4\"></a-plane>\n\n <a-sky color=\"#000000\"></a-sky>\n\n </a-scene>\n </body>\n</html>\n```\n\n### npm\n\nhttps://www.npmjs.com/package/aframe-particle-system-component\n\n### Local Development\n\n```\nnpm install\nnpm run dev\n```\n\n### Credits\n\nBased on the ShaderParticleEngine by Squarefeet: https://github.com/squarefeet/ShaderParticleEngine\n","url":"https://unpkg.com/aframe-particle-system-component@1.0.4/README.md"},"https://unpkg.com/aframe-motion-capture-components@0.1.x/package.json":{"name":"aframe-motion-capture-components","version":"0.1.2","description":"A-Frame motion capture components","author":"Diego Marcos <diego.marcos@gmail.com>","license":"MIT","main":"src/index.js","scripts":{"build":"cross-env NODE_ENV=production webpack --config webpack.dev.js","start":"webpack-dev-server --host 0.0.0.0 --config webpack.dev.js --progress --colors --hot -d --open --inline","dist":"webpack src/index.js dist/aframe-motion-capture-components.js && webpack -p src/index.js dist/aframe-motion-capture-components.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && gh-pages -d gh-pages","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/dmarcos/aframe-motion-capture-components.git"},"keywords":["aframe","a-frame","aframe-component","aframe-vr","vr","webgl","webvr","mozvr"],"bugs":{"url":"https://github.com/dmarcos/aframe-motion-capture-components/issues"},"homepage":"https://github.com/dmarcos/aframe-motion-capture-components#readme","devDependencies":{"aframe":"github:aframevr/aframe#08a8952","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","cross-env":"^3.1.3","gh-pages":"^0.11.0","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","semistandard":"^8.0.0","shx":"^0.1.1","sinon":"^1.17.5","sinon-chai":"^2.8.0","snazzy":"^4.0.0","webpack":"^1.13.0","webpack-dev-server":"^1.16.2"},"semistandard":{"ignore":["examples/js/build.js","dist/**"]}},"https://unpkg.com/aframe-motion-capture-components@0.1.x/README.md":{"text":"## aframe-motion-capture-components\n\n[A-Frame](https://aframe.io) motion capture components record pose and events\nfrom entities (e.g., camera and tracked controllers) that can be stored in JSON\nor localStorage and then later replayed.\n\nThe motion capture components allow us to emulate the presence of a VR headset\nand controllers. We can build test automation tools for VR experiences. We can\nreplay the recorded user behavior and assert the state of the entities at the\nend. This can happen with no user intervention at all.\n\nWe can also record user interactions and develop on the go where there's no VR\nhardware available. We can iterate over the visual aspect or behavior of the\nexperience using the recorded user input. [Read more about the motion capture\ncomponents](https://blog.mozvr.com/a-saturday-night/).\n\n[TRY THE DEMOS](http://swimminglessonsformodernlife.com/aframe-motion-capture-components/)\n\n![](https://cloud.githubusercontent.com/assets/674727/24481580/0ac87ace-14a0-11e7-8281-c032c90f0529.gif)\n\n## Usage\n\n### WebVR Recording\n\nSet the `avatar-recorder` on the scene. Make sure your controllers have `id`s.\nThen hit `<space>` to toggle recording. A JSON will automatically be downloaded\nonce the recording finishes.\n\n```html\n<a-scene avatar-recorder>\n <a-entity id=\"controller1\" hand-controls\"></a-entity>\n <a-entity id=\"controller2\" hand-controls\"></a-entity>\n</a-scene>\n```\n\n### WebVR Replaying\n\nSpecify the path to a captured WebVR recording JSON file.\n\n```html\n<a-scene avatar-replayer=\"src: recording.json\">\n <a-entity id=\"controller1\" hand-controls\"></a-entity>\n <a-entity id=\"controller2\" hand-controls\"></a-entity>\n</a-scene>\n```\n\n## Components API\n\n### avatar-recorder\n\n| Property | Description | Default Value |\n| ----------------- | ------------------------------------------------------- | ------------- |\n| autoPlay | A recorded sesion plays on page load. | true |\n| autoRecord | Recording starts on page load. | false |\n| localStorage | The recording is persisted on local storage. | false |\n| loop | The recording replays in a loop. | false |\n| saveFile | The user is prompted to save a JSON of the recording. | false |\n| spectatorMode | Replay in 3rd person mode. | false |\n| spectatorPosition | Initial position of the 3rd person camera. | 0 0 0 |\n\n#### Keyboard Shortcuts\n\n| Key | Description |\n|-------|---------------------------------------------- |\n| space | Toggle recording. |\n| c | Clear recording from localStorage and memory. |\n\n### avatar-replayer\n\n| Property | Description | Default Value |\n| ----------------- | ------------------------------------------ | ------------- |\n| loop | The recording replays in a loop. | false |\n| src | The recording data can be hosted in a URL. | '' |\n| spectatorMode | Replay in 3rd person mode. | false |\n| spectatorPosition | Initial position of the 3rd person camera | 0 0 0 |\n\n### motion-capture-replayer\n\n| Property | Description | Default Value |\n| -------- | ---------------------------------------------------- | ------------- |\n| enabled | | true |\n| loop | The animation replays in a loop. | false |\n| recorderEl | An entity that it's the source of the recording. | null |\n| src | The recording data can be hosted in a URL. | '' |\n\n### motion-capture-recorder\n\n| Property | Description | Default Value |\n| -------- | ----------------------------------------------------- | ------------- |\n| autorRecord | The component start recording at page load. | false |\n| enabled | | true |\n| hand | The controller that will trigger recording. | 'right' |\n| recordingControls | Recording is activated by the controller trigger | false |\n| persistStroke | The recorded stroke is persisted as reference. | false |\n| visibleStroke | The recorded stroke is renderered for visual feedback.| true |\n\n## Installation\n\n### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>Motion Capture</title>\n <script src=\"https://aframe.io/releases/0.4.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-motion-capture/dist/aframe-motion-capture.min.js\"></script>\n</head>\n\n<body>\n <a-scene avatar-recorder avatar-replayer></a-scene>\n</body>\n```\n\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\nversion of the component straight into your HTML file, respective to your\nversion of A-Frame:\n\n```sh\nangle install aframe-motion-capture-components\n```\n\n### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-motion-capture-components\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-motion-capture-components');\n```\n","url":"https://unpkg.com/aframe-motion-capture-components@0.1.x/README.md"},"https://unpkg.com/aframe-extras.tube@^3.8.x/package.json":{"name":"aframe-extras.tube","version":"3.8.3","description":"Tube following a custom path, primitive and component.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.animation-mixer@^3.8.x/package.json":{"name":"aframe-extras.animation-mixer","version":"3.8.3","description":"Animation mixer for JSON and glTF models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.grid@^3.8.x/package.json":{"name":"aframe-extras.grid","version":"3.8.3","description":"Square grid primitive for scene debugging.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.object-model@^3.8.x/package.json":{"name":"aframe-extras.object-model","version":"3.8.3","description":"Loader for THREE.ObjectLoader-compatible models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.json-model@^3.8.x/package.json":{"name":"aframe-extras.json-model","version":"3.8.3","description":"Loader for THREE.JSONLoader-compatible models.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.ocean@^3.8.x/package.json":{"name":"aframe-extras.ocean","version":"3.8.3","description":"Flat-shaded, animated ocean primitive and component.","author":"Don McCurdy <dm@donmccurdy.com>","license":"MIT","main":"index.js","repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-extras.git"},"peerDependencies":{"aframe":"^0.5.0"},"keywords":["aframe","a-frame","vr","webgl","webvr"]},"https://unpkg.com/aframe-extras.tube@^3.8.x/README.md":{"text":"\n# aframe-extras.tube\n\nTube following a custom path, primitive and component.\n ","url":"https://unpkg.com/aframe-extras.tube@^3.8.x/README.md"},"https://unpkg.com/aframe-extras.animation-mixer@^3.8.x/README.md":{"text":"\n# aframe-extras.animation-mixer\n\nAnimation mixer for JSON and glTF models.\n ","url":"https://unpkg.com/aframe-extras.animation-mixer@^3.8.x/README.md"},"https://unpkg.com/aframe-extras.grid@^3.8.x/README.md":{"text":"\n# aframe-extras.grid\n\nSquare grid primitive for scene debugging.\n ","url":"https://unpkg.com/aframe-extras.grid@^3.8.x/README.md"},"https://unpkg.com/aframe-extras.object-model@^3.8.x/README.md":{"text":"\n# aframe-extras.object-model\n\nLoader for THREE.ObjectLoader-compatible models.\n ","url":"https://unpkg.com/aframe-extras.object-model@^3.8.x/README.md"},"https://unpkg.com/aframe-extras.json-model@^3.8.x/README.md":{"text":"\n# aframe-extras.json-model\n\nLoader for THREE.JSONLoader-compatible models.\n ","url":"https://unpkg.com/aframe-extras.json-model@^3.8.x/README.md"},"https://unpkg.com/aframe-extras.ocean@^3.8.x/README.md":{"text":"\n# aframe-extras.ocean\n\nFlat-shaded, animated ocean primitive and component.\n ","url":"https://unpkg.com/aframe-extras.ocean@^3.8.x/README.md"},"https://unpkg.com/aframe-physics-system@^1.4.x/package.json":{"name":"aframe-physics-system","version":"1.4.0","description":"Physics system for A-Frame VR, built on Cannon.js","main":"index.js","scripts":{"dev":"budo browser.js:bundle.js -d examples --port 8000","dist":"browserify browser.js -o dist/aframe-physics-system.js && uglifyjs -c -o dist/aframe-physics-system.min.js -- dist/aframe-physics-system.js","test":"karma start ./tests/karma.conf.js","test:once":"karma start ./tests/karma.conf.js --single-run","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers Firefox","preversion":"npm run test:once","preversion:readme":"replace 'aframe-physics-system/v\\d+\\.\\d+\\.\\d+' \"aframe-physics-system/v$npm_package_version\" ./README.md","version":"npm run preversion:readme && npm run dist && git add -A dist README.md","postversion":"git push && git push --tags && npm publish"},"repository":{"type":"git","url":"git+https://github.com/donmccurdy/aframe-physics-system.git"},"keywords":["aframe","aframevr","vr","three","physics","cannon","webgl","webvr"],"author":"Don McCurdy <dm@donmccurdy.com> (https://www.donmccurdy.com)","license":"MIT","bugs":{"url":"https://github.com/donmccurdy/aframe-physics-system/issues"},"homepage":"https://github.com/donmccurdy/aframe-physics-system#readme","dependencies":{"cannon":"github:donmccurdy/cannon.js#v0.6.2-dev1","three-to-cannon":"^1.0.5"},"peerDependencies":{"aframe":"^0.5.0"},"devDependencies":{"aframe":"^0.5.0","browserify":"^13.1.0","budo":"^9.2.1","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.4","envify":"^4.0.0","karma":"^1.3.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.2.0","karma-mocha-reporter":"^2.2.0","karma-sinon-chai":"^1.2.4","mocha":"^3.1.2","replace":"^0.3.0","sinon":"^1.17.6","sinon-chai":"^2.8.0","uglify-js":"^2.7.3"}},"https://unpkg.com/aframe-physics-system@^1.4.x/README.md":{"text":"# Physics for A-Frame VR\n\n[![Build Status](https://travis-ci.org/donmccurdy/aframe-physics-system.svg?branch=master)](https://travis-ci.org/donmccurdy/aframe-physics-system)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/donmccurdy/aframe-physics-system/master/LICENSE)\n\nComponents for A-Frame physics integration, built on [CANNON.js](http://schteppe.github.io/cannon.js/).\n\n![d6590832-8bdb-11e6-9336-658b00bc0460 3](https://cloud.githubusercontent.com/assets/1848368/19297499/806d059a-9013-11e6-9b20-c03294acbc4c.png)\n\n> Image credit [@andgokevin](https://twitter.com/andgokevin).\n\n## Usage (Scripts)\n\nIn the [dist/](https://github.com/donmccurdy/aframe-physics-system/tree/master/dist) folder, download the full or minified build. Include the script on your page, and all components are automatically registered for you:\n\n```html\n<script src=\"//cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.4.0/dist/aframe-physics-system.min.js\"></script>\n```\n\nCDN builds for aframe-physics-system/v1.4.0:\n\n- [aframe-physics-system.js](https://cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.4.0/dist/aframe-physics-system.js) *(development)*\n- [aframe-physics-system.min.js](https://cdn.rawgit.com/donmccurdy/aframe-physics-system/v1.4.0/dist/aframe-physics-system.min.js) *(production)*\n\n## Usage (NPM)\n\n```\nnpm install --save aframe-physics-system\n```\n\n```javascript\n// my-app.js\nvar physics = require('aframe-physics-system');\nphysics.registerAll();\n```\n\nOnce installed, you'll need to compile your JavaScript using something like [Browserify](http://browserify.org/) or [Webpack](http://webpack.github.io/). Example:\n\n```bash\nnpm install -g browserify\nbrowserify my-app.js -o bundle.js\n```\n\n`bundle.js` may then be included in your page. See [here](http://browserify.org/#middle-section) for a better introduction to Browserify.\n\n## Components – `dynamic-body` and `static-body`\n\nThe `dynamic-body` and `static-body` components may be added to any `<a-entity/>` that contains a mesh. Generally, each scene will have at least one `static-body` for the ground, and one or more `dynamic-body` instances that the player can interact with.\n\n- **dynamic-body**: A freely-moving object. Dynamic bodies have mass, collide with other objects, bounce or slow during collisions, and fall if gravity is enabled.\n- **static-body**: A fixed-position or animated object. Other objects may collide with static bodies, but static bodies themselves are unaffected by gravity and collisions.\n\n| Property | Dependencies | Default | Description |\n|----------------|------------------|---------|-----------------------------------------------------|\n| shape | — | `auto` | `auto`, `box`, `cylinder`, `sphere`, `hull`, `none` |\n| mass | `dynamic-body` | 5 | Simulated mass of the object, > 0. |\n| linearDamping | `dynamic-body` | 0.01 | Resistance to movement. |\n| angularDamping | `dynamic-body` | 0.01 | Resistance to rotation. |\n| sphereRadius | `shape:sphere` | — | Override default radius of bounding sphere. |\n| cylinderAxis | `shape:cylinder` | — | Override default axis of bounding cylinder. |\n\n### Basics\n\n```html\n<!-- The debug:true option creates a wireframe around each physics body. If you don't see a wireframe,\n the physics system may be unable to parse your model without a shape:box or shape:hull option. -->\n<a-scene physics=\"debug: true\">\n\n <!-- Camera -->\n <a-entity camera look-controls></a-entity>\n\n <!-- Floor -->\n <a-plane static-body></a-plane>\n\n <!-- Immovable box -->\n <a-box static-body position=\"0 0.5 -5\" width=\"3\" height=\"1\" depth=\"1\"></a-box>\n\n <!-- Dynamic box -->\n <a-box dynamic-body position=\"5 0.5 0\" width=\"1\" height=\"1\" depth=\"1\"></a-box>\n\n</a-scene>\n```\n\n## Components – `constraint`\n\nThe `constraint` component is used to bind physics bodies together using hinges, fixed distances, or fixed attachment points.\n\nExample:\n\n```html\n<a-box id=\"other-box\" dynamic-body />\n<a-box constraint=\"target: #other-box;\" dynamic-body /> \n```\n\n| Property | Dependencies | Default | Description |\n| --- | --- | --- | --- |\n| type | — | `lock` | Type of constraint. Options: `lock`, `distance`, `hinge`, `coneTwist`, `pointToPoint`. |\n| target | — | — | Selector for a single entity to which current entity should be bound. |\n| maxForce | — | 1e6 | Maximum force that may be exerted to enforce this constraint. |\n| collideConnected | — | true | If true, connected bodies may collide with one another. |\n| wakeUpBodies | — | true | If true, sleeping bodies are woken up by this constraint. |\n| distance | `type:distance` | auto | Distance at which bodies should be fixed. Default, or 0, for current distance. |\n| pivot | `type: pointToPoint, coneTwist, hinge` | 0 0 0 | Offset of the hinge or point-to-point constraint, defined locally in this element's body. |\n| targetPivot | `type: pointToPoint, coneTwist, hinge` | 0 0 0 | Offset of the hinge or point-to-point constraint, defined locally in the target's body. |\n| axis | `type: coneTwist, hinge` | 0 0 1 | An axis that each body can rotate around, defined locally to this element's body. |\n| targetAxis | `type: coneTwist, hinge` | 0 0 1 | An axis that each body can rotate around, defined locally to the target's body. |\n\n## Using the CANNON.js API\n\nFor more advanced physics, use the CANNON.js API with custom JavaScript and A-Frame components. The [CANNON.js documentation](http://schteppe.github.io/cannon.js/docs/) and source code offer good resources for learning to work with physics in JavaScript.\n\nIn A-Frame, each entity's `CANNON.Body` instance is exposed on the `el.body` property. To apply a quick push to an object, you might do the following:\n\n```html\n<a-scene>\n <a-entity id=\"nyan\" dynamic-body=\"shape: hull\" obj-model=\"obj: url(nyan-cat.obj)\"></a-entity>\n <a-plane static-body></a-plane>\n</a-scene>\n```\n\n```javascript\nvar el = sceneEl.querySelector('#nyan');\nel.body.applyImpulse(\n /* impulse */ new CANNON.Vec3(0, 1, -1),\n /* world position */ new CANNON.Vec3().copy(el.getComputedAttribute('position'))\n);\n```\n\n## Body Shapes\n\nBody components will attempt to find an appropriate CANNON.js shape to fit your model. When defining an object you may choose a shape or leave the default, `auto`. Select a shape carefully, as there are performance implications with different choices:\n\n* **Auto** (`auto`) – Chooses automatically from the available shapes.\n* **Box** (`box`) – Great performance, compared to Hull or Trimesh shapes, and may be fitted to custom models.\n* **Cylinder** (`cylinder`) – See `box`. Adds `cylinderAxis` option.\n* **Sphere** (`sphere`) – See `box`. Adds `sphereRadius` option.\n* **Convex** (`hull`) – Wraps a model like shrink-wrap. Convex shapes are more performant and better supported than Trimesh, but may still have some performance impact when used as dynamic objects.\n* **Primitives** – Plane/Cylinder/Sphere. Used automatically with the corresponding A-Frame primitives.\n* **Trimesh** – *Deprecated.* Not available as a custom shape, but may be chosen as a last resort for custom geometry. Trimeshes adapt to fit custom geometry (e.g. a `.OBJ` or `.DAE` file), but have very minimal support. Arbitrary trimesh shapes are difficult to model in any JS physics engine, will \"fall through\" certain other shapes, and have serious performance limitations.\n* **Compound** – *In progress.* Compound shapes require a bit of work to set up, but allow you to use multiple primitives to define a physics shape around custom models. These will generally perform better, and behave more accurately, than Trimesh or Convex shapes. For example, a stool might be modeled as a cylinder-shaped seat, on four long cylindrical legs.\n* **None** (`none`) – Does not add collision geometry.\n\nFor more details, see the CANNON.js [collision matrix](https://github.com/schteppe/cannon.js#features).\n\nExample using a bounding box for a custom model:\n\n```html\n<!-- Box -->\n<a-entity obj-model=\"obj: url(...)\" dynamic-body=\"shape: box; mass: 2\"></a-entity>\n\n<!-- Cylinder -->\n<a-entity obj-model=\"obj: url(...)\" dynamic-body=\"shape: cylinder; cylinderAxis: y; mass: 5\"></a-entity>\n```\n\n## Collision Events\n\nCANNON.js generates events when a collision is detected, which are propagated onto the associated A-Frame entity. Example:\n\n```javascript\nvar playerEl = document.querySelector('[camera]');\nplayerEl.addEventListener('collide', function (e) {\n console.log('Player has collided with body #' + e.detail.body.id);\n\n e.detail.target.el; // Original entity (playerEl).\n e.detail.body.el; // Other entity, which playerEl touched.\n e.detail.contact; // Stats about the collision (CANNON.ContactEquation).\n e.detail.contact.ni; // Normal (direction) of the collision (CANNON.Vec3).\n});\n```\n\nNote that CANNON.js cannot perfectly detect collisions with very fast-moving bodies. Doing so requires Continuous Collision Detection, which can be both slow and difficult to implement. If this is an issue for your scene, consider (1) slowing objects down, (2) detecting collisions manually (collisions with the floor are easy – `position.y - height / 2 <= 0`), or (3) attempting a PR to CANNON.js. See: [Collision with fast bodies](https://github.com/schteppe/cannon.js/issues/202).\n\n## Configuration\n\nContact materials define what happens when two objects meet, including physical properties such as friction and restitution (bounciness). The default, scene-wide contact materials may be configured on the scene element:\n\n```html\n<a-scene physics=\"friction: 0.1; restitution: 0.5\">\n <!-- ... -->\n</a-scene>\n```\n\n| Property | Default | Description |\n|---------------------------------|---------|----------------------------------------------------|\n| debug | true | Whether to show wireframes for debugging. |\n| gravity | -9.8 | Force of gravity (in m/s^2). |\n| iterations | 10 | The number of solver iterations determines quality of the constraints in the world. The more iterations, the more correct simulation. More iterations need more computations though. If you have a large gravity force in your world, you will need more iterations. |\n| maxInterval | 0.0667 | Maximum simulated time (in milliseconds) that may be taken by the physics engine per frame. Effectively prevents weird \"jumps\" when the player returns to the scene after a few minutes, at the expense of pausing physics during this time. |\n| friction | 0.01 | Coefficient of friction. |\n| restitution | 0.3 | Coefficient of restitution (bounciness). |\n| contactEquationStiffness | 1e8 | Stiffness of the produced contact equations. |\n| contactEquationRelaxation | 3 | Relaxation time of the produced contact equations. |\n| frictionEquationStiffness | 1e8 | Stiffness of the produced friction equations. |\n| frictionEquationRegularization | 3 | Relaxation time of the produced friction equations |\n\nMore advanced configuration, including specifying different collision behaviors for different objects, is available through the CANNON.js JavaScript API.\n\nResources:\n\n* [CANNON.World](http://schteppe.github.io/cannon.js/docs/classes/World.html)\n* [CANNON.ContactMaterial](http://schteppe.github.io/cannon.js/docs/classes/ContactMaterial.html)\n\n","url":"https://unpkg.com/aframe-physics-system@^1.4.x/README.md"},"https://unpkg.com/aframe-point-component@^1.0.1/package.json":{"name":"aframe-point-component","version":"1.1.1","description":"A Point component for A-Frame.","main":"index.js","cdn":"dist/aframe-point-component.min.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-point-component.js && webpack -p index.js dist/aframe-point-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/naugtur/aframe-point-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","point"],"author":"naugtur <naugtur@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/naugtur/aframe-point-component/issues"},"homepage":"https://github.com/naugtur/aframe-point-component#readme","devDependencies":{"aframe":"^0.5.0","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-point-component@^1.0.0/package.json":{"name":"aframe-point-component","version":"1.1.1","description":"A Point component for A-Frame.","main":"index.js","cdn":"dist/aframe-point-component.min.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack index.js dist/aframe-point-component.js && webpack -p index.js dist/aframe-point-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/naugtur/aframe-point-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","point"],"author":"naugtur <naugtur@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/naugtur/aframe-point-component/issues"},"homepage":"https://github.com/naugtur/aframe-point-component#readme","devDependencies":{"aframe":"^0.5.0","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-log-component@1.0.x/package.json":{"name":"aframe-log-component","version":"1.0.2","description":"In-VR console logs for A-Frame.","main":"index.js","cdn":"dist/aframe-log-component.min.js","scripts":{"dev":"budo index.js:dist/aframe-log-component.min.js --port 7000 --live --open","dist":"webpack index.js dist/aframe-log-component.js && webpack -p index.js dist/aframe-log-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","ghpages":"ghpages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/ngokevin/kframe.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","log"],"author":"Kevin Ngo <me@ngokevin.com>","license":"MIT","bugs":{"url":"https://github.com/ngokevin/kframe/issues"},"homepage":"https://github.com/ngokevin/kframe#readme","devDependencies":{"aframe":"github:aframevr/aframe","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.5","sinon-chai":"^2.8.0","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"globals":["AFRAME","THREE"],"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/@ekolabs/aframe-spritesheet-component@1.2.x/package.json":{"name":"@ekolabs/aframe-spritesheet-component","version":"1.2.0","description":"Animated spritesheet support for A-Frame","main":"index.js","cdn":"dist/aframe-spritesheet-component.min.js","scripts":{"build":"browserify examples/main.js -o examples/build.js","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","dist":"webpack","prepublish":"npm run dist","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/EkoLabs/aframe-spritesheet-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","spritesheet"],"license":"Apache-2.0","author":{"name":"Eko labs","url":"https://developer.helloeko.com","email":"dev@helloeko.com"},"contributors":[{"name":"Opher Vishnia","email":"opherv@gmail.com","url":"http://opherv.com"}],"bugs":{"url":"https://github.com/ekolabs/aframe-spritesheet-component/issues"},"homepage":"https://github.com/ekolabs/aframe-spritesheet-component#readme","files":["README.md","aframe_spritesheet.gif","LICENSE","index.js","package.json","dist/"],"devDependencies":{"aframe":"^0.4.0","babel-core":"^6.23.1","babel-loader":"^6.3.2","babel-preset-es2015":"^6.22.0","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","randomcolor":"^0.4.4","shelljs":"^0.7.0","webpack":"^2.2.1","eslint":"^3.15.0","eslint-config-google":"^0.7.1"},"semistandard":{"ignore":["examples/build.js","dist/**"]},"dependencies":{"global":"^4.3.1"}},"https://unpkg.com/aframe-point-component@^1.0.1/README.md":{"text":"## aframe-point-component\n\nA point component for [A-Frame](https://aframe.io). Creates a [THREE.Points\nobject](https://threejs.org/docs/#Reference/Objects/Points). Points remain a\npoint no matter the distance.\n\n![Screenshot](https://cloud.githubusercontent.com/assets/674727/24059359/0ba5a1f8-0b0c-11e7-8cc3-df71ee1d673e.gif)\n\n[VIEW DEMO](http://naugtur.pl/aframe-point-component/)\n\n### API\n\n| Property | Description | Default Value |\n|-------------|---------------------------------------------------|---------------|\n| size | size of rendered point (length of rectangle edge) | 1 |\n| color | color definition, like in CSS | #888 |\n| perspective | boolean - should it scale with distance or not | false |\n\n#### Custom Methods\n\n`setPoints(array of arrays3)` - replace single point geometry with multiple points in one a-point instance\n\nexample\n\n```js\n element.components.point.setPoints([\n [0,0,0]\n [0,0,1]\n [0,0,2]\n ...\n ])\n```\n\n### Installation\n\nnpm install aframe-point\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-point-component/dist/aframe-point-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity point=\"size: 2\"></a-entity>\n OR\n <a-point size=\"2\"></a-point>\n </a-scene>\n</body>\n```\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-point\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-point');\n```\n","url":"https://unpkg.com/aframe-point-component@^1.0.1/README.md"},"https://unpkg.com/@ekolabs/aframe-spritesheet-component@1.2.x/README.md":{"text":"## A-Frame Spritesheet Component\n\n<img src=\"https://ekolabs.github.io/aframe-spritesheet-component/aframe_spritesheet.gif\">\n\nAnimated spritesheet support for [A-Frame](https://aframe.io).\n\n### Demo / Using spritesheets\n\nSpritesheets are a common way to play pre-rendered animation. This component allows you to load up a spritesheet image to an `a-image` element and easily control its animation. It allows usage of two types of spritesheet formats:\n\n**[Rows and Cols](https://ekolabs.github.io/aframe-spritesheet-component/examples/rowscols/)**\n\nA grid representing all frames of the animation. All of the frames must be of the same dimensions, and the animation index is assumed to be scanned left to right, top to bottom. If your last frame is not the one on the bottom right, you'll have to specify the index of the last frame using the `lastFrame` property.\n\n**[JSON data format](https://ekolabs.github.io/aframe-spritesheet-component/examples/json/)**\n\nThe spritesheet image file can be made more compact by using a dictionary automatically generated with [TexturePacker](https://www.codeandweb.com/texturepacker). This will help reduce file size.\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-spritesheet-component/dist/aframe-spritesheet-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <!-- rows/cols format-->\n <a-image src=\"spritesheet.png\" sprite-sheet=\"cols:8; rows: 3; progress: 0;\"></a-image>\n <!-- json format -->\n <a-image src=\"spritesheet.png\" sprite-sheet=\"dataUrl: spritesheet.json; progress: 0;\" ></a-image>\n </a-scene>\n</body>\n```\n\n<!-- If component is accepted to the Registry, uncomment this. -->\n<!--\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\nversion of the component straight into your HTML file, respective to your\nversion of A-Frame:\n\n```sh\nangle install aframe-spritesheet-component\n```\n-->\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-spritesheet-component\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-spritesheet-component');\n```\n\n### API\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| progress | A value between 0 and 1 that represents animation progression. the index of the animation frame is calculated from this attribute. Used if no frameIndex or frameName specified | 0 |\n| frameIndex | Explicit index of the animation frame to use. Used if no frameName specified | null |\n| frameName | Explicit name of the animation frame to use, if using dataUrl | null |\n| cols | number of cols in the spritesheet image (not needed if using dataUrl)| 1 |\n| rows | number of rows spritesheet image (not needed if using dataUrl) | 1 |\n| firstFrame| index of the first frame of the animation, ordered left to right starting at the first row | 0 |\n| lastFrame| index of the last frame of the animation, ordered left to right starting at the first row . If not specified and not using the JSON format, value is `rows * cols - 1`| null |\n| cloneTexture | if using separate instances of the same image, set this to true | false |\n| dataUrl | If using a JSON format, url pointing to the json file| null |\n\n\n### Acknowledgment\nWalking pig sprite taken from <a href=\"http://www.glitchthegame.com\">glitchthegame.com</a>, under a Public Domain Dedication license.\n\nInteresting bit of Trivia: [Tiny Speck](https://tinyspeck.com/), the company behind the now-defunct Glitch game is now actually [Slack](https://slack.com)!\n\n### Author\nDeveloped by [Opher Vishnia](http://twitter.com/opherv) of [Eko](http://www.helloeko.com)\n\n### License\nApache 2","url":"https://unpkg.com/@ekolabs/aframe-spritesheet-component@1.2.x/README.md"},"https://unpkg.com/aframe-point-component@^1.0.0/README.md":{"text":"## aframe-point-component\n\nA point component for [A-Frame](https://aframe.io). Creates a [THREE.Points\nobject](https://threejs.org/docs/#Reference/Objects/Points). Points remain a\npoint no matter the distance.\n\n![Screenshot](https://cloud.githubusercontent.com/assets/674727/24059359/0ba5a1f8-0b0c-11e7-8cc3-df71ee1d673e.gif)\n\n[VIEW DEMO](http://naugtur.pl/aframe-point-component/)\n\n### API\n\n| Property | Description | Default Value |\n|-------------|---------------------------------------------------|---------------|\n| size | size of rendered point (length of rectangle edge) | 1 |\n| color | color definition, like in CSS | #888 |\n| perspective | boolean - should it scale with distance or not | false |\n\n#### Custom Methods\n\n`setPoints(array of arrays3)` - replace single point geometry with multiple points in one a-point instance\n\nexample\n\n```js\n element.components.point.setPoints([\n [0,0,0]\n [0,0,1]\n [0,0,2]\n ...\n ])\n```\n\n### Installation\n\nnpm install aframe-point\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-point-component/dist/aframe-point-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity point=\"size: 2\"></a-entity>\n OR\n <a-point size=\"2\"></a-point>\n </a-scene>\n</body>\n```\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-point\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-point');\n```\n","url":"https://unpkg.com/aframe-point-component@^1.0.0/README.md"},"https://unpkg.com/aframe-log-component@1.0.x/README.md":{"text":"## aframe-log-component\n\n[![Version](http://img.shields.io/npm/v/aframe-log-component.svg?style=flat-square)](https://npmjs.org/package/aframe-log-component)\n[![License](http://img.shields.io/npm/l/aframe-log-component.svg?style=flat-square)](https://npmjs.org/package/aframe-log-component)\n\nIn-VR console logs for [A-Frame](https://aframe.io).\n\n![logging](https://user-images.githubusercontent.com/674727/27067447-d875c6ac-4fbf-11e7-94ed-b127d7468dd3.gif)\n\n### API\n\n#### AFRAME.log (message, channel)\n\nProvided global function to `console.log` a message into VR.\n\n```html\n<a-scene>\n <a-entity position=\"0 0 -3\">\n <a-entity log geometry=\"primitive: plane\" material></a-entity>\n <a-entity log=\"channel: foo\" geometry=\"primitive: plane\" material></a-entity>\n </a-entity>\n</a-scene>\n```\n\n```js\nAFRAME.log('hello to all log entities');\nAFRAME.log('hello to foo', 'foo');\n```\n\n#### Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| channel | String to specify to only render logs that are sent with a specific channel. | '' |\n| filter | Plain-text string filter. (e.g., `filter: bar` would match log messages with `bar` in them. | '' |\n\n#### `<a-log>`\n\nPrimitive with a default plane geometry, black material, and light green text.\n\n```html\n<script>\n AFRAME.registerComponent('main', {\n AFRAME.log('talking to <a-log>');\n });\n</script>\n\n<a-scene>\n <a-log position=\"0 0 -4\"></a-log>\n</a-scene>\n```\n\n#### Logging Via Events\n\n```js\ndocument.querySelector('a-scene').emit('log', {message: 'hello', channel: 'bar'});\n```\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-log-component/dist/aframe-log-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <!-- Or <a-log position=\"0 0 -4\"></a-log>. -->\n <a-entity log geometry=\"primitive: plane\" material=\"color: #111\" text=\"color: lightgreen\" position=\"0 0 -4\"></a-entity>\n </a-scene>\n</body>\n```\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-log-component\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-log-component');\n```\n\n### Roadmap\n\n- Allow listening and outputting from vanilla `console.log`s.\n","url":"https://unpkg.com/aframe-log-component@1.0.x/README.md"},"https://unpkg.com/aframe-environment-component@^1.0.x/package.json":{"name":"aframe-environment-component","version":"1.0.0","description":"Infinite environments for your A-Frame VR scene in just one file.","main":"index.js","cdn":"dist/aframe-environment-component.min.js","scripts":{"dev":"budo index.js:dist/aframe-environment-component.min.js --port 7000 --live --open","dist":"webpack index.js dist/aframe-environment-component.js && webpack -p index.js dist/aframe-environment-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","ghpages":"ghpages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/feiss/aframe-environment-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","environment"],"author":"Diego F. Goberna <github@feiss.be>","license":"MIT","bugs":{"url":"https://github.com/feiss/aframe-environment-component/issues"},"homepage":"https://github.com/feiss/aframe-environment-component#readme","devDependencies":{"aframe":"*","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"globals":["AFRAME","THREE"],"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-environment-component@^1.0.x/README.md":{"text":"# aframe-environment-component\n\nA simple way of setting up a whole basic environment for your\n[A-Frame](http://aframe.io) VR scene.\n\n![gif](https://github.com/feiss/aframe-environment-component/blob/master/assets/aframeenvironment.gif?raw=true)\n\nJust include `aframe-environment-component.js` in your .html:\n\n```html\n <script src=\"https://rawgit.com/feiss/aframe-environment-component/master/dist/aframe-environment-component.min.js\"></script>\n```\n\nand add the `environment` component to an entity:\n\n```html\n <a-entity environment></a-entity>\n```\n\nThat's it! :)\n\n## Presets\n\nThe previous code will setup a default scene, but you have a bunch of already predefined presets to choose from, using the `preset` parameter, like this:\n\n\n```html\n <a-entity environment=\"preset: <name of the preset>\"></a-entity>\n```\n\nYou can view and try all the presets in the **[aframe-environment-component Test Page](http://feiss.github.io/aframe-environment-component/)**. The current list of presets are listed in the next section.\n\n\n## Parameters\n\nApart from using a preset, you can tweak the environment with many parameters, like this:\n\n```html\n <a-entity environment=\"sunPosition: 1 5 -2; groundColor: #445\"></a-entity>\n```\n\nYou can also select a preset but change some of its parameters:\n```html\n <a-entity environment=\"preset: forest; groundColor: #445; grid: cross\"></a-entity>\n```\n\nThis is the list of the available parameters.\n\n\n| Parameter | Default | Description |\n|-------------|---------|-------------|\n| **preset** | 'default' | Valid values: `none`, `default`, `contact`, `egypt`, `checkerboard`, `forest`, `goaland`, `yavapai`, `goldmine`, `threetowers`, `poison`, `arches`, `tron`, `japan`, `dream`, `volcano`, `starry`, `osiris` |\n| **seed** | 1 | Seed for randomization. If you don't like the layout of the elements, try another value for the seed. |\n| **skyType** | 'atmosphere' | Valid values: `color`, `gradient`, `atmosphere` |\n| **skyColor** | | When `skyType` is `color` or `gradient`, it sets the main sky color |\n| **horizonColor**| | When `skyType` is `gradient`, it sets the color of the sky near the horizon |\n| **lighting** | 'distant' | Valid values: `none`, `distant`, `point`. A hemisphere light and a key light (directional or point) are added to the scene automatically when using the component. Use `none` if you don't want this automatic lighting set being added. The color and intensity are estimated automatically. |\n| **shadow** | false | Shadows on/off. Sky light casts shadows on the ground of all those objects with `shadow` component applied |\n| **shadowSize** | 10 | Shadows size |\n| **lightPosition** | 0 1 -0.2 | Position of the main light. If `skyType` is `atmospheric`, only the orientation matters (is a directional light) and it can turn the scene into night when lowered towards the horizon. |\n| **fog** | 0 | Amount of fog (0 = none, 1 = full fog). The color is estimated automatically. |\n| **flatShading** | false | Whether to show everything smoothed (false) or polygonal (true). |\n| **playArea** | 1 | Radius (in maters) of the area in the center reserved for the player and the gameplay. The ground is flat in there and no objects are placed inside.|\n| **ground** | 'hills' | Valid values: `none`, `flat`, `hills`, `canyon`, `spikes`, `noise`. Orography style. |\n| **groundYScale** | 3 | Maximum height (in meters) of ground's features (hills, mountains, peaks..) |\n| **groundTexture**| 'none' | Valid values: `none`, `checkerboard`, `squares`, `walkernoise`|\n| **groundColor** | '#553e35' | Main color of the ground |\n| **groundColor2**| '#694439' | Secondary color of the ground. Used for textures, ignored if `groundTexture` is `none` |\n| **dressing** | 'none' | Valid values: `none`, `cubes`, `pyramids`, `cylinders`, `towers`, `mushrooms`, `trees`, `apparatus`, `torii`. Dressing is the term we use here for the set of additional objects that are put on the ground for decoration. |\n| **dressingAmount** | 10 | Number of objects used for dressing |\n| **dressingColor** | '#795449' | Base color of dressing objects |\n| **dressingScale** | 5 | Height (in meters) of dressing objects |\n| **dressingVariance** | '1 1 1' | Maximum x,y,z meters to randomize the size and rotation of each dressing object. Use `0 0 0` for no variation in size nor rotation |\n| **dressingUniformScale** | true | If `false`, a different value is used for each coordinate x, y, z in the random variance of size.|\n| **grid** | 'none' | Valid values: `none`, `1x1`, `2x2`, `crosses`, `dots`, `xlines`, `ylines`. 1x1 and 2x2 are rectangular grids of 1 and 2 meters side, respectively. |\n| **gridColor** | '#ccc' | Color of the grid. |\n\n\nThe best way to work with them is to press `ctrl-alt-i` to open the [inspector](https://aframe.io/docs/master/introduction/visual-inspector-and-dev-tools.html#a-frame-inspector), search for 'environment' in the filter box and select it, and tweak the parameters while checking the changes in realtime. When you are happy, you can use the `Copy attributes` button or even better, copy the attributes logged in the browser's dev tools console.\n\n## Performance\n\nThe main idea of this component is to have a complete and visually interesting environment by just including one .js file, with no extra includes or requests. This requires to store all the assets inside the js or (in most of cases) to procedurally generate them. Despite of the computing time and increased file size, both options are normally faster than requesting and waiting for additional textures or model files.\n\nApart from the parameter `dressingAmount`, there is not much difference among different values in parameters in terms of performance. Just keep `dressingAmount` value under watch and lower it if the performance is not optimal.\n\n## Help and contact\n\nPRs are appreciated, issues are welcomed. For any question, ping @feiss at [aframevr in Slack](https://aframevr-slack.herokuapp.com/) or Twitter.\n","url":"https://unpkg.com/aframe-environment-component@^1.0.x/README.md"},"https://unpkg.com/super-hands@^1.0.0/package.json":{"name":"super-hands","version":"1.1.0","description":"All-in-one natural hand controller interaction component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js -t [ babelify --presets [ es2015 ] ]","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","record":"budo machinima_tests/main.js:build.js --dir machinima_tests/scenes --port 8000 --live --open","dist":"webpack index.js dist/super-hands.js && webpack -p index.js dist/super-hands.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers FirefoxNightly","test:machinima":"karma start ./machinima_tests/karma.conf.js"},"repository":{"type":"git","url":"git+https://github.com/wmurphyrd/aframe-super-hands-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","super-hands","controls","tracked-controls","hand-controls","grab","drag-drop","stretch"],"author":"William Murphy william@datatitian.com","license":"MIT","bugs":{"url":"https://github.com/wmurphyrd/aframe-super-hands-component/issues"},"homepage":"https://github.com/wmurphyrd/aframe-super-hands-component#readme","devDependencies":{"aframe":"^0.6.0","aframe-event-set-component":"^3.0.2","aframe-extras":"^3.8.6","aframe-motion-capture-components":"^0.1.6","aframe-physics-system":"^1.4.2","babel-loader":"^6.2.10","babel-preset-es2015":"^6.22.0","babelify":"^7.3.0","browserify":"^13.0.0","browserify-istanbul":"^2.0.0","budo":"^8.2.2","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.0","ghpages":"^0.0.8","istanbul":"^0.4.5","karma":"^1.4.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-html2js-preprocessor":"^1.1.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"^1.2.4","mocha":"^3.0.2","mozilla-download":"^1.1.1","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.5","sinon-chai":"^2.8.0","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/super-hands@^1.0.0/README.md":{"text":"## Super Hands\r\n\r\n[![Build Status](https://travis-ci.org/wmurphyrd/aframe-super-hands-component.svg?branch=master)](https://travis-ci.org/wmurphyrd/aframe-super-hands-component)\r\n[![npm Dowloads](https://img.shields.io/npm/dt/super-hands.svg?style=flat-square)](https://www.npmjs.com/package/super-hands)\r\n[![npm Version](http://img.shields.io/npm/v/super-hands.svg?style=flat-square)](https://www.npmjs.com/package/super-hands)\r\n[![js-semistandard-style](https://img.shields.io/badge/code%20style-semistandard-brightgreen.svg?style=flat-square)](https://github.com/Flet/semistandard)\r\n\r\nEffortlessly add natural, intuitive hand controller and mouse interaction in\r\n[A-Frame](https://aframe.io).\r\n\r\n![Demo Gif](readme_files/super-hands-demo.gif)\r\n\r\n![Super Hans Can't Make a Fist](readme_files/peep-show-super-hans.gif)\r\n\r\n### Description\r\n\r\nThe `super-hands` component interprets input from controls and\r\ncollision detection components\r\ninto interaction gestures and communicates those gestures to\r\ntarget entities for them to respond. \r\n\r\nThe currently implemented gestures are:\r\n\r\n* Hover: Holding a controller in the collision space of an entity\r\n* Grab: Pressing a button while hovering an entity, potentially also moving it\r\n* Stretch: Grabbing an entity with two hands and resizing\r\n* Drag-drop: Dragging an entity onto another entity\r\n\r\nFor an entity to respond to the `super-hands` gestures, it needs to have\r\ncomponents attached to translate the gestures into actions. `super-hands`\r\nincludes components for typical reactions to the implemented gestures:\r\n`hoverable`, `clickable`, `grabbable`, `stretchable`, and `drag-droppable`.\r\n\r\n**Avatar Locomotion**: Inspired by a demo from [@caseyyee](https://github.com/caseyyee), the `super-hands`\r\ngrab and stretch gestures can also serve as a comfortable locomotion system\r\nby moving and scaling the world around the player. Use the `a-locomotor` primitive\r\nto provide intuitive freedom of motion in your WebVR experiences.\r\n\r\n**Mouse and Mobile VR Support**: With valuable input from [@milan-rusev](https://github.com/milan-rusev),\r\nwe were able to integrate mouse and other controller input via\r\nthe `cursor` component to support a wider variety of controllers.\r\nSee\r\n[the examples](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#mouse)\r\nfor more info.\r\n\r\n### Installation\r\n\r\n#### Browser \r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>Most Basic Super-Hands Example</title>\r\n <script src=\"https://aframe.io/releases/0.6.1/aframe.min.js\"></script>\r\n <script src=\"//cdn.rawgit.com/donmccurdy/aframe-extras/v3.8.6/dist/aframe-extras.min.js\"></script>\r\n <script src=\"https://unpkg.com/super-hands@1.1.0/dist/super-hands.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <a-assets></a-assets>\r\n <a-locomotor>\r\n <!-- Make sure your super-hands entities also have controller and collider components -->\r\n <a-entity hand-controls=\"left\" super-hands sphere-collider=\"objects: a-box\"></a-entity>\r\n <a-entity hand-controls=\"right\" super-hands sphere-collider=\"objects: a-box\"></a-entity>\r\n </a-locomotor>\r\n <!-- hover & drag-drop won't have any obvious effect without some additional event handlers or components. See the examples page for more -->\r\n <a-box hoverable grabbable stretchable drag-droppable\r\n color=\"blue\" position=\"0 0 -1\"></a-box>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n#### npm\r\n\r\nInstall via npm:\r\n\r\n```bash\r\nnpm install super-hands\r\n```\r\n\r\nThen require and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('super-hands');\r\n```\r\n\r\n\r\n#### Examples\r\n\r\n[Visit the Examples Page to see super-hands in action](https://wmurphyrd.github.io/aframe-super-hands-component/examples/)\r\n\r\n### Concepts\r\n\r\n![Separation of Gesture and Response API](readme_files/super-hands-api.png)\r\n\r\nSeparating the reaction to be the responsibility of the entity affected allows for extensibility.\r\nIn response to a grab, you may want some entities to lock to the controller and move,\r\nothers to rotate around a fixed point, and others still to spawn a new entity but remain unchanged.\r\nWith this API schema, these options can be handled by adding or creating different reaction\r\ncomponents to the entities in your scene, and `super-hands` can work with all of them.\r\n\r\n#### Interactivity\r\n\r\nThere are two pathways to adding additional interactivity.\r\n\r\n1. A-Frame style: Each component's API documentation describes the A-Frame\r\ncustom events and states it uses.\r\nThese are best processed by creating new A-Frame components that register\r\nevent listeners and react accordingly.\r\n1. HTML style: The `super-hands` component also integrates with the\r\nGlobal Event Handlers Web API to trigger standard mouse events analogous\r\nto the VR interactions that can easily be handled through\r\nproperties like `onclick`.\r\n\r\n\r\n\r\n### News\r\n\r\nv1.1.0\r\n\r\n* NEW: Compatibility with desktop mouse control via A-Frame `cursor` component\r\n * Added new schema property `colliderEventProperty` to configure\r\n where in the `event.details` to look for the collision target\r\n * Requires some configuration of schema properties, see new example: [Mouse Controls](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#mouse)\r\n* Select examples now have `avatar-replayer` to preview actions without needing\r\n VR equipment\r\n\r\nv1.0.1\r\n\r\n* A-Frame v0.6.0 compatibility: fixed issue with camera freezing when using\r\n `a-locomotor`'s automatic camera config\r\n* Updated documentation and examples with latest versions of `aframe-extras` and\r\n `aframe-physics-system`.\r\n\r\nv1.0.0\r\n\r\n* `a-locomotor`: drop-in freedom of motion for WebVR experiences\r\n with this new primitive\r\n* Maturation of A-Frame style API: Reaction components now need to cancel\r\n gesture events in order to communicate acceptance of the gesture to `super-hands`.\r\n This improves state tracking and handling of overlapping/nested\r\n entities\r\n* Improved Global Event Handlers integration:\r\n * When overlapping entities create multiple potential targets for GEH\r\n events, the events fire on all potential targets\r\n * `click` now functions more like its mouse counterpart, only firing\r\n if a mouseup occurs after a mousedown and without losing collision\r\n with the target entity\r\n* Two-handed grabbing: `grabbable` can now process grabs from multiple\r\n `super-hands` entities. In non-physics interactions, this makes passing\r\n entities between hands much easier. In physics-based interactions, this\r\n creates multiple constraints for advanced handling\r\n* `strechable` flexibility: state tracking of hands attempting to\r\n stretch moved from `super-hands` to `strechable`. This should allow for\r\n different avatars in a multi-user setting to stretch a single entity\r\n cooperatively\r\n* Added [machinima testing](https://github.com/wmurphyrd/aframe-machinima-testing)\r\n for automated testing based on motion-captured user input to improve\r\n regression detection\r\n\r\n#### Known Issues\r\n\r\n* When both hands are hovering an entity and one leaves, the entity will lose\r\n the hover state for one tick\r\n * Related to messaging from `sphere-collider`; unable to distinguish which\r\n collider instance is signaling the collision termination.\r\n* Two-handed physics grabs don't feel great\r\n * Someone that knows something about game dev could be smarter about the\r\n constraints\r\n\r\n#### Compatibility\r\n\r\n| super-hands Version | A-Frame Version | aframe-extras Version | aframe-physics-system Version |\r\n| --- | --- | --- | --- |\r\n| ^v1.0.1 | v0.6.x |^v3.8.6 | ^v1.4.2 |\r\n| v1.0.0 | v0.5.x |v3.8.5 | v1.4.1 |\r\n| v0.2.4 | v0.4.x | v3.7.0 | v1.3.0 |\r\n\r\n### API\r\n\r\n#### super-hands component\r\n\r\n`super-hands` should be added to same entities as your controller\r\ncomponent and collision detector (e.g. [aframe-extras sphere-collider](https://github.com/donmccurdy/aframe-extras/blob/master/src/misc)\r\nor the in-development, physics system-based [physics-collider](https://github.com/donmccurdy/aframe-physics-system/pull/14)).\r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| colliderState | Name of state added to entities by your chosen collider | `'collided'` (default for `sphere-collider` and `physics-collider`) |\r\n| colliderEvent | Event that your chosen collider emits when identifying a new collision | `'hit'` (default for `sphere-collider` and `physics-collider`) |\r\n| colliderEventProperty | Name of property in event `details` object which contains the collided entity | `'el'` (default for `sphere-collider` and `physics-collider`) |\r\n| grabStartButtons | Array of button event types that can initiate grab | Trigger, grip, thumb press events |\r\n| grabEndButtons | Array of button event types that can terminate grab | Trigger, grip, thumb release events |\r\n| stretchStartButtons | Array of button event types that can initiate stretch | Trigger, grip, thumb press events |\r\n| stretchEndButtons | Array of button event types that can terminate stretch | Trigger, grip, thumb release events |\r\n| dragDropStartButtons | Array of button event types that can initiate dragging/hovering | Trigger, grip, thumb press events |\r\n| dragDropEndButtons | Array of button event types that can execute drag-drop | Trigger, grip, thumb release events |\r\n\r\nDefault button events include specific events for `vive-controls`, `hand-controls` and\r\n`oculus-touch-controls`.\r\n\r\nDefault start events: 'gripdown', 'trackpaddown', 'triggerdown', 'gripclose',\r\n'pointup', 'thumbup', 'pointingstart', 'pistolstart', 'thumbstickdown'\r\n\r\nDefault end events: 'gripup', 'trackpadup', 'triggerup', 'gripopen',\r\n'pointdown', 'thumbdown', 'pointingend', 'pistolend', 'thumbstickup'\r\n\r\n##### Events\r\n\r\nEvents will be emitted by the entity being interacted with.\r\nThe entity that `super-hands` is attached to is sent in the event `details` as the property `hand`.\r\n\r\n| Type | Description | Target | details object |\r\n| --- | --- | --- | --- |\r\n| hover-start | Collided with entity | collided entity | hand: `super-hands` entity |\r\n| hover-end | No longer collided with entity | collided entity | hand: `super-hands` entity |\r\n| grab-start | Button pressed while collided with entity and hand is empty | collided entity | hand: `super-hands` entity |\r\n| grab-end | Button released after grab-start | collided entity | hand: `super-hands` entity |\r\n| stretch-start | Both controllers have button pressed while collided with entity | collided entity | hand: `super-hands` entity, secondHand: second controller entity |\r\n| stretch-end | Release of button after stretch-start | collided entity | hand: `super-hands` entity |\r\n| drag-start | Drag-drop button pressed while collided with entity and hand is empty | collided entity | hand: `super-hands` entity |\r\n| drag-end | Drag-drop button released while dragging an entity | dragged entity | hand: `super-hands` entity |\r\n| dragover-start | Collision with entity while dragging another entity | collided entity & held entity | hand: `super-hands` entity, hovered: collided entity, carried: held entity |\r\n| dragover-end | No longer collided with entity from dragover-start | collided entity & held entity | hand: `super-hands` entity, hovered: collided entity, carried: held entity |\r\n| drag-drop | Button released while holding an entity and collided with another | collided entity & held entity | hand: `super-hands` entity, dropped: carried entity, on (carried entity only): receiving entity |\r\n\r\nNotes:\r\n\r\n* References to buttons being \"released\" and \"pressed\" are dependent on the schema settings.\r\nFor example, to make grab 'sticky', you could set grabStartButtons to\r\n'triggerdown' and grabEndButtons to 'gripdown' (as in the\r\n[sticky example](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#sticky)).\r\nThis way the grab-end event would not fire until the grip button was *pressed*,\r\neven if the trigger was *released* earlier.\r\n* Only one entity at a time will be targeted for each event type,\r\neven if multiple overlapping collision zones exist. `super-hands` tracks a\r\nLIFO stack of collided entities to determine which will be affected.\r\n* drag-drop: For the receiving entity, `on` entry in the details is `null`.\r\nIf needed, use `event.target` instead.\r\n\r\n##### Global Event Handler Integration\r\n\r\n| entity HTML attribute | conditions | event.relatedTarget |\r\n| --- | --- | --- |\r\n| onmouseover | hovering in an entity's collision zone | `super-hands` entity |\r\n| onmouseout | leaving an entity's collision zone | `super-hands` entity |\r\n| onmousedown | grab started while collided with entity | `super-hands` entity |\r\n| onmouseup | grab ended while collided with entity | controller entity |\r\n| onclick | grab started and then ended while collided with entity | controller entity |\r\n| ondragstart | drag-drop started while collided with entity | controller entity |\r\n| ondragend | drag-drop started while collided with entity | controller entity |\r\n| ondragenter | hovering in an entity's collision zone while drag-dropping another entity | the other entity\\* |\r\n| ondragleave | leaving an entity's collision zone while drag-dropping another entity | the other entity\\* |\r\n| ondrop | drag-drop ended while holding an entity over a target | the other entity\\* |\r\n\r\nThe event passed to the handler will be a `MouseEvent`. At present the only property implemented\r\nis `relatedTarget`, which is set as\r\nlisted in the table. Drag-dropping events will be dispatched on both the entity being dragged and the drop target, and the `relatedTarget` property for each will point to the other entity in the interaction.\r\n\r\n#### a-locomotor primitive\r\n\r\nAdd freedom of movement by wrapping the player avatar in an `a-locomotor` primitive.\r\nUsers can then grab and move the world around themselves to navigate your WebVR experience\r\nin a way that is comfortable even for most people prone to simulation sickness.\r\n\r\nThe component works by enveloping the player in an invisible sphere that picks up\r\ngrabbing and stretching\r\ngestures made on empty space and translates those into\r\nmovement and scaling for player avatar.\r\nTo function, the player camera and controllers must be children of `a-locomotor`,\r\nand the controllers' colliders must be configured to collide with `a-locomotor`.\r\nOn initialization, `a-locomotor` will automatically re-parent the A-Frame\r\ndefault camera and add itself to the `objects` property of `sphere-collider`\r\n(see schema below if you want to disable this). With this automatic\r\nconfiguration,\r\nsetting up `a-locomotor` simply requires wrapping your controller\r\nentities like so:\r\n\r\n```html\r\n<a-locomotor>\r\n <a-entity hand-controls=\"left\" super-hands sphere-collider></a-entity>\r\n <a-entity hand-controls=\"right\" super-hands sphere-collider></a-entity>\r\n</a-locomotor>\r\n```\r\n\r\nBy default, `a-locomotor` gives the player the ability to move freely in the\r\nhorizontal plane and to scale up or down.\r\nBehavior can be customized by setting the attributes below on the `a-locomotor`\r\nentity.\r\n\r\n##### Primitive Attributes\r\n\r\n| Attribute | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| fetch-camera | Make the default camera a child of `a-locomotor` so it can be moved with the player | \"true\" |\r\n| add-to-colliders | Ensure `a-locomotor` is visible to child entity `sphere-collider` components | \"true\" |\r\n| allow-movement | Allow grabbing gestures to reposition the player | \"true\" |\r\n| horizontal-only | Restrict movement to the X-Z plane | \"true\" |\r\n| allow-scaling | Allow stretching gestures to rescale the player | \"true\" |\r\n\r\n##### Events\r\n\r\n| Type | Description | Target | Bubbles |\r\n| --- | --- | --- | --- |\r\n| 'locomotor-ready' | All auto-configuration steps complete | `a-locomotor` | yes |\r\n\r\n#### hoverable component\r\n\r\nUsed to indicate when the controller is within range to interact with an entity\r\nby adding the 'hovered' state. When using a mixin, including another mixin\r\nin the assets withe same id + '-hovered' will activate automatically, as in\r\n[the examples](https://wmurphyrd.github.io/aframe-super-hands-component/examples/).\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| hovered | Added to entity while it is collided with the controller |\r\n\r\n\r\n#### grabbable component\r\n\r\nMakes and entity move along with the controller while it is grabbed.\r\n\r\nThis works best with [aframe-physics-system](https://github.com/donmccurdy/aframe-physics-system)\r\nto manage grabbed entity movement, but it will fallback to manual `position` updates\r\n(without rotational translation) if physics is not available or is disabled with `usePhysics = never`.\r\n\r\nAllows for multiple hands to register a grab on an entity. In a non-physics setup, this has no effect\r\nother than allowing smooth passing of entities between hands. With physics enabled, additional grabbing\r\nhands register their own physics constraints to allow for two-handed wielding of entities. Limit or disable\r\nby setting the maxGrabbers schema property.\r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| usePhysics | Whether to use physics system constraints to handle movement, 'ifavailable', 'only', or 'never' | 'ifavailable' |\r\n| maxGrabbers | Limit number of hands that can grab entity simultaneously | NaN (no limit) |\r\n| invert | Reverse direction of entity movement compared to grabbing hand | false |\r\n| suppressY | Allow movement only in the horizontal plane | false |\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| grabbed | Added to entity while it is being carried |\r\n\r\n#### clickable component\r\n\r\nAn alternative version of `grabbable` that registers that a button was pressed, but does not\r\nmove the entity. Do not use `clickable` and `grabbable` on the same entity\r\n(just use `grabbable` and watch the \"grabbed\" state instead of \"clicked\")\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| clicked | Added to entity while a button is held down |\r\n\r\n#### stretchable component\r\n\r\nMakes and entity rescale while grabbed by both controllers as they are moved closer together or further apart.\r\n\r\n##### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| usePhysics | Whether to update physics body shapes with scale changes, 'ifavailable' or 'never' | 'ifavailable' |\r\n| invert | Reverse the direction of scaling in relation to controller movement | `false` |\r\n\r\nThere is no CANNON api method for updating physics body scale, but `stretchable` will manually rescale basic shapes. Currently rescalable shapes are: box.\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| stretched | Added to entity while it is grabbed with two hands |\r\n\r\n#### drag-droppable component\r\n\r\n`drag-droppable` is a shell component that only manages the 'dragover' state for the entity.\r\nThis can be combined with with a '-dragover' mixin to easily highlight when an entity is\r\nhovering in a drag-drop location.\r\n\r\nFor interactivity, use the global event handler integration,\r\nthe `event-set` from [kframe](http://github.com/ngokevin/kframe)\r\nwith the `drag-dropped` event, or create your own component.\r\n\r\n##### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| dragover | Added to while a carried entity is colliding with a a `drag-droppable` entity |\r\n\r\nAdd `drag-droppable` to both the carried entity and the receiving entity if you want both of them to\r\nreceive the dragover state.\r\n","url":"https://unpkg.com/super-hands@^1.0.0/README.md"},"https://unpkg.com/aframe-raytrace-component@^1.1.0/package.json":{"name":"aframe-raytrace-component","version":"1.1.0","description":"An A-Frame component for placing raytraced surfaces in a scene.","main":"index.js","cdn":"dist/aframe-raytrace-component.min.js","scripts":{"dev":"budo index.js:dist/aframe-raytrace-component.min.js --port 7000 --live --open","dist":"webpack index.js dist/aframe-raytrace-component.js && webpack -p index.js dist/aframe-raytrace-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","ghpages":"ghpages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/omgitsraven/aframe-raytrace-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","raytrace"],"author":"Andrew Fraticelli <andrew.fraticelli@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/omgitsraven/aframe-raytrace-component/issues"},"homepage":"https://github.com/omgitsraven/aframe-raytrace-component#readme","devDependencies":{"aframe":"*","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"globals":["AFRAME","THREE"],"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-raytrace-component@^1.1.0/README.md":{"text":"## aframe-raytrace-component\n\n[![Version](http://img.shields.io/npm/v/aframe-raytrace-component.svg?style=flat-square)](https://npmjs.org/package/aframe-raytrace-component)\n[![License](http://img.shields.io/npm/l/aframe-raytrace-component.svg?style=flat-square)](https://npmjs.org/package/aframe-raytrace-component)\n\nAn [A-Frame](https://aframe.io) component for placing raytraced surfaces in a scene.\n\n![blob](https://user-images.githubusercontent.com/8540042/30010500-267a6ea0-90fe-11e7-8a9c-8fb5295d1b9f.gif)\n\n### API\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| shader | ID of a shader in a script tag. | (none) |\n| transparent | Whether the result of the shader is alpha blended with what's behind it. | false |\n| backside | Whether the shader is drawn on the frontfaces or the backfaces of the mesh. | false |\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.6.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-raytrace-component/dist/aframe-raytrace-component.min.js\"></script>\n</head>\n\n<body>\n \n <script id=\"foo-fs\" type=\"x-shader/x-fragment\">\n uniform float time;\n uniform vec3 localCameraPos;\n varying vec3 localSurfacePos;\n \n void main(){\n vec3 localCameraDirection = normalize(localSurfacePos - localCameraPos);\n gl_FragColor = vec4(1.0,0.0,1.0,1.0);\n }\n </script>\n \n <a-scene>\n <a-box position=\"0 1.6 -2\" raytrace=\"shader:#foo-fs\"></a-box>\n </a-scene>\n \n</body>\n```\n\n<!-- If component is accepted to the Registry, uncomment this. -->\n<!--\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\nversion of the component straight into your HTML file, respective to your\nversion of A-Frame:\n-->\n<!--\n```sh\nangle install aframe-raytrace-component\n```\n-->\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-raytrace-component\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-raytrace-component');\n```","url":"https://unpkg.com/aframe-raytrace-component@^1.1.0/README.md"},"https://unpkg.com/super-hands@^2.0.0/package.json":{"name":"super-hands","version":"2.0.1","description":"All-in-one natural hand controller interaction component for A-Frame.","main":"index.js","scripts":{"build":"browserify examples/main.js -o examples/build.js -t [ babelify --presets [ es2015 ] ]","dev":"budo examples/main.js:build.js --dir examples --port 8000 --live --open","record":"budo machinima_tests/main.js:build.js --dir machinima_tests/scenes --port 8000 --live --open","dist":"webpack index.js dist/super-hands.js && webpack -p index.js dist/super-hands.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","preghpages":"npm run build && shx rm -rf gh-pages && shx mkdir gh-pages && shx cp -r examples/* gh-pages","ghpages":"npm run preghpages && ghpages -p gh-pages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome","test:ci":"TEST_ENV=ci karma start ./tests/karma.conf.js --single-run --browsers FirefoxNightly","test:machinima":"karma start ./machinima_tests/karma.conf.js"},"repository":{"type":"git","url":"git+https://github.com/wmurphyrd/aframe-super-hands-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","super-hands","controls","tracked-controls","hand-controls","grab","drag-drop","stretch"],"author":"William Murphy william@datatitian.com","license":"MIT","bugs":{"url":"https://github.com/wmurphyrd/aframe-super-hands-component/issues"},"homepage":"https://github.com/wmurphyrd/aframe-super-hands-component#readme","devDependencies":{"aframe":"^0.6.1","aframe-event-set-component":"^3.0.2","aframe-extras":"^3.11.4","aframe-motion-capture-components":"^0.1.6","aframe-physics-system":"^2.0.0","babel-loader":"^6.2.10","babelify":"^7.3.0","browserify":"^13.0.0","browserify-istanbul":"^2.0.0","budo":"^8.2.2","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.0","ghpages":"^0.0.8","istanbul":"^0.4.5","karma":"^1.4.0","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-html2js-preprocessor":"^1.1.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"^1.2.4","mocha":"^3.0.2","mozilla-download":"^1.1.1","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","sinon":"^1.17.5","sinon-chai":"^2.8.0","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/super-hands@^2.0.0/README.md":{"text":"# Super Hands\r\n\r\n[![Build Status](https://travis-ci.org/wmurphyrd/aframe-super-hands-component.svg?branch=master)](https://travis-ci.org/wmurphyrd/aframe-super-hands-component)\r\n[![npm Dowloads](https://img.shields.io/npm/dt/super-hands.svg?style=flat-square)](https://www.npmjs.com/package/super-hands)\r\n[![npm Version](http://img.shields.io/npm/v/super-hands.svg?style=flat-square)](https://www.npmjs.com/package/super-hands)\r\n[![js-semistandard-style](https://img.shields.io/badge/code%20style-semistandard-brightgreen.svg?style=flat-square)](https://github.com/Flet/semistandard)\r\n\r\nEffortlessly add natural, intuitive interactions with tracked controller,\r\ntouch, or mouse input in [A-Frame](https://aframe.io).\r\n\r\n![Demo Gif](readme_files/super-hands-demo.gif)\r\n\r\n![Super Hans Can't Make a Fist](readme_files/peep-show-super-hans.gif)\r\n\r\n## Description\r\n\r\nThe `super-hands` component interprets input from controls and\r\ncollision detection components\r\ninto interaction gestures and communicates those gestures to\r\ntarget entities for them to respond. \r\n\r\nThe currently implemented gestures are:\r\n\r\n* Hover: Holding a controller in the collision space of an entity\r\n* Grab: Pressing a button while hovering an entity, potentially also moving it\r\n* Stretch: Grabbing an entity with two hands and resizing\r\n* Drag-drop: Dragging an entity onto another entity\r\n\r\nFor an entity to respond to the `super-hands` gestures, it needs to have\r\ncomponents attached to translate the gestures into actions. `super-hands`\r\nincludes components for typical reactions to the implemented gestures:\r\n`hoverable`, `clickable`, `grabbable`, `stretchable`, and `drag-droppable`.\r\n\r\n**Universal Progressive Controls**: The `progressive-controls` component\r\nprovides consistent interactivity on any viewer from desktop to full\r\n6-DOF virtual reality by auto-detecting viewer capabilities.\r\n\r\n**Avatar Locomotion**: Inspired by a demo from [@caseyyee](https://github.com/caseyyee), the `super-hands`\r\ngrab and stretch gestures can also serve as a comfortable locomotion system\r\nby moving and scaling the world around the player. Use the `a-locomotor` primitive\r\nto provide intuitive freedom of motion in your WebVR experiences.\r\n\r\nReadme contents:\r\n\r\n* [Examples](#examples)\r\n* [Installation](#installation)\r\n * [HTML usage](#browser)\r\n * [News](#news)\r\n * [Compatibility](#compatibility)\r\n* [Core, primitives, and meta-components](#core-primitives-and-meta-components)\r\n * [`super-hands` gesture interpretation component](#super-hands-component)\r\n * [`progressive-controls` universal controller component](#progressive-controls-component)\r\n * ['a-locomotor' free movement primitive](#a-locomotor-primitive)\r\n* [Reaction components](#reaction-components)\r\n * [`hoverable`](#hoverable-component)\r\n * [`grabbable`](#grabbable-component)\r\n * [`clickable`](#clickable-component)\r\n * [`stretchable`](#stretchable-component)\r\n * ['drag-droppable'](#drag-droppable-component)\r\n* [Customizing interactivity](#customizing-interactivity)\r\n\r\n## Examples\r\n\r\nThe [examples page](https://wmurphyrd.github.io/aframe-super-hands-component/examples/) showcases a variety of configurations and use cases for `super-hands`.\r\n\r\n| Example Scene | Description | Target VR Devices | MoCap preview |\r\n| --- | --- | --- | --- |\r\n| [Progressive controls with physics](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#physics) | Grab, stretch, and drag-drop cubes with simulated physical behavior on any VR platform | Desktop, mobile, cardboard, Gear VR, Daydream, Vive, Rift | Yes |\r\n| [Gaze and laser pointer controls without physics](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#mouse) | Showcase fallback controls used for simpler VR devices and fallback interactivity without physics simulation | Desktop, mobile, cardboard, Gear VR, Daydream, Vive, Rift | Yes |\r\n| [Global Event Handler integration](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#events) | An alternative way to customize interactions using familiar HTML event handler properties like `onclick` | Desktop, mobile, cardboard, Gear VR, Daydream, Vive, Rift | Yes |\r\n| [Link Portals](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#portals) | Travel the metaverse with A-Frame link portals | Desktop, mobile, cardboard, Gear VR, Daydream, Vive, Rift | No |\r\n| [Grab-based locomotion](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#locomotion) | Explore a scene by dragging or stretching the world around you | Vive, Rift | Yes |\r\n| [Custom button mapping](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#sticky) | Configuring schema properties to change button functions | Vive, Rift | No |\r\n\r\n## Installation\r\n\r\n### Browser\r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>Most Basic Super-Hands Example</title>\r\n <script src=\"https://aframe.io/releases/0.6.1/aframe.min.js\"></script>\r\n <script src=\"//cdn.rawgit.com/donmccurdy/aframe-extras/v3.11.4/dist/aframe-extras.min.js\"></script>\r\n <script src=\"https://unpkg.com/super-hands@2.0.1/dist/super-hands.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <a-assets></a-assets>\r\n <a-entity progressive-controls=\"objects: a-box\"></a-entity>\r\n <!-- hover & drag-drop won't have any obvious effect without some additional event handlers or components. See the examples page for more -->\r\n <a-box hoverable grabbable stretchable drag-droppable\r\n color=\"blue\" position=\"0 0 -1\"></a-box>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n### npm\r\n\r\nInstall via npm:\r\n\r\n```bash\r\nnpm install super-hands\r\n```\r\n\r\nThen require and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('super-hands');\r\n```\r\n### News\r\n\r\nv2.0.1\r\n\r\n* Bug fixes:\r\n * `'mouseup'` now fires correctly on target entities\r\n * Fixed lingering hover when `progressive-controls` advances from gaze mode\r\n * Fixed lingering hovers when `progressive-controls` in point mode\r\n * Fixed some new files being excluded from babelify & breaking uglify\r\n\r\nv2.0.0\r\n\r\n* Consistent experience across devices: `super-hands` now provides interactivity\r\n for all levels of VR controls: desktop mouse, mobile touch (\"magic window\"),\r\n cardboard button,\r\n 3DOF (GearVR and Daydram), and 6DOF (Vive and Oculus Touch)\r\n * `progressive-controls` meta-component to automatically setup interactive\r\n controls on **any** device from desktop to Vive\r\n * Upgraded `grabbable` reaction component.\r\n * Now works with pointing and moving at a distance, e.g. with\r\n 3DOF controllers and `laser-controls`, using controller orientation\r\n and position to move grabbed entities\r\n* Button mapping for reaction components: each reaction component now has\r\n `startButtons` and `endButtons` schema properties to specify acceptable\r\n buttons. This allows different entities to react to different buttons.\r\n [For example](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#sticky)\r\n `a-locomotor`'s `grabbable` can be set to respond to different\r\n buttons than other `grabbable` entities so that\r\n grabbing entities and locomotion are separate gestures for the user.\r\n* `a-locomotor` now functions independently from colliders;\r\n removed `add-to-colliders` attribute.\r\n* Performance improvements in `grabbable` and `stretchable`\r\n* Gesture initiation changed to occur only on button press rather than\r\n button press and collision. Pressing a button in empty space and then\r\n moving into an object will no long scoop it up in a grab.\r\n\r\n[Previous news](news.md)\r\n\r\n### Known Issues\r\n\r\n* When both hands are hovering an entity and one leaves, the entity will lose\r\n the hover state for one tick\r\n * Related to messaging from `sphere-collider`; unable to distinguish which\r\n collider instance is signaling the collision termination.\r\n* Two-handed physics grabs don't feel great\r\n * Someone that knows something about game dev could be smarter about the\r\n constraints\r\n\r\n### Compatibility\r\n\r\nWith `progressive-controls`, `super-hands` can provide interactive controls\r\nfor any device: desktop, mobile (\"magic window\"), cardboard viewer + button,\r\nDaydream, GearVR, Vive, and Rift + Touch.\r\n\r\n`super-hands` dependency version compatibility:\r\n\r\n| super-hands Version | A-Frame Version | aframe-extras Version | aframe-physics-system Version |\r\n| --- | --- | --- | --- |\r\n| ^v2.0.0 | v0.6.x | ^v3.11.4 | ^v2.0.0 |\r\n| v1.1.0 | v0.6.x | v3.8.6 | v1.4.2 |\r\n| v1.0.0 | v0.5.x | v3.8.5 | v1.4.1 |\r\n| v0.2.4 | v0.4.x | v3.7.0 | v1.3.0 |\r\n\r\n## Core, primitives, and meta-components\r\n\r\n### super-hands component\r\n\r\nThe `super-hands` component is the core of the library.\r\nIt communicates gesture events to entities based on\r\nuser-input and entity collisions. The component is generally placed on\r\nthe controller entities (or the camera for gaze interaction) and depends on\r\na collision detection component (e.g. `cursor` or [aframe-extras sphere-collider](https://github.com/donmccurdy/aframe-extras/blob/master/src/misc))\r\nwhich needs to be placed on the same entity or a child entity of `super-hands`.\r\n\r\n#### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| colliderState | Name of state added to entities by your chosen collider | `'collided'` (default for `sphere-collider`) |\r\n| colliderEvent | Event that your chosen collider emits when identifying a new collision | `'hit'` (default for `sphere-collider` and `physics-collider`) |\r\n| colliderEventProperty | Name of property in event `details` object which contains the collided entity | `'el'` |\r\n| colliderEndEvent | Event that your chosen collider emits when a collision ends | `''` |\r\n| colliderEndEventProperty | Name of property in event `details` object which contains the un-collided entity | `''` |\r\n| grabStartButtons | Array of button event types that can initiate grab | Button press, touch start, and mouse down events |\r\n| grabEndButtons | Array of button event types that can terminate grab | Button release, touch end, and mouse up events |\r\n| stretchStartButtons | Array of button event types that can initiate stretch | Button press, touch start, and mouse down events |\r\n| stretchEndButtons | Array of button event types that can terminate stretch | Button release, touch end, and mouse up events |\r\n| dragDropStartButtons | Array of button event types that can initiate dragging/hovering | Button press, touch start, and mouse down events |\r\n| dragDropEndButtons | Array of button event types that can execute drag-drop | Button release, touch end, and mouse up events |\r\n\r\nDefault button events include specific events for `vive-controls`,\r\n`hand-controls`, `oculus-touch-controls`, `daydream-controls`,\r\n`gearvr-controls`, mouse, and touch. For detecting when collisions end,\r\neither `colliderState` or `colliderEndEvent`/`colliderEndEventProperty` can be\r\nused, depending on the API of the collider in use.\r\n\r\n#### Gesture Events\r\n\r\nEvents will be emitted by the entity being interacted with.\r\nThe entity that `super-hands` is attached to is sent in the event `details` as the property `hand`.\r\n\r\n| Type | Description | Target | details object |\r\n| --- | --- | --- | --- |\r\n| hover-start | Collided with entity | collided entity | hand: `super-hands` entity |\r\n| hover-end | No longer collided with entity | collided entity | hand: `super-hands` entity |\r\n| grab-start | Button pressed while collided with entity and hand is empty | collided entity | hand: `super-hands` entity |\r\n| grab-end | Button released after grab-start | collided entity | hand: `super-hands` entity |\r\n| stretch-start | Both controllers have button pressed while collided with entity | collided entity | hand: `super-hands` entity, secondHand: second controller entity |\r\n| stretch-end | Release of button after stretch-start | collided entity | hand: `super-hands` entity |\r\n| drag-start | Drag-drop button pressed while collided with entity and hand is empty | collided entity | hand: `super-hands` entity |\r\n| drag-end | Drag-drop button released while dragging an entity | dragged entity | hand: `super-hands` entity |\r\n| dragover-start | Collision with entity while dragging another entity | collided entity & held entity | hand: `super-hands` entity, hovered: collided entity, carried: held entity |\r\n| dragover-end | No longer collided with entity from dragover-start | collided entity & held entity | hand: `super-hands` entity, hovered: collided entity, carried: held entity |\r\n| drag-drop | Button released while holding an entity and collided with another | collided entity & held entity | hand: `super-hands` entity, dropped: carried entity, on (carried entity only): receiving entity |\r\n\r\nNotes:\r\n\r\n* References to buttons being \"released\" and \"pressed\" are dependent on the schema settings.\r\n* Only one entity at a time will be targeted for each event type,\r\neven if multiple overlapping collision zones exist. `super-hands` tracks a\r\nLIFO stack of collided entities to determine which will be affected.\r\n* drag-drop: For the receiving entity, `on` entry in the details is `null`.\r\nIf needed, use `event.target` instead.\r\n* For events triggered by buttons, the triggering button event is passed\r\n along in `details.buttonEvent`\r\n\r\n#### Global Event Handler Integration\r\n\r\nIn addition to the A-Frame style gesture events,\r\n`super-hands` also causes standard HTML events analogous to VR\r\ninteractions to be emitted by the target entities. This allows the use of these\r\ncommon Global Event Handler properties on entities to add reaction directly\r\nin the HTML. View the\r\n[related example](https://wmurphyrd.github.io/aframe-super-hands-component/examples/#events)\r\nto see this in use.\r\n\r\n| entity HTML attribute | conditions | event.relatedTarget |\r\n| --- | --- | --- |\r\n| onmouseover | hovering in an entity's collision zone | `super-hands` entity |\r\n| onmouseout | leaving an entity's collision zone | `super-hands` entity |\r\n| onmousedown | grab started while collided with entity | `super-hands` entity |\r\n| onmouseup | grab ended while collided with entity | controller entity |\r\n| onclick | grab started and then ended while collided with entity | controller entity |\r\n| ondragstart | drag-drop started while collided with entity | controller entity |\r\n| ondragend | drag-drop started while collided with entity | controller entity |\r\n| ondragenter | hovering in an entity's collision zone while drag-dropping another entity | the other entity\\* |\r\n| ondragleave | leaving an entity's collision zone while drag-dropping another entity | the other entity\\* |\r\n| ondrop | drag-drop ended while holding an entity over a target | the other entity\\* |\r\n\r\nThe event passed to the handler will be a `MouseEvent`. At present the only property implemented\r\nis `relatedTarget`, which is set as\r\nlisted in the table. Drag-dropping events will be dispatched on both the entity being dragged and the drop target, and the `relatedTarget` property for each will point to the other entity in the interaction.\r\n\r\n### progressive-controls component\r\n\r\nThe `progressive-controls` component makes it easy to design an interactive\r\nA-Frame scene that will work on any device. It automatically detects the viewing\r\ndevice, creates appropriate controller entities, and configures `super-hands`\r\nto work with the device. It is progressive because the degree of interactivity\r\nincreases from gaze-based cursors (desktop, mobile, cardboard), to laser pointer\r\ncontrols (GearVR, Daydream), to natural hand interaction (Vive, Oculus).\r\n\r\n#### Usage\r\n\r\nAdd `progressive-controls` to an entity, and it will create appropriate\r\ncontroller and camera entities as children automatically.\r\n\r\n```html\r\n<a-entity progressive-controls></a-entity>\r\n```\r\n\r\nTo add additional properties or override defaults, specify the entities\r\nyou want to modify as children of the `progressive-controls` entity, following\r\nthe pattern below. Controllers must be given\r\nclass names `'right-controller'` and `'left-controller'` to help\r\n`progressive-controls` identify them.\r\n\r\n```html\r\n<a-entity progressive-controls>\r\n <a-camera super-hands>\r\n <a-entity raycaster></a-entity>\r\n </a-camera>\r\n <a-entity class=\"right-controller\" super-hands></a-entity>\r\n <a-entity class=\"left-controller\" super-hands></a-entity>\r\n</a-entity>\r\n```\r\n\r\n#### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| maxLevel | Limit the highest interactivity level that will be activated: `'gaze'`, `'point'`, or `'touch'`. | `'touch'` |\r\n| objects | CSS selector string to be used by any automatically generated collision detectors | `''` (all entities) |\r\n| physicsBody | Properties to use when adding `static-body` to automatically generated controllers. Ignored if physics not added to the scene. | 'shape: sphere; sphereRadius: 0.02' |\r\n| touchCollider | Name of collider component to use with touch-level controls | 'sphere-collider' |\r\n\r\n#### Events\r\n\r\n| Type | Description | details object |\r\n| --- | --- | --- |\r\n|'controller-progressed' | The detected controller type has changed | `level`: new control type, : `'gaze'`, `'point'`, or `'touch'` |\r\n\r\n\r\n### a-locomotor primitive\r\n\r\nAdd freedom of movement by wrapping the player avatar in an `a-locomotor`\r\nprimitive.\r\nUsers can then grab and move the world around themselves to navigate your\r\nWebVR experience\r\nin a way that is comfortable even for most people prone to simulation sickness.\r\n\r\nThe component works by wrapping the player in an entity that responds to\r\ngrabbing and stretching\r\ngestures made on empty space and translates those into\r\nmovement and scaling for player avatar.\r\nTo function, the player camera and controllers must be children\r\nof `a-locomotor`.\r\nOn initialization, `a-locomotor` will automatically set the default camera\r\nas a child unless it has been declared elsewhere\r\n(see schema below if you want to disable this), so\r\nsetting up `a-locomotor` simply requires wrapping your controller\r\nentities like so:\r\n\r\n```html\r\n<a-locomotor>\r\n <a-entity hand-controls=\"left\" super-hands></a-entity>\r\n <a-entity hand-controls=\"right\" super-hands></a-entity>\r\n</a-locomotor>\r\n```\r\n\r\n`a-locomotor` does not require a collision detection component to function, so,\r\nif the only `super-hands` functionality you need is locomotion, you do\r\nnot need to include `sphere-collider` components on your controllers\r\n(as in the above example).\r\nBy default, `a-locomotor` gives the player the ability to move freely in the\r\nhorizontal plane and to scale up or down.\r\nBehavior can be customized by setting the attributes below on the `a-locomotor`\r\nentity.\r\n\r\n#### Primitive Attributes\r\n\r\n| Attribute | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| fetch-camera | Make the default camera a child of `a-locomotor` so it can be moved with the player | `true` |\r\n| allow-movement | Allow grabbing gestures to reposition the player | `true` |\r\n| horizontal-only | Restrict movement to the X-Z plane | `true` |\r\n| allow-scaling | Allow stretching gestures to rescale the player | `true` |\r\n\r\n#### Events\r\n\r\n| Type | Description | Target | Bubbles |\r\n| --- | --- | --- | --- |\r\n| 'locomotor-ready' | All auto-configuration steps complete | `a-locomotor` | yes |\r\n\r\n## Reaction Components\r\n\r\nAdd these components to entities in your scene to make them react to\r\nsuper-hands gestures.\r\n\r\n### hoverable component\r\n\r\nUsed to indicate when the controller is within range to interact with an entity\r\nby adding the 'hovered' state. When using a mixin, including another mixin\r\nin the assets withe same id + '-hovered' will activate automatically, as in\r\n[the examples](https://wmurphyrd.github.io/aframe-super-hands-component/examples/).\r\n\r\n#### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| hovered | Added to entity while it is collided with the controller |\r\n\r\n\r\n### grabbable component\r\n\r\nMakes and entity move along with the controller's movement and rotation\r\nwhile it is grabbed. `grabbable` works with\r\nup-close grabbing (6DOF controllers like Vive and Oculus Touch\r\nwith `hand-controls` and `sphere-collider`)\r\nand with pointing at a distance (3DOF controllers like GearVR and Daydream\r\nwith `laser-controls`).\r\n\r\nThis works best with [aframe-physics-system](https://github.com/donmccurdy/aframe-physics-system)\r\nto manage grabbed entity movement including position and rotation,\r\nbut it will fallback to manual `position` updates\r\n(without rotation) if physics is not available\r\nor is disabled with `usePhysics = never`.\r\n\r\nAllows for multiple hands to register a grab on an entity.\r\nIn a non-physics setup, this has no effect\r\nother than allowing smooth passing of entities between hands.\r\nWith physics enabled, additional grabbing\r\nhands register their own physics constraints to allow for\r\ntwo-handed wielding of entities. Limit or disable this\r\nby setting the maxGrabbers schema property.\r\n\r\n#### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| startButtons | Which button events to accept to start grab | `[]` |\r\n| endButtons | Which button events to accept to end grab | `[]` |\r\n| usePhysics | Whether to use physics system constraints to handle movement, 'ifavailable', 'only', or 'never' | 'ifavailable' |\r\n| maxGrabbers | Limit number of hands that can grab entity simultaneously | NaN (no limit) |\r\n| invert | Reverse direction of entity movement compared to grabbing hand | false |\r\n| suppressY | Allow movement only in the horizontal plane | false |\r\n\r\nThe default for `startButtons` and `endButtons` is to accept any button\r\nrecognized by `super-hands` `grabStartButtons` and `grabDropEndButtons`.\r\n\r\n#### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| grabbed | Added to entity while it is being carried |\r\n\r\n### clickable component\r\n\r\nAn alternative version of `grabbable` that registers that a button was pressed, but does not\r\nmove the entity. Do not use `clickable` and `grabbable` on the same entity\r\n(just use `grabbable` and watch the \"grabbed\" state instead of \"clicked\")\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| startButtons | Which button events to accept to start grab | `[]` |\r\n| endButtons | Which button events to accept to end grab | `[]` |\r\n\r\nThe default for `startButtons` and `endButtons` is to accept any button\r\nrecognized by `super-hands` `grabStartButtons` and `grabDropEndButtons`.\r\n\r\n#### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| clicked | Added to entity while a button is held down |\r\n\r\n\r\n### stretchable component\r\n\r\nMakes and entity rescale while grabbed by both controllers as they are moved closer together or further apart.\r\n\r\n#### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| startButtons | Which button events to accept to start stretch | `[]` |\r\n| endButtons | Which button events to accept to end stretch | `[]` |\r\n| usePhysics | Whether to update physics body shapes with scale changes, 'ifavailable' or 'never' | 'ifavailable' |\r\n| invert | Reverse the direction of scaling in relation to controller movement | `false` |\r\n\r\nThe default for `startButtons` and `endButtons` is to accept any button\r\nrecognized by `super-hands` `stretchStartButtons` and `stretchEndButtons`.\r\n\r\nThere is no CANNON api method for updating physics body scale, but `stretchable` will manually rescale basic shapes. Currently rescalable shapes are: box and sphere.\r\n\r\n#### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| stretched | Added to entity while it is grabbed with two hands |\r\n\r\n### drag-droppable component\r\n\r\n`drag-droppable` is a shell component that only manages the 'dragover' state for the entity.\r\nThis can be combined with with a '-dragover' mixin to easily highlight when an entity is\r\nhovering in a drag-drop location.\r\n\r\nFor interactivity, use the global event handler integration,\r\nthe `event-set` from [kframe](http://github.com/ngokevin/kframe)\r\nwith the `drag-dropped` event, or create your own component.\r\n\r\n#### Component Schema\r\n\r\n| Property | Description | Default Value |\r\n| -------- | ----------- | ------------- |\r\n| startButtons | Which button events to accept to start drag | `[]` |\r\n| endButtons | Which button events to accept to end drag | `[]` |\r\n\r\nThe default for `startButtons` and `endButtons` is to accept any button\r\nrecognized by `super-hands` `dragDropStartButtons` and `dragDropEndButtons`.\r\n\r\n#### States\r\n\r\n| Name | Description |\r\n| --- | --- |\r\n| dragover | Added to while a carried entity is colliding with a a `drag-droppable` entity |\r\n\r\nAdd `drag-droppable` to both the carried entity and the receiving entity if you want both of them to\r\nreceive the dragover state.\r\n\r\n## Customizing interactivity\r\n\r\n### Gesture and Response Concept\r\n\r\n![Separation of Gesture and Response API](readme_files/super-hands-api.png)\r\n\r\nSeparating the reaction to be the responsibility of the entity affected allows for extensibility.\r\nIn response to a grab, you may want some entities to lock to the controller and move,\r\nothers to rotate around a fixed point, and others still to spawn a new entity but remain unchanged.\r\nWith this API schema, these options can be handled by adding or creating different reaction\r\ncomponents to the entities in your scene, and `super-hands` can work with all of them.\r\n\r\n### Interactivity\r\n\r\nThere are two pathways to adding additional interactivity.\r\n\r\n1. A-Frame style: Each component's API documentation describes the A-Frame\r\ncustom events and states it uses.\r\nThese are best processed by creating new A-Frame components that register\r\nevent listeners and react accordingly.\r\n1. HTML style: The `super-hands` component also integrates with the\r\nGlobal Event Handlers Web API to trigger standard mouse events analogous\r\nto the VR interactions that can easily be handled through\r\nproperties like `onclick`.\r\n","url":"https://unpkg.com/super-hands@^2.0.0/README.md"},"https://unpkg.com/aframe-forcegraph-component@^1.1.0/package.json":{"name":"aframe-forcegraph-component","version":"1.6.9","description":"A 3D Force-Directed Graph component for A-Frame.","main":"index.js","cdn":"dist/aframe-forcegraph-component.min.js","scripts":{"dev":"budo index.js:dist/aframe-forcegraph-component.min.js --port 7000 --live --open","dist":"webpack index.js dist/aframe-forcegraph-component.js && webpack -p index.js dist/aframe-forcegraph-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","ghpages":"ghpages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/vasturiano/aframe-forcegraph-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","3d","force","graph","forcegraph","d3"],"author":{"name":"Vasco Asturiano <vastur@gmail.com>","url":"http://bl.ocks.org/vasturiano"},"license":"MIT","bugs":{"url":"https://github.com/vasturiano/aframe-forcegraph-component/issues"},"homepage":"https://github.com/vasturiano/aframe-forcegraph-component#readme","dependencies":{"d3-binarytree":"^0.1","d3-force-3d":"^1.0","d3-octree":"^0.1","ngraph.forcelayout":"~0.1.2","ngraph.forcelayout3d":"~0.0.16","ngraph.graph":"~0.0.12","qwest":"^4.4"},"devDependencies":{"browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^2.1.0","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-forcegraph-component@^1.1.0/README.md":{"text":"## aframe-forcegraph-component\n\n[![Version](http://img.shields.io/npm/v/aframe-forcegraph-component.svg?style=flat-square)](https://npmjs.org/package/aframe-forcegraph-component)\n[![License](http://img.shields.io/npm/l/aframe-forcegraph-component.svg?style=flat-square)](https://npmjs.org/package/aframe-forcegraph-component)\n\nA 3D Force-Directed Graph component for [A-Frame](https://aframe.io).\n\n<p align=\"center\">\n <img width=\"80%\" src=\"https://vasturiano.github.io/aframe-forcegraph-component/examples/large-graph/preview.png\"></a>\n</p>\n\nAn A-Frame entity component to represent a graph data structure in a VR environment using a force-directed iterative layout.\nUses [d3-force-3d](https://github.com/vasturiano/d3-force-3d) for the layout physics engine.\n\nSee also the [standalone VR component version](https://github.com/vasturiano/3d-force-graph-vr).\n\n### API\n\n| Property | Description | Default Value |\n| ------------------ | -------------------------------------------------------------------------------------------------------------------------- | ------------- |\n| json-url | URL of JSON file to load graph data directly from. Will override content of the *nodes* and *links* component properties so either use one or the other. JSON should contain an object with two list properties: *nodes* and *links* | |\n| nodes | List of node objects. *Example*: ```[{\"id\": 1, \"name\": \"first\"}, {\"id\": 2, \"name\": \"second\"}]``` | [] |\n| links | List of link objects. *Example*: ```[{\"source\": 1, \"target\": 2}]``` | [] |\n| num-dimensions | Number of dimensions to run the force simulation on (1, 2 or 3) | 3 |\n| node-rel-size | Node sphere volume per val unit | 4 |\n| line-opacity | Opacity of links | 0.2 |\n| auto-color-by | Node field to automatically group colors by (if the node doesn't already have a color property set) | |\n| id-field | Node object field name referring to unique node id (used in link objects source/target) | id |\n| val-field | Node object field name referring to node value (affects sphere volume) | val |\n| name-field | Node object field name referring to node name (shown in label) | name |\n| color-field | Node object field name referring to node value (affects sphere color) | color |\n| link-source-field | Link object field name referring to id of source node | source |\n| link-target-field | Link object field name referring to id of target node | target |\n| force-engine | Which force-simulation engine to use ([*d3*](https://github.com/vasturiano/d3-force-3d) or [*ngraph*](https://github.com/anvaka/ngraph.forcelayout)) | d3 |\n| warmup-ticks | How many times to tick the force simulation engine at ignition before starting to render | 0 |\n| cooldown-ticks | How many times to tick the force simulation engine after rendering begins before stopping and freezing the engine | Infinity |\n| cooldown-time | How much time (ms) to tick the force simulation engine for after rendering begins before stopping and freezing the engine | 15000 |\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-forcegraph-component/dist/aframe-forcegraph-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity forcegraph=\"json-url: myGraphData.json\"></a-entity>\n </a-scene>\n</body>\n```\n\n<!-- If component is accepted to the Registry, uncomment this. -->\n<!--\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\nversion of the component straight into your HTML file, respective to your\nversion of A-Frame:\n\n```sh\nangle install aframe-forcegraph-component\n```\n-->\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-forcegraph-component\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-forcegraph-component');\n```\n","url":"https://unpkg.com/aframe-forcegraph-component@^1.1.0/README.md"},"https://unpkg.com/aframe-gaze-control-component@^1.0.x/package.json":{"name":"aframe-gaze-control-component","version":"1.0.0","description":"Look control that interprets gaze data as input.","main":"index.js","cdn":"dist/aframe-gaze-control-component.min.js","scripts":{"dev":"budo index.js:dist/aframe-gaze-control-component.min.js --port 7000 --ssl --live --open","dist":"webpack index.js dist/aframe-gaze-control-component.js && webpack -p index.js dist/aframe-gaze-control-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","ghpages":"ghpages","start":"npm run dev"},"repository":{"type":"git","url":"git+https://github.com/jsimonson2013/aframe-gaze-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","gaze-control"],"author":"jsimonson2013@gmail.com","license":"MIT","bugs":{"url":"https://github.com/jsimonson2013/aframe-gaze-component/issues"},"homepage":"https://github.com/jsimonson2013/aframe-gaze-component#readme","devDependencies":{"browserify":"^13.0.0","budo":"^8.2.2","ghpages":"^0.0.8","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","shx":"^0.1.1","snazzy":"^4.0.0","webgazer":"git+https://git@github.com/brownhci/WebGazer.git","webpack":"^1.13.0"},"semistandard":{"globals":["AFRAME","THREE"],"ignore":["examples/build.js"]}},"https://unpkg.com/aframe-gaze-control-component@^1.0.x/README.md":{"text":"## aframe-gaze-control-component\r\n\r\n[![Version](http://img.shields.io/npm/v/aframe-gaze-control-component.svg?style=flat-square)](https://npmjs.org/package/aframe-gaze-control-component)\r\n[![License](http://img.shields.io/npm/l/aframe-gaze-control-component.svg?style=flat-square)](https://npmjs.org/package/aframe-gaze-control-component)\r\n\r\nLook control that interprets gaze data as input.\r\n\r\n### Usage\r\n\r\nUsage requires Node.JS as well as Firefox.\r\n\r\n* clone the repository: `git clone https://github.com/jsimonson2013/aframe-gaze-component.git`\r\n* navigate to the root: `cd aframe-gaze-component`\r\n* install packages: `npm install`\r\n* run the application: `npm run start`\r\n\r\nFor [A-Frame](https://aframe.io).\r\n\r\n### API\r\n\r\nCreate an event\r\n```\r\nvar event = new CustomEvent('gazemove', {\r\n detail: {\r\n 'x': gaze_x,\r\n 'y': gaze_y,\r\n },\r\n bubbles: true,\r\n cancelable: true\r\n});\r\nevent.initEvent('gazemove', true, true);\r\n```\r\n\r\nThen dispatch to `sceneEl.canvas` every time the gaze moves\r\n```\r\nif(data != null){\r\n event.detail.x = data.x;\r\n event.detail.y = data.y;\r\n canvasEl.dispatchEvent(event);\r\n}\r\n```\r\n\r\n### Installation\r\n\r\n#### Browser\r\n\r\nInstall and use by directly including the [browser files](dist):\r\n\r\n```html\r\n<head>\r\n <title>My A-Frame Scene</title>\r\n <script src=\"https://aframe.io/releases/0.5.0/aframe.min.js\"></script>\r\n <script src=\"https://unpkg.com/aframe-gaze-control-component/dist/aframe-gaze-control-component.min.js\"></script>\r\n</head>\r\n\r\n<body>\r\n <a-scene>\r\n <a-entity gaze-control=\"\"></a-entity>\r\n </a-scene>\r\n</body>\r\n```\r\n\r\n<!-- If component is accepted to the Registry, uncomment this. -->\r\n<!--\r\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\r\nversion of the component straight into your HTML file, respective to your\r\nversion of A-Frame:\r\n\r\n```sh\r\nangle install aframe-gaze-control-component\r\n```\r\n-->\r\n#### npm\r\n\r\nInstall via npm:\r\n\r\n```bash\r\nnpm install aframe-gaze-control-component\r\n```\r\n\r\nThen require and use.\r\n\r\n```js\r\nrequire('aframe');\r\nrequire('aframe-gaze-control-component');\r\n```\r\n\r\n### Example\r\n\r\nA live example can be found [here](http://jacobsimonson.me:7000).\r\n","url":"https://unpkg.com/aframe-gaze-control-component@^1.0.x/README.md"},"https://unpkg.com/aframe-room-component@^0.1.0/package.json":{"name":"aframe-room-component","version":"0.1.0","description":"An A-Frame component for quickly creating rooms connected by doors.","main":"index.js","cdn":"dist/aframe-room-component.min.js","scripts":{"dev":"budo index.js:dist/aframe-room-component.min.js --port 7000 --live --open","dist":"webpack index.js dist/aframe-room-component.js && webpack -p index.js dist/aframe-room-component.min.js","lint":"semistandard -v | snazzy","prepublish":"npm run dist","ghpages":"ghpages","start":"npm run dev","test":"karma start ./tests/karma.conf.js","test:firefox":"karma start ./tests/karma.conf.js --browsers Firefox","test:chrome":"karma start ./tests/karma.conf.js --browsers Chrome"},"repository":{"type":"git","url":"git+https://github.com/omgitsraven/aframe-room-component.git"},"keywords":["aframe","aframe-component","aframe-vr","vr","mozvr","webvr","room"],"author":"Andrew Fraticelli <andrew.fraticelli@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/omgitsraven/aframe-room-component/issues"},"homepage":"https://github.com/omgitsraven/aframe-room-component#readme","devDependencies":{"aframe":"*","browserify":"^13.0.0","budo":"^8.2.2","chai":"^3.4.1","chai-shallow-deep-equal":"^1.3.0","ghpages":"^0.0.8","karma":"^0.13.15","karma-browserify":"^4.4.2","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"2.0.0","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-mocha-reporter":"^1.1.3","karma-sinon-chai":"^1.1.0","mocha":"^2.3.4","randomcolor":"^0.4.4","semistandard":"^8.0.0","shelljs":"^0.7.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","shx":"^0.1.1","snazzy":"^4.0.0","webpack":"^1.13.0"},"semistandard":{"globals":["AFRAME","THREE"],"ignore":["examples/build.js","dist/**"]}},"https://unpkg.com/aframe-room-component@^0.1.0/README.md":{"text":"## aframe-room-component\n\n[![Version](http://img.shields.io/npm/v/aframe-room-component.svg?style=flat-square)](https://npmjs.org/package/aframe-room-component)\n[![License](http://img.shields.io/npm/l/aframe-room-component.svg?style=flat-square)](https://npmjs.org/package/aframe-room-component)\n\nA set of [A-Frame](https://aframe.io) components for quickly creating rooms connected by doors.\n\n### Installation\n\n#### Browser\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.6.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-room-component/dist/aframe-room-component.min.js\"></script>\n</head>\n\n<body>\n\t<a-scene>\n\t\t<rw-room position=\"-2 0 -2\" material=\"color:#866\">\n\t\t\t<rw-wall position=\"4 0 0\"></rw-wall>\n\t\t\t<rw-wall position=\"4 0 4\"></rw-wall>\n\t\t\t<rw-wall position=\"0 0 4\"></rw-wall>\n\t\t\t<rw-wall position=\"0 0 0\">\n\t\t \t\t<rw-doorhole id=\"holeA\"></rw-doorhole>\n\t\t \t\t<rw-doorlink from=\"#holeA\" to=\"#holeB\" position=\"2.5 0 0\"></rw-doorlink>\n\t\t\t</rw-wall>\n\t\t</rw-room>\n\t\t<rw-room position=\"0 0 -3\">\n\t\t\t<rw-wall position=\" 1 0 -1\" material=\"color:#787\"></rw-wall>\n\t\t\t<rw-wall position=\" 1 0 1\" material=\"color:#877\">\n\t\t\t\t<rw-doorhole id=\"holeB\"></rw-doorhole>\n\t\t\t</rw-wall>\n\t\t\t<rw-wall position=\"-1 0 1\" material=\"color:#878\"></rw-wall>\n\t\t\t<rw-wall position=\"-1 0 -1\" material=\"color:#778\"></rw-wall>\n\t\t</rw-room>\n\t</a-scene>\n</body>\n```\n\n<!-- If component is accepted to the Registry, uncomment this. -->\n<!--\nOr with [angle](https://npmjs.com/package/angle/), you can install the proper\nversion of the component straight into your HTML file, respective to your\nversion of A-Frame:\n```sh\nangle install aframe-room-component\n```\n-->\n\n#### npm\n\nInstall via npm:\n\n```bash\nnpm install aframe-room-component\n```\n\nThen require and use.\n\n```js\nrequire('aframe');\nrequire('aframe-room-component');\n```\n\n### Usage\n\n#### Overview\n\nThis is set of primitives (also usable as components) that can be used to easily lay out rooms connected by doors in A-Frame. Here is an overview of their usage:\n\n| Primitive | Component | Purpose | Attributes & Components |\n| - | - | - | - |\n| rw-room | room | Contains a set of walls, and other objects. | position, material |\n| rw-wall | wall | Marks one corner of a wall, which will connect to the next. | position, material, height |\n| rw-doorhole | doorhole | Marks a wall so that a doorlink can connect to it. | (none) |\n| rw-doorlink | doorlink | Connects two doorholes, as well as positioning them as close to it as possible. | from, to, position, width, height |\n| rw-floor, rw-ceiling, rw-sides | floor, ceiling, sides | Used to assign materials to the floor and ceiling of rooms and doorlinks, and to the sides of doorlinks. | material |\n\n#### Hierarchy\n\nAn `a-scene` can contain multiple `rw-room`s.\n\nAn `rw-room` must contain at least three `rw-wall`s.\n\nIf an `rw-wall` does not have a `material` component, it will use its parent `rw-room`'s material component. (A material component **must** be supplied on either the `rw-wall` or the `rw-room`.) The same goes for `rw-floor`, `rw-ceiling` and `rw-sides` (and their parent `rw-doorlink` or `rw-room`).\n\nAn `rw-wall` can have any a-frame entity as a child. `rw-wall`s are oriented so that their `x` direction always points toward the next wall; i.e., when an object is parented to an `rw-wall`, its `x` coordinate controls how far along the wall it is, its `y` coordinate controls how high off the ground it is, and its `z` coordinate controls how distant from the wall it is.\n\nAn `rw-doorhole` must be the child of an `rw-wall`. It is used to indicate on which wall a door connection should exist. An `rw-doorhole` can also have any a-frame entity as a child (for example, a model of a literal door). Note: do **not** apply a `position` to an `rw-doorhole`! Their position will be assigned by the `rw-doorlink` they are linked to.\n\nAn `rw-doorlink` can be a child of an `a-scene` (i.e. outside of a room), or a child of an `rw-wall`. (It **cannot** be the child of an `rw-doorhole`!) Its position is used to automatically set the position of the two `rw-doorhole`s that it is connected to: they will be moved as close as possible to it on their walls. This allows doorways to always automatically be directly connected by the shortest distance (rather than forcing you to manually position both of the doorholes to line up). Choosing whether to parent the `rw-doorlink` to the scene or to one of the two walls that it's connecting is up to you, depending on the building layout you're creating. (It may be simpler to make adjustments a room depending on whether or not the door moves with it or tries to stay in place.)\n\nAn `rw-floor` and an `rw-ceiling` must be the child of either an `rw-room` or an `rw-doorlink`. They exist as a place to attach the material you wish to have applied to the floor or ceiling of the room (or doorlink). An `rw-sides` is similar, but is only used in doorlinks. You can omit them if you wish (i.e. if you would rather manually create a single floorplane for your entire building instead).\n\n\n\n### Notes\n\n#### Tips\n\nYou may find it helpful to use a mixin for a commonly-occuring material (such as a floor material).\n\nThese primitives should all correctly respect changes made in the Inspector; however, at the moment, there seems to be a bug where changes are only propagated to the objects a few times a second. If you have made changes in the inspector but things look like they aren't fitting right, make a minor change to one of the numerical properties to force everything to update.\n\n\n\n#### Planned features\n\n- Greater control over UV generation (world space, scale to surface, etc)\n- Ability to create doorlinks to the outside world (and define building exteriors)\n- Shorthand to create axis-aligned rectangular rooms more quickly by only specifying a length and width\n- Automatically assign collision for movement and teleportation systems\n- Create doors above ground level (i.e. windows)\n- Specify shapes to be extruded to automatically create doorframes and baseboards\n\n#### Known issues\n\nRoom corners (i.e. `rw-wall`s) can be specified in either clockwise or counterclockwise order; however, they will be rearranged internally to always wind clockwise, so you may find that the x axis is pointing to the previous wall rather than the next wall if you list them in counterclockwise order. (This doesn't hurt anything; it's just something to be aware of in case you're confused why it's happening.)\n\nWalls can have non-zero `y` coordinates, which for the most part should be handled gracefully — however, there is no simple way to offer control over the triangulation of the ceiling and floor, so rooms whose wall slopes aren't constant may have unpredictable floor and ceiling shapes.\n\nIn general, this system is still **very early**, so it contains very little error reporting or sanity checks, and generally has not yet been thoroughly tested, so use with caution, and let me know what issues you run into.\n\n### In closing\n\nI hope this lets you express your ideas in virtual reality more easily! Creating wall with doors has always been one of the most frustratingly time-consuming steps in sketching out a basic building, for me; so hopefully this will allow more people to create and share the fictional spaces of their dreams, or re-creations of real places they wish more people could see! Please do let me know if this has helped you to create something; I'd love to see it.","url":"https://unpkg.com/aframe-room-component@^0.1.0/README.md"},"https://unpkg.com/aframe-metronome-component@1.2.3/package.json":{"name":"aframe-metronome-component","version":"1.2.3","description":"A simple component that fires events at specified intervals. Useful for musical looping applications.","main":"aframe-metronome-component.js","repository":{"type":"git","url":"git+https://github.com/rserota/aframe-metronome-component.git"},"keywords":["aframe","webvr","metronome","music","looping"],"author":"Raphael Serota","license":"MIT","bugs":{"url":"https://github.com/rserota/aframe-metronome-component/issues"},"homepage":"https://github.com/rserota/aframe-metronome-component#readme"},"https://unpkg.com/aframe-metronome-component@1.2.3/readme.md":{"text":"# aframe-metronome-component\nA component for [A-Frame](https://aframe.io) that fires events at a specified rhythm, to facilitate building loop-based musical VR applications. \n\n\n## Properties\n\n| Property | Description | Default Value |\n| -------- | ----------- | ------------- |\n| bpm | Beats Per Minute. The overall speed of the loop. | 80 |\n| beatsPerBar | The number of beats contained in each bar of the loop. | 4 |\n| barsPerLoop | The number of bars in each loop. | 4 |\n| startTime | How long to wait (in milliseconds) after the page loads before the metronome starts. Can be reassigned to effectively jump to any point in the loop. | performance.now() + 500 |\n\n### Events\n\n| Event | Description |\n| -------- | ----------- |\n| beat | Fires on every beat of the loop, according to the component's `bpm` property. Contains information about the current beat relative to the current bar, current loop, total beats, etc. |\n| tick | Contains roughly the same information as the `beat` event, but fires more frequently. Each `beat` is divided into 12 `tick`s. |\n\n## Installation\n\n### Browser Installation\n\n\n```html\n<head>\n <title>A Musical A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.6.0/aframe.min.js\"></script>\n <script src=\"https://unpkg.com/aframe-metronome-component\"></script>\n</head>\n\n<body>\n <a-scene>\n <a-entity id=\"clock\" metronome=\"bpm:136;beatsPerBar:8;barsPerLoop:8\"></a-entity>\n \n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-metronome-component\n```\n\n## Usage\n\n```javascript\nvar clock = document.getElementById('clock')\n\nclock.addEventListener('beat', function(event){\n console.log(event.detail)\n var ed = event.detail\n if ( (ed.beatInBar % 2 === 1) && (ed.barInLoop !== 1) ) {\n // code in this block will run on every other beat, except during the first bar of each loop\n // e.g. snareDrum.play() \n }\n\n}\n\nclock.addEventListener('tick', function(event){\n console.log(event.detail)\n}\n\n```\n","url":"https://unpkg.com/aframe-metronome-component@1.2.3/readme.md"},"https://unpkg.com/aframe-shake2show-component@^1.0.x/package.json":{"name":"aframe-shake2show-component","version":"1.0.3","description":"Using shake.js to display toggle UI modal","author":"Roland Dubois <contact@rolanddubois.com>","license":"MIT","main":"index.js","scripts":{"dist":"webpack index.js dist/aframe-shake2show-component.js && webpack -p index.js dist/aframe-shake2show-component.min.js","postpublish":"npm run dist"},"repository":{"type":"git","url":"git+https://github.com/rdub80/aframe-shake2show-component.git"},"keywords":["aframe","a-frame","aframe-component","aframe-vr","aframe-gui","vr","webgl","webvr","mozvr","layout","aframe-layout"],"bugs":{"url":"https://github.com/rdub80/aframe-shake2show-component/issues"},"homepage":"https://github.com/rdub80/aframe-shake2show-component#readme","devDependencies":{"webpack":"^1.12.9"},"dependencies":{"shake.js":"1.2.2"}},"https://unpkg.com/aframe-shake2show-component@^1.0.x/README.md":{"text":"## aframe-shake2show-component\n\n_Tap_ the side of the smart device (qick shake trigger) to display a UI Modal for [A-Frame](https://aframe.io) VR.\n\n![shake2show-illustration](https://cloud.githubusercontent.com/assets/347570/21116597/319524b0-c084-11e6-8d09-6ad5db860ed5.gif)\n\n--- \n\nIntegrated _Shake.js_ - JavaScript plugin for mobile web browsers using device accelerometer.\n\nAuthor: Alex Gibson\n\nhttps://github.com/alexgibson/shake.js\n\nModified _aframe-ui-modal-component_\n\nAuthor: IdeaSpace\n\nhttps://github.com/IdeaSpaceVR/aframe-ui-modal-component\n\n---\n\n## Properties\n\n| Property | Description | Default Value |\n| -------- | ------------------------------------------------------------ | ------------- |\n| trigger | Event to make dialog or menu visible: 'shake' or 'click' | 'shake' |\n| threshold | Default for shake velocity threshold for shake to register | 5 |\n| timeout | Default for shake interval between events. | 500 |\n| zpos | Position the dialog or menu on the z-axis. In meters. | -0.85 |\n| xoffset | Position offset value on the x-axis from center. In meters. | 0 |\n| yoffset | Position offset value on the y-axis from center. In meters. | 0 |\n\n\n### Usage\n\n[Demo](http://rolanddubois.com/webvr/shake2show/)\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```html\n<head>\n <title>My A-Frame Scene</title>\n <script src=\"https://aframe.io/releases/0.7.0/aframe.min.js\"></script>\n <script src=\"https://rawgit.com/rdub80/aframe-shake2show-component/master/dist/aframe-shake2show-component.min.js\"></script>\n</head>\n\n<body>\n <a-scene>\n \t<a-entity shake2show visible=\"false\"></a-entity>\n \t<a-entity camera look-controls></a-entity>\n </a-scene>\n</body>\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-shake2show-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-shake2show-component');\n```\n\n#### In browser testing\n\nFor console testing on desktop trigger shake event\n\n```js\n<script>\nvar triggerShake = document.createEvent(\"HTMLEvents\");\ntriggerShake.initEvent(\"shake\", true, true);\n\nfunction shakeMe(){\n document.dispatchEvent(triggerShake);\n}\n</script> \n```\n\n### Dependencies\n\nYou need a [camera](https://aframe.io/docs/0.7.0/components/camera.html) component in your scene. \n\nYour web browser must support the `devicemotion` event for this plugin to work. Shake.js uses built-in feature detection to determine if it can run in your web browser. It will terminate silently on non-supporting browsers.\n\nhttp://w3c.github.io/deviceorientation/spec-source-orientation.html\n\n\n### Supported web browsers/devices\n\n- iOS Safari 4.2.1 (and above)\n- Android 4.0.3 (default browser)\n- Chrome 41+ for Android\n- Opera Mobile (Android)\n- BlackBerry PlayBook 2.0\n- Firefox for Android\n- FirefoxOS Devices\n","url":"https://unpkg.com/aframe-shake2show-component@^1.0.x/README.md"}}