├── .gitignore ├── .idea ├── .gitignore ├── modules.xml ├── niplayer-plugin-dash.iml ├── vcs.xml └── watcherTasks.xml ├── .npmignore ├── README.md ├── package.json ├── pnpm-lock.yaml ├── rollup.config.js ├── src ├── component │ ├── loading.ts │ └── menu.ts ├── event.ts ├── index.less └── index.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | /example/ 4 | pnpm-lock.yaml -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/niplayer-plugin-dash.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/watcherTasks.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /example/ 2 | node_modules 3 | /package/ 4 | .gitignore 5 | .npmignore 6 | pnpm-lock.yaml 7 | rollup.config.js 8 | tsconfig.json -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## niplayer-plugin-dash 2 | NiPlayer视频播放器的dash流插件,安装此插件可以使得NiPlayer播放器支持dash流媒体协议 3 | 4 | 5 | ## 使用方法 6 | 1. 安装该插件 7 | ```bash 8 | npm i niplayer-plugin-dash 9 | ``` 10 | 2. 导入并且在NiPlayer中注册该插件 11 | ```js 12 | import Player from "niplayer" 13 | import { FullScreen,FullPage } from "niplayer" 14 | import dash from "niplayer-plugin-dash" 15 | 16 | let player = new Player({ 17 | container: document.getElementsByClassName("video-container")[0], 18 | plugins: [dash], 19 | rightBottomBarControllers: [FullPage,FullScreen] 20 | }) 21 | // 注册完成之后NiPlayer就具备了接入DASH流媒体协议的能力,可以解析并且播放mpd文件描述的视频资源并且支持多种分辨率无缝切换 22 | player.attachSource("https://dash.akamaized.net/akamai/bbb_30fps/bbb_30fps.mpd") 23 | ``` 24 | ## 效果预览 25 | ![image](https://github.com/NiMediaOrg/niplayer-plugin-dash/assets/69229785/c89cbdd1-f7f3-423f-bc50-09daaf20c4f5) 26 | ![image](https://github.com/NiMediaOrg/niplayer-plugin-dash/assets/69229785/04e9f907-4713-464a-b507-cba3bae184fc) 27 | ![image](https://github.com/NiMediaOrg/niplayer-plugin-dash/assets/69229785/931d3016-689f-410f-bd56-e88c4db1a981) 28 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "niplayer-plugin-dash", 3 | "version": "1.1.0", 4 | "description": "dash, plugin, niplayer, danmaku", 5 | "main": "./dist/niplayer-plugin-dash.esm.js", 6 | "module": "./dist/niplayer-plugin-dash.esm.js", 7 | "types": "./dist/index.d.ts", 8 | "type": "module", 9 | "scripts": { 10 | "build": "rollup -c rollup.config.js" 11 | }, 12 | "keywords": [], 13 | "author": "", 14 | "license": "ISC", 15 | "peerDependencies": { 16 | "niplayer": ">=1.4.0" 17 | }, 18 | "devDependencies": { 19 | "@rollup/plugin-commonjs": "^24.0.1", 20 | "@rollup/plugin-node-resolve": "^15.0.2", 21 | "@rollup/plugin-typescript": "^11.1.0", 22 | "autoprefixer": "^10.4.14", 23 | "postcss": "^8.4.24", 24 | "postcss-pxtorem": "^6.0.0", 25 | "rollup": "^3.20.2", 26 | "rollup-plugin-postcss": "^4.0.2", 27 | "tslib": "^2.5.0", 28 | "typescript": "^5.0.3", 29 | "niplayer": "^1.4.6" 30 | }, 31 | "dependencies": { 32 | "dashjs": "^4.6.0" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@rollup/plugin-commonjs': ^24.0.1 5 | '@rollup/plugin-node-resolve': ^15.0.2 6 | '@rollup/plugin-typescript': ^11.1.0 7 | autoprefixer: ^10.4.14 8 | dashjs: ^4.6.0 9 | niplayer: ^1.4.6 10 | postcss: ^8.4.24 11 | postcss-pxtorem: ^6.0.0 12 | rollup: ^3.20.2 13 | rollup-plugin-postcss: ^4.0.2 14 | tslib: ^2.5.0 15 | typescript: ^5.0.3 16 | 17 | dependencies: 18 | dashjs: 4.6.0 19 | 20 | devDependencies: 21 | '@rollup/plugin-commonjs': 24.0.1_rollup@3.20.2 22 | '@rollup/plugin-node-resolve': 15.0.2_rollup@3.20.2 23 | '@rollup/plugin-typescript': 11.1.0_arrnfnpvhdqbfckwo3rdb7mowy 24 | autoprefixer: 10.4.14_postcss@8.4.24 25 | niplayer: 1.4.6 26 | postcss: 8.4.24 27 | postcss-pxtorem: 6.0.0_postcss@8.4.24 28 | rollup: 3.20.2 29 | rollup-plugin-postcss: 4.0.2_postcss@8.4.24 30 | tslib: 2.5.0 31 | typescript: 5.0.3 32 | 33 | packages: 34 | 35 | /@jridgewell/sourcemap-codec/1.4.15: 36 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 37 | dev: true 38 | 39 | /@rollup/plugin-commonjs/24.0.1_rollup@3.20.2: 40 | resolution: {integrity: sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==} 41 | engines: {node: '>=14.0.0'} 42 | peerDependencies: 43 | rollup: ^2.68.0||^3.0.0 44 | peerDependenciesMeta: 45 | rollup: 46 | optional: true 47 | dependencies: 48 | '@rollup/pluginutils': 5.0.2_rollup@3.20.2 49 | commondir: 1.0.1 50 | estree-walker: 2.0.2 51 | glob: 8.1.0 52 | is-reference: 1.2.1 53 | magic-string: 0.27.0 54 | rollup: 3.20.2 55 | dev: true 56 | 57 | /@rollup/plugin-node-resolve/15.0.2_rollup@3.20.2: 58 | resolution: {integrity: sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==} 59 | engines: {node: '>=14.0.0'} 60 | peerDependencies: 61 | rollup: ^2.78.0||^3.0.0 62 | peerDependenciesMeta: 63 | rollup: 64 | optional: true 65 | dependencies: 66 | '@rollup/pluginutils': 5.0.2_rollup@3.20.2 67 | '@types/resolve': 1.20.2 68 | deepmerge: 4.3.1 69 | is-builtin-module: 3.2.1 70 | is-module: 1.0.0 71 | resolve: 1.22.1 72 | rollup: 3.20.2 73 | dev: true 74 | 75 | /@rollup/plugin-typescript/11.1.0_arrnfnpvhdqbfckwo3rdb7mowy: 76 | resolution: {integrity: sha512-86flrfE+bSHB69znnTV6kVjkncs2LBMhcTCyxWgRxLyfXfQrxg4UwlAqENnjrrxnSNS/XKCDJCl8EkdFJVHOxw==} 77 | engines: {node: '>=14.0.0'} 78 | peerDependencies: 79 | rollup: ^2.14.0||^3.0.0 80 | tslib: '*' 81 | typescript: '>=3.7.0' 82 | peerDependenciesMeta: 83 | rollup: 84 | optional: true 85 | tslib: 86 | optional: true 87 | dependencies: 88 | '@rollup/pluginutils': 5.0.2_rollup@3.20.2 89 | resolve: 1.22.1 90 | rollup: 3.20.2 91 | tslib: 2.5.0 92 | typescript: 5.0.3 93 | dev: true 94 | 95 | /@rollup/pluginutils/5.0.2_rollup@3.20.2: 96 | resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} 97 | engines: {node: '>=14.0.0'} 98 | peerDependencies: 99 | rollup: ^1.20.0||^2.0.0||^3.0.0 100 | peerDependenciesMeta: 101 | rollup: 102 | optional: true 103 | dependencies: 104 | '@types/estree': 1.0.0 105 | estree-walker: 2.0.2 106 | picomatch: 2.3.1 107 | rollup: 3.20.2 108 | dev: true 109 | 110 | /@socket.io/component-emitter/3.1.0: 111 | resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} 112 | dev: true 113 | 114 | /@trysound/sax/0.2.0: 115 | resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} 116 | engines: {node: '>=10.13.0'} 117 | dev: true 118 | 119 | /@types/estree/1.0.0: 120 | resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} 121 | dev: true 122 | 123 | /@types/resolve/1.20.2: 124 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 125 | dev: true 126 | 127 | /ansi-styles/4.3.0: 128 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 129 | engines: {node: '>=8'} 130 | dependencies: 131 | color-convert: 2.0.1 132 | dev: true 133 | 134 | /autoprefixer/10.4.14_postcss@8.4.24: 135 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} 136 | engines: {node: ^10 || ^12 || >=14} 137 | hasBin: true 138 | peerDependencies: 139 | postcss: ^8.1.0 140 | dependencies: 141 | browserslist: 4.21.5 142 | caniuse-lite: 1.0.30001474 143 | fraction.js: 4.2.0 144 | normalize-range: 0.1.2 145 | picocolors: 1.0.0 146 | postcss: 8.4.24 147 | postcss-value-parser: 4.2.0 148 | dev: true 149 | 150 | /balanced-match/1.0.2: 151 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 152 | dev: true 153 | 154 | /bcp-47-match/1.0.3: 155 | resolution: {integrity: sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==} 156 | dev: false 157 | 158 | /bcp-47-normalize/1.1.1: 159 | resolution: {integrity: sha512-jWZ1Jdu3cs0EZdfCkS0UE9Gg01PtxnChjEBySeB+Zo6nkqtFfnvtoQQgP1qU1Oo4qgJgxhTI6Sf9y/pZIhPs0A==} 160 | dependencies: 161 | bcp-47: 1.0.8 162 | bcp-47-match: 1.0.3 163 | dev: false 164 | 165 | /bcp-47/1.0.8: 166 | resolution: {integrity: sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==} 167 | dependencies: 168 | is-alphabetical: 1.0.4 169 | is-alphanumerical: 1.0.4 170 | is-decimal: 1.0.4 171 | dev: false 172 | 173 | /be-full/0.1.4: 174 | resolution: {integrity: sha512-Nj3yBvk8rxhBhDv6YROxP9ynTA5H0l9lMjU+XqEAY4rTLJ68l2+n0geWCoeTqAxhOFedtbmYCpxFzMxMA8CnUg==} 175 | dev: true 176 | 177 | /boolbase/1.0.0: 178 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 179 | dev: true 180 | 181 | /brace-expansion/2.0.1: 182 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 183 | dependencies: 184 | balanced-match: 1.0.2 185 | dev: true 186 | 187 | /browserslist/4.21.5: 188 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 189 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 190 | hasBin: true 191 | dependencies: 192 | caniuse-lite: 1.0.30001474 193 | electron-to-chromium: 1.4.355 194 | node-releases: 2.0.10 195 | update-browserslist-db: 1.0.10_browserslist@4.21.5 196 | dev: true 197 | 198 | /builtin-modules/3.3.0: 199 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 200 | engines: {node: '>=6'} 201 | dev: true 202 | 203 | /caniuse-api/3.0.0: 204 | resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} 205 | dependencies: 206 | browserslist: 4.21.5 207 | caniuse-lite: 1.0.30001474 208 | lodash.memoize: 4.1.2 209 | lodash.uniq: 4.5.0 210 | dev: true 211 | 212 | /caniuse-lite/1.0.30001474: 213 | resolution: {integrity: sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q==} 214 | dev: true 215 | 216 | /chalk/4.1.2: 217 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 218 | engines: {node: '>=10'} 219 | dependencies: 220 | ansi-styles: 4.3.0 221 | supports-color: 7.2.0 222 | dev: true 223 | 224 | /codem-isoboxer/0.3.6: 225 | resolution: {integrity: sha512-LuO8/7LW6XuR5ERn1yavXAfodGRhuY2yP60JTZIw5yNYMCE5lUVbk3NFUCJxjnphQH+Xemp5hOGb1LgUXm00Xw==} 226 | dev: false 227 | 228 | /color-convert/2.0.1: 229 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 230 | engines: {node: '>=7.0.0'} 231 | dependencies: 232 | color-name: 1.1.4 233 | dev: true 234 | 235 | /color-name/1.1.4: 236 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 237 | dev: true 238 | 239 | /colord/2.9.3: 240 | resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 241 | dev: true 242 | 243 | /commander/7.2.0: 244 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 245 | engines: {node: '>= 10'} 246 | dev: true 247 | 248 | /commondir/1.0.1: 249 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 250 | dev: true 251 | 252 | /concat-with-sourcemaps/1.1.0: 253 | resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} 254 | dependencies: 255 | source-map: 0.6.1 256 | dev: true 257 | 258 | /css-declaration-sorter/6.4.0_postcss@8.4.24: 259 | resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} 260 | engines: {node: ^10 || ^12 || >=14} 261 | peerDependencies: 262 | postcss: ^8.0.9 263 | dependencies: 264 | postcss: 8.4.24 265 | dev: true 266 | 267 | /css-select/4.3.0: 268 | resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} 269 | dependencies: 270 | boolbase: 1.0.0 271 | css-what: 6.1.0 272 | domhandler: 4.3.1 273 | domutils: 2.8.0 274 | nth-check: 2.1.1 275 | dev: true 276 | 277 | /css-tree/1.1.3: 278 | resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} 279 | engines: {node: '>=8.0.0'} 280 | dependencies: 281 | mdn-data: 2.0.14 282 | source-map: 0.6.1 283 | dev: true 284 | 285 | /css-what/6.1.0: 286 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 287 | engines: {node: '>= 6'} 288 | dev: true 289 | 290 | /cssesc/3.0.0: 291 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 292 | engines: {node: '>=4'} 293 | hasBin: true 294 | dev: true 295 | 296 | /cssnano-preset-default/5.2.14_postcss@8.4.24: 297 | resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} 298 | engines: {node: ^10 || ^12 || >=14.0} 299 | peerDependencies: 300 | postcss: ^8.2.15 301 | dependencies: 302 | css-declaration-sorter: 6.4.0_postcss@8.4.24 303 | cssnano-utils: 3.1.0_postcss@8.4.24 304 | postcss: 8.4.24 305 | postcss-calc: 8.2.4_postcss@8.4.24 306 | postcss-colormin: 5.3.1_postcss@8.4.24 307 | postcss-convert-values: 5.1.3_postcss@8.4.24 308 | postcss-discard-comments: 5.1.2_postcss@8.4.24 309 | postcss-discard-duplicates: 5.1.0_postcss@8.4.24 310 | postcss-discard-empty: 5.1.1_postcss@8.4.24 311 | postcss-discard-overridden: 5.1.0_postcss@8.4.24 312 | postcss-merge-longhand: 5.1.7_postcss@8.4.24 313 | postcss-merge-rules: 5.1.4_postcss@8.4.24 314 | postcss-minify-font-values: 5.1.0_postcss@8.4.24 315 | postcss-minify-gradients: 5.1.1_postcss@8.4.24 316 | postcss-minify-params: 5.1.4_postcss@8.4.24 317 | postcss-minify-selectors: 5.2.1_postcss@8.4.24 318 | postcss-normalize-charset: 5.1.0_postcss@8.4.24 319 | postcss-normalize-display-values: 5.1.0_postcss@8.4.24 320 | postcss-normalize-positions: 5.1.1_postcss@8.4.24 321 | postcss-normalize-repeat-style: 5.1.1_postcss@8.4.24 322 | postcss-normalize-string: 5.1.0_postcss@8.4.24 323 | postcss-normalize-timing-functions: 5.1.0_postcss@8.4.24 324 | postcss-normalize-unicode: 5.1.1_postcss@8.4.24 325 | postcss-normalize-url: 5.1.0_postcss@8.4.24 326 | postcss-normalize-whitespace: 5.1.1_postcss@8.4.24 327 | postcss-ordered-values: 5.1.3_postcss@8.4.24 328 | postcss-reduce-initial: 5.1.2_postcss@8.4.24 329 | postcss-reduce-transforms: 5.1.0_postcss@8.4.24 330 | postcss-svgo: 5.1.0_postcss@8.4.24 331 | postcss-unique-selectors: 5.1.1_postcss@8.4.24 332 | dev: true 333 | 334 | /cssnano-utils/3.1.0_postcss@8.4.24: 335 | resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} 336 | engines: {node: ^10 || ^12 || >=14.0} 337 | peerDependencies: 338 | postcss: ^8.2.15 339 | dependencies: 340 | postcss: 8.4.24 341 | dev: true 342 | 343 | /cssnano/5.1.15_postcss@8.4.24: 344 | resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} 345 | engines: {node: ^10 || ^12 || >=14.0} 346 | peerDependencies: 347 | postcss: ^8.2.15 348 | dependencies: 349 | cssnano-preset-default: 5.2.14_postcss@8.4.24 350 | lilconfig: 2.1.0 351 | postcss: 8.4.24 352 | yaml: 1.10.2 353 | dev: true 354 | 355 | /csso/4.2.0: 356 | resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} 357 | engines: {node: '>=8.0.0'} 358 | dependencies: 359 | css-tree: 1.1.3 360 | dev: true 361 | 362 | /dashjs/4.6.0: 363 | resolution: {integrity: sha512-0PDoSBM9PXb+Io0pRnw2CmO7aV9W8FC/BqBRNhLxzM3/e5Kfj7BLy0OWkkSB58ULg6Md6r+6jkGOTUhut/35rg==} 364 | dependencies: 365 | bcp-47-match: 1.0.3 366 | bcp-47-normalize: 1.1.1 367 | codem-isoboxer: 0.3.6 368 | es6-promise: 4.2.8 369 | fast-deep-equal: 2.0.1 370 | html-entities: 1.4.0 371 | imsc: 1.1.3 372 | localforage: 1.10.0 373 | path-browserify: 1.0.1 374 | ua-parser-js: 1.0.35 375 | dev: false 376 | 377 | /debug/4.3.4: 378 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 379 | engines: {node: '>=6.0'} 380 | peerDependencies: 381 | supports-color: '*' 382 | peerDependenciesMeta: 383 | supports-color: 384 | optional: true 385 | dependencies: 386 | ms: 2.1.2 387 | dev: true 388 | 389 | /deepmerge/4.3.1: 390 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 391 | engines: {node: '>=0.10.0'} 392 | dev: true 393 | 394 | /dom-serializer/1.4.1: 395 | resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} 396 | dependencies: 397 | domelementtype: 2.3.0 398 | domhandler: 4.3.1 399 | entities: 2.2.0 400 | dev: true 401 | 402 | /domelementtype/2.3.0: 403 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 404 | dev: true 405 | 406 | /domhandler/4.3.1: 407 | resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} 408 | engines: {node: '>= 4'} 409 | dependencies: 410 | domelementtype: 2.3.0 411 | dev: true 412 | 413 | /domutils/2.8.0: 414 | resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} 415 | dependencies: 416 | dom-serializer: 1.4.1 417 | domelementtype: 2.3.0 418 | domhandler: 4.3.1 419 | dev: true 420 | 421 | /electron-to-chromium/1.4.355: 422 | resolution: {integrity: sha512-056hxzEE4l667YeOccgjhRr5fTiwZ6EIJ4FpzGps4k3YcS8iAhiaBYUBrv5E2LDQJsussscv9EEUwAYKnv+ZKg==} 423 | dev: true 424 | 425 | /engine.io-client/6.4.0: 426 | resolution: {integrity: sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==} 427 | dependencies: 428 | '@socket.io/component-emitter': 3.1.0 429 | debug: 4.3.4 430 | engine.io-parser: 5.0.7 431 | ws: 8.11.0 432 | xmlhttprequest-ssl: 2.0.0 433 | transitivePeerDependencies: 434 | - bufferutil 435 | - supports-color 436 | - utf-8-validate 437 | dev: true 438 | 439 | /engine.io-parser/5.0.7: 440 | resolution: {integrity: sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==} 441 | engines: {node: '>=10.0.0'} 442 | dev: true 443 | 444 | /entities/2.2.0: 445 | resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} 446 | dev: true 447 | 448 | /es6-promise/4.2.8: 449 | resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} 450 | dev: false 451 | 452 | /escalade/3.1.1: 453 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 454 | engines: {node: '>=6'} 455 | dev: true 456 | 457 | /estree-walker/0.6.1: 458 | resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} 459 | dev: true 460 | 461 | /estree-walker/2.0.2: 462 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 463 | dev: true 464 | 465 | /eventemitter3/4.0.7: 466 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 467 | dev: true 468 | 469 | /fast-deep-equal/2.0.1: 470 | resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} 471 | dev: false 472 | 473 | /fraction.js/4.2.0: 474 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} 475 | dev: true 476 | 477 | /fs.realpath/1.0.0: 478 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 479 | dev: true 480 | 481 | /fsevents/2.3.2: 482 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 483 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 484 | os: [darwin] 485 | requiresBuild: true 486 | dev: true 487 | optional: true 488 | 489 | /function-bind/1.1.1: 490 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 491 | dev: true 492 | 493 | /generic-names/4.0.0: 494 | resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} 495 | dependencies: 496 | loader-utils: 3.2.1 497 | dev: true 498 | 499 | /glob/8.1.0: 500 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 501 | engines: {node: '>=12'} 502 | dependencies: 503 | fs.realpath: 1.0.0 504 | inflight: 1.0.6 505 | inherits: 2.0.4 506 | minimatch: 5.1.6 507 | once: 1.4.0 508 | dev: true 509 | 510 | /has-flag/4.0.0: 511 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 512 | engines: {node: '>=8'} 513 | dev: true 514 | 515 | /has/1.0.3: 516 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 517 | engines: {node: '>= 0.4.0'} 518 | dependencies: 519 | function-bind: 1.1.1 520 | dev: true 521 | 522 | /html-entities/1.4.0: 523 | resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} 524 | dev: false 525 | 526 | /icss-replace-symbols/1.1.0: 527 | resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} 528 | dev: true 529 | 530 | /icss-utils/5.1.0_postcss@8.4.24: 531 | resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} 532 | engines: {node: ^10 || ^12 || >= 14} 533 | peerDependencies: 534 | postcss: ^8.1.0 535 | dependencies: 536 | postcss: 8.4.24 537 | dev: true 538 | 539 | /immediate/3.0.6: 540 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 541 | dev: false 542 | 543 | /import-cwd/3.0.0: 544 | resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} 545 | engines: {node: '>=8'} 546 | dependencies: 547 | import-from: 3.0.0 548 | dev: true 549 | 550 | /import-from/3.0.0: 551 | resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} 552 | engines: {node: '>=8'} 553 | dependencies: 554 | resolve-from: 5.0.0 555 | dev: true 556 | 557 | /imsc/1.1.3: 558 | resolution: {integrity: sha512-IY0hMkVTNoqoYwKEp5UvNNKp/A5jeJUOrIO7judgOyhHT+xC6PA4VBOMAOhdtAYbMRHx9DTgI8p6Z6jhYQPFDA==} 559 | dependencies: 560 | sax: 1.2.1 561 | dev: false 562 | 563 | /inflight/1.0.6: 564 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 565 | dependencies: 566 | once: 1.4.0 567 | wrappy: 1.0.2 568 | dev: true 569 | 570 | /inherits/2.0.4: 571 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 572 | dev: true 573 | 574 | /is-alphabetical/1.0.4: 575 | resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} 576 | dev: false 577 | 578 | /is-alphanumerical/1.0.4: 579 | resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} 580 | dependencies: 581 | is-alphabetical: 1.0.4 582 | is-decimal: 1.0.4 583 | dev: false 584 | 585 | /is-builtin-module/3.2.1: 586 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 587 | engines: {node: '>=6'} 588 | dependencies: 589 | builtin-modules: 3.3.0 590 | dev: true 591 | 592 | /is-core-module/2.11.0: 593 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 594 | dependencies: 595 | has: 1.0.3 596 | dev: true 597 | 598 | /is-decimal/1.0.4: 599 | resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} 600 | dev: false 601 | 602 | /is-module/1.0.0: 603 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 604 | dev: true 605 | 606 | /is-reference/1.2.1: 607 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 608 | dependencies: 609 | '@types/estree': 1.0.0 610 | dev: true 611 | 612 | /lie/3.1.1: 613 | resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} 614 | dependencies: 615 | immediate: 3.0.6 616 | dev: false 617 | 618 | /lilconfig/2.1.0: 619 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 620 | engines: {node: '>=10'} 621 | dev: true 622 | 623 | /loader-utils/3.2.1: 624 | resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} 625 | engines: {node: '>= 12.13.0'} 626 | dev: true 627 | 628 | /localforage/1.10.0: 629 | resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} 630 | dependencies: 631 | lie: 3.1.1 632 | dev: false 633 | 634 | /lodash.camelcase/4.3.0: 635 | resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} 636 | dev: true 637 | 638 | /lodash.memoize/4.1.2: 639 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 640 | dev: true 641 | 642 | /lodash.uniq/4.5.0: 643 | resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} 644 | dev: true 645 | 646 | /magic-string/0.27.0: 647 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 648 | engines: {node: '>=12'} 649 | dependencies: 650 | '@jridgewell/sourcemap-codec': 1.4.15 651 | dev: true 652 | 653 | /mdn-data/2.0.14: 654 | resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} 655 | dev: true 656 | 657 | /minimatch/5.1.6: 658 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 659 | engines: {node: '>=10'} 660 | dependencies: 661 | brace-expansion: 2.0.1 662 | dev: true 663 | 664 | /mp4box/0.5.2: 665 | resolution: {integrity: sha512-zRmGlvxy+YdW3Dmt+TR4xPHynbxwXtAQDTN/Fo9N3LMxaUlB2C5KmZpzYyGKy4c7k4Jf3RCR0A2pm9SZELOLXw==} 666 | dev: true 667 | 668 | /ms/2.1.2: 669 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 670 | dev: true 671 | 672 | /nanoid/3.3.6: 673 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 674 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 675 | hasBin: true 676 | dev: true 677 | 678 | /niplayer/1.4.6: 679 | resolution: {integrity: sha512-SETURDrh1hQUFYszsZMzrYQ5y6RKL6HbTUUZr6Xq52+3FBpTVIQHvZl+QUgm2B6sRx1ACAJHkDK4DmV/r85V9w==} 680 | dependencies: 681 | be-full: 0.1.4 682 | mp4box: 0.5.2 683 | ntouch.js: 1.1.0 684 | socket.io-client: 4.6.0 685 | transitivePeerDependencies: 686 | - bufferutil 687 | - supports-color 688 | - utf-8-validate 689 | dev: true 690 | 691 | /node-releases/2.0.10: 692 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 693 | dev: true 694 | 695 | /normalize-range/0.1.2: 696 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 697 | engines: {node: '>=0.10.0'} 698 | dev: true 699 | 700 | /normalize-url/6.1.0: 701 | resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} 702 | engines: {node: '>=10'} 703 | dev: true 704 | 705 | /nth-check/2.1.1: 706 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 707 | dependencies: 708 | boolbase: 1.0.0 709 | dev: true 710 | 711 | /ntouch.js/1.1.0: 712 | resolution: {integrity: sha512-sCfGpoN0NRsMXiKPfo2xaeuJRVcBlDD/vz61Zv7Ga9c0/M0f2HzU2NoeQ/5OsGts/o/BYQvzXr1op/6YvD4UHA==} 713 | dev: true 714 | 715 | /once/1.4.0: 716 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 717 | dependencies: 718 | wrappy: 1.0.2 719 | dev: true 720 | 721 | /p-finally/1.0.0: 722 | resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} 723 | engines: {node: '>=4'} 724 | dev: true 725 | 726 | /p-queue/6.6.2: 727 | resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} 728 | engines: {node: '>=8'} 729 | dependencies: 730 | eventemitter3: 4.0.7 731 | p-timeout: 3.2.0 732 | dev: true 733 | 734 | /p-timeout/3.2.0: 735 | resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} 736 | engines: {node: '>=8'} 737 | dependencies: 738 | p-finally: 1.0.0 739 | dev: true 740 | 741 | /path-browserify/1.0.1: 742 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 743 | dev: false 744 | 745 | /path-parse/1.0.7: 746 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 747 | dev: true 748 | 749 | /picocolors/1.0.0: 750 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 751 | dev: true 752 | 753 | /picomatch/2.3.1: 754 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 755 | engines: {node: '>=8.6'} 756 | dev: true 757 | 758 | /pify/5.0.0: 759 | resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} 760 | engines: {node: '>=10'} 761 | dev: true 762 | 763 | /postcss-calc/8.2.4_postcss@8.4.24: 764 | resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} 765 | peerDependencies: 766 | postcss: ^8.2.2 767 | dependencies: 768 | postcss: 8.4.24 769 | postcss-selector-parser: 6.0.11 770 | postcss-value-parser: 4.2.0 771 | dev: true 772 | 773 | /postcss-colormin/5.3.1_postcss@8.4.24: 774 | resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} 775 | engines: {node: ^10 || ^12 || >=14.0} 776 | peerDependencies: 777 | postcss: ^8.2.15 778 | dependencies: 779 | browserslist: 4.21.5 780 | caniuse-api: 3.0.0 781 | colord: 2.9.3 782 | postcss: 8.4.24 783 | postcss-value-parser: 4.2.0 784 | dev: true 785 | 786 | /postcss-convert-values/5.1.3_postcss@8.4.24: 787 | resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} 788 | engines: {node: ^10 || ^12 || >=14.0} 789 | peerDependencies: 790 | postcss: ^8.2.15 791 | dependencies: 792 | browserslist: 4.21.5 793 | postcss: 8.4.24 794 | postcss-value-parser: 4.2.0 795 | dev: true 796 | 797 | /postcss-discard-comments/5.1.2_postcss@8.4.24: 798 | resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} 799 | engines: {node: ^10 || ^12 || >=14.0} 800 | peerDependencies: 801 | postcss: ^8.2.15 802 | dependencies: 803 | postcss: 8.4.24 804 | dev: true 805 | 806 | /postcss-discard-duplicates/5.1.0_postcss@8.4.24: 807 | resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} 808 | engines: {node: ^10 || ^12 || >=14.0} 809 | peerDependencies: 810 | postcss: ^8.2.15 811 | dependencies: 812 | postcss: 8.4.24 813 | dev: true 814 | 815 | /postcss-discard-empty/5.1.1_postcss@8.4.24: 816 | resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} 817 | engines: {node: ^10 || ^12 || >=14.0} 818 | peerDependencies: 819 | postcss: ^8.2.15 820 | dependencies: 821 | postcss: 8.4.24 822 | dev: true 823 | 824 | /postcss-discard-overridden/5.1.0_postcss@8.4.24: 825 | resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} 826 | engines: {node: ^10 || ^12 || >=14.0} 827 | peerDependencies: 828 | postcss: ^8.2.15 829 | dependencies: 830 | postcss: 8.4.24 831 | dev: true 832 | 833 | /postcss-load-config/3.1.4_postcss@8.4.24: 834 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 835 | engines: {node: '>= 10'} 836 | peerDependencies: 837 | postcss: '>=8.0.9' 838 | ts-node: '>=9.0.0' 839 | peerDependenciesMeta: 840 | postcss: 841 | optional: true 842 | ts-node: 843 | optional: true 844 | dependencies: 845 | lilconfig: 2.1.0 846 | postcss: 8.4.24 847 | yaml: 1.10.2 848 | dev: true 849 | 850 | /postcss-merge-longhand/5.1.7_postcss@8.4.24: 851 | resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} 852 | engines: {node: ^10 || ^12 || >=14.0} 853 | peerDependencies: 854 | postcss: ^8.2.15 855 | dependencies: 856 | postcss: 8.4.24 857 | postcss-value-parser: 4.2.0 858 | stylehacks: 5.1.1_postcss@8.4.24 859 | dev: true 860 | 861 | /postcss-merge-rules/5.1.4_postcss@8.4.24: 862 | resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} 863 | engines: {node: ^10 || ^12 || >=14.0} 864 | peerDependencies: 865 | postcss: ^8.2.15 866 | dependencies: 867 | browserslist: 4.21.5 868 | caniuse-api: 3.0.0 869 | cssnano-utils: 3.1.0_postcss@8.4.24 870 | postcss: 8.4.24 871 | postcss-selector-parser: 6.0.11 872 | dev: true 873 | 874 | /postcss-minify-font-values/5.1.0_postcss@8.4.24: 875 | resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} 876 | engines: {node: ^10 || ^12 || >=14.0} 877 | peerDependencies: 878 | postcss: ^8.2.15 879 | dependencies: 880 | postcss: 8.4.24 881 | postcss-value-parser: 4.2.0 882 | dev: true 883 | 884 | /postcss-minify-gradients/5.1.1_postcss@8.4.24: 885 | resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} 886 | engines: {node: ^10 || ^12 || >=14.0} 887 | peerDependencies: 888 | postcss: ^8.2.15 889 | dependencies: 890 | colord: 2.9.3 891 | cssnano-utils: 3.1.0_postcss@8.4.24 892 | postcss: 8.4.24 893 | postcss-value-parser: 4.2.0 894 | dev: true 895 | 896 | /postcss-minify-params/5.1.4_postcss@8.4.24: 897 | resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} 898 | engines: {node: ^10 || ^12 || >=14.0} 899 | peerDependencies: 900 | postcss: ^8.2.15 901 | dependencies: 902 | browserslist: 4.21.5 903 | cssnano-utils: 3.1.0_postcss@8.4.24 904 | postcss: 8.4.24 905 | postcss-value-parser: 4.2.0 906 | dev: true 907 | 908 | /postcss-minify-selectors/5.2.1_postcss@8.4.24: 909 | resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} 910 | engines: {node: ^10 || ^12 || >=14.0} 911 | peerDependencies: 912 | postcss: ^8.2.15 913 | dependencies: 914 | postcss: 8.4.24 915 | postcss-selector-parser: 6.0.11 916 | dev: true 917 | 918 | /postcss-modules-extract-imports/3.0.0_postcss@8.4.24: 919 | resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} 920 | engines: {node: ^10 || ^12 || >= 14} 921 | peerDependencies: 922 | postcss: ^8.1.0 923 | dependencies: 924 | postcss: 8.4.24 925 | dev: true 926 | 927 | /postcss-modules-local-by-default/4.0.0_postcss@8.4.24: 928 | resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} 929 | engines: {node: ^10 || ^12 || >= 14} 930 | peerDependencies: 931 | postcss: ^8.1.0 932 | dependencies: 933 | icss-utils: 5.1.0_postcss@8.4.24 934 | postcss: 8.4.24 935 | postcss-selector-parser: 6.0.11 936 | postcss-value-parser: 4.2.0 937 | dev: true 938 | 939 | /postcss-modules-scope/3.0.0_postcss@8.4.24: 940 | resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} 941 | engines: {node: ^10 || ^12 || >= 14} 942 | peerDependencies: 943 | postcss: ^8.1.0 944 | dependencies: 945 | postcss: 8.4.24 946 | postcss-selector-parser: 6.0.11 947 | dev: true 948 | 949 | /postcss-modules-values/4.0.0_postcss@8.4.24: 950 | resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} 951 | engines: {node: ^10 || ^12 || >= 14} 952 | peerDependencies: 953 | postcss: ^8.1.0 954 | dependencies: 955 | icss-utils: 5.1.0_postcss@8.4.24 956 | postcss: 8.4.24 957 | dev: true 958 | 959 | /postcss-modules/4.3.1_postcss@8.4.24: 960 | resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} 961 | peerDependencies: 962 | postcss: ^8.0.0 963 | dependencies: 964 | generic-names: 4.0.0 965 | icss-replace-symbols: 1.1.0 966 | lodash.camelcase: 4.3.0 967 | postcss: 8.4.24 968 | postcss-modules-extract-imports: 3.0.0_postcss@8.4.24 969 | postcss-modules-local-by-default: 4.0.0_postcss@8.4.24 970 | postcss-modules-scope: 3.0.0_postcss@8.4.24 971 | postcss-modules-values: 4.0.0_postcss@8.4.24 972 | string-hash: 1.1.3 973 | dev: true 974 | 975 | /postcss-normalize-charset/5.1.0_postcss@8.4.24: 976 | resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} 977 | engines: {node: ^10 || ^12 || >=14.0} 978 | peerDependencies: 979 | postcss: ^8.2.15 980 | dependencies: 981 | postcss: 8.4.24 982 | dev: true 983 | 984 | /postcss-normalize-display-values/5.1.0_postcss@8.4.24: 985 | resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} 986 | engines: {node: ^10 || ^12 || >=14.0} 987 | peerDependencies: 988 | postcss: ^8.2.15 989 | dependencies: 990 | postcss: 8.4.24 991 | postcss-value-parser: 4.2.0 992 | dev: true 993 | 994 | /postcss-normalize-positions/5.1.1_postcss@8.4.24: 995 | resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} 996 | engines: {node: ^10 || ^12 || >=14.0} 997 | peerDependencies: 998 | postcss: ^8.2.15 999 | dependencies: 1000 | postcss: 8.4.24 1001 | postcss-value-parser: 4.2.0 1002 | dev: true 1003 | 1004 | /postcss-normalize-repeat-style/5.1.1_postcss@8.4.24: 1005 | resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} 1006 | engines: {node: ^10 || ^12 || >=14.0} 1007 | peerDependencies: 1008 | postcss: ^8.2.15 1009 | dependencies: 1010 | postcss: 8.4.24 1011 | postcss-value-parser: 4.2.0 1012 | dev: true 1013 | 1014 | /postcss-normalize-string/5.1.0_postcss@8.4.24: 1015 | resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} 1016 | engines: {node: ^10 || ^12 || >=14.0} 1017 | peerDependencies: 1018 | postcss: ^8.2.15 1019 | dependencies: 1020 | postcss: 8.4.24 1021 | postcss-value-parser: 4.2.0 1022 | dev: true 1023 | 1024 | /postcss-normalize-timing-functions/5.1.0_postcss@8.4.24: 1025 | resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} 1026 | engines: {node: ^10 || ^12 || >=14.0} 1027 | peerDependencies: 1028 | postcss: ^8.2.15 1029 | dependencies: 1030 | postcss: 8.4.24 1031 | postcss-value-parser: 4.2.0 1032 | dev: true 1033 | 1034 | /postcss-normalize-unicode/5.1.1_postcss@8.4.24: 1035 | resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} 1036 | engines: {node: ^10 || ^12 || >=14.0} 1037 | peerDependencies: 1038 | postcss: ^8.2.15 1039 | dependencies: 1040 | browserslist: 4.21.5 1041 | postcss: 8.4.24 1042 | postcss-value-parser: 4.2.0 1043 | dev: true 1044 | 1045 | /postcss-normalize-url/5.1.0_postcss@8.4.24: 1046 | resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} 1047 | engines: {node: ^10 || ^12 || >=14.0} 1048 | peerDependencies: 1049 | postcss: ^8.2.15 1050 | dependencies: 1051 | normalize-url: 6.1.0 1052 | postcss: 8.4.24 1053 | postcss-value-parser: 4.2.0 1054 | dev: true 1055 | 1056 | /postcss-normalize-whitespace/5.1.1_postcss@8.4.24: 1057 | resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} 1058 | engines: {node: ^10 || ^12 || >=14.0} 1059 | peerDependencies: 1060 | postcss: ^8.2.15 1061 | dependencies: 1062 | postcss: 8.4.24 1063 | postcss-value-parser: 4.2.0 1064 | dev: true 1065 | 1066 | /postcss-ordered-values/5.1.3_postcss@8.4.24: 1067 | resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} 1068 | engines: {node: ^10 || ^12 || >=14.0} 1069 | peerDependencies: 1070 | postcss: ^8.2.15 1071 | dependencies: 1072 | cssnano-utils: 3.1.0_postcss@8.4.24 1073 | postcss: 8.4.24 1074 | postcss-value-parser: 4.2.0 1075 | dev: true 1076 | 1077 | /postcss-pxtorem/6.0.0_postcss@8.4.24: 1078 | resolution: {integrity: sha512-ZRXrD7MLLjLk2RNGV6UA4f5Y7gy+a/j1EqjAfp9NdcNYVjUMvg5HTYduTjSkKBkRkfqbg/iKrjMO70V4g1LZeg==} 1079 | peerDependencies: 1080 | postcss: ^8.0.0 1081 | dependencies: 1082 | postcss: 8.4.24 1083 | dev: true 1084 | 1085 | /postcss-reduce-initial/5.1.2_postcss@8.4.24: 1086 | resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} 1087 | engines: {node: ^10 || ^12 || >=14.0} 1088 | peerDependencies: 1089 | postcss: ^8.2.15 1090 | dependencies: 1091 | browserslist: 4.21.5 1092 | caniuse-api: 3.0.0 1093 | postcss: 8.4.24 1094 | dev: true 1095 | 1096 | /postcss-reduce-transforms/5.1.0_postcss@8.4.24: 1097 | resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} 1098 | engines: {node: ^10 || ^12 || >=14.0} 1099 | peerDependencies: 1100 | postcss: ^8.2.15 1101 | dependencies: 1102 | postcss: 8.4.24 1103 | postcss-value-parser: 4.2.0 1104 | dev: true 1105 | 1106 | /postcss-selector-parser/6.0.11: 1107 | resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} 1108 | engines: {node: '>=4'} 1109 | dependencies: 1110 | cssesc: 3.0.0 1111 | util-deprecate: 1.0.2 1112 | dev: true 1113 | 1114 | /postcss-svgo/5.1.0_postcss@8.4.24: 1115 | resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} 1116 | engines: {node: ^10 || ^12 || >=14.0} 1117 | peerDependencies: 1118 | postcss: ^8.2.15 1119 | dependencies: 1120 | postcss: 8.4.24 1121 | postcss-value-parser: 4.2.0 1122 | svgo: 2.8.0 1123 | dev: true 1124 | 1125 | /postcss-unique-selectors/5.1.1_postcss@8.4.24: 1126 | resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} 1127 | engines: {node: ^10 || ^12 || >=14.0} 1128 | peerDependencies: 1129 | postcss: ^8.2.15 1130 | dependencies: 1131 | postcss: 8.4.24 1132 | postcss-selector-parser: 6.0.11 1133 | dev: true 1134 | 1135 | /postcss-value-parser/4.2.0: 1136 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1137 | dev: true 1138 | 1139 | /postcss/8.4.24: 1140 | resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} 1141 | engines: {node: ^10 || ^12 || >=14} 1142 | dependencies: 1143 | nanoid: 3.3.6 1144 | picocolors: 1.0.0 1145 | source-map-js: 1.0.2 1146 | dev: true 1147 | 1148 | /promise.series/0.2.0: 1149 | resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} 1150 | engines: {node: '>=0.12'} 1151 | dev: true 1152 | 1153 | /resolve-from/5.0.0: 1154 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1155 | engines: {node: '>=8'} 1156 | dev: true 1157 | 1158 | /resolve/1.22.1: 1159 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 1160 | hasBin: true 1161 | dependencies: 1162 | is-core-module: 2.11.0 1163 | path-parse: 1.0.7 1164 | supports-preserve-symlinks-flag: 1.0.0 1165 | dev: true 1166 | 1167 | /rollup-plugin-postcss/4.0.2_postcss@8.4.24: 1168 | resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} 1169 | engines: {node: '>=10'} 1170 | peerDependencies: 1171 | postcss: 8.x 1172 | dependencies: 1173 | chalk: 4.1.2 1174 | concat-with-sourcemaps: 1.1.0 1175 | cssnano: 5.1.15_postcss@8.4.24 1176 | import-cwd: 3.0.0 1177 | p-queue: 6.6.2 1178 | pify: 5.0.0 1179 | postcss: 8.4.24 1180 | postcss-load-config: 3.1.4_postcss@8.4.24 1181 | postcss-modules: 4.3.1_postcss@8.4.24 1182 | promise.series: 0.2.0 1183 | resolve: 1.22.1 1184 | rollup-pluginutils: 2.8.2 1185 | safe-identifier: 0.4.2 1186 | style-inject: 0.3.0 1187 | transitivePeerDependencies: 1188 | - ts-node 1189 | dev: true 1190 | 1191 | /rollup-pluginutils/2.8.2: 1192 | resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} 1193 | dependencies: 1194 | estree-walker: 0.6.1 1195 | dev: true 1196 | 1197 | /rollup/3.20.2: 1198 | resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} 1199 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1200 | hasBin: true 1201 | optionalDependencies: 1202 | fsevents: 2.3.2 1203 | dev: true 1204 | 1205 | /safe-identifier/0.4.2: 1206 | resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} 1207 | dev: true 1208 | 1209 | /sax/1.2.1: 1210 | resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} 1211 | dev: false 1212 | 1213 | /socket.io-client/4.6.0: 1214 | resolution: {integrity: sha512-2XOp18xnGghUICSd5ziUIS4rB0dhr6S8OvAps8y+HhOjFQlqGcf+FIh6fCIsKKZyWFxJeFPrZRNPGsHDTsz1Ug==} 1215 | engines: {node: '>=10.0.0'} 1216 | dependencies: 1217 | '@socket.io/component-emitter': 3.1.0 1218 | debug: 4.3.4 1219 | engine.io-client: 6.4.0 1220 | socket.io-parser: 4.2.4 1221 | transitivePeerDependencies: 1222 | - bufferutil 1223 | - supports-color 1224 | - utf-8-validate 1225 | dev: true 1226 | 1227 | /socket.io-parser/4.2.4: 1228 | resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} 1229 | engines: {node: '>=10.0.0'} 1230 | dependencies: 1231 | '@socket.io/component-emitter': 3.1.0 1232 | debug: 4.3.4 1233 | transitivePeerDependencies: 1234 | - supports-color 1235 | dev: true 1236 | 1237 | /source-map-js/1.0.2: 1238 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1239 | engines: {node: '>=0.10.0'} 1240 | dev: true 1241 | 1242 | /source-map/0.6.1: 1243 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1244 | engines: {node: '>=0.10.0'} 1245 | dev: true 1246 | 1247 | /stable/0.1.8: 1248 | resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} 1249 | deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' 1250 | dev: true 1251 | 1252 | /string-hash/1.1.3: 1253 | resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} 1254 | dev: true 1255 | 1256 | /style-inject/0.3.0: 1257 | resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} 1258 | dev: true 1259 | 1260 | /stylehacks/5.1.1_postcss@8.4.24: 1261 | resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} 1262 | engines: {node: ^10 || ^12 || >=14.0} 1263 | peerDependencies: 1264 | postcss: ^8.2.15 1265 | dependencies: 1266 | browserslist: 4.21.5 1267 | postcss: 8.4.24 1268 | postcss-selector-parser: 6.0.11 1269 | dev: true 1270 | 1271 | /supports-color/7.2.0: 1272 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1273 | engines: {node: '>=8'} 1274 | dependencies: 1275 | has-flag: 4.0.0 1276 | dev: true 1277 | 1278 | /supports-preserve-symlinks-flag/1.0.0: 1279 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1280 | engines: {node: '>= 0.4'} 1281 | dev: true 1282 | 1283 | /svgo/2.8.0: 1284 | resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} 1285 | engines: {node: '>=10.13.0'} 1286 | hasBin: true 1287 | dependencies: 1288 | '@trysound/sax': 0.2.0 1289 | commander: 7.2.0 1290 | css-select: 4.3.0 1291 | css-tree: 1.1.3 1292 | csso: 4.2.0 1293 | picocolors: 1.0.0 1294 | stable: 0.1.8 1295 | dev: true 1296 | 1297 | /tslib/2.5.0: 1298 | resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} 1299 | dev: true 1300 | 1301 | /typescript/5.0.3: 1302 | resolution: {integrity: sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==} 1303 | engines: {node: '>=12.20'} 1304 | hasBin: true 1305 | dev: true 1306 | 1307 | /ua-parser-js/1.0.35: 1308 | resolution: {integrity: sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==} 1309 | dev: false 1310 | 1311 | /update-browserslist-db/1.0.10_browserslist@4.21.5: 1312 | resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} 1313 | hasBin: true 1314 | peerDependencies: 1315 | browserslist: '>= 4.21.0' 1316 | dependencies: 1317 | browserslist: 4.21.5 1318 | escalade: 3.1.1 1319 | picocolors: 1.0.0 1320 | dev: true 1321 | 1322 | /util-deprecate/1.0.2: 1323 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1324 | dev: true 1325 | 1326 | /wrappy/1.0.2: 1327 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1328 | dev: true 1329 | 1330 | /ws/8.11.0: 1331 | resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} 1332 | engines: {node: '>=10.0.0'} 1333 | peerDependencies: 1334 | bufferutil: ^4.0.1 1335 | utf-8-validate: ^5.0.2 1336 | peerDependenciesMeta: 1337 | bufferutil: 1338 | optional: true 1339 | utf-8-validate: 1340 | optional: true 1341 | dev: true 1342 | 1343 | /xmlhttprequest-ssl/2.0.0: 1344 | resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} 1345 | engines: {node: '>=0.4.0'} 1346 | dev: true 1347 | 1348 | /yaml/1.10.2: 1349 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1350 | engines: {node: '>= 6'} 1351 | dev: true 1352 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "rollup" 2 | import ts from '@rollup/plugin-typescript'; 3 | import postcss from 'rollup-plugin-postcss' 4 | import autoprefixer from 'autoprefixer' 5 | import px2rem from 'postcss-pxtorem' 6 | import { nodeResolve } from "@rollup/plugin-node-resolve"; 7 | import commonjs from '@rollup/plugin-commonjs'; 8 | const extensions = [".ts","less"]; 9 | export default defineConfig({ 10 | input: "./package/index.ts", 11 | output: { 12 | file: "./dist/niplayer-plugin-dash.esm.js", 13 | format: "esm" 14 | }, 15 | treeshake: { 16 | moduleSideEffects: false, 17 | propertyReadSideEffects: false, 18 | pureExternalModules: true 19 | }, 20 | plugins: [ 21 | ts({ 22 | compilerOptions: {} 23 | }), 24 | postcss({ 25 | plugins: [ 26 | autoprefixer(), 27 | px2rem({ 28 | rootValue: 16, 29 | propList: [ 30 | 'margin-left', 31 | 'min-width', 32 | 'height', 33 | 'font-size', 34 | 'bottom', 35 | 'width', 36 | 'padding', 37 | 'transform', 38 | ] 39 | }), 40 | ] 41 | }), 42 | commonjs(), 43 | nodeResolve({ 44 | extensions 45 | }), 46 | ] 47 | }) -------------------------------------------------------------------------------- /src/component/loading.ts: -------------------------------------------------------------------------------- 1 | export class Loading { 2 | private message: string; 3 | private el!: HTMLElement; 4 | private container: HTMLElement; 5 | constructor(message: string, container: HTMLElement) { 6 | this.message = message; 7 | this.container = container; 8 | this.init(); 9 | } 10 | init() { 11 | this.initTemplate(); 12 | } 13 | 14 | initTemplate() { 15 | let el = document.createElement("div") 16 | el.classList.add("dash-loading-wrapper") 17 | this.el = el; 18 | let msgEl = document.createElement("div") 19 | msgEl.classList.add("dash-loading-message") 20 | msgEl.innerText = this.message; 21 | this.el.append(msgEl); 22 | this.container.append(this.el); 23 | } 24 | 25 | // 销毁dash的loading组件 26 | dispose() { 27 | this.el.classList.add("dash-loading-hidden") 28 | // 监听动画结束的事件,在动画结束就将该组件的dom元素从document中移除 29 | this.el.ontransitionend = () => { 30 | this.el.parentElement?.removeChild(this.el); 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /src/component/menu.ts: -------------------------------------------------------------------------------- 1 | import dashjs, { BitrateInfo, MediaPlayerClass } from "dashjs"; 2 | import type Player from "niplayer" 3 | import Event from "../event"; 4 | // dash.js库的配置信息 5 | const cfg = { 6 | 'streaming': { 7 | 'abr': { 8 | 'autoSwitchBitrate': {} 9 | } 10 | } 11 | }; 12 | 13 | // 生成视频具体分辨率的字符串 14 | function generateContent(element?: BitrateInfo): string { 15 | if(typeof element === "undefined") { 16 | return "自动"; 17 | } else { 18 | let resolution = ""; 19 | let height = element.height; 20 | if(height >= 2160) { 21 | resolution = "蓝光" 22 | } else if(height >= 720 && height < 2160) { 23 | resolution = "高清" 24 | } else if(height >= 480 && height < 720) { 25 | resolution = "标清" 26 | } else if(height < 480) { 27 | resolution = "流畅" 28 | } 29 | 30 | return `${height}P ${resolution}`; 31 | } 32 | } 33 | 34 | export class ResolutionMenu { 35 | private dashPlayer: MediaPlayerClass; 36 | private niPlayer: Player; 37 | private container: HTMLElement; 38 | private forceQuality: boolean = true; 39 | constructor(niPlayer: Player, dashPlayer: MediaPlayerClass, container: HTMLElement) { 40 | this.dashPlayer = dashPlayer; 41 | this.container = container; 42 | this.niPlayer = niPlayer; 43 | this.dashPlayer.on(dashjs.MediaPlayer.events.STREAM_ACTIVATED, this._onStreamActivated, this); 44 | this.dashPlayer.on(dashjs.MediaPlayer.events.QUALITY_CHANGE_RENDERED, this._onQualityChanged, this) 45 | } 46 | 47 | private _onStreamActivated() { 48 | console.log("dash流已经启动"); 49 | this.createBiterateMenu(this.dashPlayer,this.container); 50 | } 51 | 52 | // 监听媒体流质量发生变化的事件 53 | private _onQualityChanged(e: any) { 54 | let newQualityIndex = e.newQuality; 55 | let newQuality = this.dashPlayer.getBitrateInfoListFor("video")[newQualityIndex]; 56 | this.niPlayer.emit(Event.QUALITY_CHANGED, newQuality); 57 | } 58 | 59 | // 创建码率菜单,也就是视频分辨率和音频音质的集中菜单 60 | private createBiterateMenu(player: MediaPlayerClass, container: HTMLElement): void { 61 | // 获取video和audio的集中信息 62 | let videoInfo = player.getBitrateInfoListFor && player.getBitrateInfoListFor("video"); 63 | let videoList = this.createMenuContent(videoInfo); 64 | container.append(videoList); 65 | } 66 | 67 | private createMenuContent(info: BitrateInfo[]): DocumentFragment { 68 | 69 | // let ul = $("ul.video-resolution-submenu") 70 | let fragment = document.createDocumentFragment() 71 | let auto = document.createElement("div") 72 | auto.classList.add("video-resolution-item") 73 | auto.innerText = generateContent(); 74 | // @ts-ignore 75 | auto.onclick = (e: MouseEvent) => { 76 | (cfg.streaming.abr.autoSwitchBitrate as any)["video"] = true; 77 | this.dashPlayer.updateSettings(cfg); 78 | this.niPlayer.emit(Event.MENU_ITEM_CLICK, auto.innerText); 79 | e.stopPropagation(); 80 | } 81 | fragment.append(auto); 82 | const liList: HTMLElement[] = []; 83 | for(let item of info) { 84 | let content = generateContent(item); 85 | let li = document.createElement("div") 86 | li.classList.add("video-resolution-item") 87 | li.innerText = content; 88 | li.onclick = (e: MouseEvent) => { 89 | // 关闭自适应算法调整视频的分辨率,该为手动调整 90 | (cfg.streaming.abr.autoSwitchBitrate as any)["video"] = false; 91 | this.dashPlayer.updateSettings(cfg); 92 | this.dashPlayer.setQualityFor(item.mediaType, item.qualityIndex, this.forceQuality); 93 | this.niPlayer.emit(Event.MENU_ITEM_CLICK, content) 94 | e.stopPropagation() 95 | } 96 | liList.push(li) 97 | } 98 | 99 | const resList: string[] = []; 100 | for(let li of Array.from(new Set(liList.reverse()))) { 101 | if(resList.includes(li.innerText)) continue; 102 | resList.push(li.innerText) 103 | fragment.append(li) 104 | } 105 | return fragment; 106 | } 107 | } -------------------------------------------------------------------------------- /src/event.ts: -------------------------------------------------------------------------------- 1 | enum Event { 2 | MENU_ITEM_CLICK = "menu_item_click", 3 | QUALITY_CHANGED = "quality_changed" 4 | } 5 | 6 | export default Event -------------------------------------------------------------------------------- /src/index.less: -------------------------------------------------------------------------------- 1 | .video-set { 2 | .video-resolution-item { 3 | text-align: left; 4 | width: 100%; 5 | font-size: 12px; 6 | color: #fff; 7 | padding: 5px 0 5px 15px; 8 | box-sizing: border-box; 9 | border-radius: 5px; 10 | &:hover { 11 | background: #525252; 12 | } 13 | } 14 | } 15 | 16 | .video-resolution-toast { 17 | height: 30px; 18 | line-height: 30px; 19 | padding: 0 10px; 20 | box-sizing: border-box; 21 | border-radius: 10px; 22 | color: #fff; 23 | font-size: 14px; 24 | } 25 | 26 | .dash-loading-wrapper { 27 | height: 30px; 28 | background: rgba(0,0,0,0.7); 29 | padding: 5px; 30 | box-sizing: border-box; 31 | display: flex; 32 | justify-content: space-around; 33 | border-radius: 8px; 34 | transition: all .5s ease; 35 | position: absolute; 36 | left: 10px; 37 | bottom: 60px; 38 | .dash-loading-message { 39 | font-size: 14px; 40 | color: #fff; 41 | } 42 | } 43 | 44 | .dash-loading-hidden { 45 | opacity: 0; 46 | height: 0; 47 | width: 0; 48 | } -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Options, EVENT, Toast } from "niplayer"; 2 | import type Player from "niplayer"; 3 | import type { Plugin, DOMProps } from "niplayer"; 4 | import dashjs, { BitrateInfo, MediaPlayerClass } from "dashjs"; 5 | import { ResolutionMenu } from "./component/menu"; 6 | import Event from "./event"; 7 | import { Loading } from "./component/loading"; 8 | import "./index.less"; 9 | 10 | //TODO 构造一个分辨率组件 11 | class Resolution extends Options { 12 | readonly id = "Resolution"; 13 | private dashPlayer: MediaPlayerClass; 14 | // dash流媒体下切换分辨率的加载动画div 15 | private dashLoading!: Loading; 16 | constructor( 17 | player: Player, 18 | container: HTMLElement, 19 | desc?: string, 20 | props?: DOMProps, 21 | ) { 22 | super(player, container, 150, undefined, desc, props); 23 | this.dashPlayer = dashjs.MediaPlayer().create(); 24 | this.init(); 25 | } 26 | 27 | init(): void { 28 | this.initTemplate(); 29 | this.initEvent(); 30 | } 31 | 32 | initTemplate(): void { 33 | this.el.classList.add("video-controller","video-resolution") 34 | let resolve = document.createElement("div"); 35 | resolve.innerText = "画质" 36 | this.icon = resolve; 37 | this.iconBox.appendChild(this.icon); 38 | } 39 | 40 | //TODO 初始化相关事件的回调函数 41 | initEvent(): void { 42 | // 监听媒体资源的挂载事件,source为媒体资源的地址 43 | this.player.on(EVENT.SOURCE_ATTACHED,(source: string) => { 44 | // 初始化dashjs的控制器,将播放器中的video元素托管给dashjs控制器 45 | this.dashPlayer.initialize(this.player.video, source); 46 | // 初始化视频的分辨率列表 47 | new ResolutionMenu(this.player, this.dashPlayer, this.hideBox); 48 | }) 49 | 50 | //TODO 发生分辨率栏的点击事件后触发回调函数 51 | this.player.on(Event.MENU_ITEM_CLICK, (quality: string) => { 52 | (this.icon as HTMLElement).innerText = quality; 53 | if(quality !== "自动") { 54 | this.dashLoading = new Loading("正在切换视频分辨率ing....",this.player.el); 55 | } 56 | }) 57 | 58 | //TODO 监听媒体质量发生变化的事件 59 | this.player.on(Event.QUALITY_CHANGED,(newQuality: BitrateInfo) => { 60 | console.log("媒体质量发生变化",newQuality); 61 | this.dashLoading && this.dashLoading.dispose(); 62 | let dom = document.createElement("div") 63 | dom.classList.add("video-resolution-toast") 64 | dom.innerText = `成功切换到${newQuality.height}P`; 65 | 66 | let toast: Toast = new Toast(this.player,dom) 67 | 68 | window.setTimeout(() => { 69 | toast.dispose(); 70 | }, 2000) 71 | }) 72 | } 73 | } 74 | 75 | const plugin: Plugin = { 76 | install(player: Player) { 77 | // 注册controllers组件 78 | player.registerControllers(Resolution, "right"); 79 | }, 80 | } 81 | 82 | export default plugin; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | "./src/**/*" 4 | ], 5 | "exclude": [ 6 | "./dist/**/*", 7 | "./node_modules/**/*", 8 | ], 9 | "compilerOptions": { 10 | "target": "ES2015", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 11 | "module": "ES6", /* Specify what module code is generated. */ 12 | "rootDir": "./src", /* Specify the root folder within your source files. */ 13 | "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 14 | "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 15 | "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 16 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 17 | "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 18 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 19 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 20 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 21 | "strict": true, /* Enable all strict type-checking options. */ 22 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 23 | } 24 | } 25 | --------------------------------------------------------------------------------