├── .gitignore ├── LICENSE ├── README.md ├── dist ├── aframe-troika-text.js ├── aframe-troika-text.min.js └── aframe-troika-text.min.js.map ├── examples ├── basic.html ├── bidi.html └── custom-material.html ├── package-lock.json ├── package.json ├── renovate.json ├── rollup.config.js └── src ├── aframe-troika-text-component.js ├── aframe-troika-text-primitive.js └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Jason Johnston 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## aframe-troika-text 2 | 3 | [![Version](http://img.shields.io/npm/v/aframe-troika-text.svg?style=flat-square)](https://npmjs.org/package/aframe-troika-text) 4 | [![License](http://img.shields.io/npm/l/aframe-troika-text.svg?style=flat-square)](https://npmjs.org/package/aframe-troika-text) 5 | 6 | This package provides an [A-Frame](https://aframe.io) component and primitive for rendering three-dimensional text using [Troika's text renderer](https://github.com/protectwise/troika/tree/master/packages/troika-three-text). 7 | 8 | It has similar performance and quality to A-Frame's built-in SDF `text` component, but brings some additional advantages: 9 | 10 | * It reads font files directly (ttf, otf, woff) and does not require using an external tool to pre-generate SDF textures with the glyphs you think you'll need. 11 | 12 | * It supports ligatures so you can use fonts like [Material Icons](https://material.io/resources/icons/). 13 | 14 | * Rather than using a fully custom shader, it patches the built-in Three.js material shaders as needed, so you don't lose all the nice standard shader features like lighting and fog. 15 | 16 | * Support for right-to-left/bidirectional language layout and shaping of Arabic text. 17 | 18 | 19 | ### API 20 | 21 | This package registers both a _component_ (``) and a _primitive_ (``). Use whichever is most convenient for you. 22 | 23 | I've attempted to keep the API as close as possible to that of A-Frame's default [text component](https://aframe.io/docs/master/components/text.html) and [a-text primitive](https://aframe.io/docs/master/primitives/a-text.html), however some things don't quite map exactly. 24 | 25 | | Property on component | Attribute on primitive | Description | Default Value | 26 | |-----------------------|------------------------|-------------------------------------------------------------------------------------------------------------|---------------------------------| 27 | | align | align | Multi-line text alignment (left, center, right, justify). | left | 28 | | anchor | anchor | Horizontal positioning (left, center, right, align). | center | 29 | | baseline | baseline | Vertical positioning (top, center, bottom). | center | 30 | | clipRect | clip-rect | Four comma- or space-separated numbers defining a rectangle (minX, minY, maxX, maxY) outside which pixels will be hidden. | *no clipping* | 31 | | curveRadius | curve-radius | A cylindrical radius along which the text's plane will be curved. Positive = concave, negative = convex. | 0 | 32 | | color | color | Text color. This is a shortcut for specifying a custom material. | white | 33 | | depthOffset | depth-offset | Depth buffer offset to help prevent z-fighting. Negative numbers are closer to camera, positives further. | 0 | 34 | | direction | direction | Main bidi direction of the text: 'auto', 'ltr', or 'rtl' | 'auto' | 35 | | fillOpacity | fill-opacity | Opacity of the glyph's fill. | 1 | 36 | | font | font | URL to a font file - can be a .ttf, .otf, or .woff (no .woff2) or an `` id such as `#font`. | Roboto loaded from Google Fonts | 37 | | fontSize | font-size | Em-height at which to render the font, in meters. | 0.2 | 38 | | letterSpacing | letter-spacing | Letter spacing in meters. | 0 | 39 | | lineHeight | line-height | Line height as a multiple of the fontSize. | *derived from font metrics* | 40 | | maxWidth | max-width | Maximum width of the text block at which text will start wrapping, in meters. | Infinity (no wrapping) | 41 | | outlineBlur | outline-blur | A blur radius applied to the outer edge of the text's `outlineWidth`. | 0 | 42 | | outlineColor | outline-color | Color of an outline drawn around the glyph paths. | black | 43 | | outlineOffsetX | outline-offset-x | Horizontal offset of the outline (ala text-shadow), as a number in meters or a percentage of the font-size. | 0 | 44 | | outlineOffsetY | outline-offset-y | Vertical offset of the outline (ala text-shadow), as a number in meters or a percentage of the font-size. | 0 | 45 | | outlineOpacity | outline-opacity | Opacity of the outline, from 0 to 1. | 1 | 46 | | outlineWidth | outline-width | Width of an outline drawn around the glyph paths, as a number in meters or a percentage of the font-size. | 0 | 47 | | overflowWrap | overflow-wrap | Controls how text wraps: "normal" to break at whitespace characters, or "break-word" to break within words. | normal | 48 | | **value** | value | The actual content of the text. Line breaks and tabs are supported with `\n` and `\t`. | '' | 49 | | strokeColor | stroke-color | Color of a stroke drawn inside the glyph paths. | grey | 50 | | strokeOpacity | stroke-opacity | Opacity of the stroke, from 0 to 1. | 1 | 51 | | strokeWidth | stroke-width | Width of a stroke drawn inside the glyph paths, as a number in meters or a percentage of the font-size. | 0 | 52 | | textIndent | text-indent | Width of an indentation space to be added before the first character of a line. | 0 | 53 | | unicodeFontsURL | unicode-fonts-url | Location of [self-hosted font files](https://github.com/lojjic/unicode-font-resolver/blob/1.x/packages/data/README.md#self-hosting). | '' | 54 | | whiteSpace | white-space | How whitespace should be handled (i.e., normal, nowrap). | normal (behaves like pre-wrap) | 55 | 56 | Note: It does not currently follow how the built-in `text` component interacts with a `geometry` component for auto-sizing and anchoring. I think that's a nice feature so it's probably worth adding; in the meantime just use the `maxWidth` and `anchor`/`baseline` attributes to control it manually. 57 | 58 | #### Changing the material 59 | 60 | By default the text will render using a `MeshBasicMaterial` using the `color` property described in the table above. But you can also change the material to gain more advanced shader features such as physically-based lighting. 61 | 62 | If you are using the `` _primitive_, you can assign it a [`material` component](https://aframe.io/docs/master/components/material.html) just as you would any other entity. 63 | 64 | ```html 65 | 69 | ``` 70 | 71 | If you are using the `troika-text="..."` _component_, you must instead give it a `troika-text-material="..."` attribute to distinguish the text material from the entity's main material. You can pass it anything supported by the built in [`material` component](https://aframe.io/docs/master/components/material.html). 72 | 73 | ```html 74 | 78 | ``` 79 | 80 | ### Installation 81 | 82 | #### Browser 83 | 84 | Install and use by directly including the [browser files](dist): 85 | 86 | ```html 87 | 88 | My A-Frame Scene 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | ``` 103 | 104 | #### npm 105 | 106 | Install via npm: 107 | 108 | ```bash 109 | npm install aframe-troika-text 110 | ``` 111 | 112 | Then require and use. 113 | 114 | ```js 115 | require('aframe'); 116 | require('aframe-troika-text'); 117 | ``` 118 | -------------------------------------------------------------------------------- /examples/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | A-Frame test component Component - Basic 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 22 | 23 | 32 | 33 | 34 | 40 | 41 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /examples/bidi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | A-Frame test component Component - Basic 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /examples/custom-material.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | A-Frame test component Component - Basic 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 23 | 24 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aframe-troika-text", 3 | "version": "0.14.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "aframe-troika-text", 9 | "version": "0.14.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "troika-three-text": "^0.52.2" 13 | }, 14 | "devDependencies": { 15 | "aframe": "^1.7.1", 16 | "rollup": "2.79.2", 17 | "rollup-plugin-node-resolve": "5.2.0", 18 | "rollup-plugin-terser": "7.0.2" 19 | }, 20 | "peerDependencies": { 21 | "aframe": "1.1.x - 1.7.x" 22 | } 23 | }, 24 | "node_modules/@babel/code-frame": { 25 | "version": "7.10.4", 26 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 27 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 28 | "dev": true, 29 | "dependencies": { 30 | "@babel/highlight": "^7.10.4" 31 | } 32 | }, 33 | "node_modules/@babel/helper-validator-identifier": { 34 | "version": "7.10.4", 35 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 36 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 37 | "dev": true 38 | }, 39 | "node_modules/@babel/highlight": { 40 | "version": "7.10.4", 41 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 42 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 43 | "dev": true, 44 | "dependencies": { 45 | "@babel/helper-validator-identifier": "^7.10.4", 46 | "chalk": "^2.0.0", 47 | "js-tokens": "^4.0.0" 48 | } 49 | }, 50 | "node_modules/@jridgewell/gen-mapping": { 51 | "version": "0.3.2", 52 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 53 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 54 | "dev": true, 55 | "dependencies": { 56 | "@jridgewell/set-array": "^1.0.1", 57 | "@jridgewell/sourcemap-codec": "^1.4.10", 58 | "@jridgewell/trace-mapping": "^0.3.9" 59 | }, 60 | "engines": { 61 | "node": ">=6.0.0" 62 | } 63 | }, 64 | "node_modules/@jridgewell/resolve-uri": { 65 | "version": "3.1.0", 66 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 67 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 68 | "dev": true, 69 | "engines": { 70 | "node": ">=6.0.0" 71 | } 72 | }, 73 | "node_modules/@jridgewell/set-array": { 74 | "version": "1.1.2", 75 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 76 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 77 | "dev": true, 78 | "engines": { 79 | "node": ">=6.0.0" 80 | } 81 | }, 82 | "node_modules/@jridgewell/source-map": { 83 | "version": "0.3.2", 84 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", 85 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", 86 | "dev": true, 87 | "dependencies": { 88 | "@jridgewell/gen-mapping": "^0.3.0", 89 | "@jridgewell/trace-mapping": "^0.3.9" 90 | } 91 | }, 92 | "node_modules/@jridgewell/sourcemap-codec": { 93 | "version": "1.4.14", 94 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 95 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 96 | "dev": true 97 | }, 98 | "node_modules/@jridgewell/trace-mapping": { 99 | "version": "0.3.14", 100 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", 101 | "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", 102 | "dev": true, 103 | "dependencies": { 104 | "@jridgewell/resolve-uri": "^3.0.3", 105 | "@jridgewell/sourcemap-codec": "^1.4.10" 106 | } 107 | }, 108 | "node_modules/@sindresorhus/is": { 109 | "version": "0.14.0", 110 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 111 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 112 | "dev": true, 113 | "engines": { 114 | "node": ">=6" 115 | } 116 | }, 117 | "node_modules/@szmarczak/http-timer": { 118 | "version": "1.1.2", 119 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 120 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 121 | "dev": true, 122 | "dependencies": { 123 | "defer-to-connect": "^1.0.1" 124 | }, 125 | "engines": { 126 | "node": ">=6" 127 | } 128 | }, 129 | "node_modules/@types/node": { 130 | "version": "14.0.23", 131 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.23.tgz", 132 | "integrity": "sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw==", 133 | "dev": true 134 | }, 135 | "node_modules/@types/resolve": { 136 | "version": "0.0.8", 137 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", 138 | "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", 139 | "dev": true, 140 | "dependencies": { 141 | "@types/node": "*" 142 | } 143 | }, 144 | "node_modules/acorn": { 145 | "version": "8.7.1", 146 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", 147 | "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", 148 | "dev": true, 149 | "bin": { 150 | "acorn": "bin/acorn" 151 | }, 152 | "engines": { 153 | "node": ">=0.4.0" 154 | } 155 | }, 156 | "node_modules/aframe": { 157 | "version": "1.7.1", 158 | "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.7.1.tgz", 159 | "integrity": "sha512-dcc7PWI5z8pyJ0s2W0mUd8d83339frgMXhUvWr1yxkdgg6zSExkuQwsSJjiNn7XWKMUUqKYDvV/WzQQRA+OBXA==", 160 | "dev": true, 161 | "dependencies": { 162 | "buffer": "^6.0.3", 163 | "debug": "^4.3.4", 164 | "deep-assign": "^2.0.0", 165 | "load-bmfont": "^1.2.3", 166 | "super-animejs": "^3.1.0", 167 | "three": "npm:super-three@0.173.5", 168 | "three-bmfont-text": "github:dmarcos/three-bmfont-text#eed4878795be9b3e38cf6aec6b903f56acd1f695" 169 | }, 170 | "engines": { 171 | "node": ">= 4.6.0", 172 | "npm": ">= 2.15.9" 173 | } 174 | }, 175 | "node_modules/aframe/node_modules/three": { 176 | "name": "super-three", 177 | "version": "0.173.5", 178 | "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.173.5.tgz", 179 | "integrity": "sha512-ecjojbhUg/5QrixwqF4s6gvtJap9XQz7TcnFUX/J8Yosgb2eE2ZUqsyqr/JczFG//6hwIaZPeAa9M5DNaM1dmQ==", 180 | "dev": true 181 | }, 182 | "node_modules/an-array": { 183 | "version": "1.0.0", 184 | "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", 185 | "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==", 186 | "dev": true 187 | }, 188 | "node_modules/ansi-styles": { 189 | "version": "3.2.1", 190 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 191 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 192 | "dev": true, 193 | "dependencies": { 194 | "color-convert": "^1.9.0" 195 | }, 196 | "engines": { 197 | "node": ">=4" 198 | } 199 | }, 200 | "node_modules/array-shuffle": { 201 | "version": "1.0.1", 202 | "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", 203 | "integrity": "sha512-PBqgo1Y2XWSksBzq3GFPEb798ZrW2snAcmr4drbVeF/6MT/5aBlkGJEvu5A/CzXHf4EjbHOj/ZowatjlIiVidA==", 204 | "dev": true, 205 | "engines": { 206 | "node": ">=0.10.0" 207 | } 208 | }, 209 | "node_modules/as-number": { 210 | "version": "1.0.0", 211 | "resolved": "https://registry.npmjs.org/as-number/-/as-number-1.0.0.tgz", 212 | "integrity": "sha512-HkI/zLo2AbSRO4fqVkmyf3hms0bJDs3iboHqTrNuwTiCRvdYXM7HFhfhB6Dk51anV2LM/IMB83mtK9mHw4FlAg==", 213 | "dev": true 214 | }, 215 | "node_modules/base64-js": { 216 | "version": "1.5.1", 217 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 218 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 219 | "dev": true, 220 | "funding": [ 221 | { 222 | "type": "github", 223 | "url": "https://github.com/sponsors/feross" 224 | }, 225 | { 226 | "type": "patreon", 227 | "url": "https://www.patreon.com/feross" 228 | }, 229 | { 230 | "type": "consulting", 231 | "url": "https://feross.org/support" 232 | } 233 | ] 234 | }, 235 | "node_modules/bidi-js": { 236 | "version": "1.0.2", 237 | "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.2.tgz", 238 | "integrity": "sha512-rzSy/k7WdX5zOyeHHCOixGXbCHkyogkxPKL2r8QtzHmVQDiWCXUWa18bLdMWT9CYMLOYTjWpTHawuev2ouYJVw==", 239 | "dependencies": { 240 | "require-from-string": "^2.0.2" 241 | } 242 | }, 243 | "node_modules/buffer": { 244 | "version": "6.0.3", 245 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 246 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 247 | "dev": true, 248 | "funding": [ 249 | { 250 | "type": "github", 251 | "url": "https://github.com/sponsors/feross" 252 | }, 253 | { 254 | "type": "patreon", 255 | "url": "https://www.patreon.com/feross" 256 | }, 257 | { 258 | "type": "consulting", 259 | "url": "https://feross.org/support" 260 | } 261 | ], 262 | "dependencies": { 263 | "base64-js": "^1.3.1", 264 | "ieee754": "^1.2.1" 265 | } 266 | }, 267 | "node_modules/buffer-equal": { 268 | "version": "0.0.1", 269 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 270 | "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", 271 | "dev": true, 272 | "engines": { 273 | "node": ">=0.4.0" 274 | } 275 | }, 276 | "node_modules/buffer-from": { 277 | "version": "1.1.2", 278 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 279 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 280 | "dev": true 281 | }, 282 | "node_modules/builtin-modules": { 283 | "version": "3.1.0", 284 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", 285 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", 286 | "dev": true, 287 | "engines": { 288 | "node": ">=6" 289 | } 290 | }, 291 | "node_modules/cacheable-request": { 292 | "version": "6.1.0", 293 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 294 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 295 | "dev": true, 296 | "dependencies": { 297 | "clone-response": "^1.0.2", 298 | "get-stream": "^5.1.0", 299 | "http-cache-semantics": "^4.0.0", 300 | "keyv": "^3.0.0", 301 | "lowercase-keys": "^2.0.0", 302 | "normalize-url": "^4.1.0", 303 | "responselike": "^1.0.2" 304 | }, 305 | "engines": { 306 | "node": ">=8" 307 | } 308 | }, 309 | "node_modules/cacheable-request/node_modules/get-stream": { 310 | "version": "5.2.0", 311 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 312 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 313 | "dev": true, 314 | "dependencies": { 315 | "pump": "^3.0.0" 316 | }, 317 | "engines": { 318 | "node": ">=8" 319 | }, 320 | "funding": { 321 | "url": "https://github.com/sponsors/sindresorhus" 322 | } 323 | }, 324 | "node_modules/cacheable-request/node_modules/lowercase-keys": { 325 | "version": "2.0.0", 326 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 327 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 328 | "dev": true, 329 | "engines": { 330 | "node": ">=8" 331 | } 332 | }, 333 | "node_modules/chalk": { 334 | "version": "2.4.2", 335 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 336 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 337 | "dev": true, 338 | "dependencies": { 339 | "ansi-styles": "^3.2.1", 340 | "escape-string-regexp": "^1.0.5", 341 | "supports-color": "^5.3.0" 342 | }, 343 | "engines": { 344 | "node": ">=4" 345 | } 346 | }, 347 | "node_modules/clone-response": { 348 | "version": "1.0.3", 349 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 350 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 351 | "dev": true, 352 | "dependencies": { 353 | "mimic-response": "^1.0.0" 354 | }, 355 | "funding": { 356 | "url": "https://github.com/sponsors/sindresorhus" 357 | } 358 | }, 359 | "node_modules/color-convert": { 360 | "version": "1.9.3", 361 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 362 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 363 | "dev": true, 364 | "dependencies": { 365 | "color-name": "1.1.3" 366 | } 367 | }, 368 | "node_modules/color-name": { 369 | "version": "1.1.3", 370 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 371 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 372 | "dev": true 373 | }, 374 | "node_modules/commander": { 375 | "version": "2.20.3", 376 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 377 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 378 | "dev": true 379 | }, 380 | "node_modules/debug": { 381 | "version": "4.3.7", 382 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 383 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 384 | "dev": true, 385 | "dependencies": { 386 | "ms": "^2.1.3" 387 | }, 388 | "engines": { 389 | "node": ">=6.0" 390 | }, 391 | "peerDependenciesMeta": { 392 | "supports-color": { 393 | "optional": true 394 | } 395 | } 396 | }, 397 | "node_modules/decompress-response": { 398 | "version": "3.3.0", 399 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 400 | "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 401 | "dev": true, 402 | "dependencies": { 403 | "mimic-response": "^1.0.0" 404 | }, 405 | "engines": { 406 | "node": ">=4" 407 | } 408 | }, 409 | "node_modules/deep-assign": { 410 | "version": "2.0.0", 411 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 412 | "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", 413 | "dev": true, 414 | "dependencies": { 415 | "is-obj": "^1.0.0" 416 | }, 417 | "engines": { 418 | "node": ">=0.10.0" 419 | } 420 | }, 421 | "node_modules/defer-to-connect": { 422 | "version": "1.1.3", 423 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 424 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 425 | "dev": true 426 | }, 427 | "node_modules/dom-walk": { 428 | "version": "0.1.2", 429 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 430 | "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", 431 | "dev": true 432 | }, 433 | "node_modules/dtype": { 434 | "version": "2.0.0", 435 | "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", 436 | "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", 437 | "dev": true, 438 | "engines": { 439 | "node": ">= 0.8.0" 440 | } 441 | }, 442 | "node_modules/duplexer3": { 443 | "version": "0.1.5", 444 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", 445 | "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", 446 | "dev": true 447 | }, 448 | "node_modules/end-of-stream": { 449 | "version": "1.4.4", 450 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 451 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 452 | "dev": true, 453 | "dependencies": { 454 | "once": "^1.4.0" 455 | } 456 | }, 457 | "node_modules/end-of-stream/node_modules/once": { 458 | "version": "1.4.0", 459 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 460 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 461 | "dev": true, 462 | "dependencies": { 463 | "wrappy": "1" 464 | } 465 | }, 466 | "node_modules/escape-string-regexp": { 467 | "version": "1.0.5", 468 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 469 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 470 | "dev": true, 471 | "engines": { 472 | "node": ">=0.8.0" 473 | } 474 | }, 475 | "node_modules/estree-walker": { 476 | "version": "0.6.1", 477 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 478 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 479 | "dev": true 480 | }, 481 | "node_modules/fsevents": { 482 | "version": "2.3.2", 483 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 484 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 485 | "dev": true, 486 | "hasInstallScript": true, 487 | "optional": true, 488 | "os": [ 489 | "darwin" 490 | ], 491 | "engines": { 492 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 493 | } 494 | }, 495 | "node_modules/get-stream": { 496 | "version": "4.1.0", 497 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 498 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 499 | "dev": true, 500 | "dependencies": { 501 | "pump": "^3.0.0" 502 | }, 503 | "engines": { 504 | "node": ">=6" 505 | } 506 | }, 507 | "node_modules/global": { 508 | "version": "4.4.0", 509 | "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", 510 | "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", 511 | "dev": true, 512 | "dependencies": { 513 | "min-document": "^2.19.0", 514 | "process": "^0.11.10" 515 | } 516 | }, 517 | "node_modules/got": { 518 | "version": "9.6.0", 519 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 520 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 521 | "dev": true, 522 | "dependencies": { 523 | "@sindresorhus/is": "^0.14.0", 524 | "@szmarczak/http-timer": "^1.1.2", 525 | "cacheable-request": "^6.0.0", 526 | "decompress-response": "^3.3.0", 527 | "duplexer3": "^0.1.4", 528 | "get-stream": "^4.1.0", 529 | "lowercase-keys": "^1.0.1", 530 | "mimic-response": "^1.0.1", 531 | "p-cancelable": "^1.0.0", 532 | "to-readable-stream": "^1.0.0", 533 | "url-parse-lax": "^3.0.0" 534 | }, 535 | "engines": { 536 | "node": ">=8.6" 537 | } 538 | }, 539 | "node_modules/has-flag": { 540 | "version": "3.0.0", 541 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 542 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 543 | "dev": true, 544 | "engines": { 545 | "node": ">=4" 546 | } 547 | }, 548 | "node_modules/http-cache-semantics": { 549 | "version": "4.1.1", 550 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 551 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 552 | "dev": true 553 | }, 554 | "node_modules/ieee754": { 555 | "version": "1.2.1", 556 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 557 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 558 | "dev": true, 559 | "funding": [ 560 | { 561 | "type": "github", 562 | "url": "https://github.com/sponsors/feross" 563 | }, 564 | { 565 | "type": "patreon", 566 | "url": "https://www.patreon.com/feross" 567 | }, 568 | { 569 | "type": "consulting", 570 | "url": "https://feross.org/support" 571 | } 572 | ] 573 | }, 574 | "node_modules/is-buffer": { 575 | "version": "1.1.6", 576 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 577 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 578 | "dev": true 579 | }, 580 | "node_modules/is-function": { 581 | "version": "1.0.2", 582 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", 583 | "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", 584 | "dev": true 585 | }, 586 | "node_modules/is-module": { 587 | "version": "1.0.0", 588 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 589 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 590 | "dev": true 591 | }, 592 | "node_modules/is-obj": { 593 | "version": "1.0.1", 594 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 595 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 596 | "dev": true, 597 | "engines": { 598 | "node": ">=0.10.0" 599 | } 600 | }, 601 | "node_modules/jest-worker": { 602 | "version": "26.3.0", 603 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", 604 | "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", 605 | "dev": true, 606 | "dependencies": { 607 | "@types/node": "*", 608 | "merge-stream": "^2.0.0", 609 | "supports-color": "^7.0.0" 610 | }, 611 | "engines": { 612 | "node": ">= 10.13.0" 613 | } 614 | }, 615 | "node_modules/jest-worker/node_modules/has-flag": { 616 | "version": "4.0.0", 617 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 618 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 619 | "dev": true, 620 | "engines": { 621 | "node": ">=8" 622 | } 623 | }, 624 | "node_modules/jest-worker/node_modules/supports-color": { 625 | "version": "7.2.0", 626 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 627 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 628 | "dev": true, 629 | "dependencies": { 630 | "has-flag": "^4.0.0" 631 | }, 632 | "engines": { 633 | "node": ">=8" 634 | } 635 | }, 636 | "node_modules/js-tokens": { 637 | "version": "4.0.0", 638 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 639 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 640 | "dev": true 641 | }, 642 | "node_modules/json-buffer": { 643 | "version": "3.0.0", 644 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 645 | "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", 646 | "dev": true 647 | }, 648 | "node_modules/keyv": { 649 | "version": "3.1.0", 650 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 651 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 652 | "dev": true, 653 | "dependencies": { 654 | "json-buffer": "3.0.0" 655 | } 656 | }, 657 | "node_modules/layout-bmfont-text": { 658 | "version": "1.3.4", 659 | "resolved": "https://registry.npmjs.org/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz", 660 | "integrity": "sha512-mceomHZ8W7pSKQhTdLvOe1Im4n37u8xa5Gr0J3KPCHRMO/9o7+goWIOzZcUUd+Xgzy3+22bvoIQ0OaN3LRtgaw==", 661 | "dev": true, 662 | "dependencies": { 663 | "as-number": "^1.0.0", 664 | "word-wrapper": "^1.0.7", 665 | "xtend": "^4.0.0" 666 | } 667 | }, 668 | "node_modules/load-bmfont": { 669 | "version": "1.4.1", 670 | "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", 671 | "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", 672 | "dev": true, 673 | "dependencies": { 674 | "buffer-equal": "0.0.1", 675 | "mime": "^1.3.4", 676 | "parse-bmfont-ascii": "^1.0.3", 677 | "parse-bmfont-binary": "^1.0.5", 678 | "parse-bmfont-xml": "^1.1.4", 679 | "phin": "^2.9.1", 680 | "xhr": "^2.0.1", 681 | "xtend": "^4.0.0" 682 | } 683 | }, 684 | "node_modules/lowercase-keys": { 685 | "version": "1.0.1", 686 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 687 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 688 | "dev": true, 689 | "engines": { 690 | "node": ">=0.10.0" 691 | } 692 | }, 693 | "node_modules/map-limit": { 694 | "version": "0.0.1", 695 | "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", 696 | "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", 697 | "dev": true, 698 | "dependencies": { 699 | "once": "~1.3.0" 700 | } 701 | }, 702 | "node_modules/merge-stream": { 703 | "version": "2.0.0", 704 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 705 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 706 | "dev": true 707 | }, 708 | "node_modules/mime": { 709 | "version": "1.6.0", 710 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 711 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 712 | "dev": true, 713 | "bin": { 714 | "mime": "cli.js" 715 | }, 716 | "engines": { 717 | "node": ">=4" 718 | } 719 | }, 720 | "node_modules/mimic-response": { 721 | "version": "1.0.1", 722 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 723 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 724 | "dev": true, 725 | "engines": { 726 | "node": ">=4" 727 | } 728 | }, 729 | "node_modules/min-document": { 730 | "version": "2.19.0", 731 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 732 | "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", 733 | "dev": true, 734 | "dependencies": { 735 | "dom-walk": "^0.1.0" 736 | } 737 | }, 738 | "node_modules/minimist": { 739 | "version": "1.2.8", 740 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 741 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 742 | "dev": true, 743 | "funding": { 744 | "url": "https://github.com/sponsors/ljharb" 745 | } 746 | }, 747 | "node_modules/ms": { 748 | "version": "2.1.3", 749 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 750 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 751 | "dev": true 752 | }, 753 | "node_modules/new-array": { 754 | "version": "1.0.0", 755 | "resolved": "https://registry.npmjs.org/new-array/-/new-array-1.0.0.tgz", 756 | "integrity": "sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A==", 757 | "dev": true 758 | }, 759 | "node_modules/nice-color-palettes": { 760 | "version": "3.0.0", 761 | "resolved": "https://registry.npmjs.org/nice-color-palettes/-/nice-color-palettes-3.0.0.tgz", 762 | "integrity": "sha512-lL4AjabAAFi313tjrtmgm/bxCRzp4l3vCshojfV/ij3IPdtnRqv6Chcw+SqJUhbe7g3o3BecaqCJYUNLswGBhQ==", 763 | "dev": true, 764 | "dependencies": { 765 | "got": "^9.2.2", 766 | "map-limit": "0.0.1", 767 | "minimist": "^1.2.0", 768 | "new-array": "^1.0.0" 769 | }, 770 | "bin": { 771 | "nice-color-palettes": "bin/index.js" 772 | } 773 | }, 774 | "node_modules/normalize-url": { 775 | "version": "4.5.1", 776 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", 777 | "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", 778 | "dev": true, 779 | "engines": { 780 | "node": ">=8" 781 | } 782 | }, 783 | "node_modules/once": { 784 | "version": "1.3.3", 785 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 786 | "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", 787 | "dev": true, 788 | "dependencies": { 789 | "wrappy": "1" 790 | } 791 | }, 792 | "node_modules/p-cancelable": { 793 | "version": "1.1.0", 794 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 795 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 796 | "dev": true, 797 | "engines": { 798 | "node": ">=6" 799 | } 800 | }, 801 | "node_modules/parse-bmfont-ascii": { 802 | "version": "1.0.6", 803 | "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 804 | "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", 805 | "dev": true 806 | }, 807 | "node_modules/parse-bmfont-binary": { 808 | "version": "1.0.6", 809 | "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 810 | "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", 811 | "dev": true 812 | }, 813 | "node_modules/parse-bmfont-xml": { 814 | "version": "1.1.4", 815 | "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", 816 | "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", 817 | "dev": true, 818 | "dependencies": { 819 | "xml-parse-from-string": "^1.0.0", 820 | "xml2js": "^0.4.5" 821 | } 822 | }, 823 | "node_modules/parse-headers": { 824 | "version": "2.0.5", 825 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", 826 | "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", 827 | "dev": true 828 | }, 829 | "node_modules/path-parse": { 830 | "version": "1.0.7", 831 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 832 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 833 | "dev": true 834 | }, 835 | "node_modules/phin": { 836 | "version": "2.9.3", 837 | "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", 838 | "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", 839 | "dev": true 840 | }, 841 | "node_modules/prepend-http": { 842 | "version": "2.0.0", 843 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 844 | "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", 845 | "dev": true, 846 | "engines": { 847 | "node": ">=4" 848 | } 849 | }, 850 | "node_modules/process": { 851 | "version": "0.11.10", 852 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 853 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 854 | "dev": true, 855 | "engines": { 856 | "node": ">= 0.6.0" 857 | } 858 | }, 859 | "node_modules/pump": { 860 | "version": "3.0.2", 861 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", 862 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", 863 | "dev": true, 864 | "dependencies": { 865 | "end-of-stream": "^1.1.0", 866 | "once": "^1.3.1" 867 | } 868 | }, 869 | "node_modules/quad-indices": { 870 | "version": "2.0.1", 871 | "resolved": "https://registry.npmjs.org/quad-indices/-/quad-indices-2.0.1.tgz", 872 | "integrity": "sha512-6jtmCsEbGAh5npThXrBaubbTjPcF0rMbn57XCJVI7LkW8PUT56V+uIrRCCWCn85PSgJC9v8Pm5tnJDwmOBewvA==", 873 | "dev": true, 874 | "dependencies": { 875 | "an-array": "^1.0.0", 876 | "dtype": "^2.0.0", 877 | "is-buffer": "^1.0.2" 878 | } 879 | }, 880 | "node_modules/randombytes": { 881 | "version": "2.1.0", 882 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 883 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 884 | "dev": true, 885 | "dependencies": { 886 | "safe-buffer": "^5.1.0" 887 | } 888 | }, 889 | "node_modules/require-from-string": { 890 | "version": "2.0.2", 891 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 892 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 893 | "engines": { 894 | "node": ">=0.10.0" 895 | } 896 | }, 897 | "node_modules/resolve": { 898 | "version": "1.17.0", 899 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 900 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 901 | "dev": true, 902 | "dependencies": { 903 | "path-parse": "^1.0.6" 904 | }, 905 | "funding": { 906 | "url": "https://github.com/sponsors/ljharb" 907 | } 908 | }, 909 | "node_modules/responselike": { 910 | "version": "1.0.2", 911 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 912 | "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", 913 | "dev": true, 914 | "dependencies": { 915 | "lowercase-keys": "^1.0.0" 916 | } 917 | }, 918 | "node_modules/rollup": { 919 | "version": "2.79.2", 920 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", 921 | "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", 922 | "dev": true, 923 | "bin": { 924 | "rollup": "dist/bin/rollup" 925 | }, 926 | "engines": { 927 | "node": ">=10.0.0" 928 | }, 929 | "optionalDependencies": { 930 | "fsevents": "~2.3.2" 931 | } 932 | }, 933 | "node_modules/rollup-plugin-node-resolve": { 934 | "version": "5.2.0", 935 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", 936 | "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", 937 | "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve.", 938 | "dev": true, 939 | "dependencies": { 940 | "@types/resolve": "0.0.8", 941 | "builtin-modules": "^3.1.0", 942 | "is-module": "^1.0.0", 943 | "resolve": "^1.11.1", 944 | "rollup-pluginutils": "^2.8.1" 945 | }, 946 | "peerDependencies": { 947 | "rollup": ">=1.11.0" 948 | } 949 | }, 950 | "node_modules/rollup-plugin-terser": { 951 | "version": "7.0.2", 952 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 953 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 954 | "dev": true, 955 | "dependencies": { 956 | "@babel/code-frame": "^7.10.4", 957 | "jest-worker": "^26.2.1", 958 | "serialize-javascript": "^4.0.0", 959 | "terser": "^5.0.0" 960 | }, 961 | "peerDependencies": { 962 | "rollup": "^2.0.0" 963 | } 964 | }, 965 | "node_modules/rollup-pluginutils": { 966 | "version": "2.8.2", 967 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 968 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 969 | "dev": true, 970 | "dependencies": { 971 | "estree-walker": "^0.6.1" 972 | } 973 | }, 974 | "node_modules/safe-buffer": { 975 | "version": "5.2.1", 976 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 977 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 978 | "dev": true, 979 | "funding": [ 980 | { 981 | "type": "github", 982 | "url": "https://github.com/sponsors/feross" 983 | }, 984 | { 985 | "type": "patreon", 986 | "url": "https://www.patreon.com/feross" 987 | }, 988 | { 989 | "type": "consulting", 990 | "url": "https://feross.org/support" 991 | } 992 | ] 993 | }, 994 | "node_modules/sax": { 995 | "version": "1.2.4", 996 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 997 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 998 | "dev": true 999 | }, 1000 | "node_modules/serialize-javascript": { 1001 | "version": "4.0.0", 1002 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1003 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1004 | "dev": true, 1005 | "dependencies": { 1006 | "randombytes": "^2.1.0" 1007 | } 1008 | }, 1009 | "node_modules/source-map": { 1010 | "version": "0.6.1", 1011 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1012 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1013 | "dev": true, 1014 | "engines": { 1015 | "node": ">=0.10.0" 1016 | } 1017 | }, 1018 | "node_modules/source-map-support": { 1019 | "version": "0.5.21", 1020 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1021 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1022 | "dev": true, 1023 | "dependencies": { 1024 | "buffer-from": "^1.0.0", 1025 | "source-map": "^0.6.0" 1026 | } 1027 | }, 1028 | "node_modules/super-animejs": { 1029 | "version": "3.1.0", 1030 | "resolved": "https://registry.npmjs.org/super-animejs/-/super-animejs-3.1.0.tgz", 1031 | "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==", 1032 | "dev": true 1033 | }, 1034 | "node_modules/supports-color": { 1035 | "version": "5.5.0", 1036 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1037 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1038 | "dev": true, 1039 | "dependencies": { 1040 | "has-flag": "^3.0.0" 1041 | }, 1042 | "engines": { 1043 | "node": ">=4" 1044 | } 1045 | }, 1046 | "node_modules/terser": { 1047 | "version": "5.14.2", 1048 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", 1049 | "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", 1050 | "dev": true, 1051 | "dependencies": { 1052 | "@jridgewell/source-map": "^0.3.2", 1053 | "acorn": "^8.5.0", 1054 | "commander": "^2.20.0", 1055 | "source-map-support": "~0.5.20" 1056 | }, 1057 | "bin": { 1058 | "terser": "bin/terser" 1059 | }, 1060 | "engines": { 1061 | "node": ">=10" 1062 | } 1063 | }, 1064 | "node_modules/three": { 1065 | "version": "0.171.0", 1066 | "resolved": "https://registry.npmjs.org/three/-/three-0.171.0.tgz", 1067 | "integrity": "sha512-Y/lAXPaKZPcEdkKjh0JOAHVv8OOnv/NDJqm0wjfCzyQmfKxV7zvkwsnBgPBKTzJHToSOhRGQAGbPJObT59B/PQ==", 1068 | "peer": true 1069 | }, 1070 | "node_modules/three-bmfont-text": { 1071 | "version": "3.0.0", 1072 | "resolved": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#eed4878795be9b3e38cf6aec6b903f56acd1f695", 1073 | "integrity": "sha512-FDlyR8SyHQ0Ek38qBx5Hg/AwPuBI/1w/QWpMgzw19Vn81xsDNFTOXJpU0HcvI78C72wwXjJ3T7+EX7k2geDV4Q==", 1074 | "dev": true, 1075 | "license": "MIT", 1076 | "dependencies": { 1077 | "array-shuffle": "^1.0.1", 1078 | "layout-bmfont-text": "^1.2.0", 1079 | "nice-color-palettes": "^3.0.0", 1080 | "quad-indices": "^2.0.1" 1081 | } 1082 | }, 1083 | "node_modules/to-readable-stream": { 1084 | "version": "1.0.0", 1085 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 1086 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 1087 | "dev": true, 1088 | "engines": { 1089 | "node": ">=6" 1090 | } 1091 | }, 1092 | "node_modules/troika-three-text": { 1093 | "version": "0.52.4", 1094 | "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.52.4.tgz", 1095 | "integrity": "sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg==", 1096 | "dependencies": { 1097 | "bidi-js": "^1.0.2", 1098 | "troika-three-utils": "^0.52.4", 1099 | "troika-worker-utils": "^0.52.0", 1100 | "webgl-sdf-generator": "1.1.1" 1101 | }, 1102 | "peerDependencies": { 1103 | "three": ">=0.125.0" 1104 | } 1105 | }, 1106 | "node_modules/troika-three-utils": { 1107 | "version": "0.52.4", 1108 | "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.52.4.tgz", 1109 | "integrity": "sha512-NORAStSVa/BDiG52Mfudk4j1FG4jC4ILutB3foPnfGbOeIs9+G5vZLa0pnmnaftZUGm4UwSoqEpWdqvC7zms3A==", 1110 | "peerDependencies": { 1111 | "three": ">=0.125.0" 1112 | } 1113 | }, 1114 | "node_modules/troika-worker-utils": { 1115 | "version": "0.52.0", 1116 | "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.52.0.tgz", 1117 | "integrity": "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==" 1118 | }, 1119 | "node_modules/url-parse-lax": { 1120 | "version": "3.0.0", 1121 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 1122 | "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", 1123 | "dev": true, 1124 | "dependencies": { 1125 | "prepend-http": "^2.0.0" 1126 | }, 1127 | "engines": { 1128 | "node": ">=4" 1129 | } 1130 | }, 1131 | "node_modules/webgl-sdf-generator": { 1132 | "version": "1.1.1", 1133 | "resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz", 1134 | "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==" 1135 | }, 1136 | "node_modules/word-wrapper": { 1137 | "version": "1.0.7", 1138 | "resolved": "https://registry.npmjs.org/word-wrapper/-/word-wrapper-1.0.7.tgz", 1139 | "integrity": "sha512-VOPBFCm9b6FyYKQYfn9AVn2dQvdR/YOVFV6IBRA1TBMJWKffvhEX1af6FMGrttILs2Q9ikCRhLqkbY2weW6dOQ==", 1140 | "dev": true 1141 | }, 1142 | "node_modules/wrappy": { 1143 | "version": "1.0.2", 1144 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1145 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1146 | "dev": true 1147 | }, 1148 | "node_modules/xhr": { 1149 | "version": "2.6.0", 1150 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", 1151 | "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", 1152 | "dev": true, 1153 | "dependencies": { 1154 | "global": "~4.4.0", 1155 | "is-function": "^1.0.1", 1156 | "parse-headers": "^2.0.0", 1157 | "xtend": "^4.0.0" 1158 | } 1159 | }, 1160 | "node_modules/xml-parse-from-string": { 1161 | "version": "1.0.1", 1162 | "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 1163 | "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", 1164 | "dev": true 1165 | }, 1166 | "node_modules/xml2js": { 1167 | "version": "0.4.23", 1168 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", 1169 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", 1170 | "dev": true, 1171 | "dependencies": { 1172 | "sax": ">=0.6.0", 1173 | "xmlbuilder": "~11.0.0" 1174 | }, 1175 | "engines": { 1176 | "node": ">=4.0.0" 1177 | } 1178 | }, 1179 | "node_modules/xmlbuilder": { 1180 | "version": "11.0.1", 1181 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 1182 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 1183 | "dev": true, 1184 | "engines": { 1185 | "node": ">=4.0" 1186 | } 1187 | }, 1188 | "node_modules/xtend": { 1189 | "version": "4.0.2", 1190 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1191 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1192 | "dev": true, 1193 | "engines": { 1194 | "node": ">=0.4" 1195 | } 1196 | } 1197 | }, 1198 | "dependencies": { 1199 | "@babel/code-frame": { 1200 | "version": "7.10.4", 1201 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 1202 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 1203 | "dev": true, 1204 | "requires": { 1205 | "@babel/highlight": "^7.10.4" 1206 | } 1207 | }, 1208 | "@babel/helper-validator-identifier": { 1209 | "version": "7.10.4", 1210 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 1211 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 1212 | "dev": true 1213 | }, 1214 | "@babel/highlight": { 1215 | "version": "7.10.4", 1216 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 1217 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 1218 | "dev": true, 1219 | "requires": { 1220 | "@babel/helper-validator-identifier": "^7.10.4", 1221 | "chalk": "^2.0.0", 1222 | "js-tokens": "^4.0.0" 1223 | } 1224 | }, 1225 | "@jridgewell/gen-mapping": { 1226 | "version": "0.3.2", 1227 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 1228 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 1229 | "dev": true, 1230 | "requires": { 1231 | "@jridgewell/set-array": "^1.0.1", 1232 | "@jridgewell/sourcemap-codec": "^1.4.10", 1233 | "@jridgewell/trace-mapping": "^0.3.9" 1234 | } 1235 | }, 1236 | "@jridgewell/resolve-uri": { 1237 | "version": "3.1.0", 1238 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 1239 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 1240 | "dev": true 1241 | }, 1242 | "@jridgewell/set-array": { 1243 | "version": "1.1.2", 1244 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 1245 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 1246 | "dev": true 1247 | }, 1248 | "@jridgewell/source-map": { 1249 | "version": "0.3.2", 1250 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", 1251 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", 1252 | "dev": true, 1253 | "requires": { 1254 | "@jridgewell/gen-mapping": "^0.3.0", 1255 | "@jridgewell/trace-mapping": "^0.3.9" 1256 | } 1257 | }, 1258 | "@jridgewell/sourcemap-codec": { 1259 | "version": "1.4.14", 1260 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 1261 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 1262 | "dev": true 1263 | }, 1264 | "@jridgewell/trace-mapping": { 1265 | "version": "0.3.14", 1266 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", 1267 | "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", 1268 | "dev": true, 1269 | "requires": { 1270 | "@jridgewell/resolve-uri": "^3.0.3", 1271 | "@jridgewell/sourcemap-codec": "^1.4.10" 1272 | } 1273 | }, 1274 | "@sindresorhus/is": { 1275 | "version": "0.14.0", 1276 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 1277 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 1278 | "dev": true 1279 | }, 1280 | "@szmarczak/http-timer": { 1281 | "version": "1.1.2", 1282 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 1283 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 1284 | "dev": true, 1285 | "requires": { 1286 | "defer-to-connect": "^1.0.1" 1287 | } 1288 | }, 1289 | "@types/node": { 1290 | "version": "14.0.23", 1291 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.23.tgz", 1292 | "integrity": "sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw==", 1293 | "dev": true 1294 | }, 1295 | "@types/resolve": { 1296 | "version": "0.0.8", 1297 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", 1298 | "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", 1299 | "dev": true, 1300 | "requires": { 1301 | "@types/node": "*" 1302 | } 1303 | }, 1304 | "acorn": { 1305 | "version": "8.7.1", 1306 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", 1307 | "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", 1308 | "dev": true 1309 | }, 1310 | "aframe": { 1311 | "version": "1.7.1", 1312 | "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.7.1.tgz", 1313 | "integrity": "sha512-dcc7PWI5z8pyJ0s2W0mUd8d83339frgMXhUvWr1yxkdgg6zSExkuQwsSJjiNn7XWKMUUqKYDvV/WzQQRA+OBXA==", 1314 | "dev": true, 1315 | "requires": { 1316 | "buffer": "^6.0.3", 1317 | "debug": "^4.3.4", 1318 | "deep-assign": "^2.0.0", 1319 | "load-bmfont": "^1.2.3", 1320 | "super-animejs": "^3.1.0", 1321 | "three": "npm:super-three@0.173.5", 1322 | "three-bmfont-text": "github:dmarcos/three-bmfont-text#eed4878795be9b3e38cf6aec6b903f56acd1f695" 1323 | }, 1324 | "dependencies": { 1325 | "three": { 1326 | "version": "npm:super-three@0.173.5", 1327 | "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.173.5.tgz", 1328 | "integrity": "sha512-ecjojbhUg/5QrixwqF4s6gvtJap9XQz7TcnFUX/J8Yosgb2eE2ZUqsyqr/JczFG//6hwIaZPeAa9M5DNaM1dmQ==", 1329 | "dev": true 1330 | } 1331 | } 1332 | }, 1333 | "an-array": { 1334 | "version": "1.0.0", 1335 | "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", 1336 | "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==", 1337 | "dev": true 1338 | }, 1339 | "ansi-styles": { 1340 | "version": "3.2.1", 1341 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1342 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1343 | "dev": true, 1344 | "requires": { 1345 | "color-convert": "^1.9.0" 1346 | } 1347 | }, 1348 | "array-shuffle": { 1349 | "version": "1.0.1", 1350 | "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", 1351 | "integrity": "sha512-PBqgo1Y2XWSksBzq3GFPEb798ZrW2snAcmr4drbVeF/6MT/5aBlkGJEvu5A/CzXHf4EjbHOj/ZowatjlIiVidA==", 1352 | "dev": true 1353 | }, 1354 | "as-number": { 1355 | "version": "1.0.0", 1356 | "resolved": "https://registry.npmjs.org/as-number/-/as-number-1.0.0.tgz", 1357 | "integrity": "sha512-HkI/zLo2AbSRO4fqVkmyf3hms0bJDs3iboHqTrNuwTiCRvdYXM7HFhfhB6Dk51anV2LM/IMB83mtK9mHw4FlAg==", 1358 | "dev": true 1359 | }, 1360 | "base64-js": { 1361 | "version": "1.5.1", 1362 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1363 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 1364 | "dev": true 1365 | }, 1366 | "bidi-js": { 1367 | "version": "1.0.2", 1368 | "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.2.tgz", 1369 | "integrity": "sha512-rzSy/k7WdX5zOyeHHCOixGXbCHkyogkxPKL2r8QtzHmVQDiWCXUWa18bLdMWT9CYMLOYTjWpTHawuev2ouYJVw==", 1370 | "requires": { 1371 | "require-from-string": "^2.0.2" 1372 | } 1373 | }, 1374 | "buffer": { 1375 | "version": "6.0.3", 1376 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 1377 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 1378 | "dev": true, 1379 | "requires": { 1380 | "base64-js": "^1.3.1", 1381 | "ieee754": "^1.2.1" 1382 | } 1383 | }, 1384 | "buffer-equal": { 1385 | "version": "0.0.1", 1386 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 1387 | "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", 1388 | "dev": true 1389 | }, 1390 | "buffer-from": { 1391 | "version": "1.1.2", 1392 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1393 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1394 | "dev": true 1395 | }, 1396 | "builtin-modules": { 1397 | "version": "3.1.0", 1398 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", 1399 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", 1400 | "dev": true 1401 | }, 1402 | "cacheable-request": { 1403 | "version": "6.1.0", 1404 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 1405 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 1406 | "dev": true, 1407 | "requires": { 1408 | "clone-response": "^1.0.2", 1409 | "get-stream": "^5.1.0", 1410 | "http-cache-semantics": "^4.0.0", 1411 | "keyv": "^3.0.0", 1412 | "lowercase-keys": "^2.0.0", 1413 | "normalize-url": "^4.1.0", 1414 | "responselike": "^1.0.2" 1415 | }, 1416 | "dependencies": { 1417 | "get-stream": { 1418 | "version": "5.2.0", 1419 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1420 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1421 | "dev": true, 1422 | "requires": { 1423 | "pump": "^3.0.0" 1424 | } 1425 | }, 1426 | "lowercase-keys": { 1427 | "version": "2.0.0", 1428 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 1429 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 1430 | "dev": true 1431 | } 1432 | } 1433 | }, 1434 | "chalk": { 1435 | "version": "2.4.2", 1436 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1437 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1438 | "dev": true, 1439 | "requires": { 1440 | "ansi-styles": "^3.2.1", 1441 | "escape-string-regexp": "^1.0.5", 1442 | "supports-color": "^5.3.0" 1443 | } 1444 | }, 1445 | "clone-response": { 1446 | "version": "1.0.3", 1447 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 1448 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 1449 | "dev": true, 1450 | "requires": { 1451 | "mimic-response": "^1.0.0" 1452 | } 1453 | }, 1454 | "color-convert": { 1455 | "version": "1.9.3", 1456 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1457 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1458 | "dev": true, 1459 | "requires": { 1460 | "color-name": "1.1.3" 1461 | } 1462 | }, 1463 | "color-name": { 1464 | "version": "1.1.3", 1465 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1466 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1467 | "dev": true 1468 | }, 1469 | "commander": { 1470 | "version": "2.20.3", 1471 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1472 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1473 | "dev": true 1474 | }, 1475 | "debug": { 1476 | "version": "4.3.7", 1477 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 1478 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 1479 | "dev": true, 1480 | "requires": { 1481 | "ms": "^2.1.3" 1482 | } 1483 | }, 1484 | "decompress-response": { 1485 | "version": "3.3.0", 1486 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 1487 | "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 1488 | "dev": true, 1489 | "requires": { 1490 | "mimic-response": "^1.0.0" 1491 | } 1492 | }, 1493 | "deep-assign": { 1494 | "version": "2.0.0", 1495 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 1496 | "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", 1497 | "dev": true, 1498 | "requires": { 1499 | "is-obj": "^1.0.0" 1500 | } 1501 | }, 1502 | "defer-to-connect": { 1503 | "version": "1.1.3", 1504 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 1505 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 1506 | "dev": true 1507 | }, 1508 | "dom-walk": { 1509 | "version": "0.1.2", 1510 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 1511 | "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", 1512 | "dev": true 1513 | }, 1514 | "dtype": { 1515 | "version": "2.0.0", 1516 | "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", 1517 | "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", 1518 | "dev": true 1519 | }, 1520 | "duplexer3": { 1521 | "version": "0.1.5", 1522 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", 1523 | "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", 1524 | "dev": true 1525 | }, 1526 | "end-of-stream": { 1527 | "version": "1.4.4", 1528 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1529 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1530 | "dev": true, 1531 | "requires": { 1532 | "once": "^1.4.0" 1533 | }, 1534 | "dependencies": { 1535 | "once": { 1536 | "version": "1.4.0", 1537 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1538 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1539 | "dev": true, 1540 | "requires": { 1541 | "wrappy": "1" 1542 | } 1543 | } 1544 | } 1545 | }, 1546 | "escape-string-regexp": { 1547 | "version": "1.0.5", 1548 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1549 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1550 | "dev": true 1551 | }, 1552 | "estree-walker": { 1553 | "version": "0.6.1", 1554 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1555 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1556 | "dev": true 1557 | }, 1558 | "fsevents": { 1559 | "version": "2.3.2", 1560 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1561 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1562 | "dev": true, 1563 | "optional": true 1564 | }, 1565 | "get-stream": { 1566 | "version": "4.1.0", 1567 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 1568 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1569 | "dev": true, 1570 | "requires": { 1571 | "pump": "^3.0.0" 1572 | } 1573 | }, 1574 | "global": { 1575 | "version": "4.4.0", 1576 | "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", 1577 | "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", 1578 | "dev": true, 1579 | "requires": { 1580 | "min-document": "^2.19.0", 1581 | "process": "^0.11.10" 1582 | } 1583 | }, 1584 | "got": { 1585 | "version": "9.6.0", 1586 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 1587 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 1588 | "dev": true, 1589 | "requires": { 1590 | "@sindresorhus/is": "^0.14.0", 1591 | "@szmarczak/http-timer": "^1.1.2", 1592 | "cacheable-request": "^6.0.0", 1593 | "decompress-response": "^3.3.0", 1594 | "duplexer3": "^0.1.4", 1595 | "get-stream": "^4.1.0", 1596 | "lowercase-keys": "^1.0.1", 1597 | "mimic-response": "^1.0.1", 1598 | "p-cancelable": "^1.0.0", 1599 | "to-readable-stream": "^1.0.0", 1600 | "url-parse-lax": "^3.0.0" 1601 | } 1602 | }, 1603 | "has-flag": { 1604 | "version": "3.0.0", 1605 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1606 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1607 | "dev": true 1608 | }, 1609 | "http-cache-semantics": { 1610 | "version": "4.1.1", 1611 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 1612 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 1613 | "dev": true 1614 | }, 1615 | "ieee754": { 1616 | "version": "1.2.1", 1617 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1618 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1619 | "dev": true 1620 | }, 1621 | "is-buffer": { 1622 | "version": "1.1.6", 1623 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1624 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1625 | "dev": true 1626 | }, 1627 | "is-function": { 1628 | "version": "1.0.2", 1629 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", 1630 | "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", 1631 | "dev": true 1632 | }, 1633 | "is-module": { 1634 | "version": "1.0.0", 1635 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1636 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 1637 | "dev": true 1638 | }, 1639 | "is-obj": { 1640 | "version": "1.0.1", 1641 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1642 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 1643 | "dev": true 1644 | }, 1645 | "jest-worker": { 1646 | "version": "26.3.0", 1647 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", 1648 | "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", 1649 | "dev": true, 1650 | "requires": { 1651 | "@types/node": "*", 1652 | "merge-stream": "^2.0.0", 1653 | "supports-color": "^7.0.0" 1654 | }, 1655 | "dependencies": { 1656 | "has-flag": { 1657 | "version": "4.0.0", 1658 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1659 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1660 | "dev": true 1661 | }, 1662 | "supports-color": { 1663 | "version": "7.2.0", 1664 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1665 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1666 | "dev": true, 1667 | "requires": { 1668 | "has-flag": "^4.0.0" 1669 | } 1670 | } 1671 | } 1672 | }, 1673 | "js-tokens": { 1674 | "version": "4.0.0", 1675 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1676 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1677 | "dev": true 1678 | }, 1679 | "json-buffer": { 1680 | "version": "3.0.0", 1681 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1682 | "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", 1683 | "dev": true 1684 | }, 1685 | "keyv": { 1686 | "version": "3.1.0", 1687 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1688 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1689 | "dev": true, 1690 | "requires": { 1691 | "json-buffer": "3.0.0" 1692 | } 1693 | }, 1694 | "layout-bmfont-text": { 1695 | "version": "1.3.4", 1696 | "resolved": "https://registry.npmjs.org/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz", 1697 | "integrity": "sha512-mceomHZ8W7pSKQhTdLvOe1Im4n37u8xa5Gr0J3KPCHRMO/9o7+goWIOzZcUUd+Xgzy3+22bvoIQ0OaN3LRtgaw==", 1698 | "dev": true, 1699 | "requires": { 1700 | "as-number": "^1.0.0", 1701 | "word-wrapper": "^1.0.7", 1702 | "xtend": "^4.0.0" 1703 | } 1704 | }, 1705 | "load-bmfont": { 1706 | "version": "1.4.1", 1707 | "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", 1708 | "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", 1709 | "dev": true, 1710 | "requires": { 1711 | "buffer-equal": "0.0.1", 1712 | "mime": "^1.3.4", 1713 | "parse-bmfont-ascii": "^1.0.3", 1714 | "parse-bmfont-binary": "^1.0.5", 1715 | "parse-bmfont-xml": "^1.1.4", 1716 | "phin": "^2.9.1", 1717 | "xhr": "^2.0.1", 1718 | "xtend": "^4.0.0" 1719 | } 1720 | }, 1721 | "lowercase-keys": { 1722 | "version": "1.0.1", 1723 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1724 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1725 | "dev": true 1726 | }, 1727 | "map-limit": { 1728 | "version": "0.0.1", 1729 | "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", 1730 | "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", 1731 | "dev": true, 1732 | "requires": { 1733 | "once": "~1.3.0" 1734 | } 1735 | }, 1736 | "merge-stream": { 1737 | "version": "2.0.0", 1738 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1739 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1740 | "dev": true 1741 | }, 1742 | "mime": { 1743 | "version": "1.6.0", 1744 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1745 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1746 | "dev": true 1747 | }, 1748 | "mimic-response": { 1749 | "version": "1.0.1", 1750 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1751 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1752 | "dev": true 1753 | }, 1754 | "min-document": { 1755 | "version": "2.19.0", 1756 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 1757 | "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", 1758 | "dev": true, 1759 | "requires": { 1760 | "dom-walk": "^0.1.0" 1761 | } 1762 | }, 1763 | "minimist": { 1764 | "version": "1.2.8", 1765 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1766 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1767 | "dev": true 1768 | }, 1769 | "ms": { 1770 | "version": "2.1.3", 1771 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1772 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1773 | "dev": true 1774 | }, 1775 | "new-array": { 1776 | "version": "1.0.0", 1777 | "resolved": "https://registry.npmjs.org/new-array/-/new-array-1.0.0.tgz", 1778 | "integrity": "sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A==", 1779 | "dev": true 1780 | }, 1781 | "nice-color-palettes": { 1782 | "version": "3.0.0", 1783 | "resolved": "https://registry.npmjs.org/nice-color-palettes/-/nice-color-palettes-3.0.0.tgz", 1784 | "integrity": "sha512-lL4AjabAAFi313tjrtmgm/bxCRzp4l3vCshojfV/ij3IPdtnRqv6Chcw+SqJUhbe7g3o3BecaqCJYUNLswGBhQ==", 1785 | "dev": true, 1786 | "requires": { 1787 | "got": "^9.2.2", 1788 | "map-limit": "0.0.1", 1789 | "minimist": "^1.2.0", 1790 | "new-array": "^1.0.0" 1791 | } 1792 | }, 1793 | "normalize-url": { 1794 | "version": "4.5.1", 1795 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", 1796 | "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", 1797 | "dev": true 1798 | }, 1799 | "once": { 1800 | "version": "1.3.3", 1801 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 1802 | "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", 1803 | "dev": true, 1804 | "requires": { 1805 | "wrappy": "1" 1806 | } 1807 | }, 1808 | "p-cancelable": { 1809 | "version": "1.1.0", 1810 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1811 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1812 | "dev": true 1813 | }, 1814 | "parse-bmfont-ascii": { 1815 | "version": "1.0.6", 1816 | "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 1817 | "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", 1818 | "dev": true 1819 | }, 1820 | "parse-bmfont-binary": { 1821 | "version": "1.0.6", 1822 | "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 1823 | "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", 1824 | "dev": true 1825 | }, 1826 | "parse-bmfont-xml": { 1827 | "version": "1.1.4", 1828 | "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", 1829 | "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", 1830 | "dev": true, 1831 | "requires": { 1832 | "xml-parse-from-string": "^1.0.0", 1833 | "xml2js": "^0.4.5" 1834 | } 1835 | }, 1836 | "parse-headers": { 1837 | "version": "2.0.5", 1838 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", 1839 | "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", 1840 | "dev": true 1841 | }, 1842 | "path-parse": { 1843 | "version": "1.0.7", 1844 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1845 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1846 | "dev": true 1847 | }, 1848 | "phin": { 1849 | "version": "2.9.3", 1850 | "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", 1851 | "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", 1852 | "dev": true 1853 | }, 1854 | "prepend-http": { 1855 | "version": "2.0.0", 1856 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1857 | "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", 1858 | "dev": true 1859 | }, 1860 | "process": { 1861 | "version": "0.11.10", 1862 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1863 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 1864 | "dev": true 1865 | }, 1866 | "pump": { 1867 | "version": "3.0.2", 1868 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", 1869 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", 1870 | "dev": true, 1871 | "requires": { 1872 | "end-of-stream": "^1.1.0", 1873 | "once": "^1.3.1" 1874 | } 1875 | }, 1876 | "quad-indices": { 1877 | "version": "2.0.1", 1878 | "resolved": "https://registry.npmjs.org/quad-indices/-/quad-indices-2.0.1.tgz", 1879 | "integrity": "sha512-6jtmCsEbGAh5npThXrBaubbTjPcF0rMbn57XCJVI7LkW8PUT56V+uIrRCCWCn85PSgJC9v8Pm5tnJDwmOBewvA==", 1880 | "dev": true, 1881 | "requires": { 1882 | "an-array": "^1.0.0", 1883 | "dtype": "^2.0.0", 1884 | "is-buffer": "^1.0.2" 1885 | } 1886 | }, 1887 | "randombytes": { 1888 | "version": "2.1.0", 1889 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1890 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1891 | "dev": true, 1892 | "requires": { 1893 | "safe-buffer": "^5.1.0" 1894 | } 1895 | }, 1896 | "require-from-string": { 1897 | "version": "2.0.2", 1898 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1899 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" 1900 | }, 1901 | "resolve": { 1902 | "version": "1.17.0", 1903 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1904 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1905 | "dev": true, 1906 | "requires": { 1907 | "path-parse": "^1.0.6" 1908 | } 1909 | }, 1910 | "responselike": { 1911 | "version": "1.0.2", 1912 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1913 | "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", 1914 | "dev": true, 1915 | "requires": { 1916 | "lowercase-keys": "^1.0.0" 1917 | } 1918 | }, 1919 | "rollup": { 1920 | "version": "2.79.2", 1921 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", 1922 | "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", 1923 | "dev": true, 1924 | "requires": { 1925 | "fsevents": "~2.3.2" 1926 | } 1927 | }, 1928 | "rollup-plugin-node-resolve": { 1929 | "version": "5.2.0", 1930 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", 1931 | "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", 1932 | "dev": true, 1933 | "requires": { 1934 | "@types/resolve": "0.0.8", 1935 | "builtin-modules": "^3.1.0", 1936 | "is-module": "^1.0.0", 1937 | "resolve": "^1.11.1", 1938 | "rollup-pluginutils": "^2.8.1" 1939 | } 1940 | }, 1941 | "rollup-plugin-terser": { 1942 | "version": "7.0.2", 1943 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1944 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1945 | "dev": true, 1946 | "requires": { 1947 | "@babel/code-frame": "^7.10.4", 1948 | "jest-worker": "^26.2.1", 1949 | "serialize-javascript": "^4.0.0", 1950 | "terser": "^5.0.0" 1951 | } 1952 | }, 1953 | "rollup-pluginutils": { 1954 | "version": "2.8.2", 1955 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1956 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1957 | "dev": true, 1958 | "requires": { 1959 | "estree-walker": "^0.6.1" 1960 | } 1961 | }, 1962 | "safe-buffer": { 1963 | "version": "5.2.1", 1964 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1965 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1966 | "dev": true 1967 | }, 1968 | "sax": { 1969 | "version": "1.2.4", 1970 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1971 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 1972 | "dev": true 1973 | }, 1974 | "serialize-javascript": { 1975 | "version": "4.0.0", 1976 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1977 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1978 | "dev": true, 1979 | "requires": { 1980 | "randombytes": "^2.1.0" 1981 | } 1982 | }, 1983 | "source-map": { 1984 | "version": "0.6.1", 1985 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1986 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1987 | "dev": true 1988 | }, 1989 | "source-map-support": { 1990 | "version": "0.5.21", 1991 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1992 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1993 | "dev": true, 1994 | "requires": { 1995 | "buffer-from": "^1.0.0", 1996 | "source-map": "^0.6.0" 1997 | } 1998 | }, 1999 | "super-animejs": { 2000 | "version": "3.1.0", 2001 | "resolved": "https://registry.npmjs.org/super-animejs/-/super-animejs-3.1.0.tgz", 2002 | "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==", 2003 | "dev": true 2004 | }, 2005 | "supports-color": { 2006 | "version": "5.5.0", 2007 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2008 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2009 | "dev": true, 2010 | "requires": { 2011 | "has-flag": "^3.0.0" 2012 | } 2013 | }, 2014 | "terser": { 2015 | "version": "5.14.2", 2016 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", 2017 | "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", 2018 | "dev": true, 2019 | "requires": { 2020 | "@jridgewell/source-map": "^0.3.2", 2021 | "acorn": "^8.5.0", 2022 | "commander": "^2.20.0", 2023 | "source-map-support": "~0.5.20" 2024 | } 2025 | }, 2026 | "three": { 2027 | "version": "0.171.0", 2028 | "resolved": "https://registry.npmjs.org/three/-/three-0.171.0.tgz", 2029 | "integrity": "sha512-Y/lAXPaKZPcEdkKjh0JOAHVv8OOnv/NDJqm0wjfCzyQmfKxV7zvkwsnBgPBKTzJHToSOhRGQAGbPJObT59B/PQ==", 2030 | "peer": true 2031 | }, 2032 | "three-bmfont-text": { 2033 | "version": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#eed4878795be9b3e38cf6aec6b903f56acd1f695", 2034 | "integrity": "sha512-FDlyR8SyHQ0Ek38qBx5Hg/AwPuBI/1w/QWpMgzw19Vn81xsDNFTOXJpU0HcvI78C72wwXjJ3T7+EX7k2geDV4Q==", 2035 | "dev": true, 2036 | "from": "three-bmfont-text@github:dmarcos/three-bmfont-text#eed4878795be9b3e38cf6aec6b903f56acd1f695", 2037 | "requires": { 2038 | "array-shuffle": "^1.0.1", 2039 | "layout-bmfont-text": "^1.2.0", 2040 | "nice-color-palettes": "^3.0.0", 2041 | "quad-indices": "^2.0.1" 2042 | } 2043 | }, 2044 | "to-readable-stream": { 2045 | "version": "1.0.0", 2046 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 2047 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 2048 | "dev": true 2049 | }, 2050 | "troika-three-text": { 2051 | "version": "0.52.4", 2052 | "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.52.4.tgz", 2053 | "integrity": "sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg==", 2054 | "requires": { 2055 | "bidi-js": "^1.0.2", 2056 | "troika-three-utils": "^0.52.4", 2057 | "troika-worker-utils": "^0.52.0", 2058 | "webgl-sdf-generator": "1.1.1" 2059 | } 2060 | }, 2061 | "troika-three-utils": { 2062 | "version": "0.52.4", 2063 | "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.52.4.tgz", 2064 | "integrity": "sha512-NORAStSVa/BDiG52Mfudk4j1FG4jC4ILutB3foPnfGbOeIs9+G5vZLa0pnmnaftZUGm4UwSoqEpWdqvC7zms3A==", 2065 | "requires": {} 2066 | }, 2067 | "troika-worker-utils": { 2068 | "version": "0.52.0", 2069 | "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.52.0.tgz", 2070 | "integrity": "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==" 2071 | }, 2072 | "url-parse-lax": { 2073 | "version": "3.0.0", 2074 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 2075 | "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", 2076 | "dev": true, 2077 | "requires": { 2078 | "prepend-http": "^2.0.0" 2079 | } 2080 | }, 2081 | "webgl-sdf-generator": { 2082 | "version": "1.1.1", 2083 | "resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz", 2084 | "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==" 2085 | }, 2086 | "word-wrapper": { 2087 | "version": "1.0.7", 2088 | "resolved": "https://registry.npmjs.org/word-wrapper/-/word-wrapper-1.0.7.tgz", 2089 | "integrity": "sha512-VOPBFCm9b6FyYKQYfn9AVn2dQvdR/YOVFV6IBRA1TBMJWKffvhEX1af6FMGrttILs2Q9ikCRhLqkbY2weW6dOQ==", 2090 | "dev": true 2091 | }, 2092 | "wrappy": { 2093 | "version": "1.0.2", 2094 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2095 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2096 | "dev": true 2097 | }, 2098 | "xhr": { 2099 | "version": "2.6.0", 2100 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", 2101 | "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", 2102 | "dev": true, 2103 | "requires": { 2104 | "global": "~4.4.0", 2105 | "is-function": "^1.0.1", 2106 | "parse-headers": "^2.0.0", 2107 | "xtend": "^4.0.0" 2108 | } 2109 | }, 2110 | "xml-parse-from-string": { 2111 | "version": "1.0.1", 2112 | "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 2113 | "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", 2114 | "dev": true 2115 | }, 2116 | "xml2js": { 2117 | "version": "0.4.23", 2118 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", 2119 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", 2120 | "dev": true, 2121 | "requires": { 2122 | "sax": ">=0.6.0", 2123 | "xmlbuilder": "~11.0.0" 2124 | } 2125 | }, 2126 | "xmlbuilder": { 2127 | "version": "11.0.1", 2128 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 2129 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 2130 | "dev": true 2131 | }, 2132 | "xtend": { 2133 | "version": "4.0.2", 2134 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2135 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 2136 | "dev": true 2137 | } 2138 | } 2139 | } 2140 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aframe-troika-text", 3 | "version": "0.14.0", 4 | "description": "An A-Frame component to render text using the Troika 3D text renderer ", 5 | "main": "dist/aframe-troika-text.js", 6 | "author": "Jason Johnston", 7 | "license": "MIT", 8 | "scripts": { 9 | "build": "rollup -c rollup.config.js" 10 | }, 11 | "dependencies": { 12 | "troika-three-text": "^0.52.2" 13 | }, 14 | "peerDependencies": { 15 | "aframe": "1.1.x - 1.7.x" 16 | }, 17 | "devDependencies": { 18 | "aframe": "^1.7.1", 19 | "rollup": "2.79.2", 20 | "rollup-plugin-node-resolve": "5.2.0", 21 | "rollup-plugin-terser": "7.0.2" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import nodeResolve from 'rollup-plugin-node-resolve' 2 | import {terser} from 'rollup-plugin-terser' 3 | 4 | export default { 5 | input: 'src/index.js', 6 | output: [ 7 | { 8 | format: 'iife', 9 | file: 'dist/aframe-troika-text.js', 10 | globals: { 11 | three: 'THREE', 12 | aframe: 'AFRAME' 13 | } 14 | }, 15 | { 16 | format: 'iife', 17 | file: 'dist/aframe-troika-text.min.js', 18 | globals: { 19 | three: 'THREE', 20 | aframe: 'AFRAME' 21 | }, 22 | sourcemap: true, 23 | plugins: [ 24 | terser() 25 | ] 26 | } 27 | ], 28 | external: ['three', 'aframe'], 29 | plugins: [ 30 | nodeResolve() 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /src/aframe-troika-text-component.js: -------------------------------------------------------------------------------- 1 | import aframe from 'aframe' 2 | import { Text } from 'troika-three-text' 3 | 4 | 5 | export var COMPONENT_NAME = 'troika-text' 6 | 7 | function numberOrPercent(defaultValue) { 8 | return { 9 | default: defaultValue, 10 | parse: function(value) { 11 | if (typeof value === 'string' && value.indexOf('%') > 0) { 12 | return value 13 | } 14 | value = +value 15 | return isNaN(value) ? 0 : value 16 | }, 17 | stringify: function(value) { 18 | return '' + value 19 | } 20 | } 21 | } 22 | 23 | aframe.registerComponent(COMPONENT_NAME, { 24 | schema: { 25 | align: {type: 'string', default: 'left', oneOf: ['left', 'right', 'center', 'justify']}, 26 | anchor: {default: 'center', oneOf: ['left', 'right', 'center', 'align']}, 27 | baseline: {default: 'center', oneOf: ['top', 'center', 'bottom']}, 28 | clipRect: { 29 | type: 'string', 30 | default: '', 31 | parse: function(value) { 32 | if (Array.isArray(value)) { 33 | return value; 34 | } 35 | if (value) { 36 | value = value.split(/[\s,]+/).reduce(function(out, val) { 37 | val = +val 38 | if (!isNaN(val)) { 39 | out.push(val) 40 | } 41 | return out 42 | }, []) 43 | } 44 | return value && value.length === 4 ? value : null 45 | }, 46 | stringify: function(value) { 47 | return value ? value.join(' ') : '' 48 | } 49 | }, 50 | color: {type: 'color', default: '#FFF'}, 51 | colorRanges: { // experimental 52 | type: 'string', 53 | default: null, 54 | parse: function(value) { 55 | return typeof value === 'string' ? JSON.parse(value) : value 56 | }, 57 | stringify: JSON.stringify 58 | }, 59 | curveRadius: {type: 'number', default: 0}, 60 | depthOffset: {type: 'number', default: 0}, 61 | direction: {type: 'string', default: 'auto', oneOf: ['auto', 'ltr', 'rtl']}, 62 | fillOpacity: {type: 'number', default: 1}, 63 | font: {type: 'string'}, 64 | fontSize: {type: 'number', default: 0.2}, 65 | letterSpacing: {type: 'number', default: 0}, 66 | lineHeight: {type: 'number'}, 67 | maxWidth: {type: 'number', default: Infinity}, 68 | outlineBlur: numberOrPercent(0), 69 | outlineColor: {type: 'color', default: '#000'}, 70 | outlineOffsetX: numberOrPercent(0), 71 | outlineOffsetY: numberOrPercent(0), 72 | outlineOpacity: {type: 'number', default: 1}, 73 | outlineWidth: numberOrPercent(0), 74 | overflowWrap: {type: 'string', default: 'normal', oneOf: ['normal', 'break-word']}, 75 | strokeColor: {type: 'color', default: 'grey'}, 76 | strokeOpacity: {type: 'number', default: 1}, 77 | strokeWidth: numberOrPercent(0), 78 | textIndent: {type: 'number', default: 0}, 79 | unicodeFontsURL: {type: 'string', default: ''}, 80 | value: {type: 'string'}, 81 | whiteSpace: {default: 'normal', oneOf: ['normal', 'nowrap']} 82 | 83 | // attrs that can be configured via troika-text-material: 84 | // opacity: {type: 'number', default: 1.0}, 85 | // transparent: {default: true}, 86 | // side: {default: 'front', oneOf: ['front', 'back', 'double']}, 87 | }, 88 | 89 | /** 90 | * Called once when component is attached. Generally for initial setup. 91 | */ 92 | init: function () { 93 | // If we're being applied as a component attached to a generic a-entity, create an 94 | // anonymous sub-entity that we can use to isolate the text mesh and the material 95 | // component that should apply to it. If we're a primitive, no isolation is needed. 96 | var textEntity 97 | var isPrimitive = this.el.tagName.toLowerCase() === 'a-troika-text' 98 | if (isPrimitive) { 99 | textEntity = this.el 100 | } else { 101 | textEntity = document.createElement('a-entity') 102 | this.el.appendChild(textEntity) 103 | } 104 | this.troikaTextEntity = textEntity 105 | 106 | // Create Text mesh and add it to the entity as the 'mesh' object 107 | var textMesh = this.troikaTextMesh = new Text() 108 | textEntity.setObject3D('mesh', textMesh) 109 | }, 110 | 111 | /** 112 | * Called when component is attached and when component data changes. 113 | * Generally modifies the entity based on the data. 114 | */ 115 | update: function () { 116 | var data = this.data 117 | var mesh = this.troikaTextMesh 118 | var entity = this.troikaTextEntity 119 | var font = data.font 120 | 121 | // Update the text mesh 122 | mesh.text = (data.value || '') 123 | .replace(/\\n/g, '\n') 124 | .replace(/\\t/g, '\t') 125 | mesh.textAlign = data.align 126 | 127 | // Retrieve font path if preloaded in with unique id 128 | if (data.font.startsWith('#')) { 129 | const assetItem = document.querySelector(data.font); 130 | font = assetItem.getAttribute('src'); 131 | } 132 | 133 | mesh.anchorX = anchorMapping[data.anchor === 'align' ? data.align : data.anchor] || 'center' 134 | mesh.anchorY = baselineMapping[data.baseline] || 'middle' 135 | mesh.color = data.color 136 | mesh.colorRanges = data.colorRanges 137 | mesh.clipRect = data.clipRect 138 | mesh.curveRadius = data.curveRadius 139 | mesh.depthOffset = data.depthOffset || 0 140 | mesh.direction = data.direction 141 | mesh.fillOpacity = data.fillOpacity 142 | mesh.font = font //TODO allow aframe stock font names 143 | mesh.fontSize = data.fontSize 144 | mesh.letterSpacing = data.letterSpacing || 0 145 | mesh.lineHeight = data.lineHeight || 'normal' 146 | mesh.outlineBlur = data.outlineBlur 147 | mesh.outlineColor = data.outlineColor 148 | mesh.outlineOffsetX = data.outlineOffsetX 149 | mesh.outlineOffsetY = data.outlineOffsetY 150 | mesh.outlineOpacity = data.outlineOpacity 151 | mesh.outlineWidth = data.outlineWidth 152 | mesh.overflowWrap = data.overflowWrap 153 | mesh.strokeColor = data.strokeColor 154 | mesh.strokeOpacity = data.strokeOpacity 155 | mesh.strokeWidth = data.strokeWidth 156 | mesh.textIndent = data.textIndent 157 | mesh.unicodeFontsURL = data.unicodeFontsURL 158 | mesh.whiteSpace = data.whiteSpace 159 | mesh.maxWidth = data.maxWidth 160 | mesh.sync() 161 | 162 | // Pass material config down to child entity 163 | if (entity !== this.el) { 164 | var materialAttr = this.el.getAttribute('troika-text-material') 165 | if (materialAttr) { 166 | entity.setAttribute('material', materialAttr) 167 | } else { 168 | entity.removeAttribute('material') 169 | } 170 | } 171 | }, 172 | 173 | /** 174 | * Called when a component is removed (e.g., via removeAttribute). 175 | * Generally undoes all modifications to the entity. 176 | */ 177 | remove: function () { 178 | // Free memory 179 | this.troikaTextMesh.dispose() 180 | 181 | // If using sub-entity, remove it 182 | if (this.troikaTextEntity !== this.el) { 183 | this.el.removeChild(this.troikaTextEntity) 184 | } 185 | } 186 | 187 | }) 188 | 189 | 190 | var anchorMapping = { 191 | 'left': 'left', 192 | 'center': 'center', 193 | 'right': 'right' 194 | } 195 | var baselineMapping = { 196 | 'top': 'top', 197 | 'center': 'middle', 198 | 'bottom': 'bottom' 199 | } 200 | 201 | -------------------------------------------------------------------------------- /src/aframe-troika-text-primitive.js: -------------------------------------------------------------------------------- 1 | import aframe from 'aframe' 2 | import {COMPONENT_NAME} from './aframe-troika-text-component.js' 3 | 4 | 5 | var mappings = {} 6 | 7 | // From aframe's primitives.js utilities... 8 | var schema = aframe.components[COMPONENT_NAME].schema 9 | Object.keys(schema).map(function (prop) { 10 | // Hyphenate where there is camelCase. 11 | var attrName = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 12 | mappings[attrName] = COMPONENT_NAME + '.' + prop; 13 | }); 14 | 15 | 16 | aframe.registerPrimitive('a-troika-text', { 17 | defaultComponents: { 18 | 'troika-text': {} 19 | }, 20 | mappings: mappings 21 | }) 22 | 23 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | // Polyfill Three's rename of Math->MathUtils after the super-three fork 4 | (function(ThreedleDum) { 5 | if (!ThreedleDum.MathUtils) { 6 | ThreedleDum.MathUtils = ThreedleDum.Math 7 | } 8 | })(THREE) 9 | 10 | import './aframe-troika-text-component.js' 11 | import './aframe-troika-text-primitive.js' --------------------------------------------------------------------------------