├── babel.config.js
├── examples
├── vue-cli
│ ├── babel.config.js
│ ├── src
│ │ ├── App.vue
│ │ ├── components
│ │ │ ├── vimeo-np.vue
│ │ │ ├── youtube-np.vue
│ │ │ ├── youtube.vue
│ │ │ ├── vimeo.vue
│ │ │ ├── audio.vue
│ │ │ ├── video.vue
│ │ │ └── demo.vue
│ │ └── main.js
│ ├── package.json
│ └── public
│ │ └── index.html
├── nuxt
│ ├── .output
│ │ ├── server
│ │ │ ├── index.mjs.map
│ │ │ ├── package.json
│ │ │ ├── index.mjs
│ │ │ └── chunks
│ │ │ │ ├── app
│ │ │ │ ├── client.manifest.mjs.map
│ │ │ │ └── client.manifest.mjs
│ │ │ │ └── nitro
│ │ │ │ └── node-server.mjs
│ │ ├── nitro.json
│ │ └── public
│ │ │ └── _nuxt
│ │ │ ├── manifest.json
│ │ │ ├── index-9c7865f0.mjs
│ │ │ └── entry.c94dc88a.css
│ ├── pages
│ │ └── index.vue
│ ├── components
│ │ ├── vimeo-np.vue
│ │ ├── youtube-np.vue
│ │ ├── youtube.vue
│ │ ├── vimeo.vue
│ │ ├── audio.vue
│ │ ├── video.vue
│ │ └── demo.vue
│ ├── nuxt.config.js
│ ├── package.json
│ └── plugins
│ │ └── plyr.client.js
├── vite
│ ├── vite.config.js
│ ├── src
│ │ ├── App.vue
│ │ ├── components
│ │ │ ├── vimeo-np.vue
│ │ │ ├── youtube-np.vue
│ │ │ ├── youtube.vue
│ │ │ ├── audio.vue
│ │ │ ├── vimeo.vue
│ │ │ ├── video.vue
│ │ │ └── demo.vue
│ │ └── main.js
│ ├── index.html
│ ├── package.json
│ └── package-lock.json
└── html
│ ├── README.md
│ ├── package.json
│ └── index.html
├── stylelint.config.js
├── .eslintrc.js
├── __tests__
├── tsconfig.json
├── utils
│ ├── config.spec.ts
│ └── upload.spec.ts
└── upload.spec.ts
├── lib
├── index.js
└── VuePlyr.vue
├── tsconfig.json
├── .github
├── workflows
│ ├── dependabot-approve-merge.yml
│ ├── lint-eslint.yml
│ ├── documentation.yml
│ ├── node.yml
│ ├── examples-node.yml
│ └── npm-publish.yml
└── dependabot.yml
├── rollup.config.mjs
├── LICENSE.md
├── package.json
├── .gitignore
└── README.md
/babel.config.js:
--------------------------------------------------------------------------------
1 | const babelConfig = require('@nextcloud/babel-config')
2 |
3 | module.exports = babelConfig
4 |
--------------------------------------------------------------------------------
/examples/vue-cli/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['@vue/cli-plugin-babel/preset'],
3 | }
4 |
--------------------------------------------------------------------------------
/stylelint.config.js:
--------------------------------------------------------------------------------
1 | const stylelintConfig = require('@nextcloud/stylelint-config')
2 |
3 | module.exports = stylelintConfig
4 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/server/index.mjs.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.mjs","sources":[],"sourcesContent":null,"names":[],"mappings":";;;;;;;;;;;;;;;;"}
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | globals: {
3 | Cypress: true,
4 | OC: true,
5 | },
6 | extends: [
7 | '@nextcloud',
8 | ],
9 | }
10 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/nitro.json:
--------------------------------------------------------------------------------
1 | {
2 | "date": "2022-06-22T16:25:22.946Z",
3 | "preset": "node-server",
4 | "commands": {
5 | "preview": "node ./server/index.mjs"
6 | }
7 | }
--------------------------------------------------------------------------------
/__tests__/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | // Allow us to pass js files to ts-jest without babel
5 | "allowJs": true,
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/examples/nuxt/pages/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
--------------------------------------------------------------------------------
/examples/vite/vite.config.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable n/no-unpublished-import */
2 | // eslint-disable-next-line import/no-unresolved,n/no-missing-import
3 | import vue from '@vitejs/plugin-vue'
4 |
5 | export default {
6 | plugins: [vue()],
7 | }
8 |
--------------------------------------------------------------------------------
/examples/nuxt/components/vimeo-np.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vimeo (not progressive-enhancement)
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/vite/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
--------------------------------------------------------------------------------
/examples/html/README.md:
--------------------------------------------------------------------------------
1 | # vue-plyr-html
2 | > An example of how to use vue-plyr with just html.
3 |
4 | ## Usage
5 |
6 | ``` bash
7 | # install dependencies
8 | $ yarn install
9 |
10 | # run the server on port 5000
11 | $ yarn start
12 | ```
13 |
--------------------------------------------------------------------------------
/examples/nuxt/components/youtube-np.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
youtube (not progressive-enhancement)
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/vite/src/components/vimeo-np.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vimeo (not progressive-enhancement)
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/components/vimeo-np.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vimeo (not progressive-enhancement)
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/vite/src/components/youtube-np.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
youtube (not progressive-enhancement)
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/components/youtube-np.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
youtube (not progressive-enhancement)
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | import VuePlyr from './VuePlyr.vue'
2 |
3 | VuePlyr.install = (app, options = {}) => {
4 | if (options.plyr) {
5 | VuePlyr.props.options.default = () => {
6 | return { ...options.plyr }
7 | }
8 | }
9 |
10 | app.component(VuePlyr.name, VuePlyr)
11 | }
12 |
13 | export default VuePlyr
14 |
--------------------------------------------------------------------------------
/examples/vite/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | vue-plyr-vite
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/examples/nuxt/nuxt.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | // Global page headers (https://go.nuxtjs.dev/config-head)
3 | head: {
4 | title: 'vue-plyr-nuxt',
5 | meta: [
6 | { charset: 'utf-8' },
7 | { name: 'viewport', content: 'width=device-width, initial-scale=1' },
8 | { hid: 'description', name: 'description', content: '' },
9 | ],
10 | },
11 | }
12 |
--------------------------------------------------------------------------------
/examples/vite/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-plyr-vite",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "dev": "vite",
6 | "build": "vite build"
7 | },
8 | "dependencies": {
9 | "@skjnldsv/vue-plyr": "file:../..",
10 | "vue": "^3.3.6"
11 | },
12 | "devDependencies": {
13 | "@vitejs/plugin-vue": "^2.3.4",
14 | "vite": "^2.9.18"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/examples/vite/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 |
4 | // eslint-disable-next-line import/no-unresolved,n/no-missing-import
5 | import VuePlyr from '@skjnldsv/vue-plyr'
6 | // eslint-disable-next-line import/no-unresolved,n/no-missing-import
7 | import '@skjnldsv/vue-plyr/dist/vue-plyr.css'
8 |
9 | createApp(App).use(VuePlyr).mount('#app')
10 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 |
4 | // eslint-disable-next-line import/no-unresolved,n/no-missing-import
5 | import VuePlyr from '@skjnldsv/vue-plyr'
6 | // eslint-disable-next-line import/no-unresolved,n/no-missing-import
7 | import '@skjnldsv/vue-plyr/dist/vue-plyr.css'
8 |
9 | createApp(App).use(VuePlyr).mount('#app')
10 |
--------------------------------------------------------------------------------
/examples/html/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-plyr-html",
3 | "version": "1.0.0",
4 | "description": "An example of how to use vue-plyr with just html.",
5 | "author": "Gabe Dunn",
6 | "scripts": {
7 | "start": "serve ."
8 | },
9 | "devDependencies": {
10 | "serve": "^14.2.5"
11 | },
12 | "dependencies": {
13 | "@skjnldsv/vue-plyr": "file:../.."
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/examples/nuxt/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-plyr-nuxt",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "nuxi dev",
7 | "build": "nuxi build",
8 | "start": "nuxi start",
9 | "generate": "nuxi generate"
10 | },
11 | "devDependencies": {
12 | "nuxt": "^3.17.5"
13 | },
14 | "dependencies": {
15 | "@skjnldsv/vue-plyr": "file:../.."
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@vue/tsconfig/tsconfig.json",
3 | "include": ["./lib/**/*.ts", "./cypress/**/*.ts"],
4 | "compilerOptions": {
5 | "allowSyntheticDefaultImports": true,
6 | "moduleResolution": "node",
7 | "target": "ESNext",
8 | "module": "esnext",
9 | "declaration": true,
10 | "strict": true,
11 | "noImplicitAny": false,
12 | "outDir": "./dist",
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "bundledDependencies": [
4 | "source-map-support",
5 | "hookable",
6 | "radix3",
7 | "unstorage",
8 | "pathe",
9 | "scule",
10 | "ohash",
11 | "ufo",
12 | "unenv",
13 | "destr",
14 | "h3",
15 | "node-fetch-native",
16 | "ohmyfetch",
17 | "cookie-es",
18 | "source-map",
19 | "buffer-from"
20 | ]
21 | }
--------------------------------------------------------------------------------
/examples/nuxt/components/youtube.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
youtube embed
4 |
5 |
6 | VIDEO
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/vite/src/components/youtube.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
youtube embed
4 |
5 |
6 | VIDEO
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/nuxt/components/vimeo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vimeo embed
4 |
5 |
6 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/components/youtube.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
youtube embed
4 |
5 |
6 | VIDEO
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/nuxt/components/audio.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
audio player
4 |
5 |
6 |
8 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/vite/src/components/audio.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
audio player
4 |
5 |
6 |
8 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/vite/src/components/vimeo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vimeo embed
4 |
5 |
6 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/components/vimeo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vimeo embed
4 |
5 |
6 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/components/audio.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
audio player
4 |
5 |
6 |
8 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/nuxt/plugins/plyr.client.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line import/no-unresolved,n/no-missing-import
2 | import { defineNuxtPlugin } from '#app'
3 |
4 | // eslint-disable-next-line import/no-unresolved,n/no-missing-import
5 | import VuePlyr from '@skjnldsv/vue-plyr'
6 | // eslint-disable-next-line import/no-unresolved,n/no-missing-import
7 | import '@skjnldsv/vue-plyr/dist/vue-plyr.css'
8 |
9 | export default defineNuxtPlugin((nuxtApp) => {
10 | nuxtApp.vueApp.use(VuePlyr)
11 | })
12 |
--------------------------------------------------------------------------------
/examples/vue-cli/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-plyr-cli",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build"
8 | },
9 | "dependencies": {
10 | "@skjnldsv/vue-plyr": "file:../..",
11 | "vue": "^3.5.25"
12 | },
13 | "devDependencies": {
14 | "@vue/cli-plugin-babel": "^5.0.9",
15 | "@vue/cli-service": "^5.0.9",
16 | "@vue/compiler-sfc": "^3.5.26"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/server/index.mjs:
--------------------------------------------------------------------------------
1 | globalThis._importMeta_={url:import.meta.url,env:process.env};export { n as default } from './chunks/nitro/node-server.mjs';
2 | import 'node-fetch-native/polyfill';
3 | import 'http';
4 | import 'https';
5 | import 'destr';
6 | import 'h3';
7 | import 'ohmyfetch';
8 | import 'radix3';
9 | import 'unenv/runtime/fetch/index';
10 | import 'hookable';
11 | import 'scule';
12 | import 'ohash';
13 | import 'ufo';
14 | import 'unstorage';
15 | import 'fs';
16 | import 'pathe';
17 | import 'url';
18 | //# sourceMappingURL=index.mjs.map
19 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/public/_nuxt/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "node_modules/nuxt/dist/app/entry.mjs": {
3 | "file": "entry-dcc6d668.mjs",
4 | "src": "node_modules/nuxt/dist/app/entry.mjs",
5 | "isEntry": true,
6 | "dynamicImports": [
7 | "pages/index.vue"
8 | ],
9 | "css": [
10 | "entry.c94dc88a.css"
11 | ]
12 | },
13 | "pages/index.vue": {
14 | "file": "index-9c7865f0.mjs",
15 | "src": "pages/index.vue",
16 | "isDynamicEntry": true,
17 | "imports": [
18 | "node_modules/nuxt/dist/app/entry.mjs"
19 | ]
20 | }
21 | }
--------------------------------------------------------------------------------
/examples/nuxt/.output/server/chunks/app/client.manifest.mjs.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"client.manifest.mjs","sources":["/home/admin/git/vue-plyr/examples/nuxt/.nuxt/dist/server/client.manifest.mjs"],"sourcesContent":null,"names":[],"mappings":"AAAA,wBAAe;AACf,EAAE,sCAAsC,EAAE;AAC1C,IAAI,MAAM,EAAE,oBAAoB;AAChC,IAAI,KAAK,EAAE,sCAAsC;AACjD,IAAI,SAAS,EAAE,IAAI;AACnB,IAAI,gBAAgB,EAAE;AACtB,MAAM,iBAAiB;AACvB,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM,oBAAoB;AAC1B,KAAK;AACL,GAAG;AACH,EAAE,iBAAiB,EAAE;AACrB,IAAI,MAAM,EAAE,oBAAoB;AAChC,IAAI,KAAK,EAAE,iBAAiB;AAC5B,IAAI,gBAAgB,EAAE,IAAI;AAC1B,IAAI,SAAS,EAAE;AACf,MAAM,sCAAsC;AAC5C,KAAK;AACL,GAAG;AACH;;;;"}
--------------------------------------------------------------------------------
/examples/vue-cli/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | <%= htmlWebpackPlugin.options.title %>
8 |
9 |
10 |
11 | We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/server/chunks/app/client.manifest.mjs:
--------------------------------------------------------------------------------
1 | const client_manifest = {
2 | "node_modules/nuxt/dist/app/entry.mjs": {
3 | "file": "entry-dcc6d668.mjs",
4 | "src": "node_modules/nuxt/dist/app/entry.mjs",
5 | "isEntry": true,
6 | "dynamicImports": [
7 | "pages/index.vue"
8 | ],
9 | "css": [
10 | "entry.c94dc88a.css"
11 | ]
12 | },
13 | "pages/index.vue": {
14 | "file": "index-9c7865f0.mjs",
15 | "src": "pages/index.vue",
16 | "isDynamicEntry": true,
17 | "imports": [
18 | "node_modules/nuxt/dist/app/entry.mjs"
19 | ]
20 | }
21 | };
22 |
23 | export { client_manifest as default };
24 | //# sourceMappingURL=client.manifest.mjs.map
25 |
--------------------------------------------------------------------------------
/.github/workflows/dependabot-approve-merge.yml:
--------------------------------------------------------------------------------
1 | # This workflow is provided via the organization template repository
2 | #
3 | # https://github.com/nextcloud/.github
4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
5 |
6 | name: Dependabot
7 |
8 | on:
9 | pull_request_target:
10 | branches:
11 | - main
12 | - master
13 | - stable*
14 |
15 | jobs:
16 | auto-approve-merge:
17 | if: github.actor == 'dependabot[bot]'
18 | runs-on: ubuntu-latest
19 | permissions:
20 | pull-requests: write
21 |
22 | steps:
23 | # Approve and merge request
24 | - uses: ahmadnassri/action-dependabot-auto-merge@v2
25 | with:
26 | target: minor
27 | github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }}
28 |
--------------------------------------------------------------------------------
/rollup.config.mjs:
--------------------------------------------------------------------------------
1 | import { nodeResolve } from '@rollup/plugin-node-resolve'
2 | import { resolve } from 'node:path'
3 | import commonjs from '@rollup/plugin-commonjs'
4 | import postcss from 'rollup-plugin-postcss'
5 | import vue from 'rollup-plugin-vue'
6 |
7 | const external = [
8 | 'vue-plyr',
9 | 'vue',
10 | ]
11 |
12 | export default {
13 | input: './lib/index.js',
14 | external,
15 | plugins: [
16 | nodeResolve(),
17 | vue(),
18 | commonjs(),
19 | postcss({
20 | // Or with custom file name
21 | extract: resolve('dist/vue-plyr.css'),
22 | }),
23 | ],
24 | output: [
25 | {
26 | file: 'dist/index.js',
27 | format: 'cjs',
28 | sourcemap: true,
29 | assetFileNames: 'vue-plyr[extname]',
30 | exports: 'default',
31 | },
32 | {
33 | file: 'dist/index.esm.js',
34 | format: 'esm',
35 | sourcemap: true,
36 | assetFileNames: 'vue-plyr[extname]',
37 | },
38 | ],
39 | }
40 |
--------------------------------------------------------------------------------
/__tests__/utils/config.spec.ts:
--------------------------------------------------------------------------------
1 | import { getMaxChunksSize } from '../../lib/utils/config'
2 |
3 | describe('Max chunk size tests', () => {
4 | test('Returning valid config', () => {
5 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 15 * 1024 * 1024 }}}})
6 | expect(getMaxChunksSize()).toBe(15 * 1024 * 1024)
7 | })
8 |
9 | test('Returning disabled chunking config', () => {
10 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 0 }}}})
11 | expect(getMaxChunksSize()).toBe(0)
12 |
13 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: -1 }}}})
14 | expect(getMaxChunksSize()).toBe(0)
15 |
16 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: null }}}})
17 | expect(getMaxChunksSize()).toBe(0)
18 | })
19 |
20 | test('Returning invalid config', () => {
21 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 'test' }}}})
22 | expect(getMaxChunksSize()).toBe(10 * 1024 * 1024)
23 |
24 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: undefined }}}})
25 | expect(getMaxChunksSize()).toBe(10 * 1024 * 1024)
26 | })
27 | })
28 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | # The MIT License (MIT)
2 | >Copyright (c) 2018
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the "Software"), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is
9 | furnished to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in all
12 | copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 | SOFTWARE.
21 |
--------------------------------------------------------------------------------
/lib/VuePlyr.vue:
--------------------------------------------------------------------------------
1 |
61 |
--------------------------------------------------------------------------------
/.github/workflows/lint-eslint.yml:
--------------------------------------------------------------------------------
1 | # This workflow is provided via the organization template repository
2 | #
3 | # https://github.com/nextcloud/.github
4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
5 |
6 | name: Lint
7 |
8 | on:
9 | pull_request:
10 | push:
11 | branches:
12 | - main
13 | - master
14 | - stable*
15 |
16 | jobs:
17 | lint:
18 | runs-on: ubuntu-latest
19 |
20 | name: eslint
21 |
22 | steps:
23 | - name: Checkout
24 | uses: actions/checkout@v6
25 |
26 | - name: Read package.json node and npm engines version
27 | uses: skjnldsv/read-package-engines-version-actions@v3
28 | id: versions
29 | with:
30 | fallbackNode: '^12'
31 | fallbackNpm: '^6'
32 |
33 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
34 | uses: actions/setup-node@v6.1.0
35 | with:
36 | node-version: ${{ steps.versions.outputs.nodeVersion }}
37 |
38 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
39 | run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
40 |
41 | - name: Install dependencies
42 | run: npm ci
43 |
44 | - name: Lint
45 | run: npm run lint
46 |
--------------------------------------------------------------------------------
/.github/workflows/documentation.yml:
--------------------------------------------------------------------------------
1 | name: Docs
2 |
3 | on:
4 | workflow_dispatch:
5 | workflow_run:
6 | workflows: [Publish]
7 | types:
8 | - completed
9 | schedule:
10 | - cron: "0 * * * *"
11 |
12 | permissions:
13 | contents: write
14 |
15 | jobs:
16 | build-and-deploy:
17 | runs-on: ubuntu-latest
18 |
19 | steps:
20 | - name: Checkout
21 | uses: actions/checkout@v6
22 |
23 | - name: Read package.json node and npm engines version
24 | uses: skjnldsv/read-package-engines-version-actions@v3
25 | id: versions
26 | with:
27 | fallbackNode: '^12'
28 | fallbackNpm: '^6'
29 |
30 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
31 | uses: actions/setup-node@v6.1.0
32 | with:
33 | node-version: ${{ steps.versions.outputs.nodeVersion }}
34 |
35 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
36 | run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
37 |
38 | - name: Install dependencies & build
39 | working-directory: examples/html
40 | run: |
41 | npm ci --no-dev
42 | npm i --save @skjnldsv/vue-plyr@latest
43 | touch .nojekyll
44 |
45 | - name: Deploy
46 | uses: JamesIves/github-pages-deploy-action@v4
47 | with:
48 | branch: gh-pages
49 | folder: examples/html
50 |
--------------------------------------------------------------------------------
/examples/nuxt/components/video.vue:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
45 |
--------------------------------------------------------------------------------
/examples/vite/src/components/video.vue:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
45 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/components/video.vue:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
45 |
--------------------------------------------------------------------------------
/.github/workflows/node.yml:
--------------------------------------------------------------------------------
1 | # This workflow is provided via the organization template repository
2 | #
3 | # https://github.com/nextcloud/.github
4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
5 |
6 | name: Node
7 |
8 | on:
9 | pull_request:
10 | push:
11 | branches:
12 | - main
13 | - master
14 | - stable*
15 |
16 | permissions:
17 | contents: read
18 |
19 | jobs:
20 | build:
21 | runs-on: ubuntu-latest
22 |
23 | name: node
24 | steps:
25 | - name: Checkout
26 | uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v4.1.5
27 |
28 | - name: Read package.json node and npm engines version
29 | uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
30 | id: versions
31 | with:
32 | fallbackNode: '^18'
33 | fallbackNpm: '^9'
34 |
35 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
36 | uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v3
37 | with:
38 | node-version: ${{ steps.versions.outputs.nodeVersion }}
39 |
40 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
41 | run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
42 |
43 | - name: Install dependencies & build
44 | run: |
45 | npm ci
46 | npm run build --if-present
47 |
--------------------------------------------------------------------------------
/examples/vite/src/components/demo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vue-plyr demo.
4 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
39 |
40 |
66 |
--------------------------------------------------------------------------------
/examples/vue-cli/src/components/demo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vue-plyr demo.
4 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
39 |
40 |
66 |
--------------------------------------------------------------------------------
/examples/nuxt/components/demo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vue-plyr demo.
4 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
41 |
42 |
68 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: github-actions
4 | directory: "/"
5 | schedule:
6 | interval: weekly
7 | day: saturday
8 | time: "03:00"
9 | timezone: Europe/Paris
10 | open-pull-requests-limit: 10
11 | labels:
12 | - dependencies
13 |
14 | - package-ecosystem: npm
15 | directory: "/"
16 | schedule:
17 | interval: weekly
18 | day: saturday
19 | time: "03:00"
20 | timezone: Europe/Paris
21 | open-pull-requests-limit: 10
22 | labels:
23 | - dependencies
24 |
25 | - package-ecosystem: npm
26 | directory: "examples/html"
27 | schedule:
28 | interval: weekly
29 | day: saturday
30 | time: "03:00"
31 | timezone: Europe/Paris
32 | open-pull-requests-limit: 10
33 | labels:
34 | - dependencies
35 |
36 | - package-ecosystem: npm
37 | directory: "examples/nuxt"
38 | schedule:
39 | interval: weekly
40 | day: saturday
41 | time: "03:00"
42 | timezone: Europe/Paris
43 | open-pull-requests-limit: 10
44 | labels:
45 | - dependencies
46 |
47 | - package-ecosystem: npm
48 | directory: "examples/vite"
49 | schedule:
50 | interval: weekly
51 | day: saturday
52 | time: "03:00"
53 | timezone: Europe/Paris
54 | open-pull-requests-limit: 10
55 | labels:
56 | - dependencies
57 |
58 | - package-ecosystem: npm
59 | directory: "examples/vue-cli"
60 | schedule:
61 | interval: weekly
62 | day: saturday
63 | time: "03:00"
64 | timezone: Europe/Paris
65 | open-pull-requests-limit: 10
66 | labels:
67 | - dependencies
68 |
--------------------------------------------------------------------------------
/.github/workflows/examples-node.yml:
--------------------------------------------------------------------------------
1 | name: Node
2 |
3 | on:
4 | pull_request:
5 | push:
6 | branches:
7 | - master
8 | - stable*
9 |
10 | jobs:
11 | build:
12 | runs-on: ubuntu-latest
13 |
14 | strategy:
15 | fail-fast: false
16 | matrix:
17 | node-version: [22, 24]
18 | examples: ["html", "nuxt", "vite", "vue-cli"]
19 |
20 | name: examples-build
21 | steps:
22 | - name: Checkout
23 | uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v4.1.5
24 |
25 | - name: Set up node ${{ matrix.node-version }}
26 | uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v3
27 | with:
28 | node-version: ${{ matrix.node-version }}
29 |
30 | - name: Install dependencies and build library
31 | run: |
32 | npm ci
33 | npm run build --if-present
34 | npm pack
35 |
36 | - name: Install example dependencies
37 | working-directory: "examples/${{ matrix.examples }}"
38 | run: |
39 | npm ci
40 | version=$(cat ../../package.json | jq --raw-output .version)
41 | npm install -D ../../skjnldsv-vue-plyr-$version.tgz
42 |
43 | - name: Build ${{ matrix.examples }} example
44 | working-directory: "examples/${{ matrix.examples }}"
45 | run: npm run build --if-present
46 |
47 | summary:
48 | runs-on: ubuntu-latest
49 | needs: build
50 | if: always()
51 |
52 | name: examples-summary
53 | steps:
54 | - name: Summary status
55 | run: if ${{ needs.build.result != 'success' && needs.build.result != 'skipped' }}; then exit 1; fi
56 |
--------------------------------------------------------------------------------
/.github/workflows/npm-publish.yml:
--------------------------------------------------------------------------------
1 | # This workflow is provided via the organization template repository
2 | #
3 | # https://github.com/nextcloud/.github
4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
5 |
6 | name: Publish
7 |
8 | on:
9 | release:
10 | types: [published]
11 |
12 | jobs:
13 | publish:
14 | runs-on: ubuntu-latest
15 |
16 | name: Build and publish to npm
17 | steps:
18 | - name: Check actor permission level
19 | uses: skjnldsv/check-actor-permission@v3
20 | with:
21 | require: admin
22 |
23 | - name: Checkout
24 | uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v4.1.5
25 |
26 | - name: Read package.json node and npm engines version
27 | uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
28 | id: versions
29 | with:
30 | fallbackNode: '^18'
31 | fallbackNpm: '^9'
32 |
33 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
34 | uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v3
35 | with:
36 | node-version: ${{ steps.versions.outputs.nodeVersion }}
37 |
38 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
39 | run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
40 |
41 | - name: Install dependencies & build
42 | run: |
43 | npm ci
44 | npm run build --if-present
45 |
46 | - name: Publish
47 | run: |
48 | npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
49 | npm publish
50 | env:
51 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
52 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@skjnldsv/vue-plyr",
3 | "version": "7.5.0",
4 | "description": "A vue component for the plyr video & audio player.",
5 | "license": "MIT",
6 | "author": {
7 | "name": "Gabe Dunn",
8 | "email": "gabe@redxtech.ca",
9 | "url": "https://gabedunn.dev"
10 | },
11 | "repository": "github:skjnldsv/vue-plyr",
12 | "scripts": {
13 | "build": "rm -rf dist/ && rollup --config rollup.config.mjs",
14 | "dev": "echo 'No dev build available, production only' && npm run build",
15 | "watch": "rollup --config rollup.config.mjs --watch",
16 | "lint": "eslint --ext .js,.vue lib examples",
17 | "lint:fix": "eslint --ext .js,.vue --fix lib examples"
18 | },
19 | "main": "dist/index.js",
20 | "module": "dist/index.esm.js",
21 | "exports": {
22 | ".": {
23 | "import": "./dist/index.esm.js",
24 | "require": "./dist/index.js"
25 | },
26 | "./dist/": "./dist/"
27 | },
28 | "files": [
29 | "dist/"
30 | ],
31 | "engines": {
32 | "node": "^24.0.0",
33 | "npm": "^11.0.0"
34 | },
35 | "dependencies": {
36 | "plyr": "^3.8.3",
37 | "vue": "^3.5.25"
38 | },
39 | "devDependencies": {
40 | "@nextcloud/babel-config": "^1.3.0",
41 | "@nextcloud/eslint-config": "^8.4.2",
42 | "@nextcloud/stylelint-config": "^3.1.1",
43 | "@rollup/plugin-commonjs": "^29.0.0",
44 | "@rollup/plugin-node-resolve": "^16.0.3",
45 | "@vue/tsconfig": "^0.8.1",
46 | "jest": "^30.2.0",
47 | "jest-environment-jsdom": "^30.2.0",
48 | "rollup": "^4.53.3",
49 | "rollup-plugin-inject-process-env": "^1.3.1",
50 | "rollup-plugin-postcss": "^4.0.2",
51 | "rollup-plugin-vue": "^6.0.0",
52 | "rollup-plugin-vue2": "^0.8.1",
53 | "sass": "^1.94.2"
54 | },
55 | "keywords": [
56 | "vue-plyr",
57 | "vue",
58 | "plyr",
59 | "video",
60 | "audio",
61 | "youtube",
62 | "vimeo",
63 | "media",
64 | "player",
65 | "js",
66 | "javascript",
67 | "rollup"
68 | ]
69 | }
70 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/public/_nuxt/index-9c7865f0.mjs:
--------------------------------------------------------------------------------
1 | import{_,r as n,o as s,c as l,a as o,w as i,b as e,d as m,e as A,f as k}from"./entry-dcc6d668.mjs";const T={},F=e("h2",null,"youtube embed",-1),M=e("div",{class:"plyr__video-embed"},[e("iframe",{src:"https://www.youtube.com/embed/bTqVqk7FSmY?amp;iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1",allowfullscreen:"",allowtransparency:"",allow:"autoplay"})],-1);function N(r,c){const t=n("vue-plyr");return s(),l("div",null,[F,o(t,null,{default:i(()=>[M]),_:1})])}var h=_(T,[["render",N]]);const D={},P=e("h2",null,"youtube (not progressive-enhancement)",-1),Y=e("div",{"data-plyr-provider":"youtube","data-plyr-embed-id":"bTqVqk7FSmY"},null,-1);function q(r,c){const t=n("vue-plyr");return s(),l("div",null,[P,o(t,null,{default:i(()=>[Y]),_:1})])}var y=_(D,[["render",q]]);const j={},z=e("h2",null,"vimeo embed",-1),C=e("div",{class:"plyr__video-embed"},[e("iframe",{src:"https://player.vimeo.com/video/147865858?loop=false&byline=false&portrait=false&title=false&speed=true&transparent=0&gesture=media",allowfullscreen:"",allowtransparency:"",allow:"autoplay"})],-1);function H(r,c){const t=n("vue-plyr");return s(),l("div",null,[z,o(t,null,{default:i(()=>[C]),_:1})])}var v=_(j,[["render",H]]);const E={},I=e("h2",null,"vimeo (not progressive-enhancement)",-1),K=e("div",{"data-plyr-provider":"vimeo","data-plyr-embed-id":"147865858"},null,-1);function S(r,c){const t=n("vue-plyr");return s(),l("div",null,[I,o(t,null,{default:i(()=>[K]),_:1})])}var f=_(E,[["render",S]]);const W={data(){return{options:{quality:{default:"1080p"}}}}},L=e("h2",null,"video player",-1),O=e("video",{controls:"",crossorigin:"",playsinline:"","data-poster":"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg"},[e("source",{size:"576",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4"}),e("source",{size:"720",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4"}),e("source",{size:"1080",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4"}),e("track",{default:"",kind:"captions",label:"English captions",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",srclang:"en"}),e("track",{kind:"captions",label:"L\xE9gendes en fran\xE7ais",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt",srclang:"fr"}),e("a",{download:"",href:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4"}," Download ")],-1);function G(r,c,t,d,p,u){const a=n("vue-plyr");return s(),l("div",null,[L,o(a,{options:p.options},{default:i(()=>[O]),_:1},8,["options"])])}var J=_(W,[["render",G]]);const Q={},R=e("h2",null,"audio player",-1),U=e("audio",{controls:"",crossorigin:"",playsinline:""},[e("source",{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"}),e("source",{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"})],-1);function X(r,c){const t=n("vue-plyr");return s(),l("div",null,[R,o(t,null,{default:i(()=>[U]),_:1})])}var Z=_(Q,[["render",X]]);const ee={components:{VuePlyrVideo:J,VuePlyrAudio:Z,Youtube:h,YoutubeNp:y,Vimeo:v,VimeoNp:f}},oe={class:"demo"},te=e("h1",null,"vue-plyr demo.",-1),ne=e("h3",null,[m(" sources can be found at "),e("a",{href:"https://github.com/skjnldsv/vue-plyr/tree/master/examples"}," github.com/skjnldsv/vue-plyr"),m(". ")],-1),_e={class:"components"};function se(r,c,t,d,p,u){const a=n("VuePlyrVideo"),b=n("VuePlyrAudio"),V=h,w=y,x=v,g=f,B=A;return s(),l("div",oe,[te,ne,e("div",_e,[o(B,null,{default:i(()=>[o(a),o(b),o(V),o(w),o(x),o(g)]),_:1})])])}var $=_(ee,[["render",se]]);const re={components:{Demo:$}};function ce(r,c,t,d,p,u){const a=$;return s(),k(a)}var ie=_(re,[["render",ce]]);export{ie as default};
2 |
--------------------------------------------------------------------------------
/__tests__/utils/upload.spec.ts:
--------------------------------------------------------------------------------
1 | import { getChunk, initChunkWorkspace, uploadData } from '../../lib/utils/upload'
2 | import axios from '@nextcloud/axios';
3 |
4 | describe('Get chunk from file', () => {
5 | test('Chunking a valid file', async () => {
6 | const blob = new Blob([new ArrayBuffer(5 * 1024 * 1024)])
7 | const file = new File([blob as BlobPart], 'image.jpg', {
8 | type: 'image/jpeg',
9 | lastModified:new Date().getTime()
10 | })
11 |
12 | const chunk = await getChunk(file, 0, 10 * 1024 * 1024)
13 | expect(chunk.size).toBe(5 * 1024 * 1024)
14 | })
15 |
16 | test('Chunking a valid big file', async () => {
17 | const blob = new Blob([new ArrayBuffer(50 * 1024 * 1024)])
18 | const file = new File([blob as BlobPart], 'image.jpg', {
19 | type: 'image/jpeg',
20 | lastModified:new Date().getTime()
21 | })
22 |
23 | const chunk = await getChunk(file, 0, 10 * 1024 * 1024)
24 | expect(chunk.size).toBe(10 * 1024 * 1024)
25 | })
26 |
27 | test('Chunking an invalid file', () => {
28 | const blob = new Blob([new ArrayBuffer(5 * 1024 * 1024)])
29 | const file = new File([blob as BlobPart], 'image.jpg')
30 |
31 | expect(getChunk(file, 0, 10 * 1024 * 1024)).rejects.toEqual(new Error('Unknown file type'))
32 | })
33 | })
34 |
35 | describe('Initialize chunks upload temporary workspace', () => {
36 | test('Init random workspace', async () => {
37 | jest.spyOn(axios, 'request')
38 | const url = await initChunkWorkspace()
39 |
40 | expect(url.startsWith('https://cloud.domain.com/remote.php/dav/uploads/test/web-file-upload-')).toBe(true)
41 | expect(url.length).toEqual('https://cloud.domain.com/remote.php/dav/uploads/test/web-file-upload-3ec6b932e672fd7c1d8430b0f8457b07'.length)
42 |
43 | expect(axios.request).toHaveBeenCalledTimes(1)
44 | expect(axios.request).toHaveBeenCalledWith({
45 | method: 'MKCOL',
46 | url,
47 | })
48 | })
49 | })
50 |
51 | describe('Upload data', () => {
52 | test('Upload data stream', async () => {
53 | jest.spyOn(axios, 'request')
54 | const url = 'https://cloud.domain.com/remote.php/dav/files/test/image.jpg'
55 | const blob = new Blob([new ArrayBuffer(50 * 1024 * 1024)])
56 | const signal = new AbortController().signal
57 | const onUploadProgress = jest.fn()
58 | await uploadData(url, blob, signal, onUploadProgress)
59 |
60 | expect(onUploadProgress).toHaveBeenCalledTimes(1)
61 | expect(axios.request).toHaveBeenCalledTimes(1)
62 | expect(axios.request).toHaveBeenCalledWith({
63 | method: 'PUT',
64 | url,
65 | data: blob,
66 | signal,
67 | onUploadProgress,
68 | })
69 | })
70 | test('Upload async data stream', async () => {
71 | jest.spyOn(axios, 'request')
72 |
73 | const url = 'https://cloud.domain.com/remote.php/dav/files/test/image.jpg'
74 | const blob = new Blob([new ArrayBuffer(50 * 1024 * 1024)])
75 | const data = jest.fn(async () => blob)
76 | const signal = new AbortController().signal
77 | const onUploadProgress = jest.fn()
78 |
79 | await uploadData(url, data, signal, onUploadProgress)
80 |
81 | expect(onUploadProgress).toHaveBeenCalledTimes(1)
82 | expect(axios.request).toHaveBeenCalledTimes(1)
83 | expect(data).toHaveBeenCalledTimes(1)
84 | expect(axios.request).toHaveBeenCalledWith({
85 | method: 'PUT',
86 | url,
87 | data: blob,
88 | signal,
89 | onUploadProgress,
90 | })
91 | })
92 |
93 | test('Upload cancellation', async () => {
94 | jest.spyOn(axios, 'request')
95 |
96 | const url = 'https://cloud.domain.com/remote.php/dav/files/test/image.jpg'
97 | const blob = new Blob([new ArrayBuffer(50 * 1024 * 1024)])
98 | const data = jest.fn(async () => blob)
99 | const controller = new AbortController()
100 | const onUploadProgress = jest.fn()
101 | jest.spyOn(controller, 'abort')
102 |
103 | // Cancel after 200ms
104 | setTimeout(() => controller.abort(), 400)
105 | try {
106 | await uploadData(url, data, controller.signal, onUploadProgress)
107 | } catch (error) {
108 | expect(onUploadProgress).toHaveBeenCalledTimes(1)
109 | expect(axios.request).toHaveBeenCalledTimes(1)
110 | expect(controller.abort).toHaveBeenCalledTimes(1)
111 | expect((error as Error).name).toBe('AbortError')
112 | }
113 | })
114 | })
115 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | debug.js
2 |
3 | # Created by https://www.gitignore.io/api/node,macos,intellij+all
4 | # Edit at https://www.gitignore.io/?templates=node,macos,intellij+all
5 |
6 | ### Intellij+all ###
7 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
8 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
9 |
10 | # User-specific stuff
11 | .idea/**/workspace.xml
12 | .idea/**/tasks.xml
13 | .idea/**/usage.statistics.xml
14 | .idea/**/dictionaries
15 | .idea/**/shelf
16 |
17 | # Generated files
18 | .idea/**/contentModel.xml
19 |
20 | # Sensitive or high-churn files
21 | .idea/**/dataSources/
22 | .idea/**/dataSources.ids
23 | .idea/**/dataSources.local.xml
24 | .idea/**/sqlDataSources.xml
25 | .idea/**/dynamic.xml
26 | .idea/**/uiDesigner.xml
27 | .idea/**/dbnavigator.xml
28 |
29 | # Gradle
30 | .idea/**/gradle.xml
31 | .idea/**/libraries
32 |
33 | # Gradle and Maven with auto-import
34 | # When using Gradle or Maven with auto-import, you should exclude module files,
35 | # since they will be recreated, and may cause churn. Uncomment if using
36 | # auto-import.
37 | # .idea/modules.xml
38 | # .idea/*.iml
39 | # .idea/modules
40 | # *.iml
41 | # *.ipr
42 |
43 | # CMake
44 | cmake-build-*/
45 |
46 | # Mongo Explorer plugin
47 | .idea/**/mongoSettings.xml
48 |
49 | # File-based project format
50 | *.iws
51 |
52 | # IntelliJ
53 | out/
54 |
55 | # mpeltonen/sbt-idea plugin
56 | .idea_modules/
57 |
58 | # JIRA plugin
59 | atlassian-ide-plugin.xml
60 |
61 | # Cursive Clojure plugin
62 | .idea/replstate.xml
63 |
64 | # Crashlytics plugin (for Android Studio and IntelliJ)
65 | com_crashlytics_export_strings.xml
66 | crashlytics.properties
67 | crashlytics-build.properties
68 | fabric.properties
69 |
70 | # Editor-based Rest Client
71 | .idea/httpRequests
72 |
73 | # Android studio 3.1+ serialized cache file
74 | .idea/caches/build_file_checksums.ser
75 |
76 | ### Intellij+all Patch ###
77 | # Ignores the whole .idea folder and all .iml files
78 | # See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360
79 |
80 | .idea/
81 |
82 | # Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023
83 |
84 | *.iml
85 | modules.xml
86 | .idea/misc.xml
87 | *.ipr
88 |
89 | # Sonarlint plugin
90 | .idea/sonarlint
91 |
92 | ### macOS ###
93 | # General
94 | .DS_Store
95 | .AppleDouble
96 | .LSOverride
97 |
98 | # Icon must end with two \r
99 | Icon
100 |
101 | # Thumbnails
102 | ._*
103 |
104 | # Files that might appear in the root of a volume
105 | .DocumentRevisions-V100
106 | .fseventsd
107 | .Spotlight-V100
108 | .TemporaryItems
109 | .Trashes
110 | .VolumeIcon.icns
111 | .com.apple.timemachine.donotpresent
112 |
113 | # Directories potentially created on remote AFP share
114 | .AppleDB
115 | .AppleDesktop
116 | Network Trash Folder
117 | Temporary Items
118 | .apdisk
119 |
120 | ### Node ###
121 | # Logs
122 | logs
123 | *.log
124 | npm-debug.log*
125 | yarn-debug.log*
126 | yarn-error.log*
127 | lerna-debug.log*
128 |
129 | # Diagnostic reports (https://nodejs.org/api/report.html)
130 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
131 |
132 | # Runtime data
133 | pids
134 | *.pid
135 | *.seed
136 | *.pid.lock
137 |
138 | # Directory for instrumented libs generated by jscoverage/JSCover
139 | lib-cov
140 |
141 | # Coverage directory used by tools like istanbul
142 | coverage
143 | *.lcov
144 |
145 | # nyc test coverage
146 | .nyc_output
147 |
148 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
149 | .grunt
150 |
151 | # Bower dependency directory (https://bower.io/)
152 | bower_components
153 |
154 | # node-waf configuration
155 | .lock-wscript
156 |
157 | # Compiled binary addons (https://nodejs.org/api/addons.html)
158 | build/Release
159 |
160 | # Dependency directories
161 | node_modules/
162 | jspm_packages/
163 |
164 | # TypeScript v1 declaration files
165 | typings/
166 |
167 | # TypeScript cache
168 | *.tsbuildinfo
169 |
170 | # Optional npm cache directory
171 | .npm
172 |
173 | # Optional eslint cache
174 | .eslintcache
175 |
176 | # Optional REPL history
177 | .node_repl_history
178 |
179 | # Output of 'npm pack'
180 | *.tgz
181 |
182 | # Yarn Integrity file
183 | .yarn-integrity
184 |
185 | # dotenv environment variables file
186 | .env
187 | .env.test
188 |
189 | # parcel-bundler cache (https://parceljs.org/)
190 | .cache
191 |
192 | # next.js build output
193 | .next
194 |
195 | # nuxt.js build output
196 | .nuxt
197 |
198 | # rollup.js default build output
199 | dist/
200 |
201 | # Uncomment the public line if your project uses Gatsby
202 | # https://nextjs.org/blog/next-9-1#public-directory-support
203 | # https://create-react-app.dev/docs/using-the-public-folder/#docsNav
204 | # public
205 |
206 | # Storybook build outputs
207 | .out
208 | .storybook-out
209 |
210 | # vuepress build output
211 | .vuepress/dist
212 |
213 | # Serverless directories
214 | .serverless/
215 |
216 | # FuseBox cache
217 | .fusebox/
218 |
219 | # DynamoDB Local files
220 | .dynamodb/
221 |
222 | # Temporary folders
223 | tmp/
224 | temp/
225 |
226 | # End of https://www.gitignore.io/api/node,macos,intellij+all
227 |
228 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-plyr - A vue component for the plyr video & audio player
2 |
3 | 
4 | [](https://www.npmjs.com/package/@skjnldsv/vue-plyr)
5 | 
6 |
7 | This is useful for when you want a nice video player in your Vue app.
8 | - It uses [plyr](https://plyr.io) by [sampotts](https://github.com/sampotts) for the players.
9 | - Supported player types: HTML5 video, HTML5 audio, YouTube, and Vimeo.
10 |
11 | ### Demo
12 | A demo of the components (equivalent to the html example include here) can be found at
13 | [skjnldsv.github.io/vue-plyr](https://skjnldsv.github.io/vue-plyr/).
14 |
15 | ## Installation
16 |
17 | ### NPM
18 | ```bash
19 | npm install @skjnldsv/vue-plyr
20 | ```
21 |
22 | ### Yarn
23 | ```bash
24 | yarn add @skjnldsv/vue-plyr
25 | ```
26 |
27 | ## Examples
28 | Examples of how to use this app can be found [here](https://github.com/skjnldsv/vue-plyr/tree/master/examples).
29 |
30 | ## Usage
31 | Once installed, it can be used in a template as simply as:
32 |
33 | ```vue
34 |
35 |
36 |
42 |
47 |
52 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
69 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | VIDEO
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | ```
110 |
111 | ## Player Instance
112 | To access the player instance, you can use the `player` property from the `refs` attribute.
113 |
114 | ```html
115 |
116 | ...
117 |
118 |
119 |
127 | ```
128 |
129 | ## Events
130 | If you want to capture events from the plyr instance, you can do so by accessing the player instance through the `ref`
131 | attribute and using that object for events, as you would with a vanilla plyr instance.
132 |
133 | Valid events are [here](https://github.com/sampotts/plyr#events).
134 |
135 | ```html
136 |
137 | ...
138 |
139 |
146 | ```
147 |
148 | ## Options
149 | For custom options you can pass an `options` prop which is an object that will be passed to the `new Plyr()` creation.
150 | Available options
151 | [here](https://github.com/sampotts/plyr#options). I have added a new option (`hideYouTubeDOMError`) that hides the error
152 | that is always logged when destroying a YouTube player. It defaults to `true`, and you can disable it and see the error
153 | by setting it to false.
154 |
155 | You can also specify the default options when registering the plugin
156 | (these will be ignored if you specify a player-specific options object via props):
157 |
158 | ```js
159 | createApp(App).use(VuePlyr, {
160 | plyr: {}
161 | })
162 | ```
163 |
164 | ## Author & Contributors
165 |
166 | - [RedXTech](https://github.com/redxtech), released under the [MIT](./LICENSE.md) License.
167 | - [Skjnldsv](https://github.com/skjnldsv)
168 |
--------------------------------------------------------------------------------
/examples/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | vue-plyr-html
6 |
32 |
33 |
34 |
35 |
36 |
37 |
vue-plyr demo.
38 |
44 |
45 |
46 |
video player
47 |
48 |
54 |
59 |
64 |
69 |
76 |
82 |
86 | Download
87 |
88 |
89 |
90 |
91 |
92 |
audio player
93 |
94 |
95 |
99 |
103 |
104 |
105 |
106 |
107 |
youtube embed
108 |
109 |
110 | VIDEO
116 |
117 |
118 |
119 |
120 |
youtube (not progressive-enhancement)
121 |
122 |
123 |
124 |
125 |
126 |
vimeo embed
127 |
128 |
129 |
135 |
136 |
137 |
138 |
139 |
vimeo (not progressive-enhancement)
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
159 |
160 |
161 |
--------------------------------------------------------------------------------
/__tests__/upload.spec.ts:
--------------------------------------------------------------------------------
1 | import { Status, Upload } from '../lib/upload'
2 |
3 | describe('Constructor checks', () => {
4 | test('Classic upload', () => {
5 | // Setting max chunk size to 10MB
6 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 10 * 1024 * 1024 }}}})
7 | const upload = new Upload('/image.jpg', true, 10 * 1024 * 1024)
8 |
9 | expect(upload.path).toBe('/image.jpg')
10 | expect(upload.isChunked).toBe(false)
11 | expect(upload.chunks).toBe(1)
12 | expect(upload.size).toBe(10 * 1024 * 1024)
13 | expect(upload.uploaded).toBe(0)
14 | expect(upload.status).toBe(Status.INITIALIZED)
15 | })
16 |
17 | test('Disabled chunking', () => {
18 | // Setting max chunk size to 10MB
19 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 0 }}}})
20 | const upload = new Upload('/image.jpg', true, 10 * 1024 * 1024)
21 |
22 | expect(upload.path).toBe('/image.jpg')
23 | expect(upload.isChunked).toBe(false)
24 | expect(upload.chunks).toBe(1)
25 | expect(upload.size).toBe(10 * 1024 * 1024)
26 | expect(upload.uploaded).toBe(0)
27 | expect(upload.status).toBe(Status.INITIALIZED)
28 | })
29 | })
30 |
31 | describe('Upload chunks config', () => {
32 | test('150MB file with 15MB chunk', () => {
33 | // Setting max chunk size to 15MB
34 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 15 * 1024 * 1024 }}}})
35 |
36 | // File is 150MB
37 | const upload = new Upload('/image.jpg', true, 150 * 1024 * 1024)
38 | expect(upload.chunks).toBe(10)
39 | expect(upload.isChunked).toBe(true)
40 | })
41 |
42 | test('151MB file with 15MB chunk', () => {
43 | // Setting max chunk size to 15MB
44 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 15 * 1024 * 1024 }}}})
45 |
46 | // File is 150MB
47 | const upload = new Upload('/image.jpg', true, 151 * 1024 * 1024)
48 | expect(upload.chunks).toBe(11)
49 | expect(upload.isChunked).toBe(true)
50 | })
51 |
52 | test('1GB file with 15MB chunk and manually disabled chunk', () => {
53 | // Setting max chunk size to 15MB
54 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 15 * 1024 * 1024 }}}})
55 |
56 | // File is 150MB
57 | const upload = new Upload('/image.jpg', false, 1024 * 1024 * 1024)
58 | expect(upload.chunks).toBe(1)
59 | expect(upload.isChunked).toBe(false)
60 | })
61 |
62 | test('1GB file with globally disabled chunking', () => {
63 | // Setting max chunk size to 15MB
64 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 0 }}}})
65 |
66 | // File is 150MB
67 | const upload = new Upload('/image.jpg', true, 1024 * 1024 * 1024)
68 | expect(upload.chunks).toBe(1)
69 | expect(upload.isChunked).toBe(false)
70 | })
71 | })
72 |
73 | describe('Uploading states', () => {
74 | test('Chunking upload', () => {
75 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 10 * 1024 * 1024 }}}})
76 |
77 | const upload = new Upload('/image.jpg', true, 150 * 1024 * 1024)
78 | expect(upload.uploaded).toBe(0)
79 | expect(upload.chunks).toBe(15)
80 | expect(upload.isChunked).toBe(true)
81 | expect(upload.status).toBe(Status.INITIALIZED)
82 |
83 | upload.uploaded = 1
84 | expect(upload.uploaded).toBe(1)
85 | expect(upload.status).toBe(Status.UPLOADING)
86 | expect(upload.startTime).toBeGreaterThan(0)
87 |
88 | // overflowing value
89 | upload.uploaded = 151 * 1024 * 1024
90 | expect(upload.uploaded).toBe(150 * 1024 * 1024)
91 | expect(upload.status).toBe(Status.ASSEMBLING)
92 |
93 | upload.status = Status.FINISHED
94 | expect(upload.status).toBe(Status.FINISHED)
95 | })
96 |
97 | test('Disabled chunking upload', () => {
98 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 0 }}}})
99 |
100 | const upload = new Upload('/image.jpg', true, 150 * 1024 * 1024)
101 | expect(upload.uploaded).toBe(0)
102 | expect(upload.chunks).toBe(1)
103 | expect(upload.isChunked).toBe(false)
104 | expect(upload.status).toBe(Status.INITIALIZED)
105 |
106 | upload.uploaded = 1
107 | expect(upload.uploaded).toBe(1)
108 | expect(upload.status).toBe(Status.UPLOADING)
109 | expect(upload.startTime).toBeGreaterThan(0)
110 |
111 | // overflowing value
112 | upload.uploaded = 151 * 1024 * 1024
113 | expect(upload.uploaded).toBe(150 * 1024 * 1024)
114 | expect(upload.status).toBe(Status.FINISHED)
115 | })
116 | })
117 |
118 | describe('Cancellation', () => {
119 | test('Classic upload', () => {
120 | // 150MB chunks
121 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 150 * 1024 * 1024 }}}})
122 |
123 | const controller = new AbortController()
124 | const upload = new Upload('/image.jpg', true, 10 * 1024 * 1024)
125 |
126 | // Mock controller and spy on abort
127 | upload['_controller'] = controller
128 | jest.spyOn(controller, 'abort')
129 |
130 | expect(upload.signal).toBeInstanceOf(AbortSignal)
131 | expect(upload.chunks).toBe(1)
132 | expect(upload.isChunked).toBe(false)
133 | expect(upload.status).toBe(Status.INITIALIZED)
134 | expect(controller.abort).not.toHaveBeenCalled()
135 |
136 | upload.cancel()
137 | expect(upload.status).toBe(Status.CANCELLED)
138 | expect(controller.abort).toHaveBeenCalled()
139 |
140 | })
141 |
142 | test('Chunking upload', () => {
143 | Object.assign(global, {OC: {appConfig: {files: { max_chunk_size: 10 * 1024 * 1024 }}}})
144 |
145 | const controller = new AbortController()
146 | const upload = new Upload('/image.jpg', true, 150 * 1024 * 1024)
147 |
148 | // Mock controller and spy on abort
149 | upload['_controller'] = controller
150 | jest.spyOn(controller, 'abort')
151 |
152 | expect(upload.signal).toBeInstanceOf(AbortSignal)
153 | expect(upload.chunks).toBe(15)
154 | expect(upload.isChunked).toBe(true)
155 | expect(upload.status).toBe(Status.INITIALIZED)
156 | expect(controller.abort).not.toHaveBeenCalled()
157 |
158 | upload.cancel()
159 | expect(upload.status).toBe(Status.CANCELLED)
160 | expect(controller.abort).toHaveBeenCalled()
161 |
162 | })
163 | })
164 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/server/chunks/nitro/node-server.mjs:
--------------------------------------------------------------------------------
1 | globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import 'node-fetch-native/polyfill';
2 | import { Server as Server$1 } from 'http';
3 | import { Server } from 'https';
4 | import destr from 'destr';
5 | import { defineEventHandler, handleCacheHeaders, createEvent, eventHandler, createError, createApp, createRouter, lazyEventHandler } from 'h3';
6 | import { createFetch as createFetch$1, Headers } from 'ohmyfetch';
7 | import { createRouter as createRouter$1 } from 'radix3';
8 | import { createCall, createFetch } from 'unenv/runtime/fetch/index';
9 | import { createHooks } from 'hookable';
10 | import { snakeCase } from 'scule';
11 | import { hash } from 'ohash';
12 | import { parseURL, withQuery, withLeadingSlash, withoutTrailingSlash } from 'ufo';
13 | import { createStorage } from 'unstorage';
14 | import { promises } from 'fs';
15 | import { resolve, dirname } from 'pathe';
16 | import { fileURLToPath } from 'url';
17 |
18 | const _runtimeConfig = {"app":{"baseURL":"/","buildAssetsDir":"/_nuxt/","cdnURL":""},"nitro":{"routes":{},"envPrefix":"NUXT_"},"public":{}};
19 | const ENV_PREFIX = "NITRO_";
20 | const ENV_PREFIX_ALT = _runtimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_";
21 | const getEnv = (key) => {
22 | const envKey = snakeCase(key).toUpperCase();
23 | return destr(process.env[ENV_PREFIX + envKey] ?? process.env[ENV_PREFIX_ALT + envKey]);
24 | };
25 | function isObject(input) {
26 | return typeof input === "object" && !Array.isArray(input);
27 | }
28 | function overrideConfig(obj, parentKey = "") {
29 | for (const key in obj) {
30 | const subKey = parentKey ? `${parentKey}_${key}` : key;
31 | const envValue = getEnv(subKey);
32 | if (isObject(obj[key])) {
33 | if (isObject(envValue)) {
34 | obj[key] = { ...obj[key], ...envValue };
35 | }
36 | overrideConfig(obj[key], subKey);
37 | } else {
38 | obj[key] = envValue ?? obj[key];
39 | }
40 | }
41 | }
42 | overrideConfig(_runtimeConfig);
43 | const config = deepFreeze(_runtimeConfig);
44 | const useRuntimeConfig = () => config;
45 | function deepFreeze(object) {
46 | const propNames = Object.getOwnPropertyNames(object);
47 | for (const name of propNames) {
48 | const value = object[name];
49 | if (value && typeof value === "object") {
50 | deepFreeze(value);
51 | }
52 | }
53 | return Object.freeze(object);
54 | }
55 |
56 | const globalTiming = globalThis.__timing__ || {
57 | start: () => 0,
58 | end: () => 0,
59 | metrics: []
60 | };
61 | function timingMiddleware(_req, res, next) {
62 | const start = globalTiming.start();
63 | const _end = res.end;
64 | res.end = (data, encoding, callback) => {
65 | const metrics = [["Generate", globalTiming.end(start)], ...globalTiming.metrics];
66 | const serverTiming = metrics.map((m) => `-;dur=${m[1]};desc="${encodeURIComponent(m[0])}"`).join(", ");
67 | if (!res.headersSent) {
68 | res.setHeader("Server-Timing", serverTiming);
69 | }
70 | _end.call(res, data, encoding, callback);
71 | };
72 | next();
73 | }
74 |
75 | const _assets = {
76 |
77 | };
78 |
79 | function normalizeKey(key) {
80 | if (!key) {
81 | return "";
82 | }
83 | return key.replace(/[/\\]/g, ":").replace(/:+/g, ":").replace(/^:|:$/g, "");
84 | }
85 |
86 | const assets$1 = {
87 | getKeys() {
88 | return Promise.resolve(Object.keys(_assets))
89 | },
90 | hasItem (id) {
91 | id = normalizeKey(id);
92 | return Promise.resolve(id in _assets)
93 | },
94 | getItem (id) {
95 | id = normalizeKey(id);
96 | return Promise.resolve(_assets[id] ? _assets[id].import() : null)
97 | },
98 | getMeta (id) {
99 | id = normalizeKey(id);
100 | return Promise.resolve(_assets[id] ? _assets[id].meta : {})
101 | }
102 | };
103 |
104 | const storage = createStorage({});
105 |
106 | const useStorage = () => storage;
107 |
108 | storage.mount('/assets', assets$1);
109 |
110 | const defaultCacheOptions = {
111 | name: "_",
112 | base: "/cache",
113 | swr: true,
114 | maxAge: 1
115 | };
116 | function defineCachedFunction(fn, opts) {
117 | opts = { ...defaultCacheOptions, ...opts };
118 | const pending = {};
119 | const group = opts.group || "nitro";
120 | const name = opts.name || fn.name || "_";
121 | const integrity = hash([opts.integrity, fn, opts]);
122 | async function get(key, resolver) {
123 | const cacheKey = [opts.base, group, name, key + ".json"].filter(Boolean).join(":").replace(/:\/$/, ":index");
124 | const entry = await useStorage().getItem(cacheKey) || {};
125 | const ttl = (opts.maxAge ?? opts.maxAge ?? 0) * 1e3;
126 | if (ttl) {
127 | entry.expires = Date.now() + ttl;
128 | }
129 | const expired = entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl;
130 | const _resolve = async () => {
131 | if (!pending[key]) {
132 | entry.value = void 0;
133 | entry.integrity = void 0;
134 | entry.mtime = void 0;
135 | entry.expires = void 0;
136 | pending[key] = Promise.resolve(resolver());
137 | }
138 | entry.value = await pending[key];
139 | entry.mtime = Date.now();
140 | entry.integrity = integrity;
141 | delete pending[key];
142 | useStorage().setItem(cacheKey, entry).catch((error) => console.error("[nitro] [cache]", error));
143 | };
144 | const _resolvePromise = expired ? _resolve() : Promise.resolve();
145 | if (opts.swr && entry.value) {
146 | _resolvePromise.catch(console.error);
147 | return Promise.resolve(entry);
148 | }
149 | return _resolvePromise.then(() => entry);
150 | }
151 | return async (...args) => {
152 | const key = (opts.getKey || getKey)(...args);
153 | const entry = await get(key, () => fn(...args));
154 | let value = entry.value;
155 | if (opts.transform) {
156 | value = await opts.transform(entry, ...args) || value;
157 | }
158 | return value;
159 | };
160 | }
161 | const cachedFunction = defineCachedFunction;
162 | function getKey(...args) {
163 | return args.length ? hash(args, {}) : "";
164 | }
165 | function defineCachedEventHandler(handler, opts = defaultCacheOptions) {
166 | const _opts = {
167 | ...opts,
168 | getKey: (event) => {
169 | return decodeURI(parseURL(event.req.originalUrl || event.req.url).pathname).replace(/\/$/, "/index");
170 | },
171 | group: opts.group || "nitro/handlers",
172 | integrity: [
173 | opts.integrity,
174 | handler
175 | ]
176 | };
177 | const _cachedHandler = cachedFunction(async (incomingEvent) => {
178 | const reqProxy = cloneWithProxy(incomingEvent.req, { headers: {} });
179 | const resHeaders = {};
180 | const resProxy = cloneWithProxy(incomingEvent.res, {
181 | statusCode: 200,
182 | getHeader(name) {
183 | return resHeaders[name];
184 | },
185 | setHeader(name, value) {
186 | resHeaders[name] = value;
187 | return this;
188 | },
189 | getHeaderNames() {
190 | return Object.keys(resHeaders);
191 | },
192 | hasHeader(name) {
193 | return name in resHeaders;
194 | },
195 | removeHeader(name) {
196 | delete resHeaders[name];
197 | },
198 | getHeaders() {
199 | return resHeaders;
200 | }
201 | });
202 | const event = createEvent(reqProxy, resProxy);
203 | event.context = incomingEvent.context;
204 | const body = await handler(event);
205 | const headers = event.res.getHeaders();
206 | headers.Etag = `W/"${hash(body)}"`;
207 | headers["Last-Modified"] = new Date().toUTCString();
208 | const cacheControl = [];
209 | if (opts.swr) {
210 | if (opts.maxAge) {
211 | cacheControl.push(`s-maxage=${opts.maxAge}`);
212 | }
213 | if (opts.staleMaxAge) {
214 | cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`);
215 | } else {
216 | cacheControl.push("stale-while-revalidate");
217 | }
218 | } else if (opts.maxAge) {
219 | cacheControl.push(`max-age=${opts.maxAge}`);
220 | }
221 | if (cacheControl.length) {
222 | headers["Cache-Control"] = cacheControl.join(", ");
223 | }
224 | const cacheEntry = {
225 | code: event.res.statusCode,
226 | headers,
227 | body
228 | };
229 | return cacheEntry;
230 | }, _opts);
231 | return defineEventHandler(async (event) => {
232 | const response = await _cachedHandler(event);
233 | if (event.res.headersSent || event.res.writableEnded) {
234 | return response.body;
235 | }
236 | if (handleCacheHeaders(event, {
237 | modifiedTime: new Date(response.headers["Last-Modified"]),
238 | etag: response.headers.etag,
239 | maxAge: opts.maxAge
240 | })) {
241 | return;
242 | }
243 | event.res.statusCode = response.code;
244 | for (const name in response.headers) {
245 | event.res.setHeader(name, response.headers[name]);
246 | }
247 | return response.body;
248 | });
249 | }
250 | function cloneWithProxy(obj, overrides) {
251 | return new Proxy(obj, {
252 | get(target, property, receiver) {
253 | if (property in overrides) {
254 | return overrides[property];
255 | }
256 | return Reflect.get(target, property, receiver);
257 | },
258 | set(target, property, value, receiver) {
259 | if (property in overrides) {
260 | overrides[property] = value;
261 | return true;
262 | }
263 | return Reflect.set(target, property, value, receiver);
264 | }
265 | });
266 | }
267 | const cachedEventHandler = defineCachedEventHandler;
268 |
269 | const plugins = [
270 |
271 | ];
272 |
273 | function hasReqHeader(req, header, includes) {
274 | const value = req.headers[header];
275 | return value && typeof value === "string" && value.toLowerCase().includes(includes);
276 | }
277 | function isJsonRequest(event) {
278 | return hasReqHeader(event.req, "accept", "application/json") || hasReqHeader(event.req, "user-agent", "curl/") || hasReqHeader(event.req, "user-agent", "httpie/") || event.req.url?.endsWith(".json") || event.req.url?.includes("/api/");
279 | }
280 | function normalizeError(error) {
281 | const cwd = process.cwd();
282 | const stack = (error.stack || "").split("\n").splice(1).filter((line) => line.includes("at ")).map((line) => {
283 | const text = line.replace(cwd + "/", "./").replace("webpack:/", "").replace("file://", "").trim();
284 | return {
285 | text,
286 | internal: line.includes("node_modules") && !line.includes(".cache") || line.includes("internal") || line.includes("new Promise")
287 | };
288 | });
289 | const statusCode = error.statusCode || 500;
290 | const statusMessage = error.statusMessage ?? (statusCode === 404 ? "Route Not Found" : "Internal Server Error");
291 | const message = error.message || error.toString();
292 | return {
293 | stack,
294 | statusCode,
295 | statusMessage,
296 | message
297 | };
298 | }
299 |
300 | const errorHandler = (async function errorhandler(_error, event) {
301 | const { stack, statusCode, statusMessage, message } = normalizeError(_error);
302 | const errorObject = {
303 | url: event.req.url,
304 | statusCode,
305 | statusMessage,
306 | message,
307 | description: "",
308 | data: _error.data
309 | };
310 | event.res.statusCode = errorObject.statusCode;
311 | event.res.statusMessage = errorObject.statusMessage;
312 | if (errorObject.statusCode !== 404) {
313 | console.error("[nuxt] [request error]", errorObject.message + "\n" + stack.map((l) => " " + l.text).join(" \n"));
314 | }
315 | if (isJsonRequest(event)) {
316 | event.res.setHeader("Content-Type", "application/json");
317 | event.res.end(JSON.stringify(errorObject));
318 | return;
319 | }
320 | const url = withQuery("/__nuxt_error", errorObject);
321 | const html = await $fetch(url).catch((error) => {
322 | console.error("[nitro] Error while generating error response", error);
323 | return errorObject.statusMessage;
324 | });
325 | event.res.setHeader("Content-Type", "text/html;charset=UTF-8");
326 | event.res.end(html);
327 | });
328 |
329 | const assets = {
330 | "/_nuxt/entry-dcc6d668.mjs": {
331 | "type": "application/javascript",
332 | "etag": "\"396b8-k0tB7j3B7LvFVdLHrtX/i77VTwE\"",
333 | "mtime": "2022-06-22T16:25:20.304Z",
334 | "path": "../public/_nuxt/entry-dcc6d668.mjs"
335 | },
336 | "/_nuxt/entry.c94dc88a.css": {
337 | "type": "text/css; charset=utf-8",
338 | "etag": "\"a7fe-N17YXK7obQ7S+CTbvcyeyI3PQXM\"",
339 | "mtime": "2022-06-22T16:25:20.300Z",
340 | "path": "../public/_nuxt/entry.c94dc88a.css"
341 | },
342 | "/_nuxt/index-9c7865f0.mjs": {
343 | "type": "application/javascript",
344 | "etag": "\"f0c-4KIW0oGFYr/vMsC0Aauc0prnmOE\"",
345 | "mtime": "2022-06-22T16:25:20.300Z",
346 | "path": "../public/_nuxt/index-9c7865f0.mjs"
347 | },
348 | "/_nuxt/manifest.json": {
349 | "type": "application/json",
350 | "etag": "\"1be-mogsOEqBeTnb1jhUmlaZBsB6PJA\"",
351 | "mtime": "2022-06-22T16:25:20.300Z",
352 | "path": "../public/_nuxt/manifest.json"
353 | }
354 | };
355 |
356 | function readAsset (id) {
357 | const serverDir = dirname(fileURLToPath(globalThis._importMeta_.url));
358 | return promises.readFile(resolve(serverDir, assets[id].path))
359 | }
360 |
361 | const publicAssetBases = ["/_nuxt"];
362 |
363 | function isPublicAssetURL(id = '') {
364 | if (assets[id]) {
365 | return
366 | }
367 | for (const base of publicAssetBases) {
368 | if (id.startsWith(base)) { return true }
369 | }
370 | return false
371 | }
372 |
373 | function getAsset (id) {
374 | return assets[id]
375 | }
376 |
377 | const METHODS = ["HEAD", "GET"];
378 | const _152570 = eventHandler(async (event) => {
379 | if (event.req.method && !METHODS.includes(event.req.method)) {
380 | return;
381 | }
382 | let id = decodeURIComponent(withLeadingSlash(withoutTrailingSlash(parseURL(event.req.url).pathname)));
383 | let asset;
384 | for (const _id of [id, id + "/index.html"]) {
385 | const _asset = getAsset(_id);
386 | if (_asset) {
387 | asset = _asset;
388 | id = _id;
389 | break;
390 | }
391 | }
392 | if (!asset) {
393 | if (isPublicAssetURL(id)) {
394 | throw createError({
395 | statusMessage: "Cannot find static asset " + id,
396 | statusCode: 404
397 | });
398 | }
399 | return;
400 | }
401 | const ifNotMatch = event.req.headers["if-none-match"] === asset.etag;
402 | if (ifNotMatch) {
403 | event.res.statusCode = 304;
404 | event.res.end("Not Modified (etag)");
405 | return;
406 | }
407 | const ifModifiedSinceH = event.req.headers["if-modified-since"];
408 | if (ifModifiedSinceH && asset.mtime) {
409 | if (new Date(ifModifiedSinceH) >= new Date(asset.mtime)) {
410 | event.res.statusCode = 304;
411 | event.res.end("Not Modified (mtime)");
412 | return;
413 | }
414 | }
415 | if (asset.type) {
416 | event.res.setHeader("Content-Type", asset.type);
417 | }
418 | if (asset.etag) {
419 | event.res.setHeader("ETag", asset.etag);
420 | }
421 | if (asset.mtime) {
422 | event.res.setHeader("Last-Modified", asset.mtime);
423 | }
424 | const contents = await readAsset(id);
425 | event.res.end(contents);
426 | });
427 |
428 | const _lazy_310414 = () => import('../handlers/renderer.mjs').then(function (n) { return n.a; });
429 |
430 | const handlers = [
431 | { route: '', handler: _152570, lazy: false, middleware: true, method: undefined },
432 | { route: '/__nuxt_error', handler: _lazy_310414, lazy: true, middleware: false, method: undefined },
433 | { route: '/**', handler: _lazy_310414, lazy: true, middleware: false, method: undefined }
434 | ];
435 |
436 | function createNitroApp() {
437 | const config = useRuntimeConfig();
438 | const hooks = createHooks();
439 | const h3App = createApp({
440 | debug: destr(false),
441 | onError: errorHandler
442 | });
443 | h3App.use(config.app.baseURL, timingMiddleware);
444 | const router = createRouter();
445 | const routerOptions = createRouter$1({ routes: config.nitro.routes });
446 | for (const h of handlers) {
447 | let handler = h.lazy ? lazyEventHandler(h.handler) : h.handler;
448 | const referenceRoute = h.route.replace(/:\w+|\*\*/g, "_");
449 | const routeOptions = routerOptions.lookup(referenceRoute) || {};
450 | if (routeOptions.swr) {
451 | handler = cachedEventHandler(handler, {
452 | group: "nitro/routes"
453 | });
454 | }
455 | if (h.middleware || !h.route) {
456 | const middlewareBase = (config.app.baseURL + (h.route || "/")).replace(/\/+/g, "/");
457 | h3App.use(middlewareBase, handler);
458 | } else {
459 | router.use(h.route, handler, h.method);
460 | }
461 | }
462 | h3App.use(config.app.baseURL, router);
463 | const localCall = createCall(h3App.nodeHandler);
464 | const localFetch = createFetch(localCall, globalThis.fetch);
465 | const $fetch = createFetch$1({ fetch: localFetch, Headers, defaults: { baseURL: config.app.baseURL } });
466 | globalThis.$fetch = $fetch;
467 | const app = {
468 | hooks,
469 | h3App,
470 | localCall,
471 | localFetch
472 | };
473 | for (const plugin of plugins) {
474 | plugin(app);
475 | }
476 | return app;
477 | }
478 | const nitroApp = createNitroApp();
479 |
480 | const cert = process.env.NITRO_SSL_CERT;
481 | const key = process.env.NITRO_SSL_KEY;
482 | const server = cert && key ? new Server({ key, cert }, nitroApp.h3App.nodeHandler) : new Server$1(nitroApp.h3App.nodeHandler);
483 | const port = destr(process.env.NITRO_PORT || process.env.PORT) || 3e3;
484 | const hostname = process.env.NITRO_HOST || process.env.HOST || "0.0.0.0";
485 | server.listen(port, hostname, (err) => {
486 | if (err) {
487 | console.error(err);
488 | process.exit(1);
489 | }
490 | const protocol = cert && key ? "https" : "http";
491 | console.log(`Listening on ${protocol}://${hostname}:${port}${useRuntimeConfig().app.baseURL}`);
492 | });
493 | {
494 | process.on("unhandledRejection", (err) => console.error("[nitro] [dev] [unhandledRejection] " + err));
495 | process.on("uncaughtException", (err) => console.error("[nitro] [dev] [uncaughtException] " + err));
496 | }
497 | const nodeServer = {};
498 |
499 | export { nodeServer as n, useRuntimeConfig as u };
500 | //# sourceMappingURL=node-server.mjs.map
501 |
--------------------------------------------------------------------------------
/examples/nuxt/.output/public/_nuxt/entry.c94dc88a.css:
--------------------------------------------------------------------------------
1 | @import"https://fonts.googleapis.com/css2?family=Source+Sans+Pro&display=swap";.demo{font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#273849;margin:0 auto;padding:0 2rem}.components>div{margin:2rem 0}h1{font-size:3rem;margin-bottom:0}h3{margin-top:0;margin-bottom:2rem}@-webkit-keyframes plyr-progress{to{background-position:25px 0;background-position:var(--plyr-progress-loading-size,25px) 0}}@keyframes plyr-progress{to{background-position:25px 0;background-position:var(--plyr-progress-loading-size,25px) 0}}@-webkit-keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@-webkit-keyframes plyr-fade-in{0%{opacity:0}to{opacity:1}}@keyframes plyr-fade-in{0%{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;align-items:center;direction:ltr;display:flex;flex-direction:column;font-family:inherit;font-family:var(--plyr-font-family,inherit);font-variant-numeric:tabular-nums;font-weight:400;font-weight:var(--plyr-font-weight-regular,400);line-height:1.7;line-height:var(--plyr-line-height,1.7);max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease;z-index:0}.plyr audio,.plyr iframe,.plyr video{display:block;height:100%;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui :after,.plyr--full-ui :before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4a5464;background:var(--plyr-badge-background,#4a5464);border-radius:2px;border-radius:var(--plyr-badge-border-radius,2px);color:#fff;color:var(--plyr-badge-text-color,#fff);font-size:9px;font-size:var(--plyr-font-size-badge,9px);line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{-webkit-animation:plyr-fade-in .3s ease;animation:plyr-fade-in .3s ease;bottom:0;display:none;font-size:13px;font-size:var(--plyr-font-size-small,13px);left:0;padding:10px;padding:var(--plyr-control-spacing,10px);position:absolute;text-align:center;transition:transform .4s ease-in-out;width:100%}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:15px;font-size:var(--plyr-font-size-base,15px);padding:20px;padding:calc(var(--plyr-control-spacing, 10px)*2)}}@media (min-width:768px){.plyr__captions{font-size:18px;font-size:var(--plyr-font-size-large,18px)}}.plyr--captions-active .plyr__captions{display:block}.plyr:not(.plyr--hide-controls) .plyr__controls:not(:empty)~.plyr__captions{transform:translateY(-40px);transform:translateY(calc(var(--plyr-control-spacing, 10px)*-4))}.plyr__caption{background:rgba(0,0,0,.8);background:var(--plyr-captions-background,rgba(0,0,0,.8));border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;color:#fff;color:var(--plyr-captions-text-color,#fff);line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__caption div{display:inline}.plyr__control{background:transparent;border:0;border-radius:3px;border-radius:var(--plyr-control-radius,3px);color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;padding:calc(var(--plyr-control-spacing, 10px)*.7);position:relative;transition:all .3s ease}.plyr__control svg{fill:currentColor;display:block;height:18px;height:var(--plyr-control-icon-size,18px);pointer-events:none;width:18px;width:var(--plyr-control-icon-size,18px)}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}a.plyr__control{text-decoration:none}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed,a.plyr__control:after,a.plyr__control:before{display:none}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__progress__container{flex:1;min-width:0}.plyr__controls .plyr__controls__item{margin-left:2.5px;margin-left:calc(var(--plyr-control-spacing, 10px)/4)}.plyr__controls .plyr__controls__item:first-child{margin-left:0;margin-right:auto}.plyr__controls .plyr__controls__item.plyr__progress__container{padding-left:2.5px;padding-left:calc(var(--plyr-control-spacing, 10px)/4)}.plyr__controls .plyr__controls__item.plyr__time{padding:0 5px;padding:0 calc(var(--plyr-control-spacing, 10px)/2)}.plyr__controls .plyr__controls__item.plyr__progress__container:first-child,.plyr__controls .plyr__controls__item.plyr__time+.plyr__time,.plyr__controls .plyr__controls__item.plyr__time:first-child{padding-left:0}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip],.plyr__controls:empty{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;background:hsla(0,0%,100%,.9);background:var(--plyr-menu-background,hsla(0,0%,100%,.9));border-radius:4px;bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-menu-shadow,0 1px 2px rgba(0,0,0,.15));color:#4a5464;color:var(--plyr-menu-color,#4a5464);font-size:15px;font-size:var(--plyr-font-size-base,15px);margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container:after{border:4px solid transparent;border-top:var(--plyr-menu-arrow-size,4px) solid hsla(0,0%,100%,.9);border-width:var(--plyr-menu-arrow-size,4px);content:"";height:0;position:absolute;right:14px;right:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7 - var(--plyr-menu-arrow-size, 4px)/2);top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px;padding:calc(var(--plyr-control-spacing, 10px)*.7)}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4a5464;color:var(--plyr-menu-color,#4a5464);display:flex;font-size:13px;font-size:var(--plyr-font-size-menu,var(--plyr-font-size-small,13px));padding:4.66667px 10.5px;padding:calc(var(--plyr-control-spacing, 10px)*.7/1.5) calc(var(--plyr-control-spacing, 10px)*.7*1.5);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control:after{border:4px solid transparent;border:var(--plyr-menu-item-arrow-size,4px) solid transparent;content:"";position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px;padding-right:calc(var(--plyr-control-spacing, 10px)*.7*4)}.plyr__menu__container .plyr__control--forward:after{border-left-color:#728197;border-left-color:var(--plyr-menu-arrow-color,#728197);right:6.5px;right:calc(var(--plyr-control-spacing, 10px)*.7*1.5 - var(--plyr-menu-item-arrow-size, 4px))}.plyr__menu__container .plyr__control--forward.plyr__tab-focus:after,.plyr__menu__container .plyr__control--forward:hover:after{border-left-color:initial}.plyr__menu__container .plyr__control--back{font-weight:400;font-weight:var(--plyr-font-weight-regular,400);margin:7px;margin:calc(var(--plyr-control-spacing, 10px)*.7);margin-bottom:3.5px;margin-bottom:calc(var(--plyr-control-spacing, 10px)*.7/2);padding-left:28px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7*4);position:relative;width:calc(100% - 14px);width:calc(100% - var(--plyr-control-spacing, 10px)*.7*2)}.plyr__menu__container .plyr__control--back:after{border-right-color:#728197;border-right-color:var(--plyr-menu-arrow-color,#728197);left:6.5px;left:calc(var(--plyr-control-spacing, 10px)*.7*1.5 - var(--plyr-menu-item-arrow-size, 4px))}.plyr__menu__container .plyr__control--back:before{background:#dcdfe5;background:var(--plyr-menu-back-border-color,#dcdfe5);box-shadow:0 1px #fff;box-shadow:0 1px 0 var(--plyr-menu-back-border-shadow-color,#fff);content:"";height:1px;left:0;margin-top:3.5px;margin-top:calc(var(--plyr-control-spacing, 10px)*.7/2);overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus:after,.plyr__menu__container .plyr__control--back:hover:after{border-right-color:initial}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7)}.plyr__menu__container .plyr__control[role=menuitemradio]:after,.plyr__menu__container .plyr__control[role=menuitemradio]:before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]:before{background:rgba(0,0,0,.1);content:"";display:block;flex-shrink:0;height:16px;margin-right:10px;margin-right:var(--plyr-control-spacing,10px);transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]:after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:before{background:#00b3ff;background:var(--plyr-control-toggle-checked-background,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)))}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus:before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover:before{background:rgba(35,40,47,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:calc(-7px + 2);margin-right:calc(var(--plyr-control-spacing, 10px)*.7*-1 - -2);overflow:hidden;padding-left:24.5px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7*3.5);pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:transparent;border:0;border-radius:26px;border-radius:calc(var(--plyr-range-thumb-height, 13px)*2);color:#00b3ff;color:var(--plyr-range-fill-background,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));display:block;height:19px;height:calc(var(--plyr-range-thumb-active-shadow-width, 3px)*2 + var(--plyr-range-thumb-height, 13px));margin:0;min-width:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:transparent;background-image:linear-gradient(90deg,currentColor 0,transparent 0);background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0));border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-webkit-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-webkit-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);margin-top:-4px;margin-top:calc(var(--plyr-range-thumb-height, 13px)/2*-1 - var(--plyr-range-track-height, 5px)/2*-1);position:relative;-webkit-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-moz-range-track{background:transparent;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-moz-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-moz-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px)}.plyr--full-ui input[type=range]::-ms-track{color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper,.plyr--full-ui input[type=range]::-ms-track{background:transparent;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:transparent;background:currentColor;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);margin-top:0;position:relative;-ms-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr__poster{background-color:#000;background-color:var(--plyr-video-background,var(--plyr-video-background,#000));background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .2s ease;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr--youtube.plyr--paused.plyr__poster-enabled:not(.plyr--stopped) .plyr__poster{display:none}.plyr__time{font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px))}.plyr__time+.plyr__time:before{content:"\2044";margin-right:10px;margin-right:var(--plyr-control-spacing,10px)}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr__tooltip{background:hsla(0,0%,100%,.9);background:var(--plyr-tooltip-background,hsla(0,0%,100%,.9));border-radius:3px;border-radius:var(--plyr-tooltip-radius,3px);bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-tooltip-shadow,0 1px 2px rgba(0,0,0,.15));color:#4a5464;color:var(--plyr-tooltip-color,#4a5464);font-size:13px;font-size:var(--plyr-font-size-small,13px);font-weight:400;font-weight:var(--plyr-font-weight-regular,400);left:50%;line-height:1.3;margin-bottom:10px;margin-bottom:calc(var(--plyr-control-spacing, 10px)/2*2);opacity:0;padding:5px 7.5px;padding:calc(var(--plyr-control-spacing, 10px)/2) calc(var(--plyr-control-spacing, 10px)/2*1.5);pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s ease .1s,opacity .2s ease .1s;white-space:nowrap;z-index:2}.plyr__tooltip:before{border-left:4px solid transparent;border-left:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-right:4px solid transparent;border-right:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-top:4px solid hsla(0,0%,100%,.9);border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,hsla(0,0%,100%,.9));bottom:-4px;bottom:calc(var(--plyr-tooltip-arrow-size, 4px)*-1);content:"";height:0;left:50%;position:absolute;transform:translate(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip,.plyr__controls>.plyr__control:first-child .plyr__tooltip{left:0;transform:translateY(10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip:before,.plyr__controls>.plyr__control:first-child .plyr__tooltip:before{left:16px;left:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7)}.plyr__controls>.plyr__control:last-child .plyr__tooltip{left:auto;right:0;transform:translateY(10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip:before{left:auto;right:16px;right:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7);transform:translate(50%)}.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0) scale(1)}.plyr__progress{left:6.5px;left:calc(var(--plyr-range-thumb-height, 13px)*.5);margin-right:13px;margin-right:var(--plyr-range-thumb-height,13px);position:relative}.plyr__progress__buffer,.plyr__progress input[type=range]{margin-left:-6.5px;margin-left:calc(var(--plyr-range-thumb-height, 13px)*-.5);margin-right:-6.5px;margin-right:calc(var(--plyr-range-thumb-height, 13px)*-.5);width:calc(100% + 13px);width:calc(100% + var(--plyr-range-thumb-height, 13px))}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px));left:0}.plyr__progress__buffer{-webkit-appearance:none;background:transparent;border:0;border-radius:100px;height:5px;height:var(--plyr-range-track-height,5px);left:0;margin-top:-2.5px;margin-top:calc(var(--plyr-range-track-height, 5px)/2*-1);padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:transparent}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-webkit-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-moz-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;-ms-transition:width .2s ease;transition:width .2s ease}.plyr--loading .plyr__progress__buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(35,40,47,.6) 25%,transparent 0,transparent 50%,rgba(35,40,47,.6) 0,rgba(35,40,47,.6) 75%,transparent 0,transparent);background-image:linear-gradient(-45deg,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 25%,transparent 25%,transparent 50%,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 50%,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;background-size:var(--plyr-progress-loading-size,25px) var(--plyr-progress-loading-size,25px);color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:#ffffff40;background-color:var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25))}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:#c1c8d199;background-color:var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6))}.plyr__volume{align-items:center;display:flex;max-width:110px;min-width:80px;position:relative;width:20%}.plyr__volume input[type=range]{margin-left:5px;margin-left:calc(var(--plyr-control-spacing, 10px)/2);margin-right:5px;margin-right:calc(var(--plyr-control-spacing, 10px)/2);position:relative;z-index:2}.plyr--is-ios .plyr__volume{min-width:0;width:auto}.plyr--audio{display:block}.plyr--audio .plyr__controls{background:#fff;background:var(--plyr-audio-controls-background,#fff);border-radius:inherit;color:#4a5464;color:var(--plyr-audio-control-color,#4a5464);padding:10px;padding:var(--plyr-control-spacing,10px)}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#00b3ff;background:var(--plyr-audio-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));color:#fff;color:var(--plyr-audio-control-color-hover,#fff)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--audio .plyr__progress__buffer{color:#c1c8d199;color:var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6))}.plyr--video{background:#000;background:var(--plyr-video-background,var(--plyr-video-background,#000));overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;background:var(--plyr-video-background,var(--plyr-video-background,#000));margin:auto;overflow:hidden;position:relative;width:100%}.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{aspect-ratio:16/9}@supports not (aspect-ratio:16/9){.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{height:0;padding-bottom:56.25%;position:relative}}.plyr__video-embed iframe,.plyr__video-wrapper--fixed-ratio video{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.75));background:var(--plyr-video-controls-background,linear-gradient(transparent,rgba(0,0,0,.75)));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;color:var(--plyr-video-control-color,#fff);left:0;padding:5px;padding:calc(var(--plyr-control-spacing, 10px)/2);padding-top:20px;padding-top:calc(var(--plyr-control-spacing, 10px)*2);position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:3}@media (min-width:480px){.plyr--video .plyr__controls{padding:10px;padding:var(--plyr-control-spacing,10px);padding-top:35px;padding-top:calc(var(--plyr-control-spacing, 10px)*3.5)}}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr--video .plyr__control.plyr__tab-focus,.plyr--video .plyr__control:hover,.plyr--video .plyr__control[aria-expanded=true]{background:#00b3ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));color:#fff;color:var(--plyr-video-control-color-hover,#fff)}.plyr__control--overlaid{background:#00b3ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));border:0;border-radius:100%;color:#fff;color:var(--plyr-video-control-color,#fff);display:none;left:50%;opacity:.9;padding:15px;padding:calc(var(--plyr-control-spacing, 10px)*1.5);position:absolute;top:50%;transform:translate(-50%,-50%);transition:.3s;z-index:2}.plyr__control--overlaid svg{left:2px;position:relative}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{opacity:1}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))}.plyr--video .plyr__progress__buffer{color:#ffffff40;color:var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25))}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen video{height:100%}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}.plyr:fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;bottom:0;display:block;height:100%;left:0;margin:0;position:fixed;right:0;top:0;width:100%;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads:after{background:#23282f;border-radius:2px;bottom:10px;bottom:var(--plyr-control-spacing,10px);color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;right:var(--plyr-control-spacing,10px);z-index:3}.plyr__ads:after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:5px;height:var(--plyr-range-track-height,5px);left:0;margin:-var(--plyr-range-track-height,5px)/2 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr__preview-thumb{background-color:#ffffffe6;background-color:var(--plyr-tooltip-background,hsla(0,0%,100%,.9));border-radius:3px;bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-tooltip-shadow,0 1px 2px rgba(0,0,0,.15));margin-bottom:10px;margin-bottom:calc(var(--plyr-control-spacing, 10px)/2*2);opacity:0;padding:3px;padding:var(--plyr-tooltip-radius,3px);pointer-events:none;position:absolute;transform:translateY(10px) scale(.8);transform-origin:50% 100%;transition:transform .2s ease .1s,opacity .2s ease .1s;z-index:2}.plyr__preview-thumb--is-shown{opacity:1;transform:translate(0) scale(1)}.plyr__preview-thumb:before{border-left:4px solid transparent;border-left:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-right:4px solid transparent;border-right:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-top:4px solid hsla(0,0%,100%,.9);border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,hsla(0,0%,100%,.9));bottom:-4px;bottom:calc(var(--plyr-tooltip-arrow-size, 4px)*-1);content:"";height:0;left:50%;position:absolute;transform:translate(-50%);width:0;z-index:2}.plyr__preview-thumb__image-container{background:#c1c8d1;border-radius:2px;border-radius:calc(var(--plyr-tooltip-radius, 3px) - 1px);overflow:hidden;position:relative;z-index:0}.plyr__preview-thumb__image-container img{height:100%;left:0;max-height:none;max-width:none;position:absolute;top:0;width:100%}.plyr__preview-thumb__time-container{bottom:6px;left:0;position:absolute;right:0;white-space:nowrap;z-index:3}.plyr__preview-thumb__time-container span{background-color:#0000008c;border-radius:2px;border-radius:calc(var(--plyr-tooltip-radius, 3px) - 1px);color:#fff;font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px));padding:3px 6px}.plyr__preview-scrubbing{bottom:0;filter:blur(1px);height:100%;left:0;margin:auto;opacity:0;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .3s ease;width:100%;z-index:1}.plyr__preview-scrubbing--is-shown{opacity:1}.plyr__preview-scrubbing img{height:100%;left:0;max-height:none;max-width:none;-o-object-fit:contain;object-fit:contain;position:absolute;top:0;width:100%}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);border:0!important;height:1px!important;overflow:hidden;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important}.bg-white[data-v-011aae6d]{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.cursor-pointer[data-v-011aae6d]{cursor:pointer}.flex[data-v-011aae6d]{display:flex}.grid[data-v-011aae6d]{display:grid}.place-content-center[data-v-011aae6d]{place-content:center}.items-center[data-v-011aae6d]{align-items:center}.justify-center[data-v-011aae6d]{justify-content:center}.font-sans[data-v-011aae6d]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.font-medium[data-v-011aae6d]{font-weight:500}.font-light[data-v-011aae6d]{font-weight:300}.text-8xl[data-v-011aae6d]{font-size:6rem;line-height:1}.text-xl[data-v-011aae6d]{font-size:1.25rem;line-height:1.75rem}.leading-tight[data-v-011aae6d]{line-height:1.25}.mb-8[data-v-011aae6d]{margin-bottom:2rem}.mb-16[data-v-011aae6d]{margin-bottom:4rem}.max-w-520px[data-v-011aae6d]{max-width:520px}.min-h-screen[data-v-011aae6d]{min-height:100vh}.overflow-hidden[data-v-011aae6d]{overflow:hidden}.px-8[data-v-011aae6d]{padding-left:2rem;padding-right:2rem}.py-2[data-v-011aae6d]{padding-top:.5rem;padding-bottom:.5rem}.px-4[data-v-011aae6d]{padding-left:1rem;padding-right:1rem}.fixed[data-v-011aae6d]{position:fixed}.left-0[data-v-011aae6d]{left:0px}.right-0[data-v-011aae6d]{right:0px}.text-center[data-v-011aae6d]{text-align:center}.text-black[data-v-011aae6d]{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.antialiased[data-v-011aae6d]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-full[data-v-011aae6d]{width:100%}.z-10[data-v-011aae6d]{z-index:10}.z-20[data-v-011aae6d]{z-index:20}@media (min-width: 640px){.sm\:text-4xl[data-v-011aae6d]{font-size:2.25rem;line-height:2.5rem}.sm\:text-xl[data-v-011aae6d]{font-size:1.25rem;line-height:1.75rem}.sm\:text-10xl[data-v-011aae6d]{font-size:10rem;line-height:1}.sm\:px-0[data-v-011aae6d]{padding-left:0;padding-right:0}.sm\:py-3[data-v-011aae6d]{padding-top:.75rem;padding-bottom:.75rem}.sm\:px-6[data-v-011aae6d]{padding-left:1.5rem;padding-right:1.5rem}}@media (prefers-color-scheme: dark){.dark\:bg-black[data-v-011aae6d]{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.dark\:text-white[data-v-011aae6d]{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}.spotlight[data-v-011aae6d]{background:linear-gradient(45deg,#00DC82 0%,#36E4DA 50%,#0047E1 100%);filter:blur(20vh);height:40vh;bottom:-30vh}.gradient-border[data-v-011aae6d]{position:relative;border-radius:.5rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}@media (prefers-color-scheme: light){.gradient-border[data-v-011aae6d]{background-color:#ffffff4d}.gradient-border[data-v-011aae6d]:before{background:linear-gradient(90deg,#e2e2e2 0%,#e2e2e2 25%,#00DC82 50%,#36E4DA 75%,#0047E1 100%)}}@media (prefers-color-scheme: dark){.gradient-border[data-v-011aae6d]{background-color:#1414144d}.gradient-border[data-v-011aae6d]:before{background:linear-gradient(90deg,#303030 0%,#303030 25%,#00DC82 50%,#36E4DA 75%,#0047E1 100%)}}.gradient-border[data-v-011aae6d]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;border-radius:.5rem;padding:2px;width:100%;background-size:400% auto;opacity:.5;transition:background-position .3s ease-in-out,opacity .2s ease-in-out;-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude}.gradient-border[data-v-011aae6d]:hover:before{background-position:-50% 0;opacity:1}.bg-white[data-v-6aee6495]{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.grid[data-v-6aee6495]{display:grid}.place-content-center[data-v-6aee6495]{place-content:center}.font-sans[data-v-6aee6495]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.font-medium[data-v-6aee6495]{font-weight:500}.font-light[data-v-6aee6495]{font-weight:300}.h-1\/2[data-v-6aee6495]{height:50%}.text-8xl[data-v-6aee6495]{font-size:6rem;line-height:1}.text-xl[data-v-6aee6495]{font-size:1.25rem;line-height:1.75rem}.leading-tight[data-v-6aee6495]{line-height:1.25}.mb-8[data-v-6aee6495]{margin-bottom:2rem}.mb-16[data-v-6aee6495]{margin-bottom:4rem}.max-w-520px[data-v-6aee6495]{max-width:520px}.min-h-screen[data-v-6aee6495]{min-height:100vh}.overflow-hidden[data-v-6aee6495]{overflow:hidden}.px-8[data-v-6aee6495]{padding-left:2rem;padding-right:2rem}.fixed[data-v-6aee6495]{position:fixed}.left-0[data-v-6aee6495]{left:0px}.right-0[data-v-6aee6495]{right:0px}.-bottom-1\/2[data-v-6aee6495]{bottom:-50%}.text-center[data-v-6aee6495]{text-align:center}.text-black[data-v-6aee6495]{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.antialiased[data-v-6aee6495]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (min-width: 640px){.sm\:text-4xl[data-v-6aee6495]{font-size:2.25rem;line-height:2.5rem}.sm\:text-10xl[data-v-6aee6495]{font-size:10rem;line-height:1}.sm\:px-0[data-v-6aee6495]{padding-left:0;padding-right:0}}@media (prefers-color-scheme: dark){.dark\:bg-black[data-v-6aee6495]{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.dark\:text-white[data-v-6aee6495]{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}.spotlight[data-v-6aee6495]{background:linear-gradient(45deg,#00DC82 0%,#36E4DA 50%,#0047E1 100%);filter:blur(20vh)}.bg-white[data-v-693cabb2]{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-black\/5[data-v-693cabb2]{--tw-bg-opacity:.05;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.rounded-t-md[data-v-693cabb2]{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.flex[data-v-693cabb2]{display:flex}.flex-col[data-v-693cabb2]{flex-direction:column}.flex-1[data-v-693cabb2]{flex:1 1 0%}.font-sans[data-v-693cabb2]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.font-medium[data-v-693cabb2]{font-weight:500}.font-light[data-v-693cabb2]{font-weight:300}.h-auto[data-v-693cabb2]{height:auto}.text-xl[data-v-693cabb2]{font-size:1.25rem;line-height:1.75rem}.text-6xl[data-v-693cabb2]{font-size:3.75rem;line-height:1}.leading-tight[data-v-693cabb2]{line-height:1.25}.mb-8[data-v-693cabb2]{margin-bottom:2rem}.mb-6[data-v-693cabb2]{margin-bottom:1.5rem}.min-h-screen[data-v-693cabb2]{min-height:100vh}.overflow-y-auto[data-v-693cabb2]{overflow-y:auto}.p-8[data-v-693cabb2]{padding:2rem}.px-10[data-v-693cabb2]{padding-left:2.5rem;padding-right:2.5rem}.pt-14[data-v-693cabb2]{padding-top:3.5rem}.fixed[data-v-693cabb2]{position:fixed}.left-0[data-v-693cabb2]{left:0px}.right-0[data-v-693cabb2]{right:0px}.text-black[data-v-693cabb2]{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.antialiased[data-v-693cabb2]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.z-10[data-v-693cabb2]{z-index:10}@media (min-width: 640px){.sm\:text-8xl[data-v-693cabb2]{font-size:6rem;line-height:1}.sm\:text-2xl[data-v-693cabb2]{font-size:1.5rem;line-height:2rem}}@media (prefers-color-scheme: dark){.dark\:bg-black[data-v-693cabb2]{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.dark\:bg-white\/10[data-v-693cabb2]{--tw-bg-opacity:.1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.dark\:text-white[data-v-693cabb2]{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}.spotlight[data-v-693cabb2]{background:linear-gradient(45deg,#00DC82 0%,#36E4DA 50%,#0047E1 100%);opacity:.8;filter:blur(30vh);height:60vh;bottom:-40vh}
2 |
--------------------------------------------------------------------------------
/examples/vite/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-plyr-vite",
3 | "version": "0.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "vue-plyr-vite",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "@skjnldsv/vue-plyr": "file:../..",
12 | "vue": "^3.3.6"
13 | },
14 | "devDependencies": {
15 | "@vitejs/plugin-vue": "^2.3.4",
16 | "vite": "^2.9.18"
17 | }
18 | },
19 | "../..": {
20 | "name": "@skjnldsv/vue-plyr",
21 | "version": "7.5.0",
22 | "license": "MIT",
23 | "dependencies": {
24 | "plyr": "^3.7.8",
25 | "vue": "^3.3.4"
26 | },
27 | "devDependencies": {
28 | "@nextcloud/babel-config": "^1.1.1",
29 | "@nextcloud/eslint-config": "^8.3.0",
30 | "@nextcloud/stylelint-config": "^3.0.0",
31 | "@rollup/plugin-commonjs": "^25.0.7",
32 | "@rollup/plugin-node-resolve": "^15.2.3",
33 | "@vue/tsconfig": "^0.7.0",
34 | "jest": "^29.7.0",
35 | "jest-environment-jsdom": "^29.7.0",
36 | "rollup": "^4.17.2",
37 | "rollup-plugin-inject-process-env": "^1.3.1",
38 | "rollup-plugin-postcss": "^4.0.2",
39 | "rollup-plugin-vue": "^6.0.0",
40 | "rollup-plugin-vue2": "^0.8.1",
41 | "sass": "^1.63.5"
42 | },
43 | "engines": {
44 | "node": "^18.0.0 || ^20.0.0",
45 | "npm": "^9.0.0 || ^10.0.0"
46 | }
47 | },
48 | "node_modules/@babel/parser": {
49 | "version": "7.23.0",
50 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
51 | "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
52 | "bin": {
53 | "parser": "bin/babel-parser.js"
54 | },
55 | "engines": {
56 | "node": ">=6.0.0"
57 | }
58 | },
59 | "node_modules/@jridgewell/sourcemap-codec": {
60 | "version": "1.4.15",
61 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
62 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
63 | },
64 | "node_modules/@skjnldsv/vue-plyr": {
65 | "resolved": "../..",
66 | "link": true
67 | },
68 | "node_modules/@vitejs/plugin-vue": {
69 | "version": "2.3.4",
70 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz",
71 | "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==",
72 | "dev": true,
73 | "engines": {
74 | "node": ">=12.0.0"
75 | },
76 | "peerDependencies": {
77 | "vite": "^2.5.10",
78 | "vue": "^3.2.25"
79 | }
80 | },
81 | "node_modules/@vue/compiler-core": {
82 | "version": "3.3.6",
83 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.6.tgz",
84 | "integrity": "sha512-2JNjemwaNwf+MkkatATVZi7oAH1Hx0B04DdPH3ZoZ8vKC1xZVP7nl4HIsk8XYd3r+/52sqqoz9TWzYc3yE9dqA==",
85 | "dependencies": {
86 | "@babel/parser": "^7.23.0",
87 | "@vue/shared": "3.3.6",
88 | "estree-walker": "^2.0.2",
89 | "source-map-js": "^1.0.2"
90 | }
91 | },
92 | "node_modules/@vue/compiler-dom": {
93 | "version": "3.3.6",
94 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.6.tgz",
95 | "integrity": "sha512-1MxXcJYMHiTPexjLAJUkNs/Tw2eDf2tY3a0rL+LfuWyiKN2s6jvSwywH3PWD8bKICjfebX3GWx2Os8jkRDq3Ng==",
96 | "dependencies": {
97 | "@vue/compiler-core": "3.3.6",
98 | "@vue/shared": "3.3.6"
99 | }
100 | },
101 | "node_modules/@vue/compiler-sfc": {
102 | "version": "3.3.6",
103 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.6.tgz",
104 | "integrity": "sha512-/Kms6du2h1VrXFreuZmlvQej8B1zenBqIohP0690IUBkJjsFvJxY0crcvVRJ0UhMgSR9dewB+khdR1DfbpArJA==",
105 | "dependencies": {
106 | "@babel/parser": "^7.23.0",
107 | "@vue/compiler-core": "3.3.6",
108 | "@vue/compiler-dom": "3.3.6",
109 | "@vue/compiler-ssr": "3.3.6",
110 | "@vue/reactivity-transform": "3.3.6",
111 | "@vue/shared": "3.3.6",
112 | "estree-walker": "^2.0.2",
113 | "magic-string": "^0.30.5",
114 | "postcss": "^8.4.31",
115 | "source-map-js": "^1.0.2"
116 | }
117 | },
118 | "node_modules/@vue/compiler-ssr": {
119 | "version": "3.3.6",
120 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.6.tgz",
121 | "integrity": "sha512-QTIHAfDCHhjXlYGkUg5KH7YwYtdUM1vcFl/FxFDlD6d0nXAmnjizka3HITp8DGudzHndv2PjKVS44vqqy0vP4w==",
122 | "dependencies": {
123 | "@vue/compiler-dom": "3.3.6",
124 | "@vue/shared": "3.3.6"
125 | }
126 | },
127 | "node_modules/@vue/reactivity": {
128 | "version": "3.3.6",
129 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.6.tgz",
130 | "integrity": "sha512-gtChAumfQz5lSy5jZXfyXbKrIYPf9XEOrIr6rxwVyeWVjFhJwmwPLtV6Yis+M9onzX++I5AVE9j+iPH60U+B8Q==",
131 | "dependencies": {
132 | "@vue/shared": "3.3.6"
133 | }
134 | },
135 | "node_modules/@vue/reactivity-transform": {
136 | "version": "3.3.6",
137 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.6.tgz",
138 | "integrity": "sha512-RlJl4dHfeO7EuzU1iJOsrlqWyJfHTkJbvYz/IOJWqu8dlCNWtxWX377WI0VsbAgBizjwD+3ZjdnvSyyFW1YVng==",
139 | "dependencies": {
140 | "@babel/parser": "^7.23.0",
141 | "@vue/compiler-core": "3.3.6",
142 | "@vue/shared": "3.3.6",
143 | "estree-walker": "^2.0.2",
144 | "magic-string": "^0.30.5"
145 | }
146 | },
147 | "node_modules/@vue/runtime-core": {
148 | "version": "3.3.6",
149 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.6.tgz",
150 | "integrity": "sha512-qp7HTP1iw1UW2ZGJ8L3zpqlngrBKvLsDAcq5lA6JvEXHmpoEmjKju7ahM9W2p/h51h0OT5F2fGlP/gMhHOmbUA==",
151 | "dependencies": {
152 | "@vue/reactivity": "3.3.6",
153 | "@vue/shared": "3.3.6"
154 | }
155 | },
156 | "node_modules/@vue/runtime-dom": {
157 | "version": "3.3.6",
158 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.6.tgz",
159 | "integrity": "sha512-AoX3Cp8NqMXjLbIG9YR6n/pPLWE9TiDdk6wTJHFnl2GpHzDFH1HLBC9wlqqQ7RlnvN3bVLpzPGAAH00SAtOxHg==",
160 | "dependencies": {
161 | "@vue/runtime-core": "3.3.6",
162 | "@vue/shared": "3.3.6",
163 | "csstype": "^3.1.2"
164 | }
165 | },
166 | "node_modules/@vue/server-renderer": {
167 | "version": "3.3.6",
168 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.6.tgz",
169 | "integrity": "sha512-kgLoN43W4ERdZ6dpyy+gnk2ZHtcOaIr5Uc/WUP5DRwutgvluzu2pudsZGoD2b7AEJHByUVMa9k6Sho5lLRCykw==",
170 | "dependencies": {
171 | "@vue/compiler-ssr": "3.3.6",
172 | "@vue/shared": "3.3.6"
173 | },
174 | "peerDependencies": {
175 | "vue": "3.3.6"
176 | }
177 | },
178 | "node_modules/@vue/shared": {
179 | "version": "3.3.6",
180 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.6.tgz",
181 | "integrity": "sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ=="
182 | },
183 | "node_modules/csstype": {
184 | "version": "3.1.2",
185 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
186 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
187 | },
188 | "node_modules/esbuild": {
189 | "version": "0.14.47",
190 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz",
191 | "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==",
192 | "dev": true,
193 | "hasInstallScript": true,
194 | "bin": {
195 | "esbuild": "bin/esbuild"
196 | },
197 | "engines": {
198 | "node": ">=12"
199 | },
200 | "optionalDependencies": {
201 | "esbuild-android-64": "0.14.47",
202 | "esbuild-android-arm64": "0.14.47",
203 | "esbuild-darwin-64": "0.14.47",
204 | "esbuild-darwin-arm64": "0.14.47",
205 | "esbuild-freebsd-64": "0.14.47",
206 | "esbuild-freebsd-arm64": "0.14.47",
207 | "esbuild-linux-32": "0.14.47",
208 | "esbuild-linux-64": "0.14.47",
209 | "esbuild-linux-arm": "0.14.47",
210 | "esbuild-linux-arm64": "0.14.47",
211 | "esbuild-linux-mips64le": "0.14.47",
212 | "esbuild-linux-ppc64le": "0.14.47",
213 | "esbuild-linux-riscv64": "0.14.47",
214 | "esbuild-linux-s390x": "0.14.47",
215 | "esbuild-netbsd-64": "0.14.47",
216 | "esbuild-openbsd-64": "0.14.47",
217 | "esbuild-sunos-64": "0.14.47",
218 | "esbuild-windows-32": "0.14.47",
219 | "esbuild-windows-64": "0.14.47",
220 | "esbuild-windows-arm64": "0.14.47"
221 | }
222 | },
223 | "node_modules/esbuild-android-64": {
224 | "version": "0.14.47",
225 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz",
226 | "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==",
227 | "cpu": [
228 | "x64"
229 | ],
230 | "dev": true,
231 | "optional": true,
232 | "os": [
233 | "android"
234 | ],
235 | "engines": {
236 | "node": ">=12"
237 | }
238 | },
239 | "node_modules/esbuild-android-arm64": {
240 | "version": "0.14.47",
241 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz",
242 | "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==",
243 | "cpu": [
244 | "arm64"
245 | ],
246 | "dev": true,
247 | "optional": true,
248 | "os": [
249 | "android"
250 | ],
251 | "engines": {
252 | "node": ">=12"
253 | }
254 | },
255 | "node_modules/esbuild-darwin-64": {
256 | "version": "0.14.47",
257 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz",
258 | "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==",
259 | "cpu": [
260 | "x64"
261 | ],
262 | "dev": true,
263 | "optional": true,
264 | "os": [
265 | "darwin"
266 | ],
267 | "engines": {
268 | "node": ">=12"
269 | }
270 | },
271 | "node_modules/esbuild-darwin-arm64": {
272 | "version": "0.14.47",
273 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz",
274 | "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==",
275 | "cpu": [
276 | "arm64"
277 | ],
278 | "dev": true,
279 | "optional": true,
280 | "os": [
281 | "darwin"
282 | ],
283 | "engines": {
284 | "node": ">=12"
285 | }
286 | },
287 | "node_modules/esbuild-freebsd-64": {
288 | "version": "0.14.47",
289 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz",
290 | "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==",
291 | "cpu": [
292 | "x64"
293 | ],
294 | "dev": true,
295 | "optional": true,
296 | "os": [
297 | "freebsd"
298 | ],
299 | "engines": {
300 | "node": ">=12"
301 | }
302 | },
303 | "node_modules/esbuild-freebsd-arm64": {
304 | "version": "0.14.47",
305 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz",
306 | "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==",
307 | "cpu": [
308 | "arm64"
309 | ],
310 | "dev": true,
311 | "optional": true,
312 | "os": [
313 | "freebsd"
314 | ],
315 | "engines": {
316 | "node": ">=12"
317 | }
318 | },
319 | "node_modules/esbuild-linux-32": {
320 | "version": "0.14.47",
321 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz",
322 | "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==",
323 | "cpu": [
324 | "ia32"
325 | ],
326 | "dev": true,
327 | "optional": true,
328 | "os": [
329 | "linux"
330 | ],
331 | "engines": {
332 | "node": ">=12"
333 | }
334 | },
335 | "node_modules/esbuild-linux-64": {
336 | "version": "0.14.47",
337 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz",
338 | "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==",
339 | "cpu": [
340 | "x64"
341 | ],
342 | "dev": true,
343 | "optional": true,
344 | "os": [
345 | "linux"
346 | ],
347 | "engines": {
348 | "node": ">=12"
349 | }
350 | },
351 | "node_modules/esbuild-linux-arm": {
352 | "version": "0.14.47",
353 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz",
354 | "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==",
355 | "cpu": [
356 | "arm"
357 | ],
358 | "dev": true,
359 | "optional": true,
360 | "os": [
361 | "linux"
362 | ],
363 | "engines": {
364 | "node": ">=12"
365 | }
366 | },
367 | "node_modules/esbuild-linux-arm64": {
368 | "version": "0.14.47",
369 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz",
370 | "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==",
371 | "cpu": [
372 | "arm64"
373 | ],
374 | "dev": true,
375 | "optional": true,
376 | "os": [
377 | "linux"
378 | ],
379 | "engines": {
380 | "node": ">=12"
381 | }
382 | },
383 | "node_modules/esbuild-linux-mips64le": {
384 | "version": "0.14.47",
385 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz",
386 | "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==",
387 | "cpu": [
388 | "mips64el"
389 | ],
390 | "dev": true,
391 | "optional": true,
392 | "os": [
393 | "linux"
394 | ],
395 | "engines": {
396 | "node": ">=12"
397 | }
398 | },
399 | "node_modules/esbuild-linux-ppc64le": {
400 | "version": "0.14.47",
401 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz",
402 | "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==",
403 | "cpu": [
404 | "ppc64"
405 | ],
406 | "dev": true,
407 | "optional": true,
408 | "os": [
409 | "linux"
410 | ],
411 | "engines": {
412 | "node": ">=12"
413 | }
414 | },
415 | "node_modules/esbuild-linux-riscv64": {
416 | "version": "0.14.47",
417 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz",
418 | "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==",
419 | "cpu": [
420 | "riscv64"
421 | ],
422 | "dev": true,
423 | "optional": true,
424 | "os": [
425 | "linux"
426 | ],
427 | "engines": {
428 | "node": ">=12"
429 | }
430 | },
431 | "node_modules/esbuild-linux-s390x": {
432 | "version": "0.14.47",
433 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz",
434 | "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==",
435 | "cpu": [
436 | "s390x"
437 | ],
438 | "dev": true,
439 | "optional": true,
440 | "os": [
441 | "linux"
442 | ],
443 | "engines": {
444 | "node": ">=12"
445 | }
446 | },
447 | "node_modules/esbuild-netbsd-64": {
448 | "version": "0.14.47",
449 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz",
450 | "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==",
451 | "cpu": [
452 | "x64"
453 | ],
454 | "dev": true,
455 | "optional": true,
456 | "os": [
457 | "netbsd"
458 | ],
459 | "engines": {
460 | "node": ">=12"
461 | }
462 | },
463 | "node_modules/esbuild-openbsd-64": {
464 | "version": "0.14.47",
465 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz",
466 | "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==",
467 | "cpu": [
468 | "x64"
469 | ],
470 | "dev": true,
471 | "optional": true,
472 | "os": [
473 | "openbsd"
474 | ],
475 | "engines": {
476 | "node": ">=12"
477 | }
478 | },
479 | "node_modules/esbuild-sunos-64": {
480 | "version": "0.14.47",
481 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz",
482 | "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==",
483 | "cpu": [
484 | "x64"
485 | ],
486 | "dev": true,
487 | "optional": true,
488 | "os": [
489 | "sunos"
490 | ],
491 | "engines": {
492 | "node": ">=12"
493 | }
494 | },
495 | "node_modules/esbuild-windows-32": {
496 | "version": "0.14.47",
497 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz",
498 | "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==",
499 | "cpu": [
500 | "ia32"
501 | ],
502 | "dev": true,
503 | "optional": true,
504 | "os": [
505 | "win32"
506 | ],
507 | "engines": {
508 | "node": ">=12"
509 | }
510 | },
511 | "node_modules/esbuild-windows-64": {
512 | "version": "0.14.47",
513 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz",
514 | "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==",
515 | "cpu": [
516 | "x64"
517 | ],
518 | "dev": true,
519 | "optional": true,
520 | "os": [
521 | "win32"
522 | ],
523 | "engines": {
524 | "node": ">=12"
525 | }
526 | },
527 | "node_modules/esbuild-windows-arm64": {
528 | "version": "0.14.47",
529 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz",
530 | "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==",
531 | "cpu": [
532 | "arm64"
533 | ],
534 | "dev": true,
535 | "optional": true,
536 | "os": [
537 | "win32"
538 | ],
539 | "engines": {
540 | "node": ">=12"
541 | }
542 | },
543 | "node_modules/estree-walker": {
544 | "version": "2.0.2",
545 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
546 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
547 | },
548 | "node_modules/fsevents": {
549 | "version": "2.3.2",
550 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
551 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
552 | "dev": true,
553 | "hasInstallScript": true,
554 | "optional": true,
555 | "os": [
556 | "darwin"
557 | ],
558 | "engines": {
559 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
560 | }
561 | },
562 | "node_modules/function-bind": {
563 | "version": "1.1.1",
564 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
565 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
566 | "dev": true
567 | },
568 | "node_modules/has": {
569 | "version": "1.0.3",
570 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
571 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
572 | "dev": true,
573 | "dependencies": {
574 | "function-bind": "^1.1.1"
575 | },
576 | "engines": {
577 | "node": ">= 0.4.0"
578 | }
579 | },
580 | "node_modules/is-core-module": {
581 | "version": "2.9.0",
582 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
583 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
584 | "dev": true,
585 | "dependencies": {
586 | "has": "^1.0.3"
587 | },
588 | "funding": {
589 | "url": "https://github.com/sponsors/ljharb"
590 | }
591 | },
592 | "node_modules/magic-string": {
593 | "version": "0.30.5",
594 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
595 | "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
596 | "dependencies": {
597 | "@jridgewell/sourcemap-codec": "^1.4.15"
598 | },
599 | "engines": {
600 | "node": ">=12"
601 | }
602 | },
603 | "node_modules/nanoid": {
604 | "version": "3.3.8",
605 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
606 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
607 | "funding": [
608 | {
609 | "type": "github",
610 | "url": "https://github.com/sponsors/ai"
611 | }
612 | ],
613 | "bin": {
614 | "nanoid": "bin/nanoid.cjs"
615 | },
616 | "engines": {
617 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
618 | }
619 | },
620 | "node_modules/path-parse": {
621 | "version": "1.0.7",
622 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
623 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
624 | "dev": true
625 | },
626 | "node_modules/picocolors": {
627 | "version": "1.0.0",
628 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
629 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
630 | },
631 | "node_modules/postcss": {
632 | "version": "8.4.31",
633 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
634 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
635 | "funding": [
636 | {
637 | "type": "opencollective",
638 | "url": "https://opencollective.com/postcss/"
639 | },
640 | {
641 | "type": "tidelift",
642 | "url": "https://tidelift.com/funding/github/npm/postcss"
643 | },
644 | {
645 | "type": "github",
646 | "url": "https://github.com/sponsors/ai"
647 | }
648 | ],
649 | "dependencies": {
650 | "nanoid": "^3.3.6",
651 | "picocolors": "^1.0.0",
652 | "source-map-js": "^1.0.2"
653 | },
654 | "engines": {
655 | "node": "^10 || ^12 || >=14"
656 | }
657 | },
658 | "node_modules/resolve": {
659 | "version": "1.22.1",
660 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
661 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
662 | "dev": true,
663 | "dependencies": {
664 | "is-core-module": "^2.9.0",
665 | "path-parse": "^1.0.7",
666 | "supports-preserve-symlinks-flag": "^1.0.0"
667 | },
668 | "bin": {
669 | "resolve": "bin/resolve"
670 | },
671 | "funding": {
672 | "url": "https://github.com/sponsors/ljharb"
673 | }
674 | },
675 | "node_modules/rollup": {
676 | "version": "2.75.7",
677 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz",
678 | "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==",
679 | "dev": true,
680 | "bin": {
681 | "rollup": "dist/bin/rollup"
682 | },
683 | "engines": {
684 | "node": ">=10.0.0"
685 | },
686 | "optionalDependencies": {
687 | "fsevents": "~2.3.2"
688 | }
689 | },
690 | "node_modules/source-map-js": {
691 | "version": "1.0.2",
692 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
693 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
694 | "engines": {
695 | "node": ">=0.10.0"
696 | }
697 | },
698 | "node_modules/supports-preserve-symlinks-flag": {
699 | "version": "1.0.0",
700 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
701 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
702 | "dev": true,
703 | "engines": {
704 | "node": ">= 0.4"
705 | },
706 | "funding": {
707 | "url": "https://github.com/sponsors/ljharb"
708 | }
709 | },
710 | "node_modules/vite": {
711 | "version": "2.9.18",
712 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.18.tgz",
713 | "integrity": "sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ==",
714 | "dev": true,
715 | "dependencies": {
716 | "esbuild": "^0.14.27",
717 | "postcss": "^8.4.13",
718 | "resolve": "^1.22.0",
719 | "rollup": ">=2.59.0 <2.78.0"
720 | },
721 | "bin": {
722 | "vite": "bin/vite.js"
723 | },
724 | "engines": {
725 | "node": ">=12.2.0"
726 | },
727 | "optionalDependencies": {
728 | "fsevents": "~2.3.2"
729 | },
730 | "peerDependencies": {
731 | "less": "*",
732 | "sass": "*",
733 | "stylus": "*"
734 | },
735 | "peerDependenciesMeta": {
736 | "less": {
737 | "optional": true
738 | },
739 | "sass": {
740 | "optional": true
741 | },
742 | "stylus": {
743 | "optional": true
744 | }
745 | }
746 | },
747 | "node_modules/vue": {
748 | "version": "3.3.6",
749 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.6.tgz",
750 | "integrity": "sha512-jJIDETeWJnoY+gfn4ZtMPMS5KtbP4ax+CT4dcQFhTnWEk8xMupFyQ0JxL28nvT/M4+p4a0ptxaV2WY0LiIxvRg==",
751 | "dependencies": {
752 | "@vue/compiler-dom": "3.3.6",
753 | "@vue/compiler-sfc": "3.3.6",
754 | "@vue/runtime-dom": "3.3.6",
755 | "@vue/server-renderer": "3.3.6",
756 | "@vue/shared": "3.3.6"
757 | },
758 | "peerDependencies": {
759 | "typescript": "*"
760 | },
761 | "peerDependenciesMeta": {
762 | "typescript": {
763 | "optional": true
764 | }
765 | }
766 | }
767 | },
768 | "dependencies": {
769 | "@babel/parser": {
770 | "version": "7.23.0",
771 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
772 | "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw=="
773 | },
774 | "@jridgewell/sourcemap-codec": {
775 | "version": "1.4.15",
776 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
777 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
778 | },
779 | "@skjnldsv/vue-plyr": {
780 | "version": "file:../..",
781 | "requires": {
782 | "@nextcloud/babel-config": "^1.1.1",
783 | "@nextcloud/eslint-config": "^8.3.0",
784 | "@nextcloud/stylelint-config": "^3.0.0",
785 | "@rollup/plugin-commonjs": "^25.0.7",
786 | "@rollup/plugin-node-resolve": "^15.2.3",
787 | "@vue/tsconfig": "^0.7.0",
788 | "jest": "^29.7.0",
789 | "jest-environment-jsdom": "^29.7.0",
790 | "plyr": "^3.7.8",
791 | "rollup": "^4.17.2",
792 | "rollup-plugin-inject-process-env": "^1.3.1",
793 | "rollup-plugin-postcss": "^4.0.2",
794 | "rollup-plugin-vue": "^6.0.0",
795 | "rollup-plugin-vue2": "^0.8.1",
796 | "sass": "^1.63.5",
797 | "vue": "^3.3.4"
798 | }
799 | },
800 | "@vitejs/plugin-vue": {
801 | "version": "2.3.4",
802 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz",
803 | "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==",
804 | "dev": true,
805 | "requires": {}
806 | },
807 | "@vue/compiler-core": {
808 | "version": "3.3.6",
809 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.6.tgz",
810 | "integrity": "sha512-2JNjemwaNwf+MkkatATVZi7oAH1Hx0B04DdPH3ZoZ8vKC1xZVP7nl4HIsk8XYd3r+/52sqqoz9TWzYc3yE9dqA==",
811 | "requires": {
812 | "@babel/parser": "^7.23.0",
813 | "@vue/shared": "3.3.6",
814 | "estree-walker": "^2.0.2",
815 | "source-map-js": "^1.0.2"
816 | }
817 | },
818 | "@vue/compiler-dom": {
819 | "version": "3.3.6",
820 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.6.tgz",
821 | "integrity": "sha512-1MxXcJYMHiTPexjLAJUkNs/Tw2eDf2tY3a0rL+LfuWyiKN2s6jvSwywH3PWD8bKICjfebX3GWx2Os8jkRDq3Ng==",
822 | "requires": {
823 | "@vue/compiler-core": "3.3.6",
824 | "@vue/shared": "3.3.6"
825 | }
826 | },
827 | "@vue/compiler-sfc": {
828 | "version": "3.3.6",
829 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.6.tgz",
830 | "integrity": "sha512-/Kms6du2h1VrXFreuZmlvQej8B1zenBqIohP0690IUBkJjsFvJxY0crcvVRJ0UhMgSR9dewB+khdR1DfbpArJA==",
831 | "requires": {
832 | "@babel/parser": "^7.23.0",
833 | "@vue/compiler-core": "3.3.6",
834 | "@vue/compiler-dom": "3.3.6",
835 | "@vue/compiler-ssr": "3.3.6",
836 | "@vue/reactivity-transform": "3.3.6",
837 | "@vue/shared": "3.3.6",
838 | "estree-walker": "^2.0.2",
839 | "magic-string": "^0.30.5",
840 | "postcss": "^8.4.31",
841 | "source-map-js": "^1.0.2"
842 | }
843 | },
844 | "@vue/compiler-ssr": {
845 | "version": "3.3.6",
846 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.6.tgz",
847 | "integrity": "sha512-QTIHAfDCHhjXlYGkUg5KH7YwYtdUM1vcFl/FxFDlD6d0nXAmnjizka3HITp8DGudzHndv2PjKVS44vqqy0vP4w==",
848 | "requires": {
849 | "@vue/compiler-dom": "3.3.6",
850 | "@vue/shared": "3.3.6"
851 | }
852 | },
853 | "@vue/reactivity": {
854 | "version": "3.3.6",
855 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.6.tgz",
856 | "integrity": "sha512-gtChAumfQz5lSy5jZXfyXbKrIYPf9XEOrIr6rxwVyeWVjFhJwmwPLtV6Yis+M9onzX++I5AVE9j+iPH60U+B8Q==",
857 | "requires": {
858 | "@vue/shared": "3.3.6"
859 | }
860 | },
861 | "@vue/reactivity-transform": {
862 | "version": "3.3.6",
863 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.6.tgz",
864 | "integrity": "sha512-RlJl4dHfeO7EuzU1iJOsrlqWyJfHTkJbvYz/IOJWqu8dlCNWtxWX377WI0VsbAgBizjwD+3ZjdnvSyyFW1YVng==",
865 | "requires": {
866 | "@babel/parser": "^7.23.0",
867 | "@vue/compiler-core": "3.3.6",
868 | "@vue/shared": "3.3.6",
869 | "estree-walker": "^2.0.2",
870 | "magic-string": "^0.30.5"
871 | }
872 | },
873 | "@vue/runtime-core": {
874 | "version": "3.3.6",
875 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.6.tgz",
876 | "integrity": "sha512-qp7HTP1iw1UW2ZGJ8L3zpqlngrBKvLsDAcq5lA6JvEXHmpoEmjKju7ahM9W2p/h51h0OT5F2fGlP/gMhHOmbUA==",
877 | "requires": {
878 | "@vue/reactivity": "3.3.6",
879 | "@vue/shared": "3.3.6"
880 | }
881 | },
882 | "@vue/runtime-dom": {
883 | "version": "3.3.6",
884 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.6.tgz",
885 | "integrity": "sha512-AoX3Cp8NqMXjLbIG9YR6n/pPLWE9TiDdk6wTJHFnl2GpHzDFH1HLBC9wlqqQ7RlnvN3bVLpzPGAAH00SAtOxHg==",
886 | "requires": {
887 | "@vue/runtime-core": "3.3.6",
888 | "@vue/shared": "3.3.6",
889 | "csstype": "^3.1.2"
890 | }
891 | },
892 | "@vue/server-renderer": {
893 | "version": "3.3.6",
894 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.6.tgz",
895 | "integrity": "sha512-kgLoN43W4ERdZ6dpyy+gnk2ZHtcOaIr5Uc/WUP5DRwutgvluzu2pudsZGoD2b7AEJHByUVMa9k6Sho5lLRCykw==",
896 | "requires": {
897 | "@vue/compiler-ssr": "3.3.6",
898 | "@vue/shared": "3.3.6"
899 | }
900 | },
901 | "@vue/shared": {
902 | "version": "3.3.6",
903 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.6.tgz",
904 | "integrity": "sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ=="
905 | },
906 | "csstype": {
907 | "version": "3.1.2",
908 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
909 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
910 | },
911 | "esbuild": {
912 | "version": "0.14.47",
913 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz",
914 | "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==",
915 | "dev": true,
916 | "requires": {
917 | "esbuild-android-64": "0.14.47",
918 | "esbuild-android-arm64": "0.14.47",
919 | "esbuild-darwin-64": "0.14.47",
920 | "esbuild-darwin-arm64": "0.14.47",
921 | "esbuild-freebsd-64": "0.14.47",
922 | "esbuild-freebsd-arm64": "0.14.47",
923 | "esbuild-linux-32": "0.14.47",
924 | "esbuild-linux-64": "0.14.47",
925 | "esbuild-linux-arm": "0.14.47",
926 | "esbuild-linux-arm64": "0.14.47",
927 | "esbuild-linux-mips64le": "0.14.47",
928 | "esbuild-linux-ppc64le": "0.14.47",
929 | "esbuild-linux-riscv64": "0.14.47",
930 | "esbuild-linux-s390x": "0.14.47",
931 | "esbuild-netbsd-64": "0.14.47",
932 | "esbuild-openbsd-64": "0.14.47",
933 | "esbuild-sunos-64": "0.14.47",
934 | "esbuild-windows-32": "0.14.47",
935 | "esbuild-windows-64": "0.14.47",
936 | "esbuild-windows-arm64": "0.14.47"
937 | }
938 | },
939 | "esbuild-android-64": {
940 | "version": "0.14.47",
941 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz",
942 | "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==",
943 | "dev": true,
944 | "optional": true
945 | },
946 | "esbuild-android-arm64": {
947 | "version": "0.14.47",
948 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz",
949 | "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==",
950 | "dev": true,
951 | "optional": true
952 | },
953 | "esbuild-darwin-64": {
954 | "version": "0.14.47",
955 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz",
956 | "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==",
957 | "dev": true,
958 | "optional": true
959 | },
960 | "esbuild-darwin-arm64": {
961 | "version": "0.14.47",
962 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz",
963 | "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==",
964 | "dev": true,
965 | "optional": true
966 | },
967 | "esbuild-freebsd-64": {
968 | "version": "0.14.47",
969 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz",
970 | "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==",
971 | "dev": true,
972 | "optional": true
973 | },
974 | "esbuild-freebsd-arm64": {
975 | "version": "0.14.47",
976 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz",
977 | "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==",
978 | "dev": true,
979 | "optional": true
980 | },
981 | "esbuild-linux-32": {
982 | "version": "0.14.47",
983 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz",
984 | "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==",
985 | "dev": true,
986 | "optional": true
987 | },
988 | "esbuild-linux-64": {
989 | "version": "0.14.47",
990 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz",
991 | "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==",
992 | "dev": true,
993 | "optional": true
994 | },
995 | "esbuild-linux-arm": {
996 | "version": "0.14.47",
997 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz",
998 | "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==",
999 | "dev": true,
1000 | "optional": true
1001 | },
1002 | "esbuild-linux-arm64": {
1003 | "version": "0.14.47",
1004 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz",
1005 | "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==",
1006 | "dev": true,
1007 | "optional": true
1008 | },
1009 | "esbuild-linux-mips64le": {
1010 | "version": "0.14.47",
1011 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz",
1012 | "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==",
1013 | "dev": true,
1014 | "optional": true
1015 | },
1016 | "esbuild-linux-ppc64le": {
1017 | "version": "0.14.47",
1018 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz",
1019 | "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==",
1020 | "dev": true,
1021 | "optional": true
1022 | },
1023 | "esbuild-linux-riscv64": {
1024 | "version": "0.14.47",
1025 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz",
1026 | "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==",
1027 | "dev": true,
1028 | "optional": true
1029 | },
1030 | "esbuild-linux-s390x": {
1031 | "version": "0.14.47",
1032 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz",
1033 | "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==",
1034 | "dev": true,
1035 | "optional": true
1036 | },
1037 | "esbuild-netbsd-64": {
1038 | "version": "0.14.47",
1039 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz",
1040 | "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==",
1041 | "dev": true,
1042 | "optional": true
1043 | },
1044 | "esbuild-openbsd-64": {
1045 | "version": "0.14.47",
1046 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz",
1047 | "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==",
1048 | "dev": true,
1049 | "optional": true
1050 | },
1051 | "esbuild-sunos-64": {
1052 | "version": "0.14.47",
1053 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz",
1054 | "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==",
1055 | "dev": true,
1056 | "optional": true
1057 | },
1058 | "esbuild-windows-32": {
1059 | "version": "0.14.47",
1060 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz",
1061 | "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==",
1062 | "dev": true,
1063 | "optional": true
1064 | },
1065 | "esbuild-windows-64": {
1066 | "version": "0.14.47",
1067 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz",
1068 | "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==",
1069 | "dev": true,
1070 | "optional": true
1071 | },
1072 | "esbuild-windows-arm64": {
1073 | "version": "0.14.47",
1074 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz",
1075 | "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==",
1076 | "dev": true,
1077 | "optional": true
1078 | },
1079 | "estree-walker": {
1080 | "version": "2.0.2",
1081 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
1082 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
1083 | },
1084 | "fsevents": {
1085 | "version": "2.3.2",
1086 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1087 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1088 | "dev": true,
1089 | "optional": true
1090 | },
1091 | "function-bind": {
1092 | "version": "1.1.1",
1093 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1094 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1095 | "dev": true
1096 | },
1097 | "has": {
1098 | "version": "1.0.3",
1099 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1100 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1101 | "dev": true,
1102 | "requires": {
1103 | "function-bind": "^1.1.1"
1104 | }
1105 | },
1106 | "is-core-module": {
1107 | "version": "2.9.0",
1108 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
1109 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
1110 | "dev": true,
1111 | "requires": {
1112 | "has": "^1.0.3"
1113 | }
1114 | },
1115 | "magic-string": {
1116 | "version": "0.30.5",
1117 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
1118 | "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
1119 | "requires": {
1120 | "@jridgewell/sourcemap-codec": "^1.4.15"
1121 | }
1122 | },
1123 | "nanoid": {
1124 | "version": "3.3.8",
1125 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
1126 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="
1127 | },
1128 | "path-parse": {
1129 | "version": "1.0.7",
1130 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1131 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1132 | "dev": true
1133 | },
1134 | "picocolors": {
1135 | "version": "1.0.0",
1136 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1137 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
1138 | },
1139 | "postcss": {
1140 | "version": "8.4.31",
1141 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
1142 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
1143 | "requires": {
1144 | "nanoid": "^3.3.6",
1145 | "picocolors": "^1.0.0",
1146 | "source-map-js": "^1.0.2"
1147 | }
1148 | },
1149 | "resolve": {
1150 | "version": "1.22.1",
1151 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1152 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1153 | "dev": true,
1154 | "requires": {
1155 | "is-core-module": "^2.9.0",
1156 | "path-parse": "^1.0.7",
1157 | "supports-preserve-symlinks-flag": "^1.0.0"
1158 | }
1159 | },
1160 | "rollup": {
1161 | "version": "2.75.7",
1162 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz",
1163 | "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==",
1164 | "dev": true,
1165 | "requires": {
1166 | "fsevents": "~2.3.2"
1167 | }
1168 | },
1169 | "source-map-js": {
1170 | "version": "1.0.2",
1171 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1172 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
1173 | },
1174 | "supports-preserve-symlinks-flag": {
1175 | "version": "1.0.0",
1176 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1177 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1178 | "dev": true
1179 | },
1180 | "vite": {
1181 | "version": "2.9.18",
1182 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.18.tgz",
1183 | "integrity": "sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ==",
1184 | "dev": true,
1185 | "requires": {
1186 | "esbuild": "^0.14.27",
1187 | "fsevents": "~2.3.2",
1188 | "postcss": "^8.4.13",
1189 | "resolve": "^1.22.0",
1190 | "rollup": ">=2.59.0 <2.78.0"
1191 | }
1192 | },
1193 | "vue": {
1194 | "version": "3.3.6",
1195 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.6.tgz",
1196 | "integrity": "sha512-jJIDETeWJnoY+gfn4ZtMPMS5KtbP4ax+CT4dcQFhTnWEk8xMupFyQ0JxL28nvT/M4+p4a0ptxaV2WY0LiIxvRg==",
1197 | "requires": {
1198 | "@vue/compiler-dom": "3.3.6",
1199 | "@vue/compiler-sfc": "3.3.6",
1200 | "@vue/runtime-dom": "3.3.6",
1201 | "@vue/server-renderer": "3.3.6",
1202 | "@vue/shared": "3.3.6"
1203 | }
1204 | }
1205 | }
1206 | }
1207 |
--------------------------------------------------------------------------------