Merge branch 'master' into respect-listen-mode-in-recommended-videos

This commit is contained in:
Max.-F. Helm 2024-03-14 08:49:24 +01:00 committed by GitHub
commit bc8e4bba14
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
37 changed files with 341 additions and 411 deletions

3
.env Normal file
View file

@ -0,0 +1,3 @@
VITE_PIPED_API=https://pipedapi.kavin.rocks
VITE_PIPED_PROXY=https://pipedproxy.kavin.rocks
VITE_PIPED_INSTANCES=https://piped-instances.kavin.rocks/

1
.github/FUNDING.yml vendored
View file

@ -1,2 +1,3 @@
github: TeamPiped github: TeamPiped
liberapay: kavin liberapay: kavin
custom: https://liberapay.com/bnyro

View file

@ -134,11 +134,14 @@ Donations can be made at:
- bc1qhq8zjxmu405nvp37njj6zv3s980zg400pu9jfe (BTC) - bc1qhq8zjxmu405nvp37njj6zv3s980zg400pu9jfe (BTC)
- 0x1D77D4cfB1a947514241bcf19B1F04738495e2fD (ETH) - 0x1D77D4cfB1a947514241bcf19B1F04738495e2fD (ETH)
- 8A5Up8rKgagVAz6TuUduBqHp518H1U6fYc6GqCfWsaEfjGzbSccfYpgMqp5d4oe5Ws5MuFE1iKmhQTadhMhvuk3bHRT5Ebk (XMR, aka Monero) - 84wyyeGTrg4U1daJufi78bAFrBQgdRhmxJZvgYv8dAFeFVwkJaBEmw5C7fNniUM9n4jfrz3NeG32Agxtp7JNAcCUFPACfwA (XMR, aka Monero)
- nano_1ngejzydncche4rdua3iebhj7sa95pw5geq4pb8phugtjf3tku933ktjb4pq (Nano) - nano_1ngejzydncche4rdua3iebhj7sa95pw5geq4pb8phugtjf3tku933ktjb4pq (Nano)
- XpzgouDTKCUuE8a92XqjX9b43gKL8oLihw (Dash) - XpzgouDTKCUuE8a92XqjX9b43gKL8oLihw (Dash)
FIAT donations can be made at: https://liberapay.com/kavin FIAT donations can be made at:
- https://liberapay.com/kavin (Author of project, used for Project infrastructure maintainance, and official instance)
- https://liberapay.com/Bnyro (Maintainer of repo)
Contributions in any other form are also welcomed. Contributions in any other form are also welcomed.

View file

@ -1,6 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html style="background: #0f0f0f" lang="en" > <html style="background: #0f0f0f" lang="en" >
<head> <head>
<base href="%BASE_URL%"/>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" /> <meta name="viewport" content="width=device-width,initial-scale=1.0" />

View file

@ -11,26 +11,22 @@
"lint": "eslint --fix --color --ignore-path .gitignore --ext .js,.vue ." "lint": "eslint --fix --color --ignore-path .gitignore --ext .js,.vue ."
}, },
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-svg-core": "6.5.1",
"@fortawesome/free-brands-svg-icons": "6.5.1",
"@fortawesome/free-solid-svg-icons": "6.5.1",
"@fortawesome/vue-fontawesome": "3.0.6",
"dompurify": "3.0.9", "dompurify": "3.0.9",
"fast-xml-parser": "4.3.4", "fast-xml-parser": "4.3.5",
"hotkeys-js": "3.13.6", "hotkeys-js": "3.13.7",
"javascript-time-ago": "2.5.9", "javascript-time-ago": "2.5.9",
"linkify-html": "4.1.3", "linkify-html": "4.1.3",
"linkifyjs": "4.1.3", "linkifyjs": "4.1.3",
"qrcode": "^1.5.3", "qrcode": "^1.5.3",
"shaka-player": "4.7.9", "shaka-player": "4.7.11",
"vue": "3.4.19", "vue": "3.4.21",
"vue-i18n": "9.9.1", "vue-i18n": "9.10.1",
"vue-router": "4.2.5" "vue-router": "4.3.0"
}, },
"devDependencies": { "devDependencies": {
"@iconify-json/fa6-brands": "1.1.18", "@iconify-json/fa6-brands": "1.1.18",
"@iconify-json/fa6-solid": "1.1.20", "@iconify-json/fa6-solid": "1.1.20",
"@intlify/unplugin-vue-i18n": "2.0.0", "@intlify/unplugin-vue-i18n": "3.0.1",
"@unocss/eslint-config": "0.58.5", "@unocss/eslint-config": "0.58.5",
"@unocss/preset-icons": "0.58.5", "@unocss/preset-icons": "0.58.5",
"@unocss/preset-uno": "0.58.5", "@unocss/preset-uno": "0.58.5",
@ -38,19 +34,19 @@
"@unocss/reset": "0.58.5", "@unocss/reset": "0.58.5",
"@unocss/transformer-directives": "0.58.5", "@unocss/transformer-directives": "0.58.5",
"@unocss/transformer-variant-group": "0.58.5", "@unocss/transformer-variant-group": "0.58.5",
"@vitejs/plugin-legacy": "5.3.0", "@vitejs/plugin-legacy": "5.3.2",
"@vitejs/plugin-vue": "5.0.3", "@vitejs/plugin-vue": "5.0.4",
"@vue/compiler-sfc": "3.4.19", "@vue/compiler-sfc": "3.4.21",
"eslint": "8.56.0", "eslint": "8.57.0",
"eslint-config-prettier": "9.1.0", "eslint-config-prettier": "9.1.0",
"eslint-plugin-prettier": "5.1.3", "eslint-plugin-prettier": "5.1.3",
"eslint-plugin-vue": "9.21.1", "eslint-plugin-vue": "9.23.0",
"lightningcss": "1.23.0", "lightningcss": "1.24.0",
"prettier": "3.2.5", "prettier": "3.2.5",
"unocss": "0.58.5", "unocss": "0.58.5",
"vite": "5.0.12", "vite": "5.1.6",
"vite-plugin-eslint": "1.8.1", "vite-plugin-eslint": "1.8.1",
"vite-plugin-pwa": "0.18.2", "vite-plugin-pwa": "0.19.2",
"workbox-window": "7.0.0" "workbox-window": "7.0.0"
}, },
"browserslist": [ "browserslist": [

478
pnpm-lock.yaml generated
View file

@ -5,27 +5,15 @@ settings:
excludeLinksFromLockfile: false excludeLinksFromLockfile: false
dependencies: dependencies:
'@fortawesome/fontawesome-svg-core':
specifier: 6.5.1
version: 6.5.1
'@fortawesome/free-brands-svg-icons':
specifier: 6.5.1
version: 6.5.1
'@fortawesome/free-solid-svg-icons':
specifier: 6.5.1
version: 6.5.1
'@fortawesome/vue-fontawesome':
specifier: 3.0.6
version: 3.0.6(@fortawesome/fontawesome-svg-core@6.5.1)(vue@3.4.19)
dompurify: dompurify:
specifier: 3.0.9 specifier: 3.0.9
version: 3.0.9 version: 3.0.9
fast-xml-parser: fast-xml-parser:
specifier: 4.3.4 specifier: 4.3.5
version: 4.3.4 version: 4.3.5
hotkeys-js: hotkeys-js:
specifier: 3.13.6 specifier: 3.13.7
version: 3.13.6 version: 3.13.7
javascript-time-ago: javascript-time-ago:
specifier: 2.5.9 specifier: 2.5.9
version: 2.5.9 version: 2.5.9
@ -39,17 +27,17 @@ dependencies:
specifier: ^1.5.3 specifier: ^1.5.3
version: 1.5.3 version: 1.5.3
shaka-player: shaka-player:
specifier: 4.7.9 specifier: 4.7.11
version: 4.7.9 version: 4.7.11
vue: vue:
specifier: 3.4.19 specifier: 3.4.21
version: 3.4.19(typescript@5.3.3) version: 3.4.21(typescript@5.3.3)
vue-i18n: vue-i18n:
specifier: 9.9.1 specifier: 9.10.1
version: 9.9.1(vue@3.4.19) version: 9.10.1(vue@3.4.21)
vue-router: vue-router:
specifier: 4.2.5 specifier: 4.3.0
version: 4.2.5(vue@3.4.19) version: 4.3.0(vue@3.4.21)
devDependencies: devDependencies:
'@iconify-json/fa6-brands': '@iconify-json/fa6-brands':
@ -59,11 +47,11 @@ devDependencies:
specifier: 1.1.20 specifier: 1.1.20
version: 1.1.20 version: 1.1.20
'@intlify/unplugin-vue-i18n': '@intlify/unplugin-vue-i18n':
specifier: 2.0.0 specifier: 3.0.1
version: 2.0.0(rollup@2.79.1)(vue-i18n@9.9.1) version: 3.0.1(rollup@2.79.1)(vue-i18n@9.10.1)
'@unocss/eslint-config': '@unocss/eslint-config':
specifier: 0.58.5 specifier: 0.58.5
version: 0.58.5(eslint@8.56.0)(typescript@5.3.3) version: 0.58.5(eslint@8.57.0)(typescript@5.3.3)
'@unocss/preset-icons': '@unocss/preset-icons':
specifier: 0.58.5 specifier: 0.58.5
version: 0.58.5 version: 0.58.5
@ -83,44 +71,44 @@ devDependencies:
specifier: 0.58.5 specifier: 0.58.5
version: 0.58.5 version: 0.58.5
'@vitejs/plugin-legacy': '@vitejs/plugin-legacy':
specifier: 5.3.0 specifier: 5.3.2
version: 5.3.0(esbuild@0.19.12)(terser@5.28.1)(vite@5.0.12) version: 5.3.2(terser@5.28.1)(vite@5.1.6)
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: 5.0.3 specifier: 5.0.4
version: 5.0.3(vite@5.0.12)(vue@3.4.19) version: 5.0.4(vite@5.1.6)(vue@3.4.21)
'@vue/compiler-sfc': '@vue/compiler-sfc':
specifier: 3.4.19 specifier: 3.4.21
version: 3.4.19 version: 3.4.21
eslint: eslint:
specifier: 8.56.0 specifier: 8.57.0
version: 8.56.0 version: 8.57.0
eslint-config-prettier: eslint-config-prettier:
specifier: 9.1.0 specifier: 9.1.0
version: 9.1.0(eslint@8.56.0) version: 9.1.0(eslint@8.57.0)
eslint-plugin-prettier: eslint-plugin-prettier:
specifier: 5.1.3 specifier: 5.1.3
version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.5) version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5)
eslint-plugin-vue: eslint-plugin-vue:
specifier: 9.21.1 specifier: 9.23.0
version: 9.21.1(eslint@8.56.0) version: 9.23.0(eslint@8.57.0)
lightningcss: lightningcss:
specifier: 1.23.0 specifier: 1.24.0
version: 1.23.0 version: 1.24.0
prettier: prettier:
specifier: 3.2.5 specifier: 3.2.5
version: 3.2.5 version: 3.2.5
unocss: unocss:
specifier: 0.58.5 specifier: 0.58.5
version: 0.58.5(postcss@8.4.35)(rollup@2.79.1)(vite@5.0.12) version: 0.58.5(postcss@8.4.35)(rollup@2.79.1)(vite@5.1.6)
vite: vite:
specifier: 5.0.12 specifier: 5.1.6
version: 5.0.12(lightningcss@1.23.0)(terser@5.28.1) version: 5.1.6(lightningcss@1.24.0)(terser@5.28.1)
vite-plugin-eslint: vite-plugin-eslint:
specifier: 1.8.1 specifier: 1.8.1
version: 1.8.1(eslint@8.56.0)(vite@5.0.12) version: 1.8.1(eslint@8.57.0)(vite@5.1.6)
vite-plugin-pwa: vite-plugin-pwa:
specifier: 0.18.2 specifier: 0.19.2
version: 0.18.2(vite@5.0.12)(workbox-build@7.0.0)(workbox-window@7.0.0) version: 0.19.2(vite@5.1.6)(workbox-build@7.0.0)(workbox-window@7.0.0)
workbox-window: workbox-window:
specifier: 7.0.0 specifier: 7.0.0
version: 7.0.0 version: 7.0.0
@ -1578,13 +1566,13 @@ packages:
dev: true dev: true
optional: true optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies: dependencies:
eslint: 8.56.0 eslint: 8.57.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
dev: true dev: true
@ -1610,51 +1598,11 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@eslint/js@8.56.0: /@eslint/js@8.57.0:
resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/@fortawesome/fontawesome-common-types@6.5.1:
resolution: {integrity: sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==}
engines: {node: '>=6'}
requiresBuild: true
dev: false
/@fortawesome/fontawesome-svg-core@6.5.1:
resolution: {integrity: sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
'@fortawesome/fontawesome-common-types': 6.5.1
dev: false
/@fortawesome/free-brands-svg-icons@6.5.1:
resolution: {integrity: sha512-093l7DAkx0aEtBq66Sf19MgoZewv1zeY9/4C7vSKPO4qMwEsW/2VYTUTpBtLwfb9T2R73tXaRDPmE4UqLCYHfg==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
'@fortawesome/fontawesome-common-types': 6.5.1
dev: false
/@fortawesome/free-solid-svg-icons@6.5.1:
resolution: {integrity: sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
'@fortawesome/fontawesome-common-types': 6.5.1
dev: false
/@fortawesome/vue-fontawesome@3.0.6(@fortawesome/fontawesome-svg-core@6.5.1)(vue@3.4.19):
resolution: {integrity: sha512-akrL7lTroyNpPkoHtvK2UpsMzJr6jXdHaQ0YdcwqDsB8jdwlpNHZYijpOUd9KJsARr+VB3WXY4EyObepqJ4ytQ==}
peerDependencies:
'@fortawesome/fontawesome-svg-core': ~1 || ~6
vue: '>= 3.0.0 < 4'
dependencies:
'@fortawesome/fontawesome-svg-core': 6.5.1
vue: 3.4.19(typescript@5.3.3)
dev: false
/@humanwhocodes/config-array@0.11.14: /@humanwhocodes/config-array@0.11.14:
resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
engines: {node: '>=10.10.0'} engines: {node: '>=10.10.0'}
@ -1705,7 +1653,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@intlify/bundle-utils@7.5.0(vue-i18n@9.9.1): /@intlify/bundle-utils@7.5.0(vue-i18n@9.10.1):
resolution: {integrity: sha512-6DymqusddBQ8kVtVBsVFFF7arNfIhuLacOmmsqayT2vl427j9m0VX12mMC+cgoVIodSpRfzYPaPTdPuJq7mK0Q==} resolution: {integrity: sha512-6DymqusddBQ8kVtVBsVFFF7arNfIhuLacOmmsqayT2vl427j9m0VX12mMC+cgoVIodSpRfzYPaPTdPuJq7mK0Q==}
engines: {node: '>= 14.16'} engines: {node: '>= 14.16'}
peerDependencies: peerDependencies:
@ -1717,8 +1665,8 @@ packages:
vue-i18n: vue-i18n:
optional: true optional: true
dependencies: dependencies:
'@intlify/message-compiler': 9.9.1 '@intlify/message-compiler': 9.10.1
'@intlify/shared': 9.9.1 '@intlify/shared': 9.10.1
acorn: 8.11.3 acorn: 8.11.3
escodegen: 2.1.0 escodegen: 2.1.0
estree-walker: 2.0.2 estree-walker: 2.0.2
@ -1726,30 +1674,30 @@ packages:
magic-string: 0.30.7 magic-string: 0.30.7
mlly: 1.6.1 mlly: 1.6.1
source-map-js: 1.0.2 source-map-js: 1.0.2
vue-i18n: 9.9.1(vue@3.4.19) vue-i18n: 9.10.1(vue@3.4.21)
yaml-eslint-parser: 1.2.2 yaml-eslint-parser: 1.2.2
dev: true dev: true
/@intlify/core-base@9.9.1: /@intlify/core-base@9.10.1:
resolution: {integrity: sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA==} resolution: {integrity: sha512-0+Wtjj04GIyglh5KKiNjRwgjpHrhqqGZhaKY/QVjjogWKZq5WHROrTi84pNVsRN18QynyPmjtsVUWqFKPQ45xQ==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
dependencies: dependencies:
'@intlify/message-compiler': 9.9.1 '@intlify/message-compiler': 9.10.1
'@intlify/shared': 9.9.1 '@intlify/shared': 9.10.1
/@intlify/message-compiler@9.9.1: /@intlify/message-compiler@9.10.1:
resolution: {integrity: sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA==} resolution: {integrity: sha512-b68UTmRhgZfswJZI7VAgW6BXZK5JOpoi5swMLGr4j6ss2XbFY13kiw+Hu+xYAfulMPSapcHzdWHnq21VGnMCnA==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
dependencies: dependencies:
'@intlify/shared': 9.9.1 '@intlify/shared': 9.10.1
source-map-js: 1.0.2 source-map-js: 1.0.2
/@intlify/shared@9.9.1: /@intlify/shared@9.10.1:
resolution: {integrity: sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA==} resolution: {integrity: sha512-liyH3UMoglHBUn70iCYcy9CQlInx/lp50W2aeSxqqrvmG+LDj/Jj7tBJhBoQL4fECkldGhbmW0g2ommHfL6Wmw==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
/@intlify/unplugin-vue-i18n@2.0.0(rollup@2.79.1)(vue-i18n@9.9.1): /@intlify/unplugin-vue-i18n@3.0.1(rollup@2.79.1)(vue-i18n@9.10.1):
resolution: {integrity: sha512-1oKvm92L9l2od2H9wKx2ZvR4tzn7gUtd7bPLI7AWUmm7U9H1iEypndt5d985ypxGsEs0gToDaKTrytbBIJwwSg==} resolution: {integrity: sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==}
engines: {node: '>= 14.16'} engines: {node: '>= 14.16'}
peerDependencies: peerDependencies:
petite-vue-i18n: '*' petite-vue-i18n: '*'
@ -1763,10 +1711,10 @@ packages:
vue-i18n-bridge: vue-i18n-bridge:
optional: true optional: true
dependencies: dependencies:
'@intlify/bundle-utils': 7.5.0(vue-i18n@9.9.1) '@intlify/bundle-utils': 7.5.0(vue-i18n@9.10.1)
'@intlify/shared': 9.9.1 '@intlify/shared': 9.10.1
'@rollup/pluginutils': 5.1.0(rollup@2.79.1) '@rollup/pluginutils': 5.1.0(rollup@2.79.1)
'@vue/compiler-sfc': 3.4.19 '@vue/compiler-sfc': 3.4.21
debug: 4.3.4 debug: 4.3.4
fast-glob: 3.3.2 fast-glob: 3.3.2
js-yaml: 4.1.0 js-yaml: 4.1.0
@ -1775,7 +1723,7 @@ packages:
picocolors: 1.0.0 picocolors: 1.0.0
source-map-js: 1.0.2 source-map-js: 1.0.2
unplugin: 1.7.1 unplugin: 1.7.1
vue-i18n: 9.9.1(vue@3.4.19) vue-i18n: 9.10.1(vue@3.4.21)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -2111,19 +2059,19 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.3.3):
resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
'@types/semver': 7.5.8 '@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0 '@typescript-eslint/types': 6.21.0
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
eslint: 8.56.0 eslint: 8.57.0
semver: 7.6.0 semver: 7.6.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -2142,7 +2090,7 @@ packages:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true dev: true
/@unocss/astro@0.58.5(rollup@2.79.1)(vite@5.0.12): /@unocss/astro@0.58.5(rollup@2.79.1)(vite@5.1.6):
resolution: {integrity: sha512-LtuVnj8oFAK9663OVhQO8KpdJFiOyyPsYfnOZlDCOFK3gHb/2WMrzdBwr1w8LoQF3bDedkFMKirVF7gWjyZiaw==} resolution: {integrity: sha512-LtuVnj8oFAK9663OVhQO8KpdJFiOyyPsYfnOZlDCOFK3gHb/2WMrzdBwr1w8LoQF3bDedkFMKirVF7gWjyZiaw==}
peerDependencies: peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
@ -2152,8 +2100,8 @@ packages:
dependencies: dependencies:
'@unocss/core': 0.58.5 '@unocss/core': 0.58.5
'@unocss/reset': 0.58.5 '@unocss/reset': 0.58.5
'@unocss/vite': 0.58.5(rollup@2.79.1)(vite@5.0.12) '@unocss/vite': 0.58.5(rollup@2.79.1)(vite@5.1.6)
vite: 5.0.12(lightningcss@1.23.0)(terser@5.28.1) vite: 5.1.6(lightningcss@1.24.0)(terser@5.28.1)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
dev: true dev: true
@ -2192,22 +2140,22 @@ packages:
resolution: {integrity: sha512-qbPqL+46hf1/UelQOwUwpAuvm6buoss43DPYHOPdfNJ+NTWkSpATQMF0JKT04QE0QRQbHNSHdMe9ariG+IIlCw==} resolution: {integrity: sha512-qbPqL+46hf1/UelQOwUwpAuvm6buoss43DPYHOPdfNJ+NTWkSpATQMF0JKT04QE0QRQbHNSHdMe9ariG+IIlCw==}
dev: true dev: true
/@unocss/eslint-config@0.58.5(eslint@8.56.0)(typescript@5.3.3): /@unocss/eslint-config@0.58.5(eslint@8.57.0)(typescript@5.3.3):
resolution: {integrity: sha512-HaRLlr9YBG0QPAn8nnIgYTpQ1HBVn3nuZs7hlPwV/IvFiMIY33BLVfNLEuKuGgkqxT04LmO4Oelsdau3a02+ug==} resolution: {integrity: sha512-HaRLlr9YBG0QPAn8nnIgYTpQ1HBVn3nuZs7hlPwV/IvFiMIY33BLVfNLEuKuGgkqxT04LmO4Oelsdau3a02+ug==}
engines: {node: '>=14'} engines: {node: '>=14'}
dependencies: dependencies:
'@unocss/eslint-plugin': 0.58.5(eslint@8.56.0)(typescript@5.3.3) '@unocss/eslint-plugin': 0.58.5(eslint@8.57.0)(typescript@5.3.3)
transitivePeerDependencies: transitivePeerDependencies:
- eslint - eslint
- supports-color - supports-color
- typescript - typescript
dev: true dev: true
/@unocss/eslint-plugin@0.58.5(eslint@8.56.0)(typescript@5.3.3): /@unocss/eslint-plugin@0.58.5(eslint@8.57.0)(typescript@5.3.3):
resolution: {integrity: sha512-QGB/Srml1XGiunuwbBmiVsXnkjjkRhg4/mTZ6HFkG1qZBAbsyE2QVxYJ6L7S4x4qdEgij2h2DK/Y90Cutwc7Mw==} resolution: {integrity: sha512-QGB/Srml1XGiunuwbBmiVsXnkjjkRhg4/mTZ6HFkG1qZBAbsyE2QVxYJ6L7S4x4qdEgij2h2DK/Y90Cutwc7Mw==}
engines: {node: '>=14'} engines: {node: '>=14'}
dependencies: dependencies:
'@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@unocss/config': 0.58.5 '@unocss/config': 0.58.5
'@unocss/core': 0.58.5 '@unocss/core': 0.58.5
magic-string: 0.30.7 magic-string: 0.30.7
@ -2362,7 +2310,7 @@ packages:
'@unocss/core': 0.58.5 '@unocss/core': 0.58.5
dev: true dev: true
/@unocss/vite@0.58.5(rollup@2.79.1)(vite@5.0.12): /@unocss/vite@0.58.5(rollup@2.79.1)(vite@5.1.6):
resolution: {integrity: sha512-p4o1XNX1rvjmoUqSSdua8XyWNg/d+YUChDd2L/xEty+6j2qv0wUaohs3UQ87vWlv632/UmgdX+2MbrgtqthCtw==} resolution: {integrity: sha512-p4o1XNX1rvjmoUqSSdua8XyWNg/d+YUChDd2L/xEty+6j2qv0wUaohs3UQ87vWlv632/UmgdX+2MbrgtqthCtw==}
peerDependencies: peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
@ -2377,13 +2325,13 @@ packages:
chokidar: 3.6.0 chokidar: 3.6.0
fast-glob: 3.3.2 fast-glob: 3.3.2
magic-string: 0.30.7 magic-string: 0.30.7
vite: 5.0.12(lightningcss@1.23.0)(terser@5.28.1) vite: 5.1.6(lightningcss@1.24.0)(terser@5.28.1)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
dev: true dev: true
/@vitejs/plugin-legacy@5.3.0(esbuild@0.19.12)(terser@5.28.1)(vite@5.0.12): /@vitejs/plugin-legacy@5.3.2(terser@5.28.1)(vite@5.1.6):
resolution: {integrity: sha512-BhW+WcJmEgW5G/1UQRiVQ7wz9/ZPnxqzExT9n0zAk4RlqQQ/26udIeXzdU8+03AGnaF61wmZlCspexgEnxFWMA==} resolution: {integrity: sha512-8moCOrIMaZ/Rjln0Q6GsH6s8fAt1JOI3k8nmfX4tXUxE5KAExVctSyOBk+A25GClsdSWqIk2yaUthH3KJ2X4tg==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies: peerDependencies:
terser: ^5.4.0 terser: ^5.4.0
@ -2392,95 +2340,94 @@ packages:
'@babel/core': 7.23.9 '@babel/core': 7.23.9
'@babel/preset-env': 7.23.9(@babel/core@7.23.9) '@babel/preset-env': 7.23.9(@babel/core@7.23.9)
browserslist: 4.23.0 browserslist: 4.23.0
browserslist-to-esbuild: 2.1.1(browserslist@4.23.0)
core-js: 3.36.0 core-js: 3.36.0
esbuild-plugin-browserslist: 0.10.0(browserslist@4.23.0)(esbuild@0.19.12)
magic-string: 0.30.7 magic-string: 0.30.7
regenerator-runtime: 0.14.1 regenerator-runtime: 0.14.1
systemjs: 6.14.3 systemjs: 6.14.3
terser: 5.28.1 terser: 5.28.1
vite: 5.0.12(lightningcss@1.23.0)(terser@5.28.1) vite: 5.1.6(lightningcss@1.24.0)(terser@5.28.1)
transitivePeerDependencies: transitivePeerDependencies:
- esbuild
- supports-color - supports-color
dev: true dev: true
/@vitejs/plugin-vue@5.0.3(vite@5.0.12)(vue@3.4.19): /@vitejs/plugin-vue@5.0.4(vite@5.1.6)(vue@3.4.21):
resolution: {integrity: sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==} resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies: peerDependencies:
vite: ^5.0.0 vite: ^5.0.0
vue: ^3.2.25 vue: ^3.2.25
dependencies: dependencies:
vite: 5.0.12(lightningcss@1.23.0)(terser@5.28.1) vite: 5.1.6(lightningcss@1.24.0)(terser@5.28.1)
vue: 3.4.19(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
dev: true dev: true
/@vue/compiler-core@3.4.19: /@vue/compiler-core@3.4.21:
resolution: {integrity: sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==} resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==}
dependencies: dependencies:
'@babel/parser': 7.23.9 '@babel/parser': 7.23.9
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
entities: 4.5.0 entities: 4.5.0
estree-walker: 2.0.2 estree-walker: 2.0.2
source-map-js: 1.0.2 source-map-js: 1.0.2
/@vue/compiler-dom@3.4.19: /@vue/compiler-dom@3.4.21:
resolution: {integrity: sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==} resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==}
dependencies: dependencies:
'@vue/compiler-core': 3.4.19 '@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
/@vue/compiler-sfc@3.4.19: /@vue/compiler-sfc@3.4.21:
resolution: {integrity: sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==} resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==}
dependencies: dependencies:
'@babel/parser': 7.23.9 '@babel/parser': 7.23.9
'@vue/compiler-core': 3.4.19 '@vue/compiler-core': 3.4.21
'@vue/compiler-dom': 3.4.19 '@vue/compiler-dom': 3.4.21
'@vue/compiler-ssr': 3.4.19 '@vue/compiler-ssr': 3.4.21
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
estree-walker: 2.0.2 estree-walker: 2.0.2
magic-string: 0.30.7 magic-string: 0.30.7
postcss: 8.4.35 postcss: 8.4.35
source-map-js: 1.0.2 source-map-js: 1.0.2
/@vue/compiler-ssr@3.4.19: /@vue/compiler-ssr@3.4.21:
resolution: {integrity: sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==} resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==}
dependencies: dependencies:
'@vue/compiler-dom': 3.4.19 '@vue/compiler-dom': 3.4.21
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
/@vue/devtools-api@6.6.1: /@vue/devtools-api@6.6.1:
resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==} resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==}
/@vue/reactivity@3.4.19: /@vue/reactivity@3.4.21:
resolution: {integrity: sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==} resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==}
dependencies: dependencies:
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
/@vue/runtime-core@3.4.19: /@vue/runtime-core@3.4.21:
resolution: {integrity: sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==} resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==}
dependencies: dependencies:
'@vue/reactivity': 3.4.19 '@vue/reactivity': 3.4.21
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
/@vue/runtime-dom@3.4.19: /@vue/runtime-dom@3.4.21:
resolution: {integrity: sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==} resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==}
dependencies: dependencies:
'@vue/runtime-core': 3.4.19 '@vue/runtime-core': 3.4.21
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
csstype: 3.1.3 csstype: 3.1.3
/@vue/server-renderer@3.4.19(vue@3.4.19): /@vue/server-renderer@3.4.21(vue@3.4.21):
resolution: {integrity: sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==} resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==}
peerDependencies: peerDependencies:
vue: 3.4.19 vue: 3.4.21
dependencies: dependencies:
'@vue/compiler-ssr': 3.4.19 '@vue/compiler-ssr': 3.4.21
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
vue: 3.4.19(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
/@vue/shared@3.4.19: /@vue/shared@3.4.21:
resolution: {integrity: sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==} resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
/acorn-jsx@5.3.2(acorn@8.11.3): /acorn-jsx@5.3.2(acorn@8.11.3):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@ -2655,6 +2602,17 @@ packages:
fill-range: 7.0.1 fill-range: 7.0.1
dev: true dev: true
/browserslist-to-esbuild@2.1.1(browserslist@4.23.0):
resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==}
engines: {node: '>=18'}
hasBin: true
peerDependencies:
browserslist: '*'
dependencies:
browserslist: 4.23.0
meow: 13.2.0
dev: true
/browserslist@4.23.0: /browserslist@4.23.0:
resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@ -3021,21 +2979,6 @@ packages:
is-symbol: 1.0.4 is-symbol: 1.0.4
dev: true dev: true
/esbuild-plugin-browserslist@0.10.0(browserslist@4.23.0)(esbuild@0.19.12):
resolution: {integrity: sha512-rZWFcp3l+73xDiJB+Vl9UqP1VVs+L4E0lygbwJl6UTmW2qQago7DLT56hBu0vocH/TtZsAcRHj0+qHqkkB5Gww==}
engines: {node: '>=18'}
peerDependencies:
browserslist: ^4.21.8
esbuild: ~0.19.2
dependencies:
browserslist: 4.23.0
debug: 4.3.4
esbuild: 0.19.12
zod: 3.22.4
transitivePeerDependencies:
- supports-color
dev: true
/esbuild@0.19.12: /esbuild@0.19.12:
resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -3094,16 +3037,16 @@ packages:
source-map: 0.6.1 source-map: 0.6.1
dev: true dev: true
/eslint-config-prettier@9.1.0(eslint@8.56.0): /eslint-config-prettier@9.1.0(eslint@8.57.0):
resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
eslint: '>=7.0.0' eslint: '>=7.0.0'
dependencies: dependencies:
eslint: 8.56.0 eslint: 8.57.0
dev: true dev: true
/eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.5): /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5):
resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies: peerDependencies:
@ -3117,26 +3060,26 @@ packages:
eslint-config-prettier: eslint-config-prettier:
optional: true optional: true
dependencies: dependencies:
eslint: 8.56.0 eslint: 8.57.0
eslint-config-prettier: 9.1.0(eslint@8.56.0) eslint-config-prettier: 9.1.0(eslint@8.57.0)
prettier: 3.2.5 prettier: 3.2.5
prettier-linter-helpers: 1.0.0 prettier-linter-helpers: 1.0.0
synckit: 0.8.8 synckit: 0.8.8
dev: true dev: true
/eslint-plugin-vue@9.21.1(eslint@8.56.0): /eslint-plugin-vue@9.23.0(eslint@8.57.0):
resolution: {integrity: sha512-XVtI7z39yOVBFJyi8Ljbn7kY9yHzznKXL02qQYn+ta63Iy4A9JFBw6o4OSB9hyD2++tVT+su9kQqetUyCCwhjw==} resolution: {integrity: sha512-Bqd/b7hGYGrlV+wP/g77tjyFmp81lh5TMw0be9093X02SyelxRRfCI6/IsGq/J7Um0YwB9s0Ry0wlFyjPdmtUw==}
engines: {node: ^14.17.0 || >=16.0.0} engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
eslint: 8.56.0 eslint: 8.57.0
natural-compare: 1.4.0 natural-compare: 1.4.0
nth-check: 2.1.1 nth-check: 2.1.1
postcss-selector-parser: 6.0.15 postcss-selector-parser: 6.0.15
semver: 7.6.0 semver: 7.6.0
vue-eslint-parser: 9.4.2(eslint@8.56.0) vue-eslint-parser: 9.4.2(eslint@8.57.0)
xml-name-validator: 4.0.0 xml-name-validator: 4.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -3155,15 +3098,15 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/eslint@8.56.0: /eslint@8.57.0:
resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true hasBin: true
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@eslint/eslintrc': 2.1.4 '@eslint/eslintrc': 2.1.4
'@eslint/js': 8.56.0 '@eslint/js': 8.57.0
'@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/config-array': 0.11.14
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8 '@nodelib/fs.walk': 1.2.8
@ -3290,8 +3233,8 @@ packages:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
dev: true dev: true
/fast-xml-parser@4.3.4: /fast-xml-parser@4.3.5:
resolution: {integrity: sha512-utnwm92SyozgA3hhH2I8qldf2lBqm6qHOICawRNRFu1qMe3+oqr+GcXjGqTmXTMGE5T4eC03kr/rlh5C1IRdZA==} resolution: {integrity: sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==}
hasBin: true hasBin: true
dependencies: dependencies:
strnum: 1.0.5 strnum: 1.0.5
@ -3558,8 +3501,8 @@ packages:
function-bind: 1.1.2 function-bind: 1.1.2
dev: true dev: true
/hotkeys-js@3.13.6: /hotkeys-js@3.13.7:
resolution: {integrity: sha512-Uw8cUXTjYDgnTaUxJTBc8E5etD8bcxjUm6Y/PEB5tBxIZu+dqTXGNQnWV+8yxdOTdlSdXjlqGeOMWu6Sm02CvA==} resolution: {integrity: sha512-ygFIdTqqwG4fFP7kkiYlvayZppeIQX2aPpirsngkv1xM1lP0piDY5QEh68nQnIKvz64hfocxhBaD/uK3sSK1yQ==}
dev: false dev: false
/human-signals@2.1.0: /human-signals@2.1.0:
@ -3893,8 +3836,8 @@ packages:
type-check: 0.4.0 type-check: 0.4.0
dev: true dev: true
/lightningcss-darwin-arm64@1.23.0: /lightningcss-darwin-arm64@1.24.0:
resolution: {integrity: sha512-kl4Pk3Q2lnE6AJ7Qaij47KNEfY2/UXRZBT/zqGA24B8qwkgllr/j7rclKOf1axcslNXvvUdztjo4Xqh39Yq1aA==} resolution: {integrity: sha512-rTNPkEiynOu4CfGdd5ZfVOQe2gd2idfQd4EfX1l2ZUUwd+2SwSdbb7cG4rlwfnZckbzCAygm85xkpekRE5/wFw==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@ -3902,8 +3845,8 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss-darwin-x64@1.23.0: /lightningcss-darwin-x64@1.24.0:
resolution: {integrity: sha512-KeRFCNoYfDdcolcFXvokVw+PXCapd2yHS1Diko1z1BhRz/nQuD5XyZmxjWdhmhN/zj5sH8YvWsp0/lPLVzqKpg==} resolution: {integrity: sha512-4KCeF2RJjzp9xdGY8zIH68CUtptEg8uz8PfkHvsIdrP4t9t5CIgfDBhiB8AmuO75N6SofdmZexDZIKdy9vA7Ww==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@ -3911,8 +3854,8 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss-freebsd-x64@1.23.0: /lightningcss-freebsd-x64@1.24.0:
resolution: {integrity: sha512-xhnhf0bWPuZxcqknvMDRFFo2TInrmQRWZGB0f6YoAsZX8Y+epfjHeeOIGCfAmgF0DgZxHwYc8mIR5tQU9/+ROA==} resolution: {integrity: sha512-FJAYlek1wXuVTsncNU0C6YD41q126dXcIUm97KAccMn9C4s/JfLSqGWT2gIzAblavPFkyGG2gIADTWp3uWfN1g==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
@ -3920,8 +3863,8 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss-linux-arm-gnueabihf@1.23.0: /lightningcss-linux-arm-gnueabihf@1.24.0:
resolution: {integrity: sha512-fBamf/bULvmWft9uuX+bZske236pUZEoUlaHNBjnueaCTJ/xd8eXgb0cEc7S5o0Nn6kxlauMBnqJpF70Bgq3zg==} resolution: {integrity: sha512-N55K6JqzMx7C0hYUu1YmWqhkHwzEJlkQRMA6phY65noO0I1LOAvP4wBIoFWrzRE+O6zL0RmXJ2xppqyTbk3sYw==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
@ -3929,8 +3872,8 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss-linux-arm64-gnu@1.23.0: /lightningcss-linux-arm64-gnu@1.24.0:
resolution: {integrity: sha512-RS7sY77yVLOmZD6xW2uEHByYHhQi5JYWmgVumYY85BfNoVI3DupXSlzbw+b45A9NnVKq45+oXkiN6ouMMtTwfg==} resolution: {integrity: sha512-MqqUB2TpYtFWeBvvf5KExDdClU3YGLW5bHKs50uKKootcvG9KoS7wYwd5UichS+W3mYLc5yXUPGD1DNWbLiYKw==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -3938,8 +3881,8 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss-linux-arm64-musl@1.23.0: /lightningcss-linux-arm64-musl@1.24.0:
resolution: {integrity: sha512-cU00LGb6GUXCwof6ACgSMKo3q7XYbsyTj0WsKHLi1nw7pV0NCq8nFTn6ZRBYLoKiV8t+jWl0Hv8KkgymmK5L5g==} resolution: {integrity: sha512-5wn4d9tFwa5bS1ao9mLexYVJdh3nn09HNIipsII6ZF7z9ZA5J4dOEhMgKoeCl891axTGTUYd8Kxn+Hn3XUSYRQ==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -3947,8 +3890,8 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss-linux-x64-gnu@1.23.0: /lightningcss-linux-x64-gnu@1.24.0:
resolution: {integrity: sha512-q4jdx5+5NfB0/qMbXbOmuC6oo7caPnFghJbIAV90cXZqgV8Am3miZhC4p+sQVdacqxfd+3nrle4C8icR3p1AYw==} resolution: {integrity: sha512-3j5MdTh+LSDF3o6uDwRjRUgw4J+IfDCVtdkUrJvKxL79qBLUujXY7CTe5X3IQDDLKEe/3wu49r8JKgxr0MfjbQ==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -3956,8 +3899,8 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss-linux-x64-musl@1.23.0: /lightningcss-linux-x64-musl@1.24.0:
resolution: {integrity: sha512-G9Ri3qpmF4qef2CV/80dADHKXRAQeQXpQTLx7AiQrBYQHqBjB75oxqj06FCIe5g4hNCqLPnM9fsO4CyiT1sFSQ==} resolution: {integrity: sha512-HI+rNnvaLz0o36z6Ki0gyG5igVGrJmzczxA5fznr6eFTj3cHORoR/j2q8ivMzNFR4UKJDkTWUH5LMhacwOHWBA==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -3965,8 +3908,8 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss-win32-x64-msvc@1.23.0: /lightningcss-win32-x64-msvc@1.24.0:
resolution: {integrity: sha512-1rcBDJLU+obPPJM6qR5fgBUiCdZwZLafZM5f9kwjFLkb/UBNIzmae39uCSmh71nzPCTXZqHbvwu23OWnWEz+eg==} resolution: {integrity: sha512-oeije/t7OZ5N9vSs6amyW/34wIYoBCpE6HUlsSKcP2SR1CVgx9oKEM00GtQmtqNnYiMIfsSm7+ppMb4NLtD5vg==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -3974,21 +3917,21 @@ packages:
dev: true dev: true
optional: true optional: true
/lightningcss@1.23.0: /lightningcss@1.24.0:
resolution: {integrity: sha512-SEArWKMHhqn/0QzOtclIwH5pXIYQOUEkF8DgICd/105O+GCgd7jxjNod/QPnBCSWvpRHQBGVz5fQ9uScby03zA==} resolution: {integrity: sha512-y36QEEDVx4IM7/yIZNsZJMRREIu26WzTsauIysf5s76YeCmlSbRZS7aC97IGPuoFRnyZ5Wx43OBsQBFB5Ne7ng==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
dependencies: dependencies:
detect-libc: 1.0.3 detect-libc: 1.0.3
optionalDependencies: optionalDependencies:
lightningcss-darwin-arm64: 1.23.0 lightningcss-darwin-arm64: 1.24.0
lightningcss-darwin-x64: 1.23.0 lightningcss-darwin-x64: 1.24.0
lightningcss-freebsd-x64: 1.23.0 lightningcss-freebsd-x64: 1.24.0
lightningcss-linux-arm-gnueabihf: 1.23.0 lightningcss-linux-arm-gnueabihf: 1.24.0
lightningcss-linux-arm64-gnu: 1.23.0 lightningcss-linux-arm64-gnu: 1.24.0
lightningcss-linux-arm64-musl: 1.23.0 lightningcss-linux-arm64-musl: 1.24.0
lightningcss-linux-x64-gnu: 1.23.0 lightningcss-linux-x64-gnu: 1.24.0
lightningcss-linux-x64-musl: 1.23.0 lightningcss-linux-x64-musl: 1.24.0
lightningcss-win32-x64-msvc: 1.23.0 lightningcss-win32-x64-msvc: 1.24.0
dev: true dev: true
/linkify-html@4.1.3(linkifyjs@4.1.3): /linkify-html@4.1.3(linkifyjs@4.1.3):
@ -4070,6 +4013,11 @@ packages:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
dev: true dev: true
/meow@13.2.0:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
dev: true
/merge-stream@2.0.0: /merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
dev: true dev: true
@ -4603,8 +4551,8 @@ packages:
has-property-descriptors: 1.0.2 has-property-descriptors: 1.0.2
dev: true dev: true
/shaka-player@4.7.9: /shaka-player@4.7.11:
resolution: {integrity: sha512-eGaBZCYeYLejSM1vN5te0rjLKWrIs93Vr8i94DVLjRENyeNGZIeG4wHdhMcuTn1FaedMHOfb0k+GEIqA3LLbPw==} resolution: {integrity: sha512-zHyuL/cph3xKbci/Ovba/Swyni6g3cj79cN+84BCCrD3tWR9WEBwc8svcqPIXNQX/7VYb3uwaOa+85eBQKPkMg==}
engines: {node: '>=14'} engines: {node: '>=14'}
dependencies: dependencies:
eme-encryption-scheme-polyfill: 2.1.1 eme-encryption-scheme-polyfill: 2.1.1
@ -4991,7 +4939,7 @@ packages:
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
dev: true dev: true
/unocss@0.58.5(postcss@8.4.35)(rollup@2.79.1)(vite@5.0.12): /unocss@0.58.5(postcss@8.4.35)(rollup@2.79.1)(vite@5.1.6):
resolution: {integrity: sha512-0g4P6jLgRRNnhscxw7nQ9RHGrKJ1UPPiHPet+YT3TXUcmy4mTiYgo9+kGQf5bjyrzsELJ10cT6Qz2y6g9Tls4g==} resolution: {integrity: sha512-0g4P6jLgRRNnhscxw7nQ9RHGrKJ1UPPiHPet+YT3TXUcmy4mTiYgo9+kGQf5bjyrzsELJ10cT6Qz2y6g9Tls4g==}
engines: {node: '>=14'} engines: {node: '>=14'}
peerDependencies: peerDependencies:
@ -5003,7 +4951,7 @@ packages:
vite: vite:
optional: true optional: true
dependencies: dependencies:
'@unocss/astro': 0.58.5(rollup@2.79.1)(vite@5.0.12) '@unocss/astro': 0.58.5(rollup@2.79.1)(vite@5.1.6)
'@unocss/cli': 0.58.5(rollup@2.79.1) '@unocss/cli': 0.58.5(rollup@2.79.1)
'@unocss/core': 0.58.5 '@unocss/core': 0.58.5
'@unocss/extractor-arbitrary-variants': 0.58.5 '@unocss/extractor-arbitrary-variants': 0.58.5
@ -5022,8 +4970,8 @@ packages:
'@unocss/transformer-compile-class': 0.58.5 '@unocss/transformer-compile-class': 0.58.5
'@unocss/transformer-directives': 0.58.5 '@unocss/transformer-directives': 0.58.5
'@unocss/transformer-variant-group': 0.58.5 '@unocss/transformer-variant-group': 0.58.5
'@unocss/vite': 0.58.5(rollup@2.79.1)(vite@5.0.12) '@unocss/vite': 0.58.5(rollup@2.79.1)(vite@5.1.6)
vite: 5.0.12(lightningcss@1.23.0)(terser@5.28.1) vite: 5.1.6(lightningcss@1.24.0)(terser@5.28.1)
transitivePeerDependencies: transitivePeerDependencies:
- postcss - postcss
- rollup - rollup
@ -5065,7 +5013,7 @@ packages:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: true dev: true
/vite-plugin-eslint@1.8.1(eslint@8.56.0)(vite@5.0.12): /vite-plugin-eslint@1.8.1(eslint@8.57.0)(vite@5.1.6):
resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
peerDependencies: peerDependencies:
eslint: '>=7' eslint: '>=7'
@ -5073,31 +5021,35 @@ packages:
dependencies: dependencies:
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
'@types/eslint': 8.56.3 '@types/eslint': 8.56.3
eslint: 8.56.0 eslint: 8.57.0
rollup: 2.79.1 rollup: 2.79.1
vite: 5.0.12(lightningcss@1.23.0)(terser@5.28.1) vite: 5.1.6(lightningcss@1.24.0)(terser@5.28.1)
dev: true dev: true
/vite-plugin-pwa@0.18.2(vite@5.0.12)(workbox-build@7.0.0)(workbox-window@7.0.0): /vite-plugin-pwa@0.19.2(vite@5.1.6)(workbox-build@7.0.0)(workbox-window@7.0.0):
resolution: {integrity: sha512-LVFHHLcRLkP7y5xwAqMmtWQhSw34V2+vk59c18fumejiQPUBar+Au1AnOcVr96hlEWLHXI6BM31QOHq+Rey4EA==} resolution: {integrity: sha512-LSQJFPxCAQYbRuSyc9EbRLRqLpaBA9onIZuQFomfUYjWSgHuQLonahetDlPSC9zsxmkSEhQH8dXZN8yL978h3w==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
peerDependencies: peerDependencies:
'@vite-pwa/assets-generator': ^0.2.4
vite: ^3.1.0 || ^4.0.0 || ^5.0.0 vite: ^3.1.0 || ^4.0.0 || ^5.0.0
workbox-build: ^7.0.0 workbox-build: ^7.0.0
workbox-window: ^7.0.0 workbox-window: ^7.0.0
peerDependenciesMeta:
'@vite-pwa/assets-generator':
optional: true
dependencies: dependencies:
debug: 4.3.4 debug: 4.3.4
fast-glob: 3.3.2 fast-glob: 3.3.2
pretty-bytes: 6.1.1 pretty-bytes: 6.1.1
vite: 5.0.12(lightningcss@1.23.0)(terser@5.28.1) vite: 5.1.6(lightningcss@1.24.0)(terser@5.28.1)
workbox-build: 7.0.0 workbox-build: 7.0.0
workbox-window: 7.0.0 workbox-window: 7.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/vite@5.0.12(lightningcss@1.23.0)(terser@5.28.1): /vite@5.1.6(lightningcss@1.24.0)(terser@5.28.1):
resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} resolution: {integrity: sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -5125,7 +5077,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
esbuild: 0.19.12 esbuild: 0.19.12
lightningcss: 1.23.0 lightningcss: 1.24.0
postcss: 8.4.35 postcss: 8.4.35
rollup: 4.12.0 rollup: 4.12.0
terser: 5.28.1 terser: 5.28.1
@ -5133,14 +5085,14 @@ packages:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true dev: true
/vue-eslint-parser@9.4.2(eslint@8.56.0): /vue-eslint-parser@9.4.2(eslint@8.57.0):
resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==}
engines: {node: ^14.17.0 || >=16.0.0} engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: '>=6.0.0' eslint: '>=6.0.0'
dependencies: dependencies:
debug: 4.3.4 debug: 4.3.4
eslint: 8.56.0 eslint: 8.57.0
eslint-scope: 7.2.2 eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
espree: 9.6.1 espree: 9.6.1
@ -5151,39 +5103,39 @@ packages:
- supports-color - supports-color
dev: true dev: true
/vue-i18n@9.9.1(vue@3.4.19): /vue-i18n@9.10.1(vue@3.4.21):
resolution: {integrity: sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==} resolution: {integrity: sha512-37HVJQZ/pZaRXGzFmmMomM1u1k7kndv3xCBPYHKEVfv5W3UVK67U/TpBug71ILYLNmjHLHdvTUPRF81pFT5fFg==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
peerDependencies: peerDependencies:
vue: ^3.0.0 vue: ^3.0.0
dependencies: dependencies:
'@intlify/core-base': 9.9.1 '@intlify/core-base': 9.10.1
'@intlify/shared': 9.9.1 '@intlify/shared': 9.10.1
'@vue/devtools-api': 6.6.1 '@vue/devtools-api': 6.6.1
vue: 3.4.19(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
/vue-router@4.2.5(vue@3.4.19): /vue-router@4.3.0(vue@3.4.21):
resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==} resolution: {integrity: sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==}
peerDependencies: peerDependencies:
vue: ^3.2.0 vue: ^3.2.0
dependencies: dependencies:
'@vue/devtools-api': 6.6.1 '@vue/devtools-api': 6.6.1
vue: 3.4.19(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
dev: false dev: false
/vue@3.4.19(typescript@5.3.3): /vue@3.4.21(typescript@5.3.3):
resolution: {integrity: sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==} resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@vue/compiler-dom': 3.4.19 '@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.19 '@vue/compiler-sfc': 3.4.21
'@vue/runtime-dom': 3.4.19 '@vue/runtime-dom': 3.4.21
'@vue/server-renderer': 3.4.19(vue@3.4.19) '@vue/server-renderer': 3.4.21(vue@3.4.21)
'@vue/shared': 3.4.19 '@vue/shared': 3.4.21
typescript: 5.3.3 typescript: 5.3.3
/webidl-conversions@4.0.2: /webidl-conversions@4.0.2:
@ -5461,7 +5413,3 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
dev: true dev: true
/zod@3.22.4:
resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
dev: true

View file

@ -6,14 +6,14 @@
</div> </div>
<p> <p>
<span v-text="item.name" /> <span v-text="item.name" />
<font-awesome-icon v-if="item.verified" class="ml-1.5" icon="check" /> <i v-if="item.verified" class="i-fa6-solid:check ml-1.5" />
</p> </p>
</router-link> </router-link>
<p v-if="item.description" v-text="item.description" /> <p v-if="item.description" v-text="item.description" />
<router-link v-if="item.uploaderUrl" class="link" :to="item.uploaderUrl"> <router-link v-if="item.uploaderUrl" class="link" :to="item.uploaderUrl">
<p> <p>
<span v-text="item.uploader" /> <span v-text="item.uploader" />
<font-awesome-icon v-if="item.uploaderVerified" class="ml-1.5" icon="check" /> <i v-if="item.uploaderVerified" class="i-fa6-solid:check ml-1.5" />
</p> </p>
</router-link> </router-link>

View file

@ -13,7 +13,7 @@
<img height="48" width="48" class="m-1 rounded-full" :src="channel.avatarUrl" /> <img height="48" width="48" class="m-1 rounded-full" :src="channel.avatarUrl" />
<div class="flex items-center gap-1"> <div class="flex items-center gap-1">
<h1 class="!text-xl" v-text="channel.name" /> <h1 class="!text-xl" v-text="channel.name" />
<font-awesome-icon v-if="channel.verified" class="!text-xl" icon="check" /> <i v-if="channel.verified" class="i-fa6-solid:check !text-xl" />
</div> </div>
</div> </div>
@ -45,7 +45,7 @@
target="_blank" target="_blank"
class="btn flex-col" class="btn flex-col"
> >
<font-awesome-icon icon="rss" /> <i class="i-fa6-solid:rss" />
</a> </a>
</div> </div>
</div> </div>
@ -213,8 +213,8 @@ export default {
case "playlists": case "playlists":
translatedTabName = this.$t("titles.playlists"); translatedTabName = this.$t("titles.playlists");
break; break;
case "channels": case "albums":
translatedTabName = this.$t("titles.channels"); translatedTabName = this.$t("titles.albums");
break; break;
case "shorts": case "shorts":
translatedTabName = this.$t("video.shorts"); translatedTabName = this.$t("video.shorts");

View file

@ -12,7 +12,7 @@
<div class="comment-content pl-2"> <div class="comment-content pl-2">
<div class="comment-header"> <div class="comment-header">
<div v-if="comment.pinned" class="comment-pinned"> <div v-if="comment.pinned" class="comment-pinned">
<font-awesome-icon icon="thumbtack" /> <i class="i-fa6-solid:thumbtack" />
<span <span
v-t="{ v-t="{
path: 'comment.pinned_by', path: 'comment.pinned_by',
@ -24,7 +24,7 @@
<div class="comment-author"> <div class="comment-author">
<router-link class="link font-bold" :to="comment.commentorUrl">{{ comment.author }}</router-link> <router-link class="link font-bold" :to="comment.commentorUrl">{{ comment.author }}</router-link>
<font-awesome-icon v-if="comment.verified" class="ml-1.5" icon="check" /> <i v-if="comment.verified" class="i-fa6-solid:check ml-1.5" />
</div> </div>
<div class="comment-meta mb-1.5 text-sm" v-text="comment.commentedTime" /> <div class="comment-meta mb-1.5 text-sm" v-text="comment.commentedTime" />
</div> </div>
@ -33,19 +33,19 @@
<div class="comment-footer my-1 flex items-center gap-3"> <div class="comment-footer my-1 flex items-center gap-3">
<div class="i-fa6-solid:thumbs-up" /> <div class="i-fa6-solid:thumbs-up" />
<span v-text="numberFormat(comment.likeCount)" /> <span v-text="numberFormat(comment.likeCount)" />
<font-awesome-icon v-if="comment.hearted" icon="heart" /> <i v-if="comment.hearted" class="i-fa6-solid:heart" />
<img v-if="comment.creatorReplied" :src="uploaderAvatarUrl" class="h-5 w-5 rounded-full" /> <img v-if="comment.creatorReplied" :src="uploaderAvatarUrl" class="h-5 w-5 rounded-full" />
</div> </div>
<template v-if="comment.repliesPage && (!loadingReplies || !showingReplies)"> <template v-if="comment.repliesPage && (!loadingReplies || !showingReplies)">
<div class="cursor-pointer" @click="loadReplies"> <div class="cursor-pointer" @click="loadReplies">
<a v-text="`${$t('actions.reply_count', comment.replyCount)}`" /> <a v-text="`${$t('actions.reply_count', comment.replyCount)}`" />
<font-awesome-icon class="ml-1.5" icon="level-down-alt" /> <i class="i-fa6-solid:level-down-alt ml-1.5" />
</div> </div>
</template> </template>
<template v-if="showingReplies"> <template v-if="showingReplies">
<div class="cursor-pointer" @click="hideReplies"> <div class="cursor-pointer" @click="hideReplies">
<a v-t="'actions.hide_replies'" /> <a v-t="'actions.hide_replies'" />
<font-awesome-icon class="ml-1.5" icon="level-up-alt" /> <i class="i-fa6-solid:level-up-alt ml-1.5" />
</div> </div>
</template> </template>
<div v-show="showingReplies" v-if="replies" class="replies"> <div v-show="showingReplies" v-if="replies" class="replies">
@ -54,7 +54,7 @@
</div> </div>
<div v-if="nextpage" class="cursor-pointer" @click="loadReplies"> <div v-if="nextpage" class="cursor-pointer" @click="loadReplies">
<a v-t="'actions.load_more_replies'" /> <a v-t="'actions.load_more_replies'" />
<font-awesome-icon class="ml-1.5" icon="level-down-alt" /> <i class="i-fa6-solid:level-down-alt ml-1.5" />
</div> </div>
</div> </div>
</div> </div>

View file

@ -41,7 +41,7 @@
<span class="flex gap-2"> <span class="flex gap-2">
<router-link v-t="'titles.subscriptions'" class="btn" to="/subscriptions" /> <router-link v-t="'titles.subscriptions'" class="btn" to="/subscriptions" />
<a :href="getRssUrl" class="btn"> <a :href="getRssUrl" class="btn">
<font-awesome-icon icon="rss" /> <i class="i-fa6-solid:rss" />
</a> </a>
</span> </span>
<hr /> <hr />

View file

@ -1,27 +1,27 @@
<template> <template>
<footer class="mt-10 w-full rounded-xl py-4 text-center children:(mx-3)"> <footer class="mt-10 w-full rounded-xl py-4 text-center children:(mx-3)">
<a aria-label="GitHub" href="https://github.com/TeamPiped/Piped" target="_blank"> <a aria-label="GitHub" href="https://github.com/TeamPiped/Piped" target="_blank">
<font-awesome-icon :icon="['fab', 'github']" /> <i class="i-fa6-brands:github" />
<span v-t="'actions.source_code'" class="ml-2" /> <span v-t="'actions.source_code'" class="ml-2" />
</a> </a>
<a href="https://docs.piped.video/" target="_blank"> <a href="https://docs.piped.video/" target="_blank">
<font-awesome-icon :icon="['fa', 'book']" /> <i class="i-fa6-solid:book" />
<span v-t="'actions.documentation'" class="ml-2" /> <span v-t="'actions.documentation'" class="ml-2" />
</a> </a>
<a href="https://github.com/TeamPiped/Piped#donations" target="_blank"> <a href="https://github.com/TeamPiped/Piped#donations" target="_blank">
<font-awesome-icon :icon="['fab', 'bitcoin']" /> <i class="i-fa6-brands:bitcoin" />
<span v-t="'actions.donations'" class="ml-2" /> <span v-t="'actions.donations'" class="ml-2" />
</a> </a>
<a v-if="statusPageHref" :href="statusPageHref"> <a v-if="statusPageHref" :href="statusPageHref">
<font-awesome-icon :icon="['fa', 'server']" /> <i class="i-fa6-solid:server" />
<span v-t="'actions.status_page'" class="ml-2" /> <span v-t="'actions.status_page'" class="ml-2" />
</a> </a>
<a v-if="donationHref" :href="donationHref"> <a v-if="donationHref" :href="donationHref">
<font-awesome-icon :icon="['fa', 'donate']" /> <i class="i-fa6-solid:donate" />
<span v-t="'actions.instance_donations'" class="ml-2" /> <span v-t="'actions.instance_donations'" class="ml-2" />
</a> </a>
<a v-if="privacyPolicyHref" :href="privacyPolicyHref" target="_blank"> <a v-if="privacyPolicyHref" :href="privacyPolicyHref" target="_blank">
<font-awesome-icon :icon="['fa', 'eye']" /> <i class="i-fa6-solid:eye" />
<span v-t="'actions.instance_privacy_policy'" class="ml-2" /> <span v-t="'actions.instance_privacy_policy'" class="ml-2" />
</a> </a>
</footer> </footer>

View file

@ -51,7 +51,7 @@ export default {
mounted() { mounted() {
//TODO: Add Server Side check //TODO: Add Server Side check
if (this.getAuthToken()) { if (this.getAuthToken()) {
this.$router.push("/"); this.$router.push(import.meta.env.BASE_URL);
} }
}, },
activated() { activated() {
@ -69,7 +69,7 @@ export default {
}).then(resp => { }).then(resp => {
if (resp.token) { if (resp.token) {
this.setPreference("authToken" + this.hashCode(this.authApiUrl()), resp.token); this.setPreference("authToken" + this.hashCode(this.authApiUrl()), resp.token);
window.location = "/"; // done to bypass cache window.location = import.meta.env.BASE_URL; // done to bypass cache
} else alert(resp.error); } else alert(resp.error);
}); });
}, },

View file

@ -2,7 +2,7 @@
<div class="modal"> <div class="modal">
<div @click="handleClick"> <div @click="handleClick">
<div class="modal-container"> <div class="modal-container">
<button @click="$emit('close')"><font-awesome-icon icon="xmark" /></button> <button @click="$emit('close')"><i class="i-fa6-solid:xmark" /></button>
<slot></slot> <slot></slot>
</div> </div>
</div> </div>

View file

@ -131,7 +131,7 @@ export default {
searchText: "", searchText: "",
suggestionsVisible: false, suggestionsVisible: false,
showTopNav: false, showTopNav: false,
homePagePath: "/", homePagePath: import.meta.env.BASE_URL,
registrationDisabled: false, registrationDisabled: false,
}; };
}, },

View file

@ -1,7 +1,11 @@
<script setup>
const homeUrl = import.meta.env.BASE_URL;
</script>
<template> <template>
<div class="min-h-[88vh] flex flex-col items-center justify-center"> <div class="min-h-[88vh] flex flex-col items-center justify-center">
<h1 class="font-bold !text-9xl">404</h1> <h1 class="font-bold !text-9xl">404</h1>
<h2 v-t="'info.page_not_found'" class="!text-2xl" /> <h2 v-t="'info.page_not_found'" class="!text-2xl" />
<a v-t="'actions.back_to_home'" class="btn mt-16" href="/" /> <a v-t="'actions.back_to_home'" class="btn mt-16" :href="homeUrl" />
</div> </div>
</template> </template>

View file

@ -6,7 +6,7 @@
</div> </div>
<p> <p>
<span v-text="props.item.name" /> <span v-text="props.item.name" />
<font-awesome-icon v-if="props.item.verified" class="ml-1.5" icon="check" /> <i v-if="props.item.verified" class="i-fa6-solid:check ml-1.5" />
</p> </p>
</router-link> </router-link>
<p v-if="props.item.description" v-text="props.item.description" /> <p v-if="props.item.description" v-text="props.item.description" />
@ -14,7 +14,7 @@
<router-link v-if="props.item.uploaderUrl" class="link" :to="props.item.uploaderUrl"> <router-link v-if="props.item.uploaderUrl" class="link" :to="props.item.uploaderUrl">
<p> <p>
<span v-text="props.item.uploaderName" /> <span v-text="props.item.uploaderName" />
<font-awesome-icon v-if="props.item.uploaderVerified" class="ml-1.5" icon="check" /> <i v-if="props.item.uploaderVerified" class="i-fa6-solid:check ml-1.5" />
</p> </p>
</router-link> </router-link>
<a v-else-if="props.item.uploaderName" class="link" v-text="props.item.uploaderName" /> <a v-else-if="props.item.uploaderName" class="link" v-text="props.item.uploaderName" />

View file

@ -17,16 +17,16 @@
<strong class="mr-2" v-text="`${playlist.videos} ${$t('video.videos')}`" /> <strong class="mr-2" v-text="`${playlist.videos} ${$t('video.videos')}`" />
<button v-if="!isPipedPlaylist" class="btn mx-1" @click="bookmarkPlaylist"> <button v-if="!isPipedPlaylist" class="btn mx-1" @click="bookmarkPlaylist">
{{ $t(`actions.${isBookmarked ? "playlist_bookmarked" : "bookmark_playlist"}`) {{ $t(`actions.${isBookmarked ? "playlist_bookmarked" : "bookmark_playlist"}`)
}}<font-awesome-icon class="ml-3" icon="bookmark" /> }}<i class="i-fa6-solid:bookmark ml-3" />
</button> </button>
<button v-if="authenticated && !isPipedPlaylist" class="btn mr-1" @click="clonePlaylist"> <button v-if="authenticated && !isPipedPlaylist" class="btn mr-1" @click="clonePlaylist">
{{ $t("actions.clone_playlist") }}<font-awesome-icon class="ml-3" icon="clone" /> {{ $t("actions.clone_playlist") }}<i class="i-fa6-solid:clone ml-3" />
</button> </button>
<button class="btn mr-1" @click="downloadPlaylistAsTxt"> <button class="btn mr-1" @click="downloadPlaylistAsTxt">
{{ $t("actions.download_as_txt") }} {{ $t("actions.download_as_txt") }}
</button> </button>
<a class="btn mr-1" :href="getRssUrl"> <a class="btn mr-1" :href="getRssUrl">
<font-awesome-icon icon="rss" /> <i class="i-fa6-solid:rss" />
</a> </a>
<WatchOnButton :link="`https://www.youtube.com/playlist?list=${$route.query.list}`" /> <WatchOnButton :link="`https://www.youtube.com/playlist?list=${$route.query.list}`" />
</div> </div>

View file

@ -76,7 +76,7 @@
<div class="relative text-sm"> <div class="relative text-sm">
<span class="thumbnail-overlay thumbnail-right" v-text="`${playlist.videos} ${$t('video.videos')}`" /> <span class="thumbnail-overlay thumbnail-right" v-text="`${playlist.videos} ${$t('video.videos')}`" />
<div class="absolute bottom-100px right-5px z-100 px-5px" @click.prevent="removeBookmark(index)"> <div class="absolute bottom-100px right-5px z-100 px-5px" @click.prevent="removeBookmark(index)">
<font-awesome-icon class="ml-3" icon="bookmark" /> <i class="i-fa6-solid:bookmark ml-3" />
</div> </div>
</div> </div>
<p <p

View file

@ -1,7 +1,7 @@
<template> <template>
<div class="flex"> <div class="flex">
<button @click="$router.go(-1) || $router.push('/')"> <button @click="$router.go(-1) || $router.push('/')">
<font-awesome-icon icon="chevron-left" /><span v-t="'actions.back'" class="ml-1.5" /> <i class="i-fa6-solid:chevron-left" /><span v-t="'actions.back'" class="ml-1.5" />
</button> </button>
</div> </div>
<h1 v-t="'titles.preferences'" class="text-center font-bold" /> <h1 v-t="'titles.preferences'" class="text-center font-bold" />
@ -504,7 +504,7 @@ export default {
async mounted() { async mounted() {
if (Object.keys(this.$route.query).length > 0) this.$router.replace({ query: {} }); if (Object.keys(this.$route.query).length > 0) this.$router.replace({ query: {} });
this.fetchJson("https://piped-instances.kavin.rocks/").then(resp => { this.fetchJson(import.meta.env.VITE_PIPED_INSTANCES).then(resp => {
this.instances = resp; this.instances = resp;
if (!this.instances.some(instance => instance.api_url == this.apiUrl())) if (!this.instances.some(instance => instance.api_url == this.apiUrl()))
this.instances.push({ this.instances.push({
@ -517,7 +517,7 @@ export default {
}); });
if (this.testLocalStorage) { if (this.testLocalStorage) {
this.selectedInstance = this.getPreferenceString("instance", "https://pipedapi.kavin.rocks"); this.selectedInstance = this.getPreferenceString("instance", import.meta.env.VITE_PIPED_API);
this.authInstance = this.getPreferenceBoolean("authInstance", false); this.authInstance = this.getPreferenceBoolean("authInstance", false);
this.selectedAuthInstance = this.getPreferenceString("auth_instance_url", this.selectedInstance); this.selectedAuthInstance = this.getPreferenceString("auth_instance_url", this.selectedInstance);
@ -655,14 +655,14 @@ export default {
// reset the auth token // reset the auth token
localStorage.removeItem("authToken" + this.hashCode(this.authApiUrl())); localStorage.removeItem("authToken" + this.hashCode(this.authApiUrl()));
// redirect to trending page // redirect to trending page
window.location = "/"; window.location = import.meta.env.BASE_URL;
}, },
resetPreferences() { resetPreferences() {
this.showConfirmResetPrefsDialog = false; this.showConfirmResetPrefsDialog = false;
// clear the local storage // clear the local storage
localStorage.clear(); localStorage.clear();
// redirect to the home page // redirect to the home page
window.location = "/"; window.location = import.meta.env.BASE_URL;
}, },
async invalidateSession() { async invalidateSession() {
this.fetchJson(this.authApiUrl() + "/logout", null, { this.fetchJson(this.authApiUrl() + "/logout", null, {

View file

@ -83,7 +83,7 @@ export default {
mounted() { mounted() {
//TODO: Add Server Side check //TODO: Add Server Side check
if (this.getAuthToken()) { if (this.getAuthToken()) {
this.$router.push("/"); this.$router.push(import.meta.env.BASE_URL);
} }
}, },
activated() { activated() {
@ -109,7 +109,7 @@ export default {
}).then(resp => { }).then(resp => {
if (resp.token) { if (resp.token) {
this.setPreference("authToken" + this.hashCode(this.authApiUrl()), resp.token); this.setPreference("authToken" + this.hashCode(this.authApiUrl()), resp.token);
window.location = "/"; // done to bypass cache window.location = import.meta.env.BASE_URL; // done to bypass cache
} else alert(resp.error); } else alert(resp.error);
}); });
}, },

View file

@ -52,12 +52,12 @@
> >
<span v-text="group.groupName !== '' ? group.groupName : $t('video.all')" /> <span v-text="group.groupName !== '' ? group.groupName : $t('video.all')" />
<div v-if="group.groupName != '' && selectedGroup == group"> <div v-if="group.groupName != '' && selectedGroup == group">
<font-awesome-icon class="mx-2" icon="edit" @click="showEditGroupModal = true" /> <i class="i-fa6-solid:edit mx-2" @click="showEditGroupModal = true" />
<font-awesome-icon class="mx-2" icon="circle-minus" @click="deleteGroup(group)" /> <i class="i-fa6-solid:circle-minus mx-2" @click="deleteGroup(group)" />
</div> </div>
</button> </button>
<button class="btn mx-1" @click="showCreateGroupModal = true"> <button class="btn mx-1" @click="showCreateGroupModal = true">
<font-awesome-icon icon="circle-plus" /> <i class="i-fa6-solid:circle-plus" />
</button> </button>
</div> </div>
<br /> <br />

View file

@ -23,7 +23,12 @@ export default {
}; };
}, },
mounted() { mounted() {
if (this.$route.path == "/" && this.getPreferenceString("homepage", "trending") == "feed") return; if (
this.$route.path == import.meta.env.BASE_URL &&
this.getPreferenceString("homepage", "trending") == "feed"
) {
return;
}
let region = this.getPreferenceString("region", "US"); let region = this.getPreferenceString("region", "US");
this.fetchTrending(region).then(videos => { this.fetchTrending(region).then(videos => {
@ -35,7 +40,7 @@ export default {
activated() { activated() {
document.title = this.$t("titles.trending") + " - Piped"; document.title = this.$t("titles.trending") + " - Piped";
if (this.videos.length > 0) this.updateWatched(this.videos); if (this.videos.length > 0) this.updateWatched(this.videos);
if (this.$route.path == "/") { if (this.$route.path == import.meta.env.BASE_URL) {
let homepage = this.getHomePage(this); let homepage = this.getHomePage(this);
if (homepage !== undefined) this.$router.push(homepage); if (homepage !== undefined) this.$router.push(homepage);
} }

View file

@ -44,7 +44,7 @@
v-text="timeFormat(item.duration)" v-text="timeFormat(item.duration)"
/> />
<i18n-t v-else keypath="video.live" class="thumbnail-overlay thumbnail-right !bg-red-600" tag="div"> <i18n-t v-else keypath="video.live" class="thumbnail-overlay thumbnail-right !bg-red-600" tag="div">
<font-awesome-icon class="w-3" :icon="['fas', 'broadcast-tower']" /> <i class="i-fa6-solid:tower-broadcast w-3" />
</i18n-t> </i18n-t>
<span v-if="item.watched" v-t="'video.watched'" class="thumbnail-overlay bottom-5px left-5px" /> <span v-if="item.watched" v-t="'video.watched'" class="thumbnail-overlay bottom-5px left-5px" />
</div> </div>
@ -79,12 +79,12 @@
:title="item.uploaderName" :title="item.uploaderName"
> >
<span v-text="item.uploaderName" /> <span v-text="item.uploaderName" />
<font-awesome-icon v-if="item.uploaderVerified" class="ml-1.5" icon="check" /> <i v-if="item.uploaderVerified" class="i-fa6-solid:check ml-1.5" />
</router-link> </router-link>
<div v-if="item.views >= 0 || item.uploadedDate" class="mt-1 text-xs text-gray-300 font-normal"> <div v-if="item.views >= 0 || item.uploadedDate" class="mt-1 text-xs text-gray-300 font-normal">
<span v-if="item.views >= 0"> <span v-if="item.views >= 0">
<font-awesome-icon icon="eye" /> <i class="i-fa6-solid:eye" />
<span class="pl-1" v-text="`${numberFormat(item.views)} •`" /> <span class="pl-1" v-text="`${numberFormat(item.views)} •`" />
</span> </span>
<span v-if="item.uploaded > 0" class="pl-0.5" v-text="timeAgo(item.uploaded)" /> <span v-if="item.uploaded > 0" class="pl-0.5" v-text="timeAgo(item.uploaded)" />
@ -106,13 +106,13 @@
:aria-label="preferListen ? title : 'Listen to ' + title" :aria-label="preferListen ? title : 'Listen to ' + title"
:title="preferListen ? title : 'Listen to ' + title" :title="preferListen ? title : 'Listen to ' + title"
> >
<font-awesome-icon :icon="preferListen ? 'tv' : 'headphones'" /> <font-awesome-icon :icon="preferListen ? 'i-fa6-solid:tv' : 'i-fa6-solid:headphones'" />
</router-link> </router-link>
<button :title="$t('actions.add_to_playlist')" @click="showPlaylistModal = !showPlaylistModal"> <button :title="$t('actions.add_to_playlist')" @click="showPlaylistModal = !showPlaylistModal">
<font-awesome-icon icon="circle-plus" /> <i class="i-fa6-solid:circle-plus" />
</button> </button>
<button :title="$t('actions.share')" @click="showShareModal = !showShareModal"> <button :title="$t('actions.share')" @click="showShareModal = !showShareModal">
<font-awesome-icon icon="share" /> <i class="i-fa6-solid:share" />
</button> </button>
<button <button
v-if="admin" v-if="admin"
@ -120,7 +120,7 @@
:title="$t('actions.remove_from_playlist')" :title="$t('actions.remove_from_playlist')"
@click="showConfirmRemove = true" @click="showConfirmRemove = true"
> >
<font-awesome-icon icon="circle-minus" /> <i class="i-fa6-solid:circle-minus" />
</button> </button>
<ConfirmModal <ConfirmModal
v-if="showConfirmRemove" v-if="showConfirmRemove"

View file

@ -19,11 +19,13 @@ export default {
<!-- For large screens --> <!-- For large screens -->
<a :href="link" class="btn flex items-center lt-lg:hidden"> <a :href="link" class="btn flex items-center lt-lg:hidden">
<i18n-t keypath="player.watch_on" tag="strong">{{ platform }}</i18n-t> <i18n-t keypath="player.watch_on" tag="strong">{{ platform }}</i18n-t>
<font-awesome-icon class="mx-1.5" :icon="['fab', platform.toLowerCase()]" /> <i v-if="platform == 'YouTube'" class="i-fa6-brands:youtube mx-1.5" />
<i v-else-if="platform == 'Odysee'" class="i-fa6-brands:odysee mx-1.5" />
</a> </a>
<!-- For small screens --> <!-- For small screens -->
<a :href="link" class="btn flex items-center lg:hidden"> <a :href="link" class="btn flex items-center lg:hidden">
<font-awesome-icon class="mx-1.5" :icon="['fab', platform.toLowerCase()]" /> <i v-if="platform == 'YouTube'" class="i-fa6-brands:youtube mx-1.5" />
<i v-else-if="platform == 'Odysee'" class="i-fa6-brands:odysee mx-1.5" />
</a> </a>
</template> </template>
</template> </template>

View file

@ -84,7 +84,7 @@
video.uploader video.uploader
}}</router-link> }}</router-link>
<!-- Verified Badge --> <!-- Verified Badge -->
<font-awesome-icon v-if="video.uploaderVerified" class="ml-1" icon="check" /> <i v-if="video.uploaderVerified" class="i-fa6-solid:check ml-1" />
</div> </div>
<PlaylistAddModal <PlaylistAddModal
v-if="showModal" v-if="showModal"
@ -106,7 +106,7 @@
{{ $t("actions.download_frame") }}<i class="i-fa6-solid:download" /> {{ $t("actions.download_frame") }}<i class="i-fa6-solid:download" />
</button> </button>
<button class="btn flex items-center" @click="showModal = !showModal"> <button class="btn flex items-center" @click="showModal = !showModal">
{{ $t("actions.add_to_playlist") }}<font-awesome-icon class="ml-1" icon="circle-plus" /> {{ $t("actions.add_to_playlist") }}<i class="i-fa6-solid:circle-plus ml-1" />
</button> </button>
<button <button
class="btn" class="btn"
@ -128,12 +128,12 @@
target="_blank" target="_blank"
class="btn flex items-center" class="btn flex items-center"
> >
<font-awesome-icon class="mx-1.5" icon="rss" /> <i class="i-fa6-solid:rss mx-1.5" />
</a> </a>
<!-- Share Dialog --> <!-- Share Dialog -->
<button class="btn flex items-center" @click="showShareModal = !showShareModal"> <button class="btn flex items-center" @click="showShareModal = !showShareModal">
<i18n-t class="lt-lg:hidden" keypath="actions.share" tag="strong"></i18n-t> <i18n-t class="lt-lg:hidden" keypath="actions.share" tag="strong"></i18n-t>
<font-awesome-icon class="mx-1.5" icon="fa-share" /> <i class="i-fa6-solid:share mx-1.5" />
</button> </button>
<!-- YouTube --> <!-- YouTube -->
<WatchOnButton :link="`https://youtu.be/${getVideoId()}`" /> <WatchOnButton :link="`https://youtu.be/${getVideoId()}`" />
@ -150,7 +150,7 @@
:title="(isListening ? 'Watch ' : 'Listen to ') + video.title" :title="(isListening ? 'Watch ' : 'Listen to ') + video.title"
class="btn flex items-center" class="btn flex items-center"
> >
<font-awesome-icon class="mx-1.5" :icon="isListening ? 'tv' : 'headphones'" /> <i :class="isListening ? 'i-fa6-solid:tv' : 'i-fa6-solid:headphones'" class="mx-1.5" />
</router-link> </router-link>
</div> </div>
</div> </div>

View file

@ -15,7 +15,8 @@
"channels": "القنوات", "channels": "القنوات",
"bookmarks": "الإشارات المرجعية", "bookmarks": "الإشارات المرجعية",
"channel_groups": "مجموعات القنوات", "channel_groups": "مجموعات القنوات",
"dearrow": "دي ارو" "dearrow": "دي ارو",
"albums": "الألبومات"
}, },
"player": { "player": {
"watch_on": "مشاهدة على {0}", "watch_on": "مشاهدة على {0}",

View file

@ -15,7 +15,8 @@
"channels": "Kanály", "channels": "Kanály",
"bookmarks": "Záložky", "bookmarks": "Záložky",
"channel_groups": "Skupiny kanálů", "channel_groups": "Skupiny kanálů",
"dearrow": "DeArrow" "dearrow": "DeArrow",
"albums": "Alba"
}, },
"actions": { "actions": {
"loop_this_video": "Přehrávat video ve smyčce", "loop_this_video": "Přehrávat video ve smyčce",

View file

@ -13,6 +13,7 @@
"player": "Player", "player": "Player",
"livestreams": "Livestreams", "livestreams": "Livestreams",
"channels": "Channels", "channels": "Channels",
"albums": "Albums",
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"channel_groups": "Channel groups", "channel_groups": "Channel groups",
"dearrow": "DeArrow" "dearrow": "DeArrow"

View file

@ -178,7 +178,8 @@
"channels": "Canales", "channels": "Canales",
"bookmarks": "Marcadores", "bookmarks": "Marcadores",
"channel_groups": "Grupos de canales", "channel_groups": "Grupos de canales",
"dearrow": "DeArrow" "dearrow": "DeArrow",
"albums": "Álbumes"
}, },
"player": { "player": {
"watch_on": "Ver en {0}", "watch_on": "Ver en {0}",

View file

@ -148,7 +148,9 @@
"import_from_json_csv": "Impor dari JSON/CSV", "import_from_json_csv": "Impor dari JSON/CSV",
"download_frame": "Unduh bingkai", "download_frame": "Unduh bingkai",
"instance_privacy_policy": "Kebijakan Privasi", "instance_privacy_policy": "Kebijakan Privasi",
"add_to_group": "Tambahkan ke grup" "add_to_group": "Tambahkan ke grup",
"concurrent_prefetch_limit": "Batasan Concurrent Stream Prefetch",
"instances_not_shown": "Instance publik yang tidak ditampilkan disini saat ini tidak tersedia."
}, },
"comment": { "comment": {
"pinned_by": "Dipasangi pin oleh {author}", "pinned_by": "Dipasangi pin oleh {author}",
@ -163,7 +165,8 @@
"has_cdn": "Memakai CDN?", "has_cdn": "Memakai CDN?",
"up_to_date": "Sudah terkini?", "up_to_date": "Sudah terkini?",
"version": "Versi", "version": "Versi",
"registered_users": "Pengguna Terdaftar" "registered_users": "Pengguna Terdaftar",
"uptime_30d": "Waktu aktif (30hari)"
}, },
"login": { "login": {
"username": "Nama Pengguna", "username": "Nama Pengguna",

View file

@ -15,7 +15,8 @@
"channels": "Kanały", "channels": "Kanały",
"bookmarks": "Zakładki", "bookmarks": "Zakładki",
"channel_groups": "Grupy kanałów", "channel_groups": "Grupy kanałów",
"dearrow": "DeArrow" "dearrow": "DeArrow",
"albums": "Albumy"
}, },
"player": { "player": {
"watch_on": "Zobacz na {0}", "watch_on": "Zobacz na {0}",

View file

@ -146,7 +146,8 @@
"livestreams": "Transmissões ao vivo", "livestreams": "Transmissões ao vivo",
"bookmarks": "Favoritos", "bookmarks": "Favoritos",
"channel_groups": "Grupos de Canais", "channel_groups": "Grupos de Canais",
"dearrow": "DeArrow" "dearrow": "DeArrow",
"albums": "Álbuns"
}, },
"player": { "player": {
"watch_on": "Ver em {0}", "watch_on": "Ver em {0}",

View file

@ -150,7 +150,8 @@
"channels": "Kanallar", "channels": "Kanallar",
"bookmarks": "Yer İmleri", "bookmarks": "Yer İmleri",
"channel_groups": "Kanal grupları", "channel_groups": "Kanal grupları",
"dearrow": "DeArrow" "dearrow": "DeArrow",
"albums": "Albümler"
}, },
"video": { "video": {
"sponsor_segments": "Sponsorlar Bölümleri", "sponsor_segments": "Sponsorlar Bölümleri",

View file

@ -182,7 +182,8 @@
"channels": "频道", "channels": "频道",
"bookmarks": "书签", "bookmarks": "书签",
"channel_groups": "频道组", "channel_groups": "频道组",
"dearrow": "DeArrow" "dearrow": "DeArrow",
"albums": "专辑"
}, },
"login": { "login": {
"password": "密码", "password": "密码",

View file

@ -1,58 +1,4 @@
import { createApp } from "vue"; import { createApp } from "vue";
import { library } from "@fortawesome/fontawesome-svg-core";
import {
faEye,
faThumbtack,
faCheck,
faHeart,
faHeadphones,
faRss,
faChevronLeft,
faLevelDownAlt,
faTv,
faLevelUpAlt,
faBroadcastTower,
faCirclePlus,
faCircleMinus,
faXmark,
faClone,
faShare,
faBook,
faServer,
faDonate,
faBookmark,
faEdit,
} from "@fortawesome/free-solid-svg-icons";
import { faGithub, faBitcoin, faYoutube, faOdysee } from "@fortawesome/free-brands-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
library.add(
faEye,
faGithub,
faBitcoin,
faThumbtack,
faCheck,
faHeart,
faHeadphones,
faYoutube,
faOdysee,
faRss,
faChevronLeft,
faLevelDownAlt,
faLevelUpAlt,
faTv,
faBroadcastTower,
faCirclePlus,
faCircleMinus,
faXmark,
faClone,
faShare,
faBook,
faServer,
faDonate,
faBookmark,
faEdit,
);
import router from "@/router/router.js"; import router from "@/router/router.js";
import App from "./App.vue"; import App from "./App.vue";
@ -171,7 +117,7 @@ const mixin = {
} else return defaultVal; } else return defaultVal;
}, },
apiUrl() { apiUrl() {
return this.getPreferenceString("instance", "https://pipedapi.kavin.rocks"); return this.getPreferenceString("instance", import.meta.env.VITE_PIPED_API);
}, },
authApiUrl() { authApiUrl() {
if (this.getPreferenceBoolean("authInstance", false)) { if (this.getPreferenceBoolean("authInstance", false)) {
@ -401,7 +347,7 @@ const mixin = {
id: playlistId, id: playlistId,
name: name, name: name,
description: "", description: "",
thumbnail: "https://pipedproxy.kavin.rocks/?host=i.ytimg.com", thumbnail: import.meta.env.VITE_PIPED_PROXY + "/?host=i.ytimg.com",
videoIds: "[]", // empty list videoIds: "[]", // empty list
}); });
return { playlistId: playlistId }; return { playlistId: playlistId };
@ -525,7 +471,7 @@ const mixin = {
const videoIds = JSON.parse(playlist.videoIds); const videoIds = JSON.parse(playlist.videoIds);
videoIds.splice(index, 1); videoIds.splice(index, 1);
playlist.videoIds = JSON.stringify(videoIds); playlist.videoIds = JSON.stringify(videoIds);
if (videoIds.length == 0) playlist.thumbnail = "https://pipedproxy.kavin.rocks/?host=i.ytimg.com"; if (videoIds.length == 0) playlist.thumbnail = import.meta.env.VITE_PIPED_PROXY + "/?host=i.ytimg.com";
this.createOrUpdateLocalPlaylist(playlist); this.createOrUpdateLocalPlaylist(playlist);
return { message: "ok" }; return { message: "ok" };
} }
@ -657,5 +603,4 @@ const app = createApp(App);
app.use(i18n); app.use(i18n);
app.use(router); app.use(router);
app.mixin(mixin); app.mixin(mixin);
app.component("FontAwesomeIcon", FontAwesomeIcon);
app.mount("#app"); app.mount("#app");

View file

@ -12,7 +12,12 @@ export default defineConfig({
presetUno({ presetUno({
dark: "media", dark: "media",
}), }),
presetIcons(), presetIcons({
extraProperties: {
display: "inline-block",
"vertical-align": "middle",
},
}),
presetWebFonts({ presetWebFonts({
provider: "none", provider: "none",
fonts: { fonts: {

View file

@ -21,7 +21,13 @@ export default defineConfig({
VitePWA({ VitePWA({
registerType: "autoUpdate", registerType: "autoUpdate",
workbox: { workbox: {
globPatterns: ["**/*.{js,css,html,ico,svg,png}", "manifest.webmanifest"], globPatterns: [
"**/*.{css,html}",
"**/[A-Z]*.js",
"**/index*.js",
"**/shaka-player*.js",
"manifest.webmanifest",
],
globIgnores: ["**/*-legacy-*.js"], globIgnores: ["**/*-legacy-*.js"],
runtimeCaching: [ runtimeCaching: [
{ {