├── .gitignore ├── .npmignore ├── .prettierrc.json ├── LICENSE ├── README-en.md ├── README.md ├── babel.config.js ├── dist ├── css │ └── app.css ├── favicon.ico ├── img │ └── logo.4bcba01c.png ├── index.html ├── js │ ├── app.3fb18b3f.js │ ├── datgui.3fb18b3f.js │ ├── vendors-app-datgui.3fb18b3f.js │ ├── vendors-app-vue.3fb18b3f.js │ └── vue.3fb18b3f.js └── media │ └── KBHD.eac0c14c.mov ├── lib ├── Video2ASCIIArt.umd.js └── index_2.html ├── package.json ├── postcss.config.js ├── public ├── favicon.ico ├── index.html └── index_2.html ├── script ├── webpack.analyze.js ├── webpack.config.js ├── webpack.dev.js ├── webpack.lib.js └── webpack.prod.js ├── src ├── App.vue ├── assets │ ├── KBHD.mov │ ├── logo.png │ ├── pause_icon.svg │ ├── play_icon.svg │ ├── showcase.png │ └── showcase.svg ├── components │ ├── ForkMe.vue │ └── Video2ASCIIArt │ │ ├── Processor.js │ │ ├── Video2ASCIIArt.vue │ │ └── index.js ├── index.js ├── main.js └── utils │ └── EventHandler.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | # /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | 23 | # Large file 24 | # *.mov 25 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src/ 2 | dist/ 3 | script/ 4 | public/ -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "bracketSpacing": true, 4 | "htmlWhitespaceSensitivity": "css", 5 | "insertPragma": false, 6 | "jsxBracketSameLine": false, 7 | "jsxSingleQuote": false, 8 | "printWidth": 80, 9 | "proseWrap": "preserve", 10 | "quoteProps": "as-needed", 11 | "requirePragma": false, 12 | "semi": false, 13 | "singleQuote": true, 14 | "trailingComma": "none", 15 | "useTabs": false, 16 | "tabWidth": 4 17 | } 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [2019] [YangCongming] 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. -------------------------------------------------------------------------------- /README-en.md: -------------------------------------------------------------------------------- 1 |

Video2ASCIIArt

2 |

🎥 🎨A Vue component that converts ordinary video into ASCII-Art-video in real time

3 | 4 |
5 | 6 | Video material source [KBHD](https://www.youtube.com/watch?v=OoY7zp8GkLI&t=2s) 7 | 8 | ![npm version](https://img.shields.io/npm/v/video2asciiart?style=flat-square) 9 | ![week download](https://img.shields.io/npm/dw/video2asciiart?style=flat-square) 10 | 11 | [English](./README-en.md) \| [中文](./README.md) 12 | 13 | ## 📒 Usage 14 | 15 | ### Install with npm 16 | 17 | [Try it](https://officialyoungx.github.io/Video2ASCIIArt/dist/) at once! 18 | 19 | ```shell 20 | $ npm install video2asciiart 21 | # or 22 | $ yarn add video2asciiart 23 | ``` 24 | 25 | ```vue 26 | 33 | 42 | ``` 43 | 44 | ### CDN ` 55 | 56 | 57 | 58 |
59 |      60 |          61 |          66 |      67 |
68 | 69 | 76 | ``` 77 | 78 | ### Component Attributes 79 | 80 | | Props Name | Type | Default | Description | 81 | | ---------- | ---------------- | --------- | -------------------------------------------------- | 82 | | charppi | `String\|Number` | `1` | Change the density of characters [0.25\|0.5\|1\|2] | 83 | | color | `String` | `#000000` | Controlling the color of characters (css like) | 84 | 85 | ## Contributing 86 | 87 | Welcome to pr && issue! 88 | 89 | ### Installation dependencies 90 | 91 | ``` 92 | Yarn install 93 | ``` 94 | 95 | ### Development (HMR) 96 | 97 | ``` 98 | Yarn run serve 99 | ``` 100 | 101 | ### Build the component 102 | 103 | ``` 104 | Yarn run build:lib 105 | ``` 106 | 107 | ### Build the demo 108 | 109 | ``` 110 | Yarn run build:demo 111 | ``` 112 | 113 | ## TODO 114 | 115 | - [ ] Memory optimization (currently open developer tools to view memory, there are obvious phased memory increments and GC, and it takes up a lot of memory) 116 | - [ ] Rich control features 117 | - [ ] Increase the dimension of the adjustable parameters of the character drawing 118 | - [x] resize 119 | 120 | ## License 121 | 122 | MIT 123 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Video2ASCIIArt

2 |

🎥 🎨一个将普通视频实时转换为字符画视频的Vue组件

3 | 4 |
5 | 6 | 视频素材来源[KBHD](https://www.youtube.com/watch?v=OoY7zp8GkLI&t=2s) 7 | 8 | ![npm version](https://img.shields.io/npm/v/video2asciiart?style=flat-square) 9 | ![week download](https://img.shields.io/npm/dw/video2asciiart?style=flat-square) 10 | 11 | [English](./README-en.md) \| [中文](./README.md) 12 | 13 | ## 📒 如何使用 14 | 15 | ### 通过 npm 引入 16 | 17 | [试玩儿](https://officialyoungx.github.io/Video2ASCIIArt/dist/) 18 | 19 | ```shell 20 | $ npm install video2asciiart 21 | # or 22 | $ yarn add video2asciiart 23 | ``` 24 | 25 | ```vue 26 | 33 | 42 | ``` 43 | 44 | ### CDN ` 54 | 55 | 56 | 57 |
58 | 59 | 60 | 65 | 66 |
67 | 68 | 75 | ``` 76 | 77 | ### 组件属性 78 | 79 | | Props Name | Type | Default | Description | 80 | | ---------- | ---------------- | --------- | ------------------------------- | 81 | | charppi | `String\|Number` | `1` | 改变字符的密度[0.25\|0.5\|1\|2] | 82 | | color | `String` | `#000000` | 控制字符的颜色 (css like) | 83 | 84 | ## ⛏️ 贡献代码 85 | 86 | 欢迎 pr && issue! 87 | 88 | ### 安装依赖 89 | 90 | ``` 91 | yarn install 92 | ``` 93 | 94 | ### 快速开发(HMR) 95 | 96 | ``` 97 | yarn run serve 98 | ``` 99 | 100 | ### 构建打包组件 101 | 102 | ``` 103 | yarn run build:lib 104 | ``` 105 | 106 | ### 构建打包 demo 107 | 108 | ``` 109 | yarn run build:demo 110 | ``` 111 | 112 | ## TODO 113 | 114 | - [ ] 内存优化(目前打开开发者工具查看内存,有比较明显的阶段性内存递增和 GC,而且占用的内存较大) 115 | - [ ] 丰富控件功能 116 | - [ ] 增加字符画的可调节参数的维度 117 | - [x] resize 118 | 119 | ## License 120 | 121 | MIT 122 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['@vue/app'] 3 | } 4 | -------------------------------------------------------------------------------- /dist/css/app.css: -------------------------------------------------------------------------------- 1 | .asciiart__main[data-v-21f32c94]{display:inline-block;width:100%;position:relative}.asciiart__video[data-v-21f32c94]{visibility:hidden;font-size:0}.asciiart__video video[data-v-21f32c94]{width:100%}.asciiart__canvas[data-v-21f32c94]{width:100%;position:absolute;top:0;left:0}.asciiart__canvas canvas[data-v-21f32c94]{width:100%}.asciiart__layer[data-v-21f32c94]{position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,0.6);pointer-events:none}.layer__play-button[data-v-21f32c94],.layer__pause-button[data-v-21f32c94]{margin:0;padding:0;border:none;outline:none;width:4rem;height:4rem;opacity:0.8;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);background-size:100% auto;background-position:center;background-repeat:no-repeat}.layer__play-button[data-v-21f32c94]{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTgxcHgiIGhlaWdodD0iMTIxcHgiIHZpZXdCb3g9IjAgMCAxODEgMTIxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA1Mi4yICg2NzE0NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+cGxheV9pY29uPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9InBsYXlfaWNvbiIgZmlsbD0iI0ZGRkZGRiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE3Ny4wMzkwNjIsMjMuOTU2MjUgQzE3NS4yMzkwNjIsMTMuMzU2MjUgMTY2LjgzOTA2Miw1LjU1NjI1IDE1Ni4yMzkwNjIsNC4xNTYyNSBDMTM0LjIzOTA2MiwxLjM1NjI1IDExMi4wMzkwNjIsMC4xNTYyNSA5MC4wMzkwNjI1LDAuMTU2MjUgQzY4LjAzOTA2MjUsMC4xNTYyNSA0NS44MzkwNjI1LDEuNTU2MjUgMjMuODM5MDYyNSw0LjE1NjI1IEMxMy4yMzkwNjI1LDUuNTU2MjUgNC44MzkwNjI1LDEzLjM1NjI1IDMuMDM5MDYyNSwyMy45NTYyNSBDMS4wMzkwNjI1LDM1Ljk1NjI1IDAuMDM5MDYyNSw0OC4xNTYyNSAwLjAzOTA2MjUsNjAuMTU2MjUgQzAuMDM5MDYyNSw3Mi4xNTYyNSAxLjAzOTA2MjUsODQuMzU2MjUgMy4wMzkwNjI1LDk2LjM1NjI1IEM0LjgzOTA2MjUsMTA2Ljk1NjI1IDEzLjIzOTA2MjUsMTE0Ljc1NjI1IDIzLjgzOTA2MjUsMTE2LjE1NjI1IEM0NS44MzkwNjI1LDExOC45NTYyNSA2OC4wMzkwNjI1LDEyMC4xNTYyNSA5MC4wMzkwNjI1LDEyMC4xNTYyNSBDMTEyLjAzOTA2MiwxMjAuMTU2MjUgMTM0LjIzOTA2MiwxMTguNzU2MjUgMTU2LjIzOTA2MiwxMTYuMTU2MjUgQzE2Ni44MzkwNjIsMTE0Ljc1NjI1IDE3NS4yMzkwNjIsMTA2Ljk1NjI1IDE3Ny4wMzkwNjIsOTYuMzU2MjUgQzE3OS4wMzkwNjIsODQuMzU2MjUgMTgwLjAzOTA2Miw3Mi4xNTYyNSAxODAuMDM5MDYyLDYwLjE1NjI1IEMxODAuMDM5MDYyLDQ4LjE1NjI1IDE3OS4wMzkwNjIsMzUuOTU2MjUgMTc3LjAzOTA2MiwyMy45NTYyNSBaIE0xMDcuMjM5MDYyLDY3LjE1NjI1IEMxMDQuNDM5MDYyLDcwLjE1NjI1IDEwMS4wMzkwNjIsNzIuOTU2MjUgOTcuMjM5MDYyNSw3NS41NTYyNSBDOTMuNjM5MDYyNSw3Ny45NTYyNSA4OS42MzkwNjI1LDgwLjE1NjI1IDg1LjYzOTA2MjUsODEuNzU2MjUgQzg0LjQzOTA2MjUsODIuMzU2MjUgODMuMDM5MDYyNSw4Mi41NTYyNSA4MS44MzkwNjI1LDgyLjU1NjI1IEM3Ny44MzkwNjI1LDgyLjU1NjI1IDc0LjIzOTA2MjUsODAuMTU2MjUgNzIuNjM5MDYyNSw3Ni4zNTYyNSBDNzIuNDM5MDYyNSw3NS45NTYyNSA3Mi40MzkwNjI1LDc1LjU1NjI1IDcyLjIzOTA2MjUsNzUuMTU2MjUgQzcwLjgzOTA2MjUsNzAuMTU2MjUgNzAuMjM5MDYyNSw2NS4xNTYyNSA3MC4yMzkwNjI1LDYwLjE1NjI1IEM3MC4yMzkwNjI1LDU1LjE1NjI1IDcwLjgzOTA2MjUsNTAuMTU2MjUgNzIuMjM5MDYyNSw0NS4xNTYyNSBDNzMuMDM5MDYyNSw0Mi41NTYyNSA3NC42MzkwNjI1LDQwLjM1NjI1IDc3LjAzOTA2MjUsMzkuMTU2MjUgQzc5LjQzOTA2MjUsMzcuNzU2MjUgODIuMDM5MDYyNSwzNy41NTYyNSA4NC42MzkwNjI1LDM4LjE1NjI1IEM4NS4wMzkwNjI1LDM4LjM1NjI1IDg1LjQzOTA2MjUsMzguMzU2MjUgODUuODM5MDYyNSwzOC41NTYyNSBDOTAuMjM5MDYyNSw0MC4zNTYyNSA5NC4wMzkwNjI1LDQyLjM1NjI1IDk3LjQzOTA2MjUsNDQuNzU2MjUgQzEwMS4wMzkwNjIsNDcuMTU2MjUgMTA0LjQzOTA2Miw0OS45NTYyNSAxMDcuNDM5MDYyLDUzLjE1NjI1IEMxMTEuMDM5MDYyLDU3LjE1NjI1IDExMS4wMzkwNjIsNjMuMzU2MjUgMTA3LjIzOTA2Miw2Ny4xNTYyNSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==)}.layer__pause-button[data-v-21f32c94]{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTgxcHgiIGhlaWdodD0iMTIxcHgiIHZpZXdCb3g9IjAgMCAxODEgMTIxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA1Mi4yICg2NzE0NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+cGF1c2VfaWNvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJwYXVzZV9pY29uIiBmaWxsPSIjZmZmZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgICAgICAgICA8cGF0aCBkPSJNMTc3LjAzOTA2MiwyMy45NTYyNSBDMTc1LjIzOTA2MiwxMy4zNTYyNSAxNjYuODM5MDYyLDUuNTU2MjUgMTU2LjIzOTA2Miw0LjE1NjI1IEMxMzQuMjM5MDYyLDEuMzU2MjUgMTEyLjAzOTA2MiwwLjE1NjI1IDkwLjAzOTA2MjUsMC4xNTYyNSBDNjguMDM5MDYyNSwwLjE1NjI1IDQ1LjgzOTA2MjUsMS41NTYyNSAyMy44MzkwNjI1LDQuMTU2MjUgQzEzLjIzOTA2MjUsNS41NTYyNSA0LjgzOTA2MjUsMTMuMzU2MjUgMy4wMzkwNjI1LDIzLjk1NjI1IEMxLjAzOTA2MjUsMzUuOTU2MjUgMC4wMzkwNjI1LDQ4LjE1NjI1IDAuMDM5MDYyNSw2MC4xNTYyNSBDMC4wMzkwNjI1LDcyLjE1NjI1IDEuMDM5MDYyNSw4NC4zNTYyNSAzLjAzOTA2MjUsOTYuMzU2MjUgQzQuODM5MDYyNSwxMDYuOTU2MjUgMTMuMjM5MDYyNSwxMTQuNzU2MjUgMjMuODM5MDYyNSwxMTYuMTU2MjUgQzQ1LjgzOTA2MjUsMTE4Ljk1NjI1IDY4LjAzOTA2MjUsMTIwLjE1NjI1IDkwLjAzOTA2MjUsMTIwLjE1NjI1IEMxMTIuMDM5MDYyLDEyMC4xNTYyNSAxMzQuMjM5MDYyLDExOC43NTYyNSAxNTYuMjM5MDYyLDExNi4xNTYyNSBDMTY2LjgzOTA2MiwxMTQuNzU2MjUgMTc1LjIzOTA2MiwxMDYuOTU2MjUgMTc3LjAzOTA2Miw5Ni4zNTYyNSBDMTc5LjAzOTA2Miw4NC4zNTYyNSAxODAuMDM5MDYyLDcyLjE1NjI1IDE4MC4wMzkwNjIsNjAuMTU2MjUgQzE4MC4wMzkwNjIsNDguMTU2MjUgMTc5LjAzOTA2MiwzNS45NTYyNSAxNzcuMDM5MDYyLDIzLjk1NjI1IFogTTEwMi41MzkwNjIsMzguMTU2MjUgTDEwNS41MzkwNjIsMzguMTU2MjUgQzEwOC4wMjQzNDQsMzguMTU2MjUgMTEwLjAzOTA2Miw0MC4xNzA5Njg2IDExMC4wMzkwNjIsNDIuNjU2MjUgTDExMC4wMzkwNjIsNzcuNjU2MjUgQzExMC4wMzkwNjIsODAuMTQxNTMxNCAxMDguMDI0MzQ0LDgyLjE1NjI1IDEwNS41MzkwNjIsODIuMTU2MjUgTDEwMi41MzkwNjIsODIuMTU2MjUgQzEwMC4wNTM3ODEsODIuMTU2MjUgOTguMDM5MDYyNSw4MC4xNDE1MzE0IDk4LjAzOTA2MjUsNzcuNjU2MjUgTDk4LjAzOTA2MjUsNDIuNjU2MjUgQzk4LjAzOTA2MjUsNDAuMTcwOTY4NiAxMDAuMDUzNzgxLDM4LjE1NjI1IDEwMi41MzkwNjIsMzguMTU2MjUgWiBNNzQuNTM5MDYyNSwzOC4xNTYyNSBMNzcuNTM5MDYyNSwzOC4xNTYyNSBDODAuMDI0MzQzOSwzOC4xNTYyNSA4Mi4wMzkwNjI1LDQwLjE3MDk2ODYgODIuMDM5MDYyNSw0Mi42NTYyNSBMODIuMDM5MDYyNSw3Ny42NTYyNSBDODIuMDM5MDYyNSw4MC4xNDE1MzE0IDgwLjAyNDM0MzksODIuMTU2MjUgNzcuNTM5MDYyNSw4Mi4xNTYyNSBMNzQuNTM5MDYyNSw4Mi4xNTYyNSBDNzIuMDUzNzgxMSw4Mi4xNTYyNSA3MC4wMzkwNjI1LDgwLjE0MTUzMTQgNzAuMDM5MDYyNSw3Ny42NTYyNSBMNzAuMDM5MDYyNSw0Mi42NTYyNSBDNzAuMDM5MDYyNSw0MC4xNzA5Njg2IDcyLjA1Mzc4MTEsMzguMTU2MjUgNzQuNTM5MDYyNSwzOC4xNTYyNSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==)}.fade-enter-active[data-v-21f32c94],.fade-leave-active[data-v-21f32c94]{-webkit-transition:opacity 0.3s ease;transition:opacity 0.3s ease}.fade-enter[data-v-21f32c94],.fade-leave-to[data-v-21f32c94]{opacity:0} 2 | 3 | 4 | *,*::before,*::after{margin:0;padding:0}#app{font-family:'Avenir', Helvetica, Arial, sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50;width:100%;min-height:100vh;-webkit-transition:background 0.3s ease-in-out;transition:background 0.3s ease-in-out}.app--dark-mode{background:black}.app__logo{width:2.5rem;margin-right:1rem;vertical-align:middle;-webkit-transition:-webkit-filter 0.3s ease-in-out;transition:-webkit-filter 0.3s ease-in-out;transition:filter 0.3s ease-in-out;transition:filter 0.3s ease-in-out, -webkit-filter 0.3s ease-in-out}.app__logo--dark-mode{-webkit-filter:invert(1);filter:invert(1)}.app__title{padding:4rem 0;text-align:center;-webkit-transition:color 0.3s ease-in-out;transition:color 0.3s ease-in-out}.app__title span{vertical-align:middle}.app__title--dark-mode{color:white}.grid-cell{width:80%;font-size:0;-webkit-transition:-webkit-box-shadow 0.3s ease-in-out;transition:-webkit-box-shadow 0.3s ease-in-out;transition:box-shadow 0.3s ease-in-out;transition:box-shadow 0.3s ease-in-out, -webkit-box-shadow 0.3s ease-in-out}.grid-cell:hover{-webkit-box-shadow:4px 10px 30px -10px rgba(0,0,0,0.3);box-shadow:4px 10px 30px -10px rgba(0,0,0,0.3)}.app__main{padding-top:2rem;display:grid;grid-template-columns:1fr 1fr;grid-gap:1rem;justify-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@media (max-width: 970px){.app__main{grid-template-columns:1fr}} 5 | 6 | -------------------------------------------------------------------------------- /dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/random-yang/Video2ASCIIArt/97d196e853ae77918abf85ee0d2005b82a86c793/dist/favicon.ico -------------------------------------------------------------------------------- /dist/img/logo.4bcba01c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/random-yang/Video2ASCIIArt/97d196e853ae77918abf85ee0d2005b82a86c793/dist/img/logo.4bcba01c.png -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | video2asciiart demo 9 | 10 | 11 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /dist/js/app.3fb18b3f.js: -------------------------------------------------------------------------------- 1 | !function(t){function n(n){for(var r,u,c=n[0],a=n[1],s=n[2],l=0,M=[];l0?r:e)(t)}},function(t,n,e){var r=e(24)("keys"),i=e(25);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,n,e){var r=e(75),i=e(14),o=e(9),u=e(23),c=e(8),a=e(36),s=Object.getOwnPropertyDescriptor;n.f=e(3)?s:function(t,n){if(t=o(t),n=u(n,!0),a)try{return s(t,n)}catch(t){}if(c(t,n))return i(!r.f.call(t,n),t[n])}},function(t,n,e){"use strict";var r,i,o=e(91),u=RegExp.prototype.exec,c=String.prototype.replace,a=u,s=(r=/a/,i=/b*/g,u.call(r,"a"),u.call(i,"a"),0!==r.lastIndex||0!==i.lastIndex),f=void 0!==/()??/.exec("")[1];(s||f)&&(a=function(t){var n,e,r,i,a=this;return f&&(e=new RegExp("^"+a.source+"$(?!\\s)",o.call(a))),s&&(n=a.lastIndex),r=u.call(a,t),s&&r&&(a.lastIndex=a.global?r.index+r[0].length:n),f&&r&&r.length>1&&c.call(r[0],e,(function(){for(i=1;idocument.F=Object<\/script>"),t.close(),a=t.F;r--;)delete a.prototype[o[r]];return a()};t.exports=Object.create||function(t,n){var e;return null!==t?(c.prototype=r(t),e=new c,c.prototype=null,e[u]=t):e=a(),void 0===n?e:i(e,n)}},function(t,n,e){var r=e(8),i=e(9),o=e(68)(!1),u=e(29)("IE_PROTO");t.exports=function(t,n){var e,c=i(t),a=0,s=[];for(e in c)e!=u&&r(c,e)&&s.push(e);for(;n.length>a;)r(c,e=n[a++])&&(~o(s,e)||s.push(e));return s}},function(t,n,e){var r=e(28),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,n,e){var r=e(6).f,i=e(8),o=e(1)("toStringTag");t.exports=function(t,n,e){t&&!i(t=e?t:t.prototype,o)&&r(t,o,{configurable:!0,value:n})}},function(t,n,e){var r=e(10);t.exports=function(t){return Object(r(t))}},function(t,n,e){var r=e(43),i=e(30).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},function(t,n){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},function(t,n){var e=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=e)},function(t,n,e){var r=e(100),i=e(101),o=e(103),u=Object.defineProperty;n.f=e(16)?Object.defineProperty:function(t,n,e){if(r(t),n=o(n,!0),r(e),i)try{return u(t,n,e)}catch(t){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},,,,,,function(t,n,e){t.exports=e(111)},function(t,n,e){t.exports=e.p+"img/logo.4bcba01c.png"},function(t,n,e){var r=e(6).f,i=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in i||e(3)&&r(i,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},function(t,n,e){"use strict";var r=e(61),i=e(62),o=e(26),u=e(9);t.exports=e(64)(Array,"Array",(function(t,n){this._t=u(t),this._i=0,this._k=n}),(function(){var t=this._t,n=this._k,e=this._i++;return!t||e>=t.length?(this._t=void 0,i(1)):i(0,"keys"==n?e:"values"==n?t[e]:[e,t[e]])}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(t,n,e){var r=e(1)("unscopables"),i=Array.prototype;null==i[r]&&e(5)(i,r,{}),t.exports=function(t){i[r][t]=!0}},function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},function(t,n,e){var r=e(15);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,n,e){"use strict";var r=e(39),i=e(11),o=e(12),u=e(5),c=e(26),a=e(66),s=e(45),f=e(71),l=e(1)("iterator"),M=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,n,e,h,y,g,N){a(e,n,h);var j,v,d,I=function(t){if(!M&&t in x)return x[t];switch(t){case"keys":case"values":return function(){return new e(this,t)}}return function(){return new e(this,t)}},w=n+" Iterator",T="values"==y,D=!1,x=t.prototype,z=x[l]||x["@@iterator"]||y&&x[y],S=z||I(y),L=y?T?I("entries"):S:void 0,A="Array"==n&&x.entries||z;if(A&&(d=f(A.call(new t)))!==Object.prototype&&d.next&&(s(d,w,!0),r||"function"==typeof d[l]||u(d,l,p)),T&&z&&"values"!==z.name&&(D=!0,S=function(){return z.call(this)}),r&&!N||!M&&!D&&x[l]||u(x,l,S),c[n]=S,c[w]=p,y)if(j={values:T?S:I("values"),keys:g?S:I("keys"),entries:L},N)for(v in j)v in x||o(x,v,j[v]);else i(i.P+i.F*(M||D),n,j);return j}},function(t,n,e){t.exports=e(24)("native-function-to-string",Function.toString)},function(t,n,e){"use strict";var r=e(42),i=e(14),o=e(45),u={};e(5)(u,e(1)("iterator"),(function(){return this})),t.exports=function(t,n,e){t.prototype=r(u,{next:i(1,e)}),o(t,n+" Iterator")}},function(t,n,e){var r=e(6),i=e(2),o=e(27);t.exports=e(3)?Object.defineProperties:function(t,n){i(t);for(var e,u=o(n),c=u.length,a=0;c>a;)r.f(t,e=u[a++],n[e]);return t}},function(t,n,e){var r=e(9),i=e(44),o=e(69);t.exports=function(t){return function(n,e,u){var c,a=r(n),s=i(a.length),f=o(u,s);if(t&&e!=e){for(;s>f;)if((c=a[f++])!=c)return!0}else for(;s>f;f++)if((t||f in a)&&a[f]===e)return t||f||0;return!t&&-1}}},function(t,n,e){var r=e(28),i=Math.max,o=Math.min;t.exports=function(t,n){return(t=r(t))<0?i(t+n,0):o(t,n)}},function(t,n,e){var r=e(0).document;t.exports=r&&r.documentElement},function(t,n,e){var r=e(8),i=e(46),o=e(29)("IE_PROTO"),u=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},function(t,n,e){"use strict";var r=e(0),i=e(8),o=e(15),u=e(73),c=e(23),a=e(4),s=e(47).f,f=e(31).f,l=e(6).f,M=e(76).trim,p=r.Number,h=p,y=p.prototype,g="Number"==o(e(42)(y)),N="trim"in String.prototype,j=function(t){var n=c(t,!1);if("string"==typeof n&&n.length>2){var e,r,i,o=(n=N?n.trim():M(n,3)).charCodeAt(0);if(43===o||45===o){if(88===(e=n.charCodeAt(2))||120===e)return NaN}else if(48===o){switch(n.charCodeAt(1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+n}for(var u,a=n.slice(2),s=0,f=a.length;si)return NaN;return parseInt(a,r)}}return+n};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function(t){var n=arguments.length<1?0:t,e=this;return e instanceof p&&(g?a((function(){y.valueOf.call(e)})):"Number"!=o(e))?u(new h(j(n)),e,p):j(n)};for(var v,d=e(3)?s(h):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),I=0;d.length>I;I++)i(h,v=d[I])&&!i(p,v)&&l(p,v,f(h,v));p.prototype=y,y.constructor=p,e(12)(r,"Number",p)}},function(t,n,e){var r=e(7),i=e(74).set;t.exports=function(t,n,e){var o,u=n.constructor;return u!==e&&"function"==typeof u&&(o=u.prototype)!==e.prototype&&r(o)&&i&&i(t,o),t}},function(t,n,e){var r=e(7),i=e(2),o=function(t,n){if(i(t),!r(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,n,r){try{(r=e(40)(Function.call,e(31).f(Object.prototype,"__proto__").set,2))(t,[]),n=!(t instanceof Array)}catch(t){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,e){var r=e(11),i=e(10),o=e(4),u=e(77),c="["+u+"]",a=RegExp("^"+c+c+"*"),s=RegExp(c+c+"*$"),f=function(t,n,e){var i={},c=o((function(){return!!u[t]()||"​…"!="​…"[t]()})),a=i[t]=c?n(l):u[t];e&&(i[e]=a),r(r.P+r.F*c,"String",i)},l=f.trim=function(t,n){return t=String(i(t)),1&n&&(t=t.replace(a,"")),2&n&&(t=t.replace(s,"")),t};t.exports=f},function(t,n){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,n,e){var r=e(11),i=e(79),o=e(9),u=e(31),c=e(81);r(r.S,"Object",{getOwnPropertyDescriptors:function(t){for(var n,e,r=o(t),a=u.f,s=i(r),f={},l=0;s.length>l;)void 0!==(e=a(r,n=s[l++]))&&c(f,n,e);return f}})},function(t,n,e){var r=e(47),i=e(80),o=e(2),u=e(0).Reflect;t.exports=u&&u.ownKeys||function(t){var n=r.f(o(t)),e=i.f;return e?n.concat(e(t)):n}},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n,e){"use strict";var r=e(6),i=e(14);t.exports=function(t,n,e){n in t?r.f(t,n,i(0,e)):t[n]=e}},function(t,n,e){var r=e(46),i=e(27);e(83)("keys",(function(){return function(t){return i(r(t))}}))},function(t,n,e){var r=e(11),i=e(13),o=e(4);t.exports=function(t,n){var e=(i.Object||{})[t]||Object[t],u={};u[t]=n(e),r(r.S+r.F*o((function(){e(1)})),"Object",u)}},function(t,n,e){"use strict";var r=e(85),i=e(2),o=e(86),u=e(87),c=e(44),a=e(89),s=e(32),f=e(4),l=Math.min,M=[].push,p=!f((function(){RegExp(4294967295,"y")}));e(92)("split",2,(function(t,n,e,f){var h;return h="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var i=String(this);if(void 0===t&&0===n)return[];if(!r(t))return e.call(i,t,n);for(var o,u,c,a=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,p=void 0===n?4294967295:n>>>0,h=new RegExp(t.source,f+"g");(o=s.call(h,i))&&!((u=h.lastIndex)>l&&(a.push(i.slice(l,o.index)),o.length>1&&o.index=p));)h.lastIndex===o.index&&h.lastIndex++;return l===i.length?!c&&h.test("")||a.push(""):a.push(i.slice(l)),a.length>p?a.slice(0,p):a}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,r){var i=t(this),o=null==e?void 0:e[n];return void 0!==o?o.call(e,i,r):h.call(String(i),e,r)},function(t,n){var r=f(h,t,this,n,h!==e);if(r.done)return r.value;var s=i(t),M=String(this),y=o(s,RegExp),g=s.unicode,N=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(p?"y":"g"),j=new y(p?s:"^(?:"+s.source+")",N),v=void 0===n?4294967295:n>>>0;if(0===v)return[];if(0===M.length)return null===a(j,M)?[M]:[];for(var d=0,I=0,w=[];I=s?t?"":void 0:(o=c.charCodeAt(a))<55296||o>56319||a+1===s||(u=c.charCodeAt(a+1))<56320||u>57343?t?c.charAt(a):o:t?c.slice(a,a+2):u-56320+(o-55296<<10)+65536}}},function(t,n,e){"use strict";var r=e(90),i=RegExp.prototype.exec;t.exports=function(t,n){var e=t.exec;if("function"==typeof e){var o=e.call(t,n);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,n)}},function(t,n,e){var r=e(15),i=e(1)("toStringTag"),o="Arguments"==r(function(){return arguments}());t.exports=function(t){var n,e,u;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=function(t,n){try{return t[n]}catch(t){}}(n=Object(t),i))?e:o?r(n):"Object"==(u=r(n))&&"function"==typeof n.callee?"Arguments":u}},function(t,n,e){"use strict";var r=e(2);t.exports=function(){var t=r(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},function(t,n,e){"use strict";e(93);var r=e(12),i=e(5),o=e(4),u=e(10),c=e(1),a=e(32),s=c("species"),f=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")})),l=function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var e="ab".split(t);return 2===e.length&&"a"===e[0]&&"b"===e[1]}();t.exports=function(t,n,e){var M=c(t),p=!o((function(){var n={};return n[M]=function(){return 7},7!=""[t](n)})),h=p?!o((function(){var n=!1,e=/a/;return e.exec=function(){return n=!0,null},"split"===t&&(e.constructor={},e.constructor[s]=function(){return e}),e[M](""),!n})):void 0;if(!p||!h||"replace"===t&&!f||"split"===t&&!l){var y=/./[M],g=e(u,M,""[t],(function(t,n,e,r,i){return n.exec===a?p&&!i?{done:!0,value:y.call(n,e,r)}:{done:!0,value:t.call(e,n,r)}:{done:!1}})),N=g[0],j=g[1];r(String.prototype,t,N),i(RegExp.prototype,M,2==n?function(t,n){return j.call(t,this,n)}:function(t){return j.call(t,this)})}}},function(t,n,e){"use strict";var r=e(32);e(11)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(t,n,e){e(95);var r=e(49).Object;t.exports=function(t,n,e){return r.defineProperty(t,n,e)}},function(t,n,e){var r=e(96);r(r.S+r.F*!e(16),"Object",{defineProperty:e(50).f})},function(t,n,e){var r=e(48),i=e(49),o=e(97),u=e(99),c=e(105),a=function(t,n,e){var s,f,l,M=t&a.F,p=t&a.G,h=t&a.S,y=t&a.P,g=t&a.B,N=t&a.W,j=p?i:i[n]||(i[n]={}),v=j.prototype,d=p?r:h?r[n]:(r[n]||{}).prototype;for(s in p&&(e=n),e)(f=!M&&d&&void 0!==d[s])&&c(j,s)||(l=f?d[s]:e[s],j[s]=p&&"function"!=typeof d[s]?e[s]:g&&f?o(l,r):N&&d[s]==l?function(t){var n=function(n,e,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,e)}return new t(n,e,r)}return t.apply(this,arguments)};return n.prototype=t.prototype,n}(l):y&&"function"==typeof l?o(Function.call,l):l,y&&((j.virtual||(j.virtual={}))[s]=l,t&a.R&&v&&!v[s]&&u(v,s,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,n,e){var r=e(98);t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,i){return t.call(n,e,r,i)}}return function(){return t.apply(n,arguments)}}},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n,e){var r=e(50),i=e(104);t.exports=e(16)?function(t,n,e){return r.f(t,n,i(1,e))}:function(t,n,e){return t[n]=e,t}},function(t,n,e){var r=e(33);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,n,e){t.exports=!e(16)&&!e(51)((function(){return 7!=Object.defineProperty(e(102)("div"),"a",{get:function(){return 7}}).a}))},function(t,n,e){var r=e(33),i=e(48).document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,n,e){var r=e(33);t.exports=function(t,n){if(!r(t))return t;var e,i;if(n&&"function"==typeof(e=t.toString)&&!r(i=e.call(t)))return i;if("function"==typeof(e=t.valueOf)&&!r(i=e.call(t)))return i;if(!n&&"function"==typeof(e=t.toString)&&!r(i=e.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},function(t,n){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTgxcHgiIGhlaWdodD0iMTIxcHgiIHZpZXdCb3g9IjAgMCAxODEgMTIxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA1Mi4yICg2NzE0NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+cGxheV9pY29uPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9InBsYXlfaWNvbiIgZmlsbD0iI0ZGRkZGRiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE3Ny4wMzkwNjIsMjMuOTU2MjUgQzE3NS4yMzkwNjIsMTMuMzU2MjUgMTY2LjgzOTA2Miw1LjU1NjI1IDE1Ni4yMzkwNjIsNC4xNTYyNSBDMTM0LjIzOTA2MiwxLjM1NjI1IDExMi4wMzkwNjIsMC4xNTYyNSA5MC4wMzkwNjI1LDAuMTU2MjUgQzY4LjAzOTA2MjUsMC4xNTYyNSA0NS44MzkwNjI1LDEuNTU2MjUgMjMuODM5MDYyNSw0LjE1NjI1IEMxMy4yMzkwNjI1LDUuNTU2MjUgNC44MzkwNjI1LDEzLjM1NjI1IDMuMDM5MDYyNSwyMy45NTYyNSBDMS4wMzkwNjI1LDM1Ljk1NjI1IDAuMDM5MDYyNSw0OC4xNTYyNSAwLjAzOTA2MjUsNjAuMTU2MjUgQzAuMDM5MDYyNSw3Mi4xNTYyNSAxLjAzOTA2MjUsODQuMzU2MjUgMy4wMzkwNjI1LDk2LjM1NjI1IEM0LjgzOTA2MjUsMTA2Ljk1NjI1IDEzLjIzOTA2MjUsMTE0Ljc1NjI1IDIzLjgzOTA2MjUsMTE2LjE1NjI1IEM0NS44MzkwNjI1LDExOC45NTYyNSA2OC4wMzkwNjI1LDEyMC4xNTYyNSA5MC4wMzkwNjI1LDEyMC4xNTYyNSBDMTEyLjAzOTA2MiwxMjAuMTU2MjUgMTM0LjIzOTA2MiwxMTguNzU2MjUgMTU2LjIzOTA2MiwxMTYuMTU2MjUgQzE2Ni44MzkwNjIsMTE0Ljc1NjI1IDE3NS4yMzkwNjIsMTA2Ljk1NjI1IDE3Ny4wMzkwNjIsOTYuMzU2MjUgQzE3OS4wMzkwNjIsODQuMzU2MjUgMTgwLjAzOTA2Miw3Mi4xNTYyNSAxODAuMDM5MDYyLDYwLjE1NjI1IEMxODAuMDM5MDYyLDQ4LjE1NjI1IDE3OS4wMzkwNjIsMzUuOTU2MjUgMTc3LjAzOTA2MiwyMy45NTYyNSBaIE0xMDcuMjM5MDYyLDY3LjE1NjI1IEMxMDQuNDM5MDYyLDcwLjE1NjI1IDEwMS4wMzkwNjIsNzIuOTU2MjUgOTcuMjM5MDYyNSw3NS41NTYyNSBDOTMuNjM5MDYyNSw3Ny45NTYyNSA4OS42MzkwNjI1LDgwLjE1NjI1IDg1LjYzOTA2MjUsODEuNzU2MjUgQzg0LjQzOTA2MjUsODIuMzU2MjUgODMuMDM5MDYyNSw4Mi41NTYyNSA4MS44MzkwNjI1LDgyLjU1NjI1IEM3Ny44MzkwNjI1LDgyLjU1NjI1IDc0LjIzOTA2MjUsODAuMTU2MjUgNzIuNjM5MDYyNSw3Ni4zNTYyNSBDNzIuNDM5MDYyNSw3NS45NTYyNSA3Mi40MzkwNjI1LDc1LjU1NjI1IDcyLjIzOTA2MjUsNzUuMTU2MjUgQzcwLjgzOTA2MjUsNzAuMTU2MjUgNzAuMjM5MDYyNSw2NS4xNTYyNSA3MC4yMzkwNjI1LDYwLjE1NjI1IEM3MC4yMzkwNjI1LDU1LjE1NjI1IDcwLjgzOTA2MjUsNTAuMTU2MjUgNzIuMjM5MDYyNSw0NS4xNTYyNSBDNzMuMDM5MDYyNSw0Mi41NTYyNSA3NC42MzkwNjI1LDQwLjM1NjI1IDc3LjAzOTA2MjUsMzkuMTU2MjUgQzc5LjQzOTA2MjUsMzcuNzU2MjUgODIuMDM5MDYyNSwzNy41NTYyNSA4NC42MzkwNjI1LDM4LjE1NjI1IEM4NS4wMzkwNjI1LDM4LjM1NjI1IDg1LjQzOTA2MjUsMzguMzU2MjUgODUuODM5MDYyNSwzOC41NTYyNSBDOTAuMjM5MDYyNSw0MC4zNTYyNSA5NC4wMzkwNjI1LDQyLjM1NjI1IDk3LjQzOTA2MjUsNDQuNzU2MjUgQzEwMS4wMzkwNjIsNDcuMTU2MjUgMTA0LjQzOTA2Miw0OS45NTYyNSAxMDcuNDM5MDYyLDUzLjE1NjI1IEMxMTEuMDM5MDYyLDU3LjE1NjI1IDExMS4wMzkwNjIsNjMuMzU2MjUgMTA3LjIzOTA2Miw2Ny4xNTYyNSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="},function(t,n){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTgxcHgiIGhlaWdodD0iMTIxcHgiIHZpZXdCb3g9IjAgMCAxODEgMTIxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA1Mi4yICg2NzE0NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+cGF1c2VfaWNvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJwYXVzZV9pY29uIiBmaWxsPSIjZmZmZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgICAgICAgICA8cGF0aCBkPSJNMTc3LjAzOTA2MiwyMy45NTYyNSBDMTc1LjIzOTA2MiwxMy4zNTYyNSAxNjYuODM5MDYyLDUuNTU2MjUgMTU2LjIzOTA2Miw0LjE1NjI1IEMxMzQuMjM5MDYyLDEuMzU2MjUgMTEyLjAzOTA2MiwwLjE1NjI1IDkwLjAzOTA2MjUsMC4xNTYyNSBDNjguMDM5MDYyNSwwLjE1NjI1IDQ1LjgzOTA2MjUsMS41NTYyNSAyMy44MzkwNjI1LDQuMTU2MjUgQzEzLjIzOTA2MjUsNS41NTYyNSA0LjgzOTA2MjUsMTMuMzU2MjUgMy4wMzkwNjI1LDIzLjk1NjI1IEMxLjAzOTA2MjUsMzUuOTU2MjUgMC4wMzkwNjI1LDQ4LjE1NjI1IDAuMDM5MDYyNSw2MC4xNTYyNSBDMC4wMzkwNjI1LDcyLjE1NjI1IDEuMDM5MDYyNSw4NC4zNTYyNSAzLjAzOTA2MjUsOTYuMzU2MjUgQzQuODM5MDYyNSwxMDYuOTU2MjUgMTMuMjM5MDYyNSwxMTQuNzU2MjUgMjMuODM5MDYyNSwxMTYuMTU2MjUgQzQ1LjgzOTA2MjUsMTE4Ljk1NjI1IDY4LjAzOTA2MjUsMTIwLjE1NjI1IDkwLjAzOTA2MjUsMTIwLjE1NjI1IEMxMTIuMDM5MDYyLDEyMC4xNTYyNSAxMzQuMjM5MDYyLDExOC43NTYyNSAxNTYuMjM5MDYyLDExNi4xNTYyNSBDMTY2LjgzOTA2MiwxMTQuNzU2MjUgMTc1LjIzOTA2MiwxMDYuOTU2MjUgMTc3LjAzOTA2Miw5Ni4zNTYyNSBDMTc5LjAzOTA2Miw4NC4zNTYyNSAxODAuMDM5MDYyLDcyLjE1NjI1IDE4MC4wMzkwNjIsNjAuMTU2MjUgQzE4MC4wMzkwNjIsNDguMTU2MjUgMTc5LjAzOTA2MiwzNS45NTYyNSAxNzcuMDM5MDYyLDIzLjk1NjI1IFogTTEwMi41MzkwNjIsMzguMTU2MjUgTDEwNS41MzkwNjIsMzguMTU2MjUgQzEwOC4wMjQzNDQsMzguMTU2MjUgMTEwLjAzOTA2Miw0MC4xNzA5Njg2IDExMC4wMzkwNjIsNDIuNjU2MjUgTDExMC4wMzkwNjIsNzcuNjU2MjUgQzExMC4wMzkwNjIsODAuMTQxNTMxNCAxMDguMDI0MzQ0LDgyLjE1NjI1IDEwNS41MzkwNjIsODIuMTU2MjUgTDEwMi41MzkwNjIsODIuMTU2MjUgQzEwMC4wNTM3ODEsODIuMTU2MjUgOTguMDM5MDYyNSw4MC4xNDE1MzE0IDk4LjAzOTA2MjUsNzcuNjU2MjUgTDk4LjAzOTA2MjUsNDIuNjU2MjUgQzk4LjAzOTA2MjUsNDAuMTcwOTY4NiAxMDAuMDUzNzgxLDM4LjE1NjI1IDEwMi41MzkwNjIsMzguMTU2MjUgWiBNNzQuNTM5MDYyNSwzOC4xNTYyNSBMNzcuNTM5MDYyNSwzOC4xNTYyNSBDODAuMDI0MzQzOSwzOC4xNTYyNSA4Mi4wMzkwNjI1LDQwLjE3MDk2ODYgODIuMDM5MDYyNSw0Mi42NTYyNSBMODIuMDM5MDYyNSw3Ny42NTYyNSBDODIuMDM5MDYyNSw4MC4xNDE1MzE0IDgwLjAyNDM0MzksODIuMTU2MjUgNzcuNTM5MDYyNSw4Mi4xNTYyNSBMNzQuNTM5MDYyNSw4Mi4xNTYyNSBDNzIuMDUzNzgxMSw4Mi4xNTYyNSA3MC4wMzkwNjI1LDgwLjE0MTUzMTQgNzAuMDM5MDYyNSw3Ny42NTYyNSBMNzAuMDM5MDYyNSw0Mi42NTYyNSBDNzAuMDM5MDYyNSw0MC4xNzA5Njg2IDcyLjA1Mzc4MTEsMzguMTU2MjUgNzQuNTM5MDYyNSwzOC4xNTYyNSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="},function(t,n,e){"use strict";var r=e(17);e.n(r).a},function(t,n,e){"use strict";var r=e(18);e.n(r).a},function(t,n,e){"use strict";var r=e(19);e.n(r).a},function(t,n,e){"use strict";e.r(n);var r=e(20),i=[function(){var t=this.$createElement,n=this._self._c||t;return n("div",{staticClass:"grid-cell"},[n("video",{staticStyle:{width:"100%"},attrs:{src:e(35),controls:"controls",crossorigin:""}})])}],o=e(34),u=(e(59),e(38),e(72),e(78),e(82),e(84),e(21)),c=e.n(u);function a(t,n,e){return n in t?c()(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function s(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function f(t,n){for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:{};this.options=p({},this.options,{},t)}},{key:"drawChars",value:function(t){var n=this,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,r=this.options.color;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.font="".concat(e,"px Courier"),this.ctx.fillStyle=r,t.split("\n").forEach((function(t,r){n.ctx.fillText(t,0,r*e)}))}},{key:"getFrameFromVideo",value:function(){this.frameLoaderCtx.drawImage(this.video,0,0,this.frameLoader.width,this.frameLoader.height)}},{key:"frameToChar",value:function(){for(var t=this.frameLoaderCtx.getImageData(0,0,this.frameLoader.width,this.frameLoader.height),n=t.data,e=t.width,r=t.height,i="",o=this.options.charppi,u=10/o,c=6/o,a=0;a=0;n--)t=[e[n].apply(this,t)];return t[0]}},each:function(e,t,n){if(e)if(i&&e.forEach&&e.forEach===i)e.forEach(t,n);else if(e.length===e.length+0){var o,r=void 0;for(r=0,o=e.length;r1?s.toArray(arguments):arguments[0];return s.each(a,(function(t){if(t.litmus(e))return s.each(t.conversions,(function(t,n){if(l=t.read(e),!1===d&&!1!==l)return d=l,l.conversionName=n,l.conversion=t,s.BREAK})),s.BREAK})),d},u=void 0,_={hsv_to_rgb:function(e,t,n){var o=Math.floor(e/60)%6,i=e/60-Math.floor(e/60),r=n*(1-t),s=n*(1-i*t),a=n*(1-(1-i)*t),l=[[n,a,r],[s,n,r],[r,n,a],[r,s,n],[a,r,n],[n,r,s]][o];return{r:255*l[0],g:255*l[1],b:255*l[2]}},rgb_to_hsv:function(e,t,n){var o=Math.min(e,t,n),i=Math.max(e,t,n),r=i-o,s=void 0;return 0===i?{h:NaN,s:0,v:0}:(s=e===i?(t-n)/r:t===i?2+(n-e)/r:4+(e-t)/r,(s/=6)<0&&(s+=1),{h:360*s,s:r/i,v:i/255})},rgb_to_hex:function(e,t,n){var o=this.hex_with_component(0,2,e);return o=this.hex_with_component(o,1,t),o=this.hex_with_component(o,0,n)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,n){return n<<(u=8*t)|e&~(255<-1?t.length-t.indexOf(".")-1:0}var R=function(e){function t(e,n,o){p(this,t);var i=b(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),r=o||{};return i.__min=r.min,i.__max=r.max,i.__step=r.step,s.isUndefined(i.__step)?0===i.initialValue?i.__impliedStep=1:i.__impliedStep=Math.pow(10,Math.floor(Math.log(Math.abs(i.initialValue))/Math.LN10))/10:i.__impliedStep=i.__step,i.__precision=L(i.__impliedStep),i}return g(t,e),f(t,[{key:"setValue",value:function(e){var n=e;return void 0!==this.__min&&nthis.__max&&(n=this.__max),void 0!==this.__step&&n%this.__step!=0&&(n=Math.round(n/this.__step)*this.__step),m(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"setValue",this).call(this,n)}},{key:"min",value:function(e){return this.__min=e,this}},{key:"max",value:function(e){return this.__max=e,this}},{key:"step",value:function(e){return this.__step=e,this.__impliedStep=e,this.__precision=L(e),this}}]),t}(x);var B=function(e){function t(e,n,o){p(this,t);var i=b(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,o));i.__truncationSuspended=!1;var r=i,a=void 0;function l(){r.__onFinishChange&&r.__onFinishChange.call(r,r.getValue())}function d(e){var t=a-e.clientY;r.setValue(r.getValue()+t*r.__impliedStep),a=e.clientY}function c(){k.unbind(window,"mousemove",d),k.unbind(window,"mouseup",c),l()}return i.__input=document.createElement("input"),i.__input.setAttribute("type","text"),k.bind(i.__input,"change",(function(){var e=parseFloat(r.__input.value);s.isNaN(e)||r.setValue(e)})),k.bind(i.__input,"blur",(function(){l()})),k.bind(i.__input,"mousedown",(function(e){k.bind(window,"mousemove",d),k.bind(window,"mouseup",c),a=e.clientY})),k.bind(i.__input,"keydown",(function(e){13===e.keyCode&&(r.__truncationSuspended=!0,this.blur(),r.__truncationSuspended=!1,l())})),i.updateDisplay(),i.domElement.appendChild(i.__input),i}return g(t,e),f(t,[{key:"updateDisplay",value:function(){var e,n,o;return this.__input.value=this.__truncationSuspended?this.getValue():(e=this.getValue(),n=this.__precision,o=Math.pow(10,n),Math.round(e*o)/o),m(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(R);function N(e,t,n,o,i){return o+(e-t)/(n-t)*(i-o)}var H=function(e){function t(e,n,o,i,r){p(this,t);var s=b(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,{min:o,max:i,step:r})),a=s;function l(e){e.preventDefault();var t=a.__background.getBoundingClientRect();return a.setValue(N(e.clientX,t.left,t.right,a.__min,a.__max)),!1}function d(){k.unbind(window,"mousemove",l),k.unbind(window,"mouseup",d),a.__onFinishChange&&a.__onFinishChange.call(a,a.getValue())}function c(e){var t=e.touches[0].clientX,n=a.__background.getBoundingClientRect();a.setValue(N(t,n.left,n.right,a.__min,a.__max))}function u(){k.unbind(window,"touchmove",c),k.unbind(window,"touchend",u),a.__onFinishChange&&a.__onFinishChange.call(a,a.getValue())}return s.__background=document.createElement("div"),s.__foreground=document.createElement("div"),k.bind(s.__background,"mousedown",(function(e){document.activeElement.blur(),k.bind(window,"mousemove",l),k.bind(window,"mouseup",d),l(e)})),k.bind(s.__background,"touchstart",(function(e){if(1!==e.touches.length)return;k.bind(window,"touchmove",c),k.bind(window,"touchend",u),c(e)})),k.addClass(s.__background,"slider"),k.addClass(s.__foreground,"slider-fg"),s.updateDisplay(),s.__background.appendChild(s.__foreground),s.domElement.appendChild(s.__background),s}return g(t,e),f(t,[{key:"updateDisplay",value:function(){var e=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*e+"%",m(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(R),F=function(e){function t(e,n,o){p(this,t);var i=b(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),r=i;return i.__button=document.createElement("div"),i.__button.innerHTML=void 0===o?"Fire":o,k.bind(i.__button,"click",(function(e){return e.preventDefault(),r.fire(),!1})),k.addClass(i.__button,"button"),i.domElement.appendChild(i.__button),i}return g(t,e),f(t,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),t}(x),P=function(e){function t(e,n){p(this,t);var o=b(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));o.__color=new v(o.getValue()),o.__temp=new v(0);var i=o;o.domElement=document.createElement("div"),k.makeSelectable(o.domElement,!1),o.__selector=document.createElement("div"),o.__selector.className="selector",o.__saturation_field=document.createElement("div"),o.__saturation_field.className="saturation-field",o.__field_knob=document.createElement("div"),o.__field_knob.className="field-knob",o.__field_knob_border="2px solid ",o.__hue_knob=document.createElement("div"),o.__hue_knob.className="hue-knob",o.__hue_field=document.createElement("div"),o.__hue_field.className="hue-field",o.__input=document.createElement("input"),o.__input.type="text",o.__input_textShadow="0 1px 1px ",k.bind(o.__input,"keydown",(function(e){13===e.keyCode&&h.call(this)})),k.bind(o.__input,"blur",h),k.bind(o.__selector,"mousedown",(function(){k.addClass(this,"drag").bind(window,"mouseup",(function(){k.removeClass(i.__selector,"drag")}))})),k.bind(o.__selector,"touchstart",(function(){k.addClass(this,"drag").bind(window,"touchend",(function(){k.removeClass(i.__selector,"drag")}))}));var r,a=document.createElement("div");function l(e){m(e),k.bind(window,"mousemove",m),k.bind(window,"touchmove",m),k.bind(window,"mouseup",u),k.bind(window,"touchend",u)}function d(e){g(e),k.bind(window,"mousemove",g),k.bind(window,"touchmove",g),k.bind(window,"mouseup",_),k.bind(window,"touchend",_)}function u(){k.unbind(window,"mousemove",m),k.unbind(window,"touchmove",m),k.unbind(window,"mouseup",u),k.unbind(window,"touchend",u),f()}function _(){k.unbind(window,"mousemove",g),k.unbind(window,"touchmove",g),k.unbind(window,"mouseup",_),k.unbind(window,"touchend",_),f()}function h(){var e=c(this.value);!1!==e?(i.__color.__state=e,i.setValue(i.__color.toOriginal())):this.value=i.__color.toString()}function f(){i.__onFinishChange&&i.__onFinishChange.call(i,i.__color.toOriginal())}function m(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=i.__saturation_field.getBoundingClientRect(),n=e.touches&&e.touches[0]||e,o=n.clientX,r=n.clientY,s=(o-t.left)/(t.right-t.left),a=1-(r-t.top)/(t.bottom-t.top);return a>1?a=1:a<0&&(a=0),s>1?s=1:s<0&&(s=0),i.__color.v=a,i.__color.s=s,i.setValue(i.__color.toOriginal()),!1}function g(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=i.__hue_field.getBoundingClientRect(),n=1-((e.touches&&e.touches[0]||e).clientY-t.top)/(t.bottom-t.top);return n>1?n=1:n<0&&(n=0),i.__color.h=360*n,i.setValue(i.__color.toOriginal()),!1}return s.extend(o.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),s.extend(o.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:o.__field_knob_border+(o.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),s.extend(o.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),s.extend(o.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),s.extend(a.style,{width:"100%",height:"100%",background:"none"}),V(a,"top","rgba(0,0,0,0)","#000"),s.extend(o.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),(r=o.__hue_field).style.background="",r.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",r.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",r.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",r.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",r.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",s.extend(o.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:o.__input_textShadow+"rgba(0,0,0,0.7)"}),k.bind(o.__saturation_field,"mousedown",l),k.bind(o.__saturation_field,"touchstart",l),k.bind(o.__field_knob,"mousedown",l),k.bind(o.__field_knob,"touchstart",l),k.bind(o.__hue_field,"mousedown",d),k.bind(o.__hue_field,"touchstart",d),o.__saturation_field.appendChild(a),o.__selector.appendChild(o.__field_knob),o.__selector.appendChild(o.__saturation_field),o.__selector.appendChild(o.__hue_field),o.__hue_field.appendChild(o.__hue_knob),o.domElement.appendChild(o.__input),o.domElement.appendChild(o.__selector),o.updateDisplay(),o}return g(t,e),f(t,[{key:"updateDisplay",value:function(){var e=c(this.getValue());if(!1!==e){var t=!1;s.each(v.COMPONENTS,(function(n){if(!s.isUndefined(e[n])&&!s.isUndefined(this.__color.__state[n])&&e[n]!==this.__color.__state[n])return t=!0,{}}),this),t&&s.extend(this.__color.__state,e)}s.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var n=this.__color.v<.5||this.__color.s>.5?255:0,o=255-n;s.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+n+","+n+","+n+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,V(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),s.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+n+","+n+","+n+")",textShadow:this.__input_textShadow+"rgba("+o+","+o+","+o+",.7)"})}}]),t}(x),D=["-moz-","-o-","-webkit-","-ms-",""];function V(e,t,n,o){e.style.background="",s.each(D,(function(i){e.style.cssText+="background: "+i+"linear-gradient("+t+", "+n+" 0%, "+o+" 100%); "}))}var j=function(e,t){var n=t||document,o=document.createElement("style");o.type="text/css",o.innerHTML=e;var i=n.getElementsByTagName("head")[0];try{i.appendChild(o)}catch(e){}},I='
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
',z=function(e,t){var n=e[t];return s.isArray(arguments[2])||s.isObject(arguments[2])?new O(e,t,arguments[2]):s.isNumber(n)?s.isNumber(arguments[2])&&s.isNumber(arguments[3])?s.isNumber(arguments[4])?new H(e,t,arguments[2],arguments[3],arguments[4]):new H(e,t,arguments[2],arguments[3]):s.isNumber(arguments[4])?new B(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new B(e,t,{min:arguments[2],max:arguments[3]}):s.isString(n)?new T(e,t):s.isFunction(n)?new F(e,t,""):s.isBoolean(n)?new S(e,t):null};var M=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)},G=function(){function e(){p(this,e),this.backgroundElement=document.createElement("div"),s.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),k.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),s.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var t=this;k.bind(this.backgroundElement,"click",(function(){t.hide()}))}return f(e,[{key:"show",value:function(){var e=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),s.defer((function(){e.backgroundElement.style.opacity=1,e.domElement.style.opacity=1,e.domElement.style.webkitTransform="scale(1)"}))}},{key:"hide",value:function(){var e=this,t=function t(){e.domElement.style.display="none",e.backgroundElement.style.display="none",k.unbind(e.domElement,"webkitTransitionEnd",t),k.unbind(e.domElement,"transitionend",t),k.unbind(e.domElement,"oTransitionEnd",t)};k.bind(this.domElement,"webkitTransitionEnd",t),k.bind(this.domElement,"transitionend",t),k.bind(this.domElement,"oTransitionEnd",t),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-k.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-k.getHeight(this.domElement)/2+"px"}}]),e}();j(function(e){if(e&&"undefined"!=typeof window){var t=document.createElement("style");return t.setAttribute("type","text/css"),t.innerHTML=e,document.head.appendChild(t),e}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"));var U="Default",X=function(){try{return!!window.localStorage}catch(e){return!1}}(),J=void 0,K=!0,Y=void 0,W=!1,Q=[],q=function e(t){var n=this,o=t||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),k.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],o=s.defaults(o,{closeOnTop:!1,autoPlace:!0,width:e.DEFAULT_WIDTH}),o=s.defaults(o,{resizable:o.autoPlace,hideable:o.autoPlace}),s.isUndefined(o.load)?o.load={preset:U}:o.preset&&(o.load.preset=o.preset),s.isUndefined(o.parent)&&o.hideable&&Q.push(this),o.resizable=s.isUndefined(o.parent)&&o.resizable,o.autoPlace&&s.isUndefined(o.scrollable)&&(o.scrollable=!0);var i,r=X&&"true"===localStorage.getItem(oe(this,"isLocal")),a=void 0,l=void 0;if(Object.defineProperties(this,{parent:{get:function(){return o.parent}},scrollable:{get:function(){return o.scrollable}},autoPlace:{get:function(){return o.autoPlace}},closeOnTop:{get:function(){return o.closeOnTop}},preset:{get:function(){return n.parent?n.getRoot().preset:o.load.preset},set:function(e){n.parent?n.getRoot().preset=e:o.load.preset=e,function(e){for(var t=0;t1){var o=n.__li.nextElementSibling;return n.remove(),ne(e,n.object,n.property,{before:o,factoryArgs:[s.toArray(arguments)]})}if(s.isArray(t)||s.isObject(t)){var i=n.__li.nextElementSibling;return n.remove(),ne(e,n.object,n.property,{before:i,factoryArgs:[t]})}},name:function(e){return n.__li.firstElementChild.firstElementChild.innerHTML=e,n},listen:function(){return n.__gui.listen(n),n},remove:function(){return n.__gui.remove(n),n}}),n instanceof H){var o=new B(n.object,n.property,{min:n.__min,max:n.__max,step:n.__step});s.each(["updateDisplay","onChange","onFinishChange","step","min","max"],(function(e){var t=n[e],i=o[e];n[e]=o[e]=function(){var e=Array.prototype.slice.call(arguments);return i.apply(o,e),t.apply(n,e)}})),k.addClass(t,"has-slider"),n.domElement.insertBefore(o.domElement,n.domElement.firstElementChild)}else if(n instanceof B){var i=function(t){if(s.isNumber(n.__min)&&s.isNumber(n.__max)){var o=n.__li.firstElementChild.firstElementChild.innerHTML,i=n.__gui.__listening.indexOf(n)>-1;n.remove();var r=ne(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[n.__min,n.__max,n.__step]});return r.name(o),i&&r.listen(),r}return t};n.min=s.compose(i,n.min),n.max=s.compose(i,n.max)}else n instanceof S?(k.bind(t,"click",(function(){k.fakeEvent(n.__checkbox,"click")})),k.bind(n.__checkbox,"click",(function(e){e.stopPropagation()}))):n instanceof F?(k.bind(t,"click",(function(){k.fakeEvent(n.__button,"click")})),k.bind(t,"mouseover",(function(){k.addClass(n.__button,"hover")})),k.bind(t,"mouseout",(function(){k.removeClass(n.__button,"hover")}))):n instanceof P&&(k.addClass(t,"color"),n.updateDisplay=s.compose((function(e){return t.style.borderLeftColor=n.__color.toString(),e}),n.updateDisplay),n.updateDisplay());n.setValue=s.compose((function(t){return e.getRoot().__preset_select&&n.isModified()&&ee(e.getRoot(),!0),t}),n.setValue)}(e,d,i),e.__controllers.push(i),i}function oe(e,t){return document.location.href+"."+t}function ie(e,t,n){var o=document.createElement("option");o.innerHTML=t,o.value=t,e.__preset_select.appendChild(o),n&&(e.__preset_select.selectedIndex=e.__preset_select.length-1)}function re(e,t){t.style.display=e.useLocalStorage?"block":"none"}function se(e){var t=e.__save_row=document.createElement("li");k.addClass(e.domElement,"has-save"),e.__ul.insertBefore(t,e.__ul.firstChild),k.addClass(t,"save-row");var n=document.createElement("span");n.innerHTML=" ",k.addClass(n,"button gears");var o=document.createElement("span");o.innerHTML="Save",k.addClass(o,"button"),k.addClass(o,"save");var i=document.createElement("span");i.innerHTML="New",k.addClass(i,"button"),k.addClass(i,"save-as");var r=document.createElement("span");r.innerHTML="Revert",k.addClass(r,"button"),k.addClass(r,"revert");var a=e.__preset_select=document.createElement("select");if(e.load&&e.load.remembered?s.each(e.load.remembered,(function(t,n){ie(e,n,n===e.preset)})):ie(e,U,!1),k.bind(a,"change",(function(){for(var t=0;t0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=de(this)),e.folders={},s.each(this.__folders,(function(t,n){e.folders[n]=t.getSaveObject()})),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=de(this),ee(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[U]=de(this,!0)),this.load.remembered[e]=de(this),this.preset=e,ie(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){s.each(this.__controllers,(function(t){this.getRoot().load.remembered?te(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())}),this),s.each(this.__folders,(function(e){e.revert(e)})),e||ee(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&function e(t){0!==t.length&&M.call(window,(function(){e(t)}));s.each(t,(function(e){e.updateDisplay()}))}(this.__listening)},updateDisplay:function(){s.each(this.__controllers,(function(e){e.updateDisplay()})),s.each(this.__folders,(function(e){e.updateDisplay()}))}});var ce={Color:v,math:_,interpret:c},ue={Controller:x,BooleanController:S,OptionController:O,StringController:T,NumberController:R,NumberControllerBox:B,NumberControllerSlider:H,FunctionController:F,ColorController:P},_e={dom:k},he={GUI:q},pe=q,fe={color:ce,controllers:ue,dom:_e,gui:he,GUI:pe};t.default=fe}}]); -------------------------------------------------------------------------------- /dist/js/vue.3fb18b3f.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(r){for(var n,l,f=r[0],i=r[1],p=r[2],c=0,s=[];c0?r:e)(t)}},function(t,n,e){var r=e(21)("keys"),o=e(22);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,n,e){var r=e(64),o=e(14),i=e(9),a=e(19),u=e(8),c=e(32),s=Object.getOwnPropertyDescriptor;n.f=e(3)?s:function(t,n){if(t=i(t),n=a(n,!0),c)try{return s(t,n)}catch(t){}if(u(t,n))return o(!r.f.call(t,n),t[n])}},function(t,n,e){"use strict";var r,o,i=e(80),a=RegExp.prototype.exec,u=String.prototype.replace,c=a,s=(r=/a/,o=/b*/g,a.call(r,"a"),a.call(o,"a"),0!==r.lastIndex||0!==o.lastIndex),f=void 0!==/()??/.exec("")[1];(s||f)&&(c=function(t){var n,e,r,o,c=this;return f&&(e=new RegExp("^"+c.source+"$(?!\\s)",i.call(c))),s&&(n=c.lastIndex),r=a.call(c,t),s&&r&&(c.lastIndex=c.global?r.index+r[0].length:n),f&&r&&r.length>1&&u.call(r[0],e,(function(){for(o=1;odocument.F=Object<\/script>"),t.close(),c=t.F;r--;)delete c.prototype[i[r]];return c()};t.exports=Object.create||function(t,n){var e;return null!==t?(u.prototype=r(t),e=new u,u.prototype=null,e[a]=t):e=c(),void 0===n?e:o(e,n)}},function(t,n,e){var r=e(8),o=e(9),i=e(57)(!1),a=e(26)("IE_PROTO");t.exports=function(t,n){var e,u=o(t),c=0,s=[];for(e in u)e!=a&&r(u,e)&&s.push(e);for(;n.length>c;)r(u,e=n[c++])&&(~i(s,e)||s.push(e));return s}},function(t,n,e){var r=e(25),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,n,e){var r=e(6).f,o=e(8),i=e(1)("toStringTag");t.exports=function(t,n,e){t&&!o(t=e?t:t.prototype,i)&&r(t,i,{configurable:!0,value:n})}},function(t,n,e){var r=e(10);t.exports=function(t){return Object(r(t))}},function(t,n,e){var r=e(38),o=e(27).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,n){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},function(t,n){var e=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=e)},function(t,n,e){var r=e(89),o=e(90),i=e(92),a=Object.defineProperty;n.f=e(16)?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return a(t,n,e)}catch(t){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTgxcHgiIGhlaWdodD0iMTIxcHgiIHZpZXdCb3g9IjAgMCAxODEgMTIxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA1Mi4yICg2NzE0NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+cGxheV9pY29uPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9InBsYXlfaWNvbiIgZmlsbD0iI0ZGRkZGRiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE3Ny4wMzkwNjIsMjMuOTU2MjUgQzE3NS4yMzkwNjIsMTMuMzU2MjUgMTY2LjgzOTA2Miw1LjU1NjI1IDE1Ni4yMzkwNjIsNC4xNTYyNSBDMTM0LjIzOTA2MiwxLjM1NjI1IDExMi4wMzkwNjIsMC4xNTYyNSA5MC4wMzkwNjI1LDAuMTU2MjUgQzY4LjAzOTA2MjUsMC4xNTYyNSA0NS44MzkwNjI1LDEuNTU2MjUgMjMuODM5MDYyNSw0LjE1NjI1IEMxMy4yMzkwNjI1LDUuNTU2MjUgNC44MzkwNjI1LDEzLjM1NjI1IDMuMDM5MDYyNSwyMy45NTYyNSBDMS4wMzkwNjI1LDM1Ljk1NjI1IDAuMDM5MDYyNSw0OC4xNTYyNSAwLjAzOTA2MjUsNjAuMTU2MjUgQzAuMDM5MDYyNSw3Mi4xNTYyNSAxLjAzOTA2MjUsODQuMzU2MjUgMy4wMzkwNjI1LDk2LjM1NjI1IEM0LjgzOTA2MjUsMTA2Ljk1NjI1IDEzLjIzOTA2MjUsMTE0Ljc1NjI1IDIzLjgzOTA2MjUsMTE2LjE1NjI1IEM0NS44MzkwNjI1LDExOC45NTYyNSA2OC4wMzkwNjI1LDEyMC4xNTYyNSA5MC4wMzkwNjI1LDEyMC4xNTYyNSBDMTEyLjAzOTA2MiwxMjAuMTU2MjUgMTM0LjIzOTA2MiwxMTguNzU2MjUgMTU2LjIzOTA2MiwxMTYuMTU2MjUgQzE2Ni44MzkwNjIsMTE0Ljc1NjI1IDE3NS4yMzkwNjIsMTA2Ljk1NjI1IDE3Ny4wMzkwNjIsOTYuMzU2MjUgQzE3OS4wMzkwNjIsODQuMzU2MjUgMTgwLjAzOTA2Miw3Mi4xNTYyNSAxODAuMDM5MDYyLDYwLjE1NjI1IEMxODAuMDM5MDYyLDQ4LjE1NjI1IDE3OS4wMzkwNjIsMzUuOTU2MjUgMTc3LjAzOTA2MiwyMy45NTYyNSBaIE0xMDcuMjM5MDYyLDY3LjE1NjI1IEMxMDQuNDM5MDYyLDcwLjE1NjI1IDEwMS4wMzkwNjIsNzIuOTU2MjUgOTcuMjM5MDYyNSw3NS41NTYyNSBDOTMuNjM5MDYyNSw3Ny45NTYyNSA4OS42MzkwNjI1LDgwLjE1NjI1IDg1LjYzOTA2MjUsODEuNzU2MjUgQzg0LjQzOTA2MjUsODIuMzU2MjUgODMuMDM5MDYyNSw4Mi41NTYyNSA4MS44MzkwNjI1LDgyLjU1NjI1IEM3Ny44MzkwNjI1LDgyLjU1NjI1IDc0LjIzOTA2MjUsODAuMTU2MjUgNzIuNjM5MDYyNSw3Ni4zNTYyNSBDNzIuNDM5MDYyNSw3NS45NTYyNSA3Mi40MzkwNjI1LDc1LjU1NjI1IDcyLjIzOTA2MjUsNzUuMTU2MjUgQzcwLjgzOTA2MjUsNzAuMTU2MjUgNzAuMjM5MDYyNSw2NS4xNTYyNSA3MC4yMzkwNjI1LDYwLjE1NjI1IEM3MC4yMzkwNjI1LDU1LjE1NjI1IDcwLjgzOTA2MjUsNTAuMTU2MjUgNzIuMjM5MDYyNSw0NS4xNTYyNSBDNzMuMDM5MDYyNSw0Mi41NTYyNSA3NC42MzkwNjI1LDQwLjM1NjI1IDc3LjAzOTA2MjUsMzkuMTU2MjUgQzc5LjQzOTA2MjUsMzcuNzU2MjUgODIuMDM5MDYyNSwzNy41NTYyNSA4NC42MzkwNjI1LDM4LjE1NjI1IEM4NS4wMzkwNjI1LDM4LjM1NjI1IDg1LjQzOTA2MjUsMzguMzU2MjUgODUuODM5MDYyNSwzOC41NTYyNSBDOTAuMjM5MDYyNSw0MC4zNTYyNSA5NC4wMzkwNjI1LDQyLjM1NjI1IDk3LjQzOTA2MjUsNDQuNzU2MjUgQzEwMS4wMzkwNjIsNDcuMTU2MjUgMTA0LjQzOTA2Miw0OS45NTYyNSAxMDcuNDM5MDYyLDUzLjE1NjI1IEMxMTEuMDM5MDYyLDU3LjE1NjI1IDExMS4wMzkwNjIsNjMuMzU2MjUgMTA3LjIzOTA2Miw2Ny4xNTYyNSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="},function(t,n){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTgxcHgiIGhlaWdodD0iMTIxcHgiIHZpZXdCb3g9IjAgMCAxODEgMTIxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA1Mi4yICg2NzE0NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+cGF1c2VfaWNvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJwYXVzZV9pY29uIiBmaWxsPSIjZmZmZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgICAgICAgICA8cGF0aCBkPSJNMTc3LjAzOTA2MiwyMy45NTYyNSBDMTc1LjIzOTA2MiwxMy4zNTYyNSAxNjYuODM5MDYyLDUuNTU2MjUgMTU2LjIzOTA2Miw0LjE1NjI1IEMxMzQuMjM5MDYyLDEuMzU2MjUgMTEyLjAzOTA2MiwwLjE1NjI1IDkwLjAzOTA2MjUsMC4xNTYyNSBDNjguMDM5MDYyNSwwLjE1NjI1IDQ1LjgzOTA2MjUsMS41NTYyNSAyMy44MzkwNjI1LDQuMTU2MjUgQzEzLjIzOTA2MjUsNS41NTYyNSA0LjgzOTA2MjUsMTMuMzU2MjUgMy4wMzkwNjI1LDIzLjk1NjI1IEMxLjAzOTA2MjUsMzUuOTU2MjUgMC4wMzkwNjI1LDQ4LjE1NjI1IDAuMDM5MDYyNSw2MC4xNTYyNSBDMC4wMzkwNjI1LDcyLjE1NjI1IDEuMDM5MDYyNSw4NC4zNTYyNSAzLjAzOTA2MjUsOTYuMzU2MjUgQzQuODM5MDYyNSwxMDYuOTU2MjUgMTMuMjM5MDYyNSwxMTQuNzU2MjUgMjMuODM5MDYyNSwxMTYuMTU2MjUgQzQ1LjgzOTA2MjUsMTE4Ljk1NjI1IDY4LjAzOTA2MjUsMTIwLjE1NjI1IDkwLjAzOTA2MjUsMTIwLjE1NjI1IEMxMTIuMDM5MDYyLDEyMC4xNTYyNSAxMzQuMjM5MDYyLDExOC43NTYyNSAxNTYuMjM5MDYyLDExNi4xNTYyNSBDMTY2LjgzOTA2MiwxMTQuNzU2MjUgMTc1LjIzOTA2MiwxMDYuOTU2MjUgMTc3LjAzOTA2Miw5Ni4zNTYyNSBDMTc5LjAzOTA2Miw4NC4zNTYyNSAxODAuMDM5MDYyLDcyLjE1NjI1IDE4MC4wMzkwNjIsNjAuMTU2MjUgQzE4MC4wMzkwNjIsNDguMTU2MjUgMTc5LjAzOTA2MiwzNS45NTYyNSAxNzcuMDM5MDYyLDIzLjk1NjI1IFogTTEwMi41MzkwNjIsMzguMTU2MjUgTDEwNS41MzkwNjIsMzguMTU2MjUgQzEwOC4wMjQzNDQsMzguMTU2MjUgMTEwLjAzOTA2Miw0MC4xNzA5Njg2IDExMC4wMzkwNjIsNDIuNjU2MjUgTDExMC4wMzkwNjIsNzcuNjU2MjUgQzExMC4wMzkwNjIsODAuMTQxNTMxNCAxMDguMDI0MzQ0LDgyLjE1NjI1IDEwNS41MzkwNjIsODIuMTU2MjUgTDEwMi41MzkwNjIsODIuMTU2MjUgQzEwMC4wNTM3ODEsODIuMTU2MjUgOTguMDM5MDYyNSw4MC4xNDE1MzE0IDk4LjAzOTA2MjUsNzcuNjU2MjUgTDk4LjAzOTA2MjUsNDIuNjU2MjUgQzk4LjAzOTA2MjUsNDAuMTcwOTY4NiAxMDAuMDUzNzgxLDM4LjE1NjI1IDEwMi41MzkwNjIsMzguMTU2MjUgWiBNNzQuNTM5MDYyNSwzOC4xNTYyNSBMNzcuNTM5MDYyNSwzOC4xNTYyNSBDODAuMDI0MzQzOSwzOC4xNTYyNSA4Mi4wMzkwNjI1LDQwLjE3MDk2ODYgODIuMDM5MDYyNSw0Mi42NTYyNSBMODIuMDM5MDYyNSw3Ny42NTYyNSBDODIuMDM5MDYyNSw4MC4xNDE1MzE0IDgwLjAyNDM0MzksODIuMTU2MjUgNzcuNTM5MDYyNSw4Mi4xNTYyNSBMNzQuNTM5MDYyNSw4Mi4xNTYyNSBDNzIuMDUzNzgxMSw4Mi4xNTYyNSA3MC4wMzkwNjI1LDgwLjE0MTUzMTQgNzAuMDM5MDYyNSw3Ny42NTYyNSBMNzAuMDM5MDYyNSw0Mi42NTYyNSBDNzAuMDM5MDYyNSw0MC4xNzA5Njg2IDcyLjA1Mzc4MTEsMzguMTU2MjUgNzQuNTM5MDYyNSwzOC4xNTYyNSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="},function(t,n,e){"use strict";var r=e(50),o=e(51),i=e(23),a=e(9);t.exports=e(53)(Array,"Array",(function(t,n){this._t=a(t),this._i=0,this._k=n}),(function(){var t=this._t,n=this._k,e=this._i++;return!t||e>=t.length?(this._t=void 0,o(1)):o(0,"keys"==n?e:"values"==n?t[e]:[e,t[e]])}),"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(t,n,e){var r=e(1)("unscopables"),o=Array.prototype;null==o[r]&&e(5)(o,r,{}),t.exports=function(t){o[r][t]=!0}},function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},function(t,n,e){var r=e(15);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,n,e){"use strict";var r=e(34),o=e(11),i=e(12),a=e(5),u=e(23),c=e(55),s=e(40),f=e(60),l=e(1)("iterator"),M=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,n,e,d,y,v,h){c(e,n,d);var g,N,j,I=function(t){if(!M&&t in D)return D[t];switch(t){case"keys":case"values":return function(){return new e(this,t)}}return function(){return new e(this,t)}},w=n+" Iterator",T="values"==y,x=!1,D=t.prototype,z=D[l]||D["@@iterator"]||y&&D[y],S=z||I(y),L=y?T?I("entries"):S:void 0,m="Array"==n&&D.entries||z;if(m&&(j=f(m.call(new t)))!==Object.prototype&&j.next&&(s(j,w,!0),r||"function"==typeof j[l]||a(j,l,p)),T&&z&&"values"!==z.name&&(x=!0,S=function(){return z.call(this)}),r&&!h||!M&&!x&&D[l]||a(D,l,S),u[n]=S,u[w]=p,y)if(g={values:T?S:I("values"),keys:v?S:I("keys"),entries:L},h)for(N in g)N in D||i(D,N,g[N]);else o(o.P+o.F*(M||x),n,g);return g}},function(t,n,e){t.exports=e(21)("native-function-to-string",Function.toString)},function(t,n,e){"use strict";var r=e(37),o=e(14),i=e(40),a={};e(5)(a,e(1)("iterator"),(function(){return this})),t.exports=function(t,n,e){t.prototype=r(a,{next:o(1,e)}),i(t,n+" Iterator")}},function(t,n,e){var r=e(6),o=e(2),i=e(24);t.exports=e(3)?Object.defineProperties:function(t,n){o(t);for(var e,a=i(n),u=a.length,c=0;u>c;)r.f(t,e=a[c++],n[e]);return t}},function(t,n,e){var r=e(9),o=e(39),i=e(58);t.exports=function(t){return function(n,e,a){var u,c=r(n),s=o(c.length),f=i(a,s);if(t&&e!=e){for(;s>f;)if((u=c[f++])!=u)return!0}else for(;s>f;f++)if((t||f in c)&&c[f]===e)return t||f||0;return!t&&-1}}},function(t,n,e){var r=e(25),o=Math.max,i=Math.min;t.exports=function(t,n){return(t=r(t))<0?o(t+n,0):i(t,n)}},function(t,n,e){var r=e(0).document;t.exports=r&&r.documentElement},function(t,n,e){var r=e(8),o=e(41),i=e(26)("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},function(t,n,e){"use strict";var r=e(0),o=e(8),i=e(15),a=e(62),u=e(19),c=e(4),s=e(42).f,f=e(28).f,l=e(6).f,M=e(65).trim,p=r.Number,d=p,y=p.prototype,v="Number"==i(e(37)(y)),h="trim"in String.prototype,g=function(t){var n=u(t,!1);if("string"==typeof n&&n.length>2){var e,r,o,i=(n=h?n.trim():M(n,3)).charCodeAt(0);if(43===i||45===i){if(88===(e=n.charCodeAt(2))||120===e)return NaN}else if(48===i){switch(n.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+n}for(var a,c=n.slice(2),s=0,f=c.length;so)return NaN;return parseInt(c,r)}}return+n};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function(t){var n=arguments.length<1?0:t,e=this;return e instanceof p&&(v?c((function(){y.valueOf.call(e)})):"Number"!=i(e))?a(new d(g(n)),e,p):g(n)};for(var N,j=e(3)?s(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),I=0;j.length>I;I++)o(d,N=j[I])&&!o(p,N)&&l(p,N,f(d,N));p.prototype=y,y.constructor=p,e(12)(r,"Number",p)}},function(t,n,e){var r=e(7),o=e(63).set;t.exports=function(t,n,e){var i,a=n.constructor;return a!==e&&"function"==typeof a&&(i=a.prototype)!==e.prototype&&r(i)&&o&&o(t,i),t}},function(t,n,e){var r=e(7),o=e(2),i=function(t,n){if(o(t),!r(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,n,r){try{(r=e(35)(Function.call,e(28).f(Object.prototype,"__proto__").set,2))(t,[]),n=!(t instanceof Array)}catch(t){n=!0}return function(t,e){return i(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:i}},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,e){var r=e(11),o=e(10),i=e(4),a=e(66),u="["+a+"]",c=RegExp("^"+u+u+"*"),s=RegExp(u+u+"*$"),f=function(t,n,e){var o={},u=i((function(){return!!a[t]()||"​…"!="​…"[t]()})),c=o[t]=u?n(l):a[t];e&&(o[e]=c),r(r.P+r.F*u,"String",o)},l=f.trim=function(t,n){return t=String(o(t)),1&n&&(t=t.replace(c,"")),2&n&&(t=t.replace(s,"")),t};t.exports=f},function(t,n){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,n,e){var r=e(11),o=e(68),i=e(9),a=e(28),u=e(70);r(r.S,"Object",{getOwnPropertyDescriptors:function(t){for(var n,e,r=i(t),c=a.f,s=o(r),f={},l=0;s.length>l;)void 0!==(e=c(r,n=s[l++]))&&u(f,n,e);return f}})},function(t,n,e){var r=e(42),o=e(69),i=e(2),a=e(0).Reflect;t.exports=a&&a.ownKeys||function(t){var n=r.f(i(t)),e=o.f;return e?n.concat(e(t)):n}},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n,e){"use strict";var r=e(6),o=e(14);t.exports=function(t,n,e){n in t?r.f(t,n,o(0,e)):t[n]=e}},function(t,n,e){var r=e(41),o=e(24);e(72)("keys",(function(){return function(t){return o(r(t))}}))},function(t,n,e){var r=e(11),o=e(13),i=e(4);t.exports=function(t,n){var e=(o.Object||{})[t]||Object[t],a={};a[t]=n(e),r(r.S+r.F*i((function(){e(1)})),"Object",a)}},function(t,n,e){"use strict";var r=e(74),o=e(2),i=e(75),a=e(76),u=e(39),c=e(78),s=e(29),f=e(4),l=Math.min,M=[].push,p=!f((function(){RegExp(4294967295,"y")}));e(81)("split",2,(function(t,n,e,f){var d;return d="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var o=String(this);if(void 0===t&&0===n)return[];if(!r(t))return e.call(o,t,n);for(var i,a,u,c=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,p=void 0===n?4294967295:n>>>0,d=new RegExp(t.source,f+"g");(i=s.call(d,o))&&!((a=d.lastIndex)>l&&(c.push(o.slice(l,i.index)),i.length>1&&i.index=p));)d.lastIndex===i.index&&d.lastIndex++;return l===o.length?!u&&d.test("")||c.push(""):c.push(o.slice(l)),c.length>p?c.slice(0,p):c}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,r){var o=t(this),i=null==e?void 0:e[n];return void 0!==i?i.call(e,o,r):d.call(String(o),e,r)},function(t,n){var r=f(d,t,this,n,d!==e);if(r.done)return r.value;var s=o(t),M=String(this),y=i(s,RegExp),v=s.unicode,h=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(p?"y":"g"),g=new y(p?s:"^(?:"+s.source+")",h),N=void 0===n?4294967295:n>>>0;if(0===N)return[];if(0===M.length)return null===c(g,M)?[M]:[];for(var j=0,I=0,w=[];I=s?t?"":void 0:(i=u.charCodeAt(c))<55296||i>56319||c+1===s||(a=u.charCodeAt(c+1))<56320||a>57343?t?u.charAt(c):i:t?u.slice(c,c+2):a-56320+(i-55296<<10)+65536}}},function(t,n,e){"use strict";var r=e(79),o=RegExp.prototype.exec;t.exports=function(t,n){var e=t.exec;if("function"==typeof e){var i=e.call(t,n);if("object"!=typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return o.call(t,n)}},function(t,n,e){var r=e(15),o=e(1)("toStringTag"),i="Arguments"==r(function(){return arguments}());t.exports=function(t){var n,e,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=function(t,n){try{return t[n]}catch(t){}}(n=Object(t),o))?e:i?r(n):"Object"==(a=r(n))&&"function"==typeof n.callee?"Arguments":a}},function(t,n,e){"use strict";var r=e(2);t.exports=function(){var t=r(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},function(t,n,e){"use strict";e(82);var r=e(12),o=e(5),i=e(4),a=e(10),u=e(1),c=e(29),s=u("species"),f=!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$
")})),l=function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var e="ab".split(t);return 2===e.length&&"a"===e[0]&&"b"===e[1]}();t.exports=function(t,n,e){var M=u(t),p=!i((function(){var n={};return n[M]=function(){return 7},7!=""[t](n)})),d=p?!i((function(){var n=!1,e=/a/;return e.exec=function(){return n=!0,null},"split"===t&&(e.constructor={},e.constructor[s]=function(){return e}),e[M](""),!n})):void 0;if(!p||!d||"replace"===t&&!f||"split"===t&&!l){var y=/./[M],v=e(a,M,""[t],(function(t,n,e,r,o){return n.exec===c?p&&!o?{done:!0,value:y.call(n,e,r)}:{done:!0,value:t.call(e,n,r)}:{done:!1}})),h=v[0],g=v[1];r(String.prototype,t,h),o(RegExp.prototype,M,2==n?function(t,n){return g.call(t,this,n)}:function(t){return g.call(t,this)})}}},function(t,n,e){"use strict";var r=e(29);e(11)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(t,n,e){e(84);var r=e(44).Object;t.exports=function(t,n,e){return r.defineProperty(t,n,e)}},function(t,n,e){var r=e(85);r(r.S+r.F*!e(16),"Object",{defineProperty:e(45).f})},function(t,n,e){var r=e(43),o=e(44),i=e(86),a=e(88),u=e(94),c=function(t,n,e){var s,f,l,M=t&c.F,p=t&c.G,d=t&c.S,y=t&c.P,v=t&c.B,h=t&c.W,g=p?o:o[n]||(o[n]={}),N=g.prototype,j=p?r:d?r[n]:(r[n]||{}).prototype;for(s in p&&(e=n),e)(f=!M&&j&&void 0!==j[s])&&u(g,s)||(l=f?j[s]:e[s],g[s]=p&&"function"!=typeof j[s]?e[s]:v&&f?i(l,r):h&&j[s]==l?function(t){var n=function(n,e,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,e)}return new t(n,e,r)}return t.apply(this,arguments)};return n.prototype=t.prototype,n}(l):y&&"function"==typeof l?i(Function.call,l):l,y&&((g.virtual||(g.virtual={}))[s]=l,t&c.R&&N&&!N[s]&&a(N,s,l)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,n,e){var r=e(87);t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n,e){var r=e(45),o=e(93);t.exports=e(16)?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},function(t,n,e){var r=e(30);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,n,e){t.exports=!e(16)&&!e(46)((function(){return 7!=Object.defineProperty(e(91)("div"),"a",{get:function(){return 7}}).a}))},function(t,n,e){var r=e(30),o=e(43).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,n,e){var r=e(30);t.exports=function(t,n){if(!r(t))return t;var e,o;if(n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;if("function"==typeof(e=t.valueOf)&&!r(o=e.call(t)))return o;if(!n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},function(t,n,e){"use strict";var r=e(17);e.n(r).a},function(t,n,e){n=t.exports=e(97)(!1);var r=e(98),o=r(e(47)),i=r(e(48));n.push([t.i,".asciiart__main[data-v-0b5da367]{display:inline-block;width:100%;position:relative}.asciiart__video[data-v-0b5da367]{visibility:hidden;font-size:0}.asciiart__video video[data-v-0b5da367]{width:100%}.asciiart__canvas[data-v-0b5da367]{width:100%;position:absolute;top:0;left:0}.asciiart__canvas canvas[data-v-0b5da367]{width:100%}.asciiart__layer[data-v-0b5da367]{position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,0.6);pointer-events:none}.layer__play-button[data-v-0b5da367],.layer__pause-button[data-v-0b5da367]{margin:0;padding:0;border:none;outline:none;width:4rem;height:4rem;opacity:0.8;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);background-size:100% auto;background-position:center;background-repeat:no-repeat}.layer__play-button[data-v-0b5da367]{background-image:url("+o+")}.layer__pause-button[data-v-0b5da367]{background-image:url("+i+")}.fade-enter-active[data-v-0b5da367],.fade-leave-active[data-v-0b5da367]{-webkit-transition:opacity 0.3s ease;transition:opacity 0.3s ease}.fade-enter[data-v-0b5da367],.fade-leave-to[data-v-0b5da367]{opacity:0}\n",""])},function(t,n,e){"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e=function(t,n){var e=t[1]||"",r=t[3];if(!r)return e;if(n&&"function"==typeof btoa){var o=(a=r,u=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),c="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(u),"/*# ".concat(c," */")),i=r.sources.map((function(t){return"/*# sourceURL=".concat(r.sourceRoot).concat(t," */")}));return[e].concat(i).concat([o]).join("\n")}var a,u,c;return[e].join("\n")}(n,t);return n[2]?"@media ".concat(n[2],"{").concat(e,"}"):e})).join("")},n.i=function(t,e){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},o=0;o0&&void 0!==arguments[0]?arguments[0]:{};this.options=f({},this.options,{},t)}},{key:"drawChars",value:function(t){var n=this,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,r=this.options.color;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.font="".concat(e,"px Courier"),this.ctx.fillStyle=r,t.split("\n").forEach((function(t,r){n.ctx.fillText(t,0,r*e)}))}},{key:"getFrameFromVideo",value:function(){this.frameLoaderCtx.drawImage(this.video,0,0,this.frameLoader.width,this.frameLoader.height)}},{key:"frameToChar",value:function(){for(var t=this.frameLoaderCtx.getImageData(0,0,this.frameLoader.width,this.frameLoader.height),n=t.data,e=t.width,r=t.height,o="",i=this.options.charppi,a=10/i,u=6/i,c=0;ce.parts.length&&(r.parts.length=e.parts.length)}else{var a=[];for(o=0;o 2 | 3 | 4 | 5 | 6 | 7 | 8 | tag use test 9 | 10 | 11 | 12 |
13 |

{{ text }}

14 | 15 | 21 | 22 |
23 | 24 | 34 | 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "video2asciiart", 3 | "version": "0.1.4", 4 | "maintainers": [ 5 | { 6 | "name": "RandomYang", 7 | "email": "decoderyang@gmail.com" 8 | } 9 | ], 10 | "keywords": [ 11 | "asciiart", 12 | "video", 13 | "video-filter", 14 | "vue", 15 | "funny", 16 | "interesting" 17 | ], 18 | "private": false, 19 | "main": "lib/Video2ASCIIArt.umd.js", 20 | "license": "MIT", 21 | "readmeFilename": "README.md", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/OfficialYoungX/Video2ASCIIArt" 25 | }, 26 | "scripts": { 27 | "serve": "cross-env NODE_ENV=development webpack-dev-server --open firefox --config ./script/webpack.dev.js", 28 | "build:demo": "cross-env NODE_ENV=production webpack --config ./script/webpack.prod.js --progress", 29 | "build:lib": "NODE_ENV=production webpack --config ./script/webpack.lib.js", 30 | "analyze": "NODE_ENV=production webpack --config ./script/webpack.analyze.js" 31 | }, 32 | "dependencies": { 33 | "dat.gui": "^0.7.6", 34 | "vue": "^2.6.10" 35 | }, 36 | "devDependencies": { 37 | "core-js": "^2.6.5", 38 | "autoprefixer": "^9.6.4", 39 | "babel-eslint": "^10.0.1", 40 | "clean-webpack-plugin": "^3.0.0", 41 | "copy-webpack-plugin": "^5.0.4", 42 | "cross-env": "^6.0.3", 43 | "css-loader": "^3.2.0", 44 | "eslint": "^5.16.0", 45 | "eslint-plugin-vue": "^5.0.0", 46 | "file-loader": "^4.2.0", 47 | "html-webpack-plugin": "^3.2.0", 48 | "mini-css-extract-plugin": "^0.8.0", 49 | "node-sass": "^7.0.0", 50 | "postcss-loader": "^3.0.0", 51 | "sass-loader": "^8.0.0", 52 | "style-loader": "^1.0.0", 53 | "url-loader": "^2.2.0", 54 | "vue-loader": "^15.7.1", 55 | "vue-template-compiler": "^2.6.10", 56 | "webpack-bundle-analyzer": "^3.5.2", 57 | "webpack-cli": "^3.3.9", 58 | "webpack-dev-server": "^3.8.2", 59 | "webpack-merge": "^4.2.2" 60 | }, 61 | "eslintConfig": { 62 | "root": true, 63 | "env": { 64 | "node": true 65 | }, 66 | "extends": [ 67 | "plugin:vue/essential", 68 | "eslint:recommended" 69 | ], 70 | "rules": {}, 71 | "parserOptions": { 72 | "parser": "babel-eslint" 73 | } 74 | }, 75 | "browserslist": [ 76 | "> 1%", 77 | "last 2 versions" 78 | ] 79 | } 80 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | const autoprefixer = require('autoprefixer') 2 | 3 | module.exports = { 4 | plugins: [autoprefixer({})] 5 | } 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/random-yang/Video2ASCIIArt/97d196e853ae77918abf85ee0d2005b82a86c793/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | video2asciiart demo 9 | 10 | 11 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /public/index_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | tag use test 9 | 10 | 11 | 12 |
13 |

{{ text }}

14 | 15 | 21 | 22 |
23 | 24 | 34 | 35 | -------------------------------------------------------------------------------- /script/webpack.analyze.js: -------------------------------------------------------------------------------- 1 | const merge = require('webpack-merge') 2 | const webpackProd = require('./webpack.prod') 3 | const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer') 4 | 5 | module.exports = merge(webpackProd, { 6 | plugins: [ 7 | new BundleAnalyzerPlugin({ 8 | analyzerMode: 'server', 9 | analyzerHost: '127.0.0.1', 10 | analyzerPort: 8889, 11 | reportFilename: 'report.html', 12 | defaultSizes: 'parsed', 13 | openAnalyzer: true, 14 | generateStatsFile: false, 15 | statsFilename: 'stats.json', 16 | statsOptions: null, 17 | logLevel: 'info' 18 | }) 19 | ] 20 | }) 21 | -------------------------------------------------------------------------------- /script/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const VueLoaderPlugin = require('vue-loader/lib/plugin') 3 | const HtmlWebpackPlugin = require('html-webpack-plugin') 4 | const { CleanWebpackPlugin } = require('clean-webpack-plugin') // 清空构建目录 5 | 6 | module.exports = { 7 | mode: 'production', 8 | entry: { 9 | vue: ['vue'], 10 | datgui: ['dat.gui'], 11 | app: [path.resolve(__dirname, '../src/main.js')] 12 | }, 13 | output: { 14 | path: path.resolve(__dirname, '../dist'), 15 | filename: 'js/[name].[hash:8].js', 16 | chunkFilename: 'js/[name].[hash:8].js' 17 | }, 18 | module: { 19 | rules: [ 20 | { 21 | test: /\.vue$/, 22 | loader: 'vue-loader', 23 | options: { 24 | loaders: { 25 | scss: ['vue-style-loader', 'css-loader', 'sass-loader'] 26 | } 27 | } 28 | }, 29 | { 30 | test: /\.js$/, 31 | loader: 'babel-loader', 32 | exclude: /node_modules/ 33 | }, 34 | { 35 | test: /\.(jpe?g|png|gif|svg)$/, 36 | use: [ 37 | { 38 | loader: 'url-loader', 39 | options: { 40 | limit: 4096, 41 | name: 'img/[name].[hash:8].[ext]' 42 | } 43 | } 44 | ] 45 | }, 46 | { 47 | test: /\.(mov|mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 48 | use: [ 49 | { 50 | loader: 'url-loader', 51 | options: { 52 | limit: 4096, 53 | name: 'media/[name].[hash:8].[ext]' 54 | } 55 | } 56 | ] 57 | } 58 | ] 59 | }, 60 | resolve: { 61 | alias: { 62 | vue$: 'vue/dist/vue.esm.js' 63 | }, 64 | extensions: ['*', '.js', '.vue', '.json'] 65 | }, 66 | plugins: [ 67 | new VueLoaderPlugin(), 68 | new HtmlWebpackPlugin({ 69 | filename: 'index.html', 70 | template: path.resolve(__dirname, '../public/index.html') // 这个地方为什么不需要 ../public/... 71 | }), 72 | new CleanWebpackPlugin() 73 | ] 74 | } 75 | -------------------------------------------------------------------------------- /script/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack') 2 | const merge = require('webpack-merge') 3 | const webpackConfig = require('./webpack.config') 4 | 5 | module.exports = merge(webpackConfig, { 6 | mode: 'development', 7 | devtool: 'cheap-eval-source-map', 8 | output: { 9 | publicPath: '/' 10 | }, 11 | module: { 12 | rules: [ 13 | { 14 | test: /\.scss$/, 15 | use: [ 16 | 'vue-style-loader', 17 | 'css-loader', 18 | { 19 | loader: 'postcss-loader', 20 | options: { 21 | sourceMap: true 22 | } 23 | }, 24 | 'sass-loader' 25 | ] 26 | } 27 | ] 28 | }, 29 | devServer: { 30 | inline: true, 31 | hot: true 32 | }, 33 | plugins: [new webpack.HotModuleReplacementPlugin()] 34 | }) 35 | -------------------------------------------------------------------------------- /script/webpack.lib.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const VueLoaderPlugin = require('vue-loader/lib/plugin') 3 | const CopyWebpackPlugin = require('copy-webpack-plugin') // 拷贝不需要webpack处理的静态资源 4 | const { CleanWebpackPlugin } = require('clean-webpack-plugin') // 清空构建目录 5 | 6 | module.exports = { 7 | mode: 'production', 8 | entry: { 9 | Video2ASCIIArt: path.resolve(__dirname, '../src/index.js') 10 | }, 11 | output: { 12 | path: path.resolve(__dirname, '../lib'), 13 | publicPath: '/lib/', 14 | filename: 'Video2ASCIIArt.umd.js', 15 | library: 'Video2ASCIIArt', // 模块名称 16 | libraryExport: 'default', 17 | libraryTarget: 'umd' // 输出格式 18 | }, 19 | externals: { 20 | vue: 'vue' 21 | }, 22 | module: { 23 | rules: [ 24 | { 25 | test: /\.scss$/, 26 | use: [ 27 | 'vue-style-loader', 28 | 'css-loader', 29 | 'postcss-loader', 30 | 'sass-loader' 31 | ] 32 | }, 33 | { 34 | test: /\.vue$/, 35 | loader: 'vue-loader', 36 | options: { 37 | loaders: { 38 | scss: ['vue-style-loader', 'css-loader', 'sass-loader'] 39 | } 40 | } 41 | }, 42 | { 43 | test: /\.js$/, 44 | loader: 'babel-loader', 45 | exclude: /node_modules/ 46 | }, 47 | { 48 | test: /\.(jpe?g|png|gif|svg)$/, 49 | use: [ 50 | { 51 | loader: 'url-loader', 52 | options: { 53 | limit: 4096, 54 | name: 'img/[name].[hash:8].[ext]' 55 | } 56 | } 57 | ] 58 | } 59 | ] 60 | }, 61 | resolve: { 62 | alias: { 63 | vue$: 'vue/dist/vue.esm.js' 64 | }, 65 | extensions: ['*', '.js', '.vue', '.json'] 66 | }, 67 | plugins: [ 68 | new VueLoaderPlugin(), 69 | new CleanWebpackPlugin(), 70 | new CopyWebpackPlugin([ 71 | { 72 | from: path.resolve(__dirname, '../public/index_2.html'), 73 | to: '../lib' 74 | } 75 | ]) 76 | ] 77 | } 78 | -------------------------------------------------------------------------------- /script/webpack.prod.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const merge = require('webpack-merge') 3 | const webpackConfig = require('./webpack.config') 4 | const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 抽离css 5 | const CopyWebpackPlugin = require('copy-webpack-plugin') // 拷贝不需要webpack处理的静态资源 6 | 7 | module.exports = merge(webpackConfig, { 8 | mode: 'production', 9 | devtool: 'none', 10 | output: { 11 | publicPath: './' 12 | }, 13 | optimization: { 14 | splitChunks: { 15 | chunks: 'all', 16 | minSize: 30000, 17 | maxSize: 0, 18 | minChunks: 1, 19 | maxAsyncRequests: 5, 20 | maxInitialRequests: 3, 21 | automaticNameDelimiter: '-', 22 | name: true, 23 | cacheGroups: { 24 | vendors: { 25 | test: /[\\/]node_modules[\\/]/, 26 | priority: -10, 27 | minSize: 0 28 | }, 29 | default: { 30 | minSize: 0, 31 | minChunks: 2, 32 | priority: -20, 33 | reuseExistingChunk: true 34 | } 35 | } 36 | } 37 | }, 38 | module: { 39 | rules: [ 40 | { 41 | test: /\.scss$/, 42 | use: [ 43 | MiniCssExtractPlugin.loader, 44 | 'css-loader', 45 | 'postcss-loader', 46 | 'sass-loader' 47 | ] 48 | } 49 | ] 50 | }, 51 | plugins: [ 52 | new MiniCssExtractPlugin({ 53 | filename: 'css/[name].css' 54 | }), 55 | new CopyWebpackPlugin([ 56 | { 57 | from: path.resolve(__dirname, '../public/favicon.ico'), 58 | to: '../dist' 59 | } 60 | ]) 61 | ] 62 | }) 63 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 74 | 75 | 147 | -------------------------------------------------------------------------------- /src/assets/KBHD.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/random-yang/Video2ASCIIArt/97d196e853ae77918abf85ee0d2005b82a86c793/src/assets/KBHD.mov -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/random-yang/Video2ASCIIArt/97d196e853ae77918abf85ee0d2005b82a86c793/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/pause_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | pause_icon 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/play_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | play_icon 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/showcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/random-yang/Video2ASCIIArt/97d196e853ae77918abf85ee0d2005b82a86c793/src/assets/showcase.png -------------------------------------------------------------------------------- /src/components/ForkMe.vue: -------------------------------------------------------------------------------- 1 | 27 | 37 | 41 | 42 | -------------------------------------------------------------------------------- /src/components/Video2ASCIIArt/Processor.js: -------------------------------------------------------------------------------- 1 | // 根据 rgb 值得到灰度值 2 | // 灰度值浮点算法 3 | let getGray = (r, g, b) => { 4 | return 0.299 * r + 0.578 * g + 0.114 * b 5 | } 6 | 7 | // 灰度值映射到字符 8 | let mapToChar = grayValue => { 9 | const maxGrayValue = 255 10 | const chars = [ 11 | '@', 12 | 'W', 13 | '#', 14 | '$', 15 | 'O', 16 | 'E', 17 | 'X', 18 | 'C', 19 | '[', 20 | '(', 21 | '/', 22 | '?', 23 | '=', 24 | '^', 25 | '~', 26 | '_', 27 | '.', 28 | '`' 29 | ] 30 | let index = Math.floor((chars.length * grayValue) / maxGrayValue) 31 | return chars[index] 32 | } 33 | 34 | export default class Processor { 35 | /** 36 | * 37 | * @param {VideoDOM} video 38 | * @param {Canvas} canvas 39 | */ 40 | constructor(video, canvas, options) { 41 | this.video = video 42 | this.options = { charppi: 1, color: '#000000', ...options } 43 | this.canvas = canvas 44 | this.ctx = canvas.getContext('2d') 45 | 46 | this.frameLoader = document.createElement('canvas') // 提取视频帧 47 | this.frameLoaderCtx = this.frameLoader.getContext('2d') 48 | 49 | this.frameLoader.width = this.canvas.width 50 | this.frameLoader.height = this.canvas.height 51 | } 52 | 53 | changecharppi(newCharppi) { 54 | const options = { charppi: newCharppi } 55 | this.changeOptions(options) 56 | } 57 | 58 | changeColor(newColor) { 59 | const options = { color: newColor } 60 | this.changeOptions(options) 61 | } 62 | 63 | changeOptions(newOption = {}) { 64 | this.options = { ...this.options, ...newOption } 65 | } 66 | 67 | drawChars(chars, fontSize = 10) { 68 | const { color } = this.options 69 | this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height) 70 | this.ctx.font = `${fontSize}px Courier` 71 | this.ctx.fillStyle = color 72 | 73 | chars.split('\n').forEach((row, index) => { 74 | this.ctx.fillText(row, 0, index * fontSize) 75 | }) 76 | } 77 | 78 | getFrameFromVideo() { 79 | this.frameLoaderCtx.drawImage( 80 | this.video, 81 | 0, 82 | 0, 83 | this.frameLoader.width, 84 | this.frameLoader.height 85 | ) 86 | } 87 | 88 | frameToChar() { 89 | // 获取canvas上的图像信息 90 | let imageData = this.frameLoaderCtx.getImageData( 91 | 0, 92 | 0, 93 | this.frameLoader.width, 94 | this.frameLoader.height 95 | ) 96 | let imageDataArr = imageData.data // 图像信息数组 97 | let imgDataWidth = imageData.width 98 | let imgDataHeight = imageData.height 99 | let chars = '' 100 | 101 | const { charppi } = this.options 102 | const dh = 10 / charppi 103 | const dw = 6 / charppi 104 | for (let h = 0; h < imgDataHeight; h += dh) { 105 | for (let w = 0; w < imgDataWidth; w += dw) { 106 | let index = (w + imgDataWidth * h) * 4 // r b g a = 4个宽度 107 | let r = imageDataArr[index + 0] 108 | let g = imageDataArr[index + 1] 109 | let b = imageDataArr[index + 2] 110 | const gray = getGray(r, g, b) // 得到灰度值 111 | chars += `${mapToChar(gray)}` // 灰度值映射到字符 112 | } 113 | chars += '\n' 114 | } 115 | return chars 116 | } 117 | 118 | /** 119 | * @description 120 | * 更新当前画布上下文上的帧 121 | */ 122 | update() { 123 | // 获取视频帧信息 124 | this.getFrameFromVideo() 125 | // frame 信息转换为字符串 126 | const chars = this.frameToChar() 127 | const { charppi } = this.options 128 | // 绘制到 canvas 上下文 129 | this.drawChars(chars, 10 / charppi) 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /src/components/Video2ASCIIArt/Video2ASCIIArt.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 159 | 160 | 238 | -------------------------------------------------------------------------------- /src/components/Video2ASCIIArt/index.js: -------------------------------------------------------------------------------- 1 | import Video2ASCIIArt from './Video2ASCIIArt' 2 | 3 | Video2ASCIIArt.install = Vue => { 4 | Vue.component(Video2ASCIIArt.name, Video2ASCIIArt) 5 | } 6 | 7 | export default Video2ASCIIArt 8 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import Video2ASCIIArt from './components/Video2ASCIIArt' 2 | 3 | const components = [Video2ASCIIArt] 4 | 5 | const install = Vue => { 6 | components.forEach(component => { 7 | Vue.component(component.name, component) 8 | }) 9 | } 10 | 11 | if (typeof window !== 'undefined' && window.Vue) { 12 | install(window.Vue) 13 | } 14 | 15 | export default Video2ASCIIArt 16 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | 4 | Vue.config.productionTip = false 5 | 6 | new Vue({ 7 | render: h => h(App) 8 | }).$mount('#app') 9 | -------------------------------------------------------------------------------- /src/utils/EventHandler.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 处理事件 3 | * 负责绑定、移除 4 | */ 5 | export default class EventHandler { 6 | /** 7 | * 8 | * @param {Object} target 9 | * @param {string} eventType 10 | * @param {function} cb 11 | */ 12 | constructor(target, eventType, cb) { 13 | this.handlerCatch = target.addEventListener(eventType, cb, false) 14 | } 15 | destroy() { 16 | removeEventListener(this.handlerCatch) 17 | } 18 | } 19 | --------------------------------------------------------------------------------