Merge branch 'development' into piped-support

This commit is contained in:
ChunkyProgrammer 2023-12-18 13:57:23 -05:00
commit 25846f8c02
31 changed files with 1340 additions and 384 deletions

View File

@ -1,19 +1,8 @@
'PR: waiting for review':
- '*'
- '.babelrc'
- '.editorconfig'
- '.eslintignore'
- '.eslintrc.js'
- '.gitignore'
- '.prettierrc'
- '.whitesource'
- '.github/**/*'
- '.vscode/**/*'
- '_icons/**/*'
- '_scripts/**/*'
- 'src/**/*'
- 'static/**/*'
- changed-files:
- any-glob-to-any-file: '**'
'PR: dependencies':
- 'yarn.lock'
- 'package.json'
- any:
- changed-files:
- any-glob-to-any-file: ['yarn.lock', 'package.json']

View File

@ -31,7 +31,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@ -45,7 +45,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@ -58,6 +58,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"

View File

@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ !github.event.pull_request.draft }}
steps:
- uses: actions/labeler@v4
- uses: actions/labeler@v5
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
configuration-path: .github/pr-labeler.yml

View File

@ -11,7 +11,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
- uses: actions/stale@v9
with:
stale-issue-message: 'This issue is stale because it has been open 28 days with no activity. Remove stale label or comment or this will be closed in 7 days.'
stale-pr-message: 'This PR is stale because it has been open 28 days with no activity. Remove stale label or comment or this will be closed in 14 days.'

View File

@ -1,9 +1,9 @@
const os = require('os')
const builder = require('electron-builder')
const config = require('./ebuilder.config.js')
const Platform = builder.Platform
const Arch = builder.Arch
const { name, productName } = require('../package.json')
const args = process.argv
let targets
@ -39,97 +39,6 @@ if (platform === 'darwin') {
targets = Platform.LINUX.createTarget(['deb', 'zip', '7z', 'apk', 'rpm', 'AppImage', 'pacman'], arch)
}
const config = {
appId: `io.freetubeapp.${name}`,
copyright: 'Copyleft © 2020-2023 freetubeapp@protonmail.com',
// asar: false,
// compression: 'store',
productName,
directories: {
output: './build/',
},
protocols: [
{
name: "FreeTube",
schemes: [
"freetube"
]
}
],
files: [
'_icons/iconColor.*',
'icon.svg',
'./dist/**/*',
'!dist/web/*',
'!node_modules/**/*',
],
dmg: {
contents: [
{
path: '/Applications',
type: 'link',
x: 410,
y: 230,
},
{
type: 'file',
x: 130,
y: 230,
},
],
window: {
height: 380,
width: 540,
}
},
linux: {
category: 'Network',
icon: '_icons/icon.svg',
target: ['deb', 'zip', '7z', 'apk', 'rpm', 'AppImage', 'pacman'],
},
// See the following issues for more information
// https://github.com/jordansissel/fpm/issues/1503
// https://github.com/jgraph/drawio-desktop/issues/259
rpm: {
fpm: [`--rpm-rpmbuild-define=_build_id_links none`]
},
deb: {
depends: [
"libgtk-3-0",
"libnotify4",
"libnss3",
"libxss1",
"libxtst6",
"xdg-utils",
"libatspi2.0-0",
"libuuid1",
"libsecret-1-0"
]
},
mac: {
category: 'public.app-category.utilities',
icon: '_icons/iconMac.icns',
target: ['dmg', 'zip', '7z'],
type: 'distribution',
extendInfo: {
CFBundleURLTypes: [
'freetube'
],
CFBundleURLSchemes: [
'freetube'
]
}
},
win: {
icon: '_icons/icon.ico',
target: ['nsis', 'zip', '7z', 'portable'],
},
nsis: {
allowToChangeInstallationDirectory: true,
oneClick: false,
},
}
builder
.build({
targets,

View File

@ -0,0 +1,94 @@
const { name, productName } = require('../package.json')
const config = {
appId: `io.freetubeapp.${name}`,
copyright: 'Copyleft © 2020-2023 freetubeapp@protonmail.com',
// asar: false,
// compression: 'store',
productName,
directories: {
output: './build/',
},
protocols: [
{
name: "FreeTube",
schemes: [
"freetube"
]
}
],
files: [
'_icons/iconColor.*',
'icon.svg',
'./dist/**/*',
'!dist/web/*',
'!node_modules/**/*',
],
dmg: {
contents: [
{
path: '/Applications',
type: 'link',
x: 410,
y: 230,
},
{
type: 'file',
x: 130,
y: 230,
},
],
window: {
height: 380,
width: 540,
}
},
linux: {
category: 'Network',
icon: '_icons/icon.svg',
target: ['deb', 'zip', '7z', 'apk', 'rpm', 'AppImage', 'pacman'],
},
// See the following issues for more information
// https://github.com/jordansissel/fpm/issues/1503
// https://github.com/jgraph/drawio-desktop/issues/259
rpm: {
fpm: [`--rpm-rpmbuild-define=_build_id_links none`]
},
deb: {
depends: [
"libgtk-3-0",
"libnotify4",
"libnss3",
"libxss1",
"libxtst6",
"xdg-utils",
"libatspi2.0-0",
"libuuid1",
"libsecret-1-0"
]
},
mac: {
category: 'public.app-category.utilities',
icon: '_icons/iconMac.icns',
target: ['dmg', 'zip', '7z'],
type: 'distribution',
extendInfo: {
CFBundleURLTypes: [
'freetube'
],
CFBundleURLSchemes: [
'freetube'
]
}
},
win: {
icon: '_icons/icon.ico',
target: ['nsis', 'zip', '7z', 'portable'],
},
nsis: {
allowToChangeInstallationDirectory: true,
oneClick: false,
},
}
module.exports = config

View File

@ -7,6 +7,7 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
const WatchExternalFilesPlugin = require('webpack-watch-external-files-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const isDevMode = process.env.NODE_ENV === 'development'
@ -131,6 +132,18 @@ const config = {
filename: isDevMode ? '[name].css' : '[name].[contenthash].css',
chunkFilename: isDevMode ? '[id].css' : '[id].[contenthash].css',
}),
new CopyWebpackPlugin({
patterns: [
{
from: path.join(__dirname, '../node_modules/swiper/modules/{a11y,navigation,pagination}-element.css').replaceAll('\\', '/'),
to: 'swiper.css',
context: path.join(__dirname, '../node_modules/swiper/modules'),
transformAll: (assets) => {
return Buffer.concat(assets.map(asset => asset.data))
}
}
]
})
],
resolve: {
alias: {

View File

@ -140,6 +140,18 @@ const config = {
new MiniCssExtractPlugin({
filename: isDevMode ? '[name].css' : '[name].[contenthash].css',
chunkFilename: isDevMode ? '[id].css' : '[id].[contenthash].css',
}),
new CopyWebpackPlugin({
patterns: [
{
from: path.join(__dirname, '../node_modules/swiper/modules/{a11y,navigation,pagination}-element.css').replaceAll('\\', '/'),
to: 'swiper.css',
context: path.join(__dirname, '../node_modules/swiper/modules'),
transformAll: (assets) => {
return Buffer.concat(assets.map(asset => asset.data))
}
}
]
})
],
resolve: {

View File

@ -57,14 +57,15 @@
"@fortawesome/free-brands-svg-icons": "^6.5.1",
"@fortawesome/free-solid-svg-icons": "^6.5.1",
"@fortawesome/vue-fontawesome": "^2.0.10",
"@seald-io/nedb": "^4.0.2",
"@seald-io/nedb": "^4.0.3",
"@silvermine/videojs-quality-selector": "^1.3.1",
"autolinker": "^4.0.0",
"electron-context-menu": "^3.6.1",
"lodash.debounce": "^4.0.8",
"marked": "^11.0.0",
"marked": "^11.1.0",
"path-browserify": "^1.0.1",
"process": "^0.11.10",
"swiper": "^11.0.5",
"video.js": "7.21.5",
"videojs-contrib-quality-levels": "^3.0.0",
"videojs-http-source-selector": "^1.1.6",
@ -75,35 +76,34 @@
"vue-i18n": "^8.28.2",
"vue-observe-visibility": "^1.0.0",
"vue-router": "^3.6.5",
"vue-tiny-slider": "^0.1.39",
"vuex": "^3.6.2",
"youtubei.js": "^7.0.0"
},
"devDependencies": {
"@babel/core": "^7.23.5",
"@babel/core": "^7.23.6",
"@babel/eslint-parser": "^7.23.3",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/preset-env": "^7.23.5",
"@babel/preset-env": "^7.23.6",
"@double-great/stylelint-a11y": "^2.0.2",
"babel-loader": "^9.1.3",
"copy-webpack-plugin": "^11.0.0",
"css-loader": "^6.8.1",
"css-minimizer-webpack-plugin": "^5.0.1",
"electron": "^27.1.3",
"electron": "^28.0.0",
"electron-builder": "^24.9.1",
"eslint": "^8.55.0",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-jsonc": "^2.10.0",
"eslint-plugin-n": "^16.3.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsonc": "^2.11.1",
"eslint-plugin-n": "^16.4.0",
"eslint-plugin-prettier": "^5.0.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-unicorn": "^49.0.0",
"eslint-plugin-vue": "^9.19.2",
"eslint-plugin-vuejs-accessibility": "^2.2.0",
"eslint-plugin-yml": "^1.10.0",
"html-webpack-plugin": "^5.5.3",
"eslint-plugin-yml": "^1.11.0",
"html-webpack-plugin": "^5.5.4",
"js-yaml": "^4.1.0",
"json-minimizer-webpack-plugin": "^4.0.0",
"lefthook": "^1.5.5",

View File

@ -170,6 +170,10 @@ function runApp() {
app.commandLine.appendSwitch('enable-file-cookies')
app.commandLine.appendSwitch('ignore-gpu-blacklist')
// Work around for context menus in the devtools being displayed behind the window
// https://github.com/electron/electron/issues/38790
app.commandLine.appendSwitch('disable-features', 'WidgetLayering')
// command line switches need to be added before the app ready event first
// that means we can't use the normal settings system as that is asynchronous,
// doing it synchronously ensures that we add it before the event fires

View File

@ -4,20 +4,18 @@ import FtListPlaylist from '../ft-list-playlist/ft-list-playlist.vue'
import FtCommunityPoll from '../ft-community-poll/ft-community-poll.vue'
import autolinker from 'autolinker'
import VueTinySlider from 'vue-tiny-slider'
import { deepCopy, toLocalePublicationString } from '../../helpers/utils'
import { A11y, Navigation, Pagination } from 'swiper/modules'
import { createWebURL, deepCopy, toLocalePublicationString } from '../../helpers/utils'
import { youtubeImageUrlToInvidious } from '../../helpers/api/invidious'
import 'tiny-slider/dist/tiny-slider.css'
export default defineComponent({
name: 'FtCommunityPost',
components: {
'ft-list-playlist': FtListPlaylist,
'ft-list-video': FtListVideo,
'ft-community-poll': FtCommunityPoll,
'tiny-slider': VueTinySlider
'ft-community-poll': FtCommunityPoll
},
props: {
data: {
@ -44,26 +42,43 @@ export default defineComponent({
}
},
computed: {
tinySliderOptions: function() {
return {
items: 1,
arrowKeys: false,
controls: false,
autoplay: false,
slideBy: 'page',
navPosition: 'bottom'
}
},
listType: function () {
return this.$store.getters.getListType
}
},
created: function () {
this.parseVideoData()
this.parseCommunityData()
},
mounted: function () {
if (this.type === 'multiImage' && this.postContent.content.length > 0) {
const swiperContainer = this.$refs.swiperContainer
/** @type {import('swiper/element').SwiperContainer} */
const swiperOptions = {
modules: [A11y, Navigation, Pagination],
injectStylesUrls: [
// This file is created with the copy webpack plugin in the web and renderer webpack configs.
// If you add more modules, please remember to add their CSS files to the list in webpack config files.
createWebURL('/swiper.css')
],
a11y: true,
navigation: true,
pagination: {
enabled: true,
clickable: true
},
slidesPerView: 1
}
Object.assign(swiperContainer, swiperOptions)
swiperContainer.initialize()
}
},
methods: {
parseVideoData: function () {
parseCommunityData: function () {
if ('backstagePostThreadRenderer' in this.data) {
this.postText = 'Shared post'
this.type = 'text'

View File

@ -136,3 +136,7 @@
min-block-size: 0 !important;
padding-block-end: 20px;
}
.sliderContainer {
display: block;
}

View File

@ -56,19 +56,27 @@
class="postText"
v-html="postText"
/>
<tiny-slider
v-if="type === 'multiImage' && postContent.content.length > 0"
v-bind="tinySliderOptions"
class="slider"
>
<img
v-for="(img, index) in postContent.content"
:key="index"
:src="getBestQualityImage(img)"
class="communityImage tns-lazy-img"
alt=""
<div class="sliderContainer">
<swiper-container
v-if="type === 'multiImage' && postContent.content.length > 0"
ref="swiperContainer"
init="false"
class="slider"
>
</tiny-slider>
<swiper-slide
v-for="(img, index) in postContent.content"
:key="index"
lazy="true"
>
<img
:src="getBestQualityImage(img)"
class="communityImage"
alt=""
loading="lazy"
>
</swiper-slide>
</swiper-container>
</div>
<div
v-if="type === 'image' && postContent.content.length > 0"
>
@ -118,4 +126,3 @@
<script src="./ft-community-post.js" />
<style scoped src="./ft-community-post.scss" lang="scss" />
<style src="./slider-style.css" lang="css" />

View File

@ -1,11 +0,0 @@
.tns-nav .tns-nav-active {
background-color: #999;
}
.tns-nav button {
background-color: #ddd;
border-radius: 50%;
block-size: 1.5em;
padding: 0;
inline-size: 1.5em;
}

View File

@ -96,7 +96,6 @@
padding: 1rem;
border: none;
margin-block-end: 10px;
margin-block-start: 10px;
font-size: 16px;
block-size: 45px;
color: var(--secondary-text-color);

View File

@ -315,6 +315,10 @@ export default defineComponent({
this.$refs.input.focus()
},
select() {
this.$refs.input.select()
},
blur() {
this.$refs.input.blur()
},

View File

@ -13,6 +13,7 @@
.ftSubscribeButton {
position: relative;
text-align: start;
inline-size: fit-content;
}
/* Ensures style here overrides style of .btn */

View File

@ -225,7 +225,14 @@ export default defineComponent({
focusSearch: function () {
if (!this.hideSearchBar) {
this.$refs.searchInput.focus()
// In order to prevent Klipper's "Synchronize contents of the clipboard
// and the selection" feature from being triggered when running
// Chromium on KDE Plasma, it seems both focus() focus and
// select() have to be called asynchronously (see issue #2019).
setTimeout(() => {
this.$refs.searchInput.focus()
this.$refs.searchInput.select()
}, 0)
}
},

View File

@ -9,13 +9,15 @@ function getCurrentInstance() {
}
export function getProxyUrl(uri) {
const currentInstance = getCurrentInstance()
const url = new URL(uri)
const { origin } = url
if (!url.searchParams.has('host') && origin !== getCurrentInstance()) {
if (!url.searchParams.has('host') && origin !== currentInstance) {
// invidious requires host param to be filled with the origin of the stream
url.searchParams.append('host', origin.replace('https://', ''))
}
return url.toString().replace(origin, getCurrentInstance())
return url.toString().replace(origin, currentInstance)
}
export function invidiousAPICall({ resource, id = '', params = {}, doLogError = true, subResource = '' }) {
@ -345,9 +347,8 @@ export async function getHashtagInvidious(hashtag, page) {
* Generates a DASH manifest locally from Invidious' adaptive formats and manifest,
* doing so allows us to support multiple audio tracks, which Invidious doesn't support yet
* @param {import('youtubei.js').Misc.Format[]} formats
* @param {string=} invidiousInstance the formats will be proxied through the specified instance, when one is provided
*/
export async function generateInvidiousDashManifestLocally(formats, invidiousInstance) {
export async function generateInvidiousDashManifestLocally(formats) {
// create a dummy player, as deciphering requires making requests to YouTube,
// which we want to avoid when Invidious is selected as the backend
const player = new Player()
@ -355,12 +356,12 @@ export async function generateInvidiousDashManifestLocally(formats, invidiousIns
let urlTransformer
if (invidiousInstance) {
if (store.getters.getProxyVideos) {
/**
* @param {URL} url
*/
urlTransformer = (url) => {
return new URL(url.toString().replace(url.origin, invidiousInstance))
return new URL(getProxyUrl(url.toString()))
}
}

View File

@ -5,6 +5,9 @@ import router from './router/index'
import store from './store/index'
import i18n from './i18n/index'
import { library } from '@fortawesome/fontawesome-svg-core'
import { register as registerSwiper } from 'swiper/element'
// Please keep the list of constants sorted by name
// to avoid code conflict and duplicate entries
import {
@ -145,6 +148,8 @@ library.add(
faMonero
)
registerSwiper()
Vue.component('FontAwesomeIcon', FontAwesomeIcon)
/* eslint-disable-next-line no-new */

View File

@ -1805,7 +1805,7 @@ export default defineComponent({
const results = contents
.filter(node => node.type === 'ItemSection')
.flatMap(itemSection => itemSection.contents)
.filter(item => item.type === 'Video' || item.type === 'Playlist')
.filter(item => item.type === 'Video' || (!this.hideChannelPlaylists && item.type === 'Playlist'))
.map(item => {
if (item.type === 'Video') {
return parseLocalListVideo(item)
@ -1851,7 +1851,11 @@ export default defineComponent({
}
invidiousAPICall(payload).then((response) => {
this.searchResults = this.searchResults.concat(response)
if (this.hideChannelPlaylists) {
this.searchResults = this.searchResults.concat(response.filter(item => item.type !== 'playlist'))
} else {
this.searchResults = this.searchResults.concat(response)
}
this.isElementListLoading = false
this.searchPage++
}).catch((err) => {

View File

@ -78,8 +78,6 @@ export default defineComponent({
firstLoad: true,
useTheatreMode: false,
videoPlayerReady: false,
showDashPlayer: true,
showLegacyPlayer: false,
hidePlayer: false,
isFamilyFriendly: false,
isLive: false,
@ -470,8 +468,6 @@ export default defineComponent({
]
}
this.showLegacyPlayer = true
this.showDashPlayer = false
this.activeFormat = 'legacy'
this.activeSourceList = this.videoSourceList
this.audioSourceList = null
@ -542,7 +538,7 @@ export default defineComponent({
this.downloadLinks = formats.map((format) => {
const qualityLabel = format.quality_label ?? format.bitrate
const fps = format.fps ? `${format.fps}fps` : 'kbps'
const type = format.mime_type.match(/.*;/)[0].replace(';', '')
const type = format.mime_type.split(';')[0]
let label = `${qualityLabel} ${fps} - ${type}`
if (format.has_audio !== format.has_video) {
@ -757,8 +753,6 @@ export default defineComponent({
this.videoChapters = chapters
if (this.isLive) {
this.showLegacyPlayer = true
this.showDashPlayer = false
this.activeFormat = 'legacy'
this.videoSourceList = [
@ -796,7 +790,7 @@ export default defineComponent({
const qualityLabel = format.qualityLabel || format.bitrate
const itag = parseInt(format.itag)
const fps = format.fps ? (format.fps + 'fps') : 'kbps'
const type = format.type.match(/.*;/)[0].replace(';', '')
const type = format.type.split(';')[0]
let label = `${qualityLabel} ${fps} - ${type}`
if (itag !== 18 && itag !== 22) {
@ -1140,13 +1134,8 @@ export default defineComponent({
},
checkIfTimestamp: function () {
if (typeof (this.$route.query) !== 'undefined') {
try {
this.timestamp = parseInt(this.$route.query.timestamp)
} catch {
this.timestamp = null
}
}
const timestamp = parseInt(this.$route.query.timestamp)
this.timestamp = isNaN(timestamp) || timestamp < 0 ? null : timestamp
},
getLegacyFormats: function () {
@ -1344,23 +1333,15 @@ export default defineComponent({
if (process.env.IS_ELECTRON && this.removeVideoMetaFiles) {
if (process.env.NODE_ENV === 'development') {
const dashFileLocation = `static/dashFiles/${videoId}.xml`
const vttFileLocation = `static/storyboards/${videoId}.vtt`
// only delete the file it actually exists
if (await pathExists(dashFileLocation)) {
await fs.rm(dashFileLocation)
}
if (await pathExists(vttFileLocation)) {
await fs.rm(vttFileLocation)
}
} else {
const userData = await getUserDataPath()
const dashFileLocation = `${userData}/dashFiles/${videoId}.xml`
const vttFileLocation = `${userData}/storyboards/${videoId}.vtt`
if (await pathExists(dashFileLocation)) {
await fs.rm(dashFileLocation)
}
if (await pathExists(vttFileLocation)) {
await fs.rm(vttFileLocation)
}
@ -1391,35 +1372,10 @@ export default defineComponent({
*/
createLocalDashManifest: async function (videoInfo) {
const xmlData = await videoInfo.toDash()
const userData = await getUserDataPath()
let fileLocation
let uriSchema
if (process.env.NODE_ENV === 'development') {
fileLocation = `static/dashFiles/${this.videoId}.xml`
uriSchema = `dashFiles/${this.videoId}.xml`
// if the location does not exist, writeFileSync will not create the directory, so we have to do that manually
if (!(await pathExists('static/dashFiles/'))) {
await fs.mkdir('static/dashFiles/')
}
if (await pathExists(fileLocation)) {
await fs.rm(fileLocation)
}
await fs.writeFile(fileLocation, xmlData)
} else {
fileLocation = `${userData}/dashFiles/${this.videoId}.xml`
uriSchema = `file://${fileLocation}`
if (!(await pathExists(`${userData}/dashFiles/`))) {
await fs.mkdir(`${userData}/dashFiles/`)
}
await fs.writeFile(fileLocation, xmlData)
}
return [
{
url: uriSchema,
url: `data:application/dash+xml;charset=UTF-8,${encodeURIComponent(xmlData)}`,
type: 'application/dash+xml',
label: 'Dash',
qualityLabel: 'Auto'
@ -1486,10 +1442,7 @@ export default defineComponent({
this.audioTracks = this.createAudioTracksFromLocalFormats(audioFormats)
}
const manifest = await generateInvidiousDashManifestLocally(
formats,
this.proxyVideos ? this.currentInvidiousInstance : undefined
)
const manifest = await generateInvidiousDashManifestLocally(formats)
url = `data:application/dash+xml;charset=UTF-8,${encodeURIComponent(manifest)}`
} else if (this.proxyVideos) {

873
static/locales/cy.yaml Normal file
View File

@ -0,0 +1,873 @@
# Put the name of your locale in the same language
Locale Name: 'Cymraeg'
FreeTube: 'FreeTube'
# Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >
# Webkit Menu Bar
File: 'Ffeil'
New Window: 'Ffenestr Newydd'
Preferences: 'Dewisiadau'
Quit: 'Gadael'
Edit: 'Golygu'
Undo: 'Dadwneud'
Redo: 'Ailwneud'
Cut: 'Torri'
Copy: 'Copïo'
Paste: 'Gludo'
Delete: 'Dileu'
Select all: 'Dewis popeth'
Reload: 'Adnewyddu'
Force Reload: 'Gorfodi Adnewyddu'
Toggle Developer Tools: 'Toglo Teclynnau Datblygwr'
Actual size: 'Maint real'
Zoom in: 'Chwyddo i mewn'
Zoom out: 'Chwyddo allan'
Toggle fullscreen: 'Toglo sgrin lawn'
Window: 'Ffenestr'
Minimize: 'Lleihau'
Close: 'Cau'
Back: 'Nôl'
Forward: 'Ymlaen'
Open New Window: 'Agor Ffenestr Newydd'
Go to page: 'Mynd i {page}'
Version {versionNumber} is now available! Click for more details: 'Mae Fersiwn {versionNumber}
bellach ar gael! Cliciwch am fwy o manylion'
Download From Site: 'Lawrlwytho o''r Gwefan'
A new blog is now available, {blogTitle}. Click to view more: 'Mae blogiad newydd
bellach ar gael, {blogTitle}. Cliciwch i weld mwy'
Are you sure you want to open this link?: 'Ydych chi wir eisiau agor y ddolen hon?'
# Global
# Anything shared among components / views should be put here
Global:
Videos: 'Fideos'
Shorts: 'Shorts'
Live: 'Byw'
Community: 'Cymuned'
Counts:
Video Count: '1 fideo| {count} fideo'
Channel Count: '1 sianel | {count} sianel'
Subscriber Count: '1 tanysgrifiwr| {count} o danysgrifwyr'
View Count: '1 edrychiad | {count} edrychiad'
Watching Count: '1 yn gwylio | {count} yn gwylio'
# Search Bar
Search / Go to URL: 'Chwilio / Mynd i URL'
Search Bar:
Clear Input: 'Clirio Mewnbwn'
# In Filter Button
Search Filters:
Search Filters: 'Chwilio Hidlyddion'
Sort By:
Sort By: 'Trefnu'
Most Relevant: 'Mwyaf Perthnasol'
Rating: 'Sgôr'
Upload Date: 'Dyddiad Uwchlwytho'
View Count: 'Edrychiadau'
Time:
Time: 'Amser'
Any Time: 'Unrhyw bryd'
Last Hour: 'Yr Awr Diwethaf'
Today: 'Heddiw'
This Week: 'Yr Wythnos Hon'
This Month: 'Y Mis Hwn'
This Year: 'Eleni'
Type:
Type: 'Math'
All Types: 'Pob Math'
Videos: 'Fideos'
Channels: 'Sianeli'
Movies: 'Ffilmiau'
#& Playlists
Duration:
Duration: 'Hyd'
All Durations: 'Pob Hyd'
Short (< 4 minutes): 'Byr (< 4 munud)'
Medium (4 - 20 minutes): 'Canolig (4 - 20 munud)'
Long (> 20 minutes): 'Hir (> 20 munud)'
# On Search Page
Search Results: 'Canlyniadau Chwilio'
Fetching results. Please wait: 'Wrthi''n nôl canlyniadau. Arhoswch os gwelwch yn
dda'
Fetch more results: 'Mwy o ganlyniadau'
There are no more results for this search: 'Dim canlyniadau pellach ar gyfer y chwiliad
hwn'
# Sidebar
Subscriptions:
# On Subscriptions Page
Subscriptions: 'Tanysgrifiadau'
# channels that were likely deleted
Error Channels: 'Sianeli gyda Gwallau'
Latest Subscriptions: 'Tanysgrifiadau Diweddaraf'
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: ''
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': ''
Disabled Automatic Fetching: ''
Empty Channels: ''
'Getting Subscriptions. Please wait.': 'Wrthi''n nôl Tanysgrifiadau. Arhoswch os
gwelwch yn dda.'
Empty Posts: ''
Refresh Subscriptions: 'Adnewyddu Tanysgrifiadau'
Load More Videos: 'Llwytho Mwy o Fideos'
Load More Posts: 'Llwytho Mwy o Bostiadau'
Subscriptions Tabs: 'Tabiau Tanysgrifio'
All Subscription Tabs Hidden: ''
More: 'Mwy'
Channels:
Channels: 'Sianeli'
Title: 'Rhestr Sianeli'
Search bar placeholder: 'Chwilio Sianeli'
Count: ''
Empty: ''
Unsubscribe: 'Dad-danysgrifio'
Unsubscribed: ''
Unsubscribe Prompt: ''
Trending:
Trending: 'Llosg'
Default: 'Diofyn'
Music: 'Cerddoriaeth'
Gaming: 'Gemau'
Movies: 'Ffilmiau'
Trending Tabs: 'Tabiau Llosg'
Most Popular: 'Mwyaf Poblogaidd'
Playlists: 'Rhestrau Chwarae'
User Playlists:
Your Playlists: 'Eich Rhestrau Chwarae'
Playlist Message: ''
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: ''
Empty Search Message: ''
Search bar placeholder: ''
History:
# On History Page
History: 'Hanes'
Watch History: 'Hanes Gwylio'
Your history list is currently empty.: ''
Empty Search Message: ''
Search bar placeholder: ""
Settings:
# On Settings Page
Settings: 'Gosodiadau'
Expand All Settings Sections: ''
The app needs to restart for changes to take effect. Restart and apply change?: ''
General Settings:
General Settings: 'Gosodiadau Cyffredinol'
Check for Updates: 'Chwilio am Ddiweddariadau'
Check for Latest Blog Posts: ''
Fallback to Non-Preferred Backend on Failure: ''
Enable Search Suggestions: ''
Default Landing Page: ''
Locale Preference: 'Dewis Iaith'
System Default: 'Rhagosodyn y System'
Preferred API Backend:
Preferred API Backend: ''
Local API: 'API Lleol'
Invidious API: 'API Invidious'
Video View Type:
Video View Type: ''
Grid: 'Grid'
List: 'Rhestr'
Thumbnail Preference:
Thumbnail Preference: 'Dewisiadau Bawdlun'
Default: 'Diofyn'
Beginning: 'Dechrau'
Middle: 'Canol'
End: 'Diwedd'
Hidden: 'Wedi''u cuddio'
Blur: ''
Current Invidious Instance: ''
The currently set default instance is {instance}: ''
No default instance has been set: ''
Current instance will be randomized on startup: ''
Set Current Instance as Default: ''
Clear Default Instance: ''
View all Invidious instance information: ''
Region for Trending: ''
#! List countries
External Link Handling:
External Link Handling: ''
Open Link: 'Agor Dolen'
Ask Before Opening Link: ''
No Action: 'Dim Gweithred'
Theme Settings:
Theme Settings: 'Gosodiadau Thema'
Match Top Bar with Main Color: ''
Expand Side Bar by Default: ''
Disable Smooth Scrolling: ''
UI Scale: 'Graddfa UI'
Hide Side Bar Labels: ''
Hide FreeTube Header Logo: ''
Base Theme:
Base Theme: 'Thema Sylfaenol'
Black: 'Du'
Dark: 'Tywyll'
System Default: 'Rhagosodyn y System'
Light: 'Golau'
Dracula: ''
Catppuccin Mocha: 'Catppuccin Mocha'
Pastel Pink: ''
Hot Pink: ''
Main Color Theme:
Main Color Theme: ''
Red: 'Coch'
Pink: 'Pinc'
Purple: 'Porffor'
Deep Purple: ''
Indigo: 'Indigo'
Blue: 'Glas'
Light Blue: 'Glas Golau'
Cyan: 'Gwyrddlas'
Teal: 'Gwyrddlas Tywyll'
Green: 'Gwyrdd'
Light Green: 'Gwyrdd Golau'
Lime: 'Leim'
Yellow: 'Melyn'
Amber: ''
Orange: 'Oren'
Deep Orange: ''
Dracula Cyan: ''
Dracula Green: ''
Dracula Orange: ''
Dracula Pink: ''
Dracula Purple: ''
Dracula Red: ''
Dracula Yellow: ''
Catppuccin Mocha Rosewater: ''
Catppuccin Mocha Flamingo: ''
Catppuccin Mocha Pink: ''
Catppuccin Mocha Mauve: ''
Catppuccin Mocha Red: ''
Catppuccin Mocha Maroon: ''
Catppuccin Mocha Peach: ''
Catppuccin Mocha Yellow: ''
Catppuccin Mocha Green: ''
Catppuccin Mocha Teal: ''
Catppuccin Mocha Sky: ''
Catppuccin Mocha Sapphire: ''
Catppuccin Mocha Blue: ''
Catppuccin Mocha Lavender: ''
Secondary Color Theme: ''
#* Main Color Theme
Player Settings:
Player Settings: 'Gosodiadau Chwaraewr'
Force Local Backend for Legacy Formats: ''
Play Next Video: ''
Turn on Subtitles by Default: ''
Autoplay Videos: 'Awto-chwarae Fideos'
Proxy Videos Through Invidious: ''
Autoplay Playlists: 'Awto-chwarae Rhestrau Chwarae'
Enable Theatre Mode by Default: ''
Scroll Volume Over Video Player: ''
Scroll Playback Rate Over Video Player: ''
Skip by Scrolling Over Video Player: ''
Display Play Button In Video Player: ''
Enter Fullscreen on Display Rotate: ''
Next Video Interval: ''
Fast-Forward / Rewind Interval: ''
Default Volume: 'Sain Diofyn'
Default Playback Rate: ''
Max Video Playback Rate: ''
Video Playback Rate Interval: ''
Default Video Format:
Default Video Format: ''
Dash Formats: 'Fformatau DASH'
Legacy Formats: 'Hen Fformatau'
Audio Formats: 'Fformatau Sain'
Default Quality:
Default Quality: 'Ansawdd Diofyn'
Auto: 'Awtomatig'
144p: '144p'
240p: '240p'
360p: '360p'
480p: '480p'
720p: '720p'
1080p: '1080p'
1440p: '1440p'
4k: '4k'
8k: '8k'
Allow DASH AV1 formats: ''
Screenshot:
Enable: 'Galluogi Sgrinlun'
Format Label: 'Fformat Sgrinluniau'
Quality Label: 'Ansawdd Sgrinlun'
Ask Path: ''
Folder Label: 'Ffolder Sgrinlun'
Folder Button: 'Dewis Ffolder'
File Name Label: 'Patrwm Enw Ffeil'
File Name Tooltip: ''
Error:
Forbidden Characters: 'Nodau Gwahardd'
Empty File Name: ''
Comment Auto Load:
Comment Auto Load: ''
External Player Settings:
External Player Settings: ''
External Player: 'Chwaraewr Allanol'
Ignore Unsupported Action Warnings: ''
Custom External Player Executable: ''
Custom External Player Arguments: ''
Players:
None:
Name: 'Dim'
Privacy Settings:
Privacy Settings: 'Gosodiadau Preifatrwydd'
Remember History: 'Cadw Hanes'
Save Watched Progress: ''
Save Watched Videos With Last Viewed Playlist: ''
Automatically Remove Video Meta Files: ''
Clear Search Cache: ''
Are you sure you want to clear out your search cache?: ''
Search cache has been cleared: ''
Remove Watch History: ''
Are you sure you want to remove your entire watch history?: ''
Watch history has been cleared: ''
Remove All Subscriptions / Profiles: ''
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: ''
Subscription Settings:
Subscription Settings: 'Gosodiadau Tanysgrifio'
Hide Videos on Watch: ''
Fetch Feeds from RSS: ''
Manage Subscriptions: 'Rheoli Tanysgrifiadau'
Fetch Automatically: ''
Only Show Latest Video for Each Channel: ''
Distraction Free Settings:
Distraction Free Settings: ''
Sections:
Side Bar: 'Bar Ochr'
Subscriptions Page: 'Tudalen Tanysgrifiadau'
Channel Page: 'Tudalen Sianel'
Watch Page: 'Tudalen Wylio'
General: 'Cyffredinol'
Hide Video Views: ''
Hide Video Likes And Dislikes: ''
Hide Channel Subscribers: ''
Hide Comment Likes: ''
Hide Recommended Videos: ''
Hide Trending Videos: 'Cuddio Fideos Llosg'
Hide Popular Videos: 'Cuddio Fideos Poblogaidd'
Hide Playlists: 'Cuddio Rhestrau Chwarae'
Hide Live Chat: ''
Hide Active Subscriptions: ''
Hide Video Description: ''
Hide Comments: 'Cuddio Sylwadau'
Hide Profile Pictures in Comments: ''
Display Titles Without Excessive Capitalisation: ''
Hide Live Streams: ''
Hide Upcoming Premieres: ''
Hide Sharing Actions: ''
Hide Chapters: 'Cuddio Siapteri'
Hide Channels: ''
Hide Channels Disabled Message: ''
Hide Channels Placeholder: 'ID Sianel'
Hide Channels Invalid: ''
Hide Channels API Error: ''
Hide Channels Already Exists: ''
Hide Featured Channels: ''
Hide Channel Playlists: ''
Hide Channel Community: ''
Hide Channel Shorts: ''
Hide Channel Podcasts: ''
Hide Channel Releases: ''
Hide Subscriptions Videos: ''
Hide Subscriptions Shorts: ''
Hide Subscriptions Live: ''
Hide Subscriptions Community: ''
Data Settings:
Data Settings: 'Gosodiadau Data'
Select Import Type: ''
Select Export Type: ''
Import Subscriptions: 'Mewnforio Tanysgrifiadau'
Subscription File: 'Ffeil Tanysgrifio'
History File: 'Ffeil Hanes'
Playlist File: 'Ffeil Rhestr Chwarae'
Check for Legacy Subscriptions: ''
Export Subscriptions: 'Allforio Tanysgrifiadau'
Export FreeTube: 'Allforio FreeTube'
Export YouTube: 'Allforio YouTube'
Export NewPipe: 'Allforio NewPipe'
Import History: 'Mewnforio Hanes'
Export History: 'Allforio Hanes'
Import Playlists: 'Mewnforio Rhestrau Chwarae'
Export Playlists: 'Allforio Rhestrau Chwarae'
Profile object has insufficient data, skipping item: ''
All subscriptions and profiles have been successfully imported: ''
All subscriptions have been successfully imported: ''
One or more subscriptions were unable to be imported: ''
Invalid subscriptions file: ''
This might take a while, please wait: ''
Invalid history file: ''
Subscriptions have been successfully exported: ''
History object has insufficient data, skipping item: ''
All watched history has been successfully imported: ''
All watched history has been successfully exported: ''
Playlist insufficient data: ''
All playlists has been successfully imported: ''
All playlists has been successfully exported: ''
Unable to read file: ''
Unable to write file: ''
Unknown data key: ''
How do I import my subscriptions?: ''
Manage Subscriptions: 'Rheoli Tanysgrifiadau'
Proxy Settings:
Proxy Settings: 'Gosodiadau Dirprwy'
Enable Tor / Proxy: ''
Proxy Protocol: 'Protocol Dirprwy'
Proxy Host: 'Gweinydd Dirprwy'
Proxy Port Number: ''
Clicking on Test Proxy will send a request to: ''
Test Proxy: 'Profi Dirprwy'
Your Info: 'Eich Gwybodaeth'
Ip: 'IP'
Country: 'Gwlad'
Region: 'Rhanbarth'
City: 'Dinas'
Error getting network information. Is your proxy configured properly?: ''
SponsorBlock Settings:
SponsorBlock Settings: 'Gosodiadau SponsorBlock'
Enable SponsorBlock: 'Galluogi SponsorBlock'
'SponsorBlock API Url (Default is https://sponsor.ajay.app)': ''
Notify when sponsor segment is skipped: ''
UseDeArrowTitles: ''
Skip Options:
Skip Option: 'Opsiwn Hepgor'
Auto Skip: 'Awto-Hepgor'
Show In Seek Bar: ''
Prompt To Skip: ''
Do Nothing: 'Gwneud Dim'
Category Color: 'Lliw Categori'
Parental Control Settings:
Parental Control Settings: ''
Hide Unsubscribe Button: 'Cuddio Botwm Dad-danysgrifio'
Show Family Friendly Only: ''
Hide Search Bar: 'Cuddio Bar Chwilio'
Download Settings:
Download Settings: 'Gosodiadau Lawrlwytho'
Ask Download Path: ''
Choose Path: 'Dewiswch Lwybr'
Download Behavior: 'Ymddygiad Lawrlwytho'
Download in app: ''
Open in web browser: ''
Experimental Settings:
Experimental Settings: 'Gosodiadau Arbrofol'
Warning: ''
Replace HTTP Cache: ''
Password Dialog:
Password: 'Cyfrinair'
Enter Password To Unlock: ''
Password Incorrect: 'Cyfrinair Anghywir'
Unlock: 'Datgloi'
Password Settings:
Password Settings: 'Gosodiadau Cyfrinair'
Set Password To Prevent Access: ''
Set Password: 'Gosod Cyfrinair'
Remove Password: 'Tynnu Cyfrinair'
About:
#On About page
About: 'Ynghylch'
Beta: 'Beta'
Source code: 'Cod ffynhonnell'
Licensed under the AGPLv3: ''
View License: 'Gweld Trwydded'
Downloads / Changelog: ''
GitHub releases: ''
Help: 'Cymorth'
FreeTube Wiki: 'Wici FreeTube'
FAQ: 'Cwestiynau Cyffredin'
Discussions: 'Sgyrsiau'
Report a problem: ''
GitHub issues: 'Materion GitHub'
Please check for duplicates before posting: ''
Website: 'Gwefan'
Blog: 'Blog'
Email: 'E-bost'
Mastodon: 'Mastodon'
Chat on Matrix: ''
Please read the: ''
room rules: 'rheolau ystafell'
Translate: 'Cyfieithu'
Credits: 'Cydnabyddiaeth'
FreeTube is made possible by: ''
these people and projects: ''
Donate: 'Rhoi arian'
Profile:
Profile Settings: 'Gosodiadau Proffil'
Toggle Profile List: ''
Profile Select: 'Dewis Proffil'
Profile Filter: 'Hidlydd Proffil'
All Channels: 'Pob Sianel'
Profile Manager: 'Rheoli Proffiliau'
Create New Profile: 'Creu Proffil Newydd'
Edit Profile: 'Golygu Proffil'
Edit Profile Name: ''
Create Profile Name: ''
Profile Name: 'Enw Proffil'
Color Picker: 'Dewisydd Lliw'
Custom Color: 'Lliw Addas'
Profile Preview: 'Rhagweld Proffil'
Create Profile: 'Creu Proffil'
Update Profile: 'Diweddaru Proffil'
Make Default Profile: ''
Delete Profile: 'Dileu Proffil'
Are you sure you want to delete this profile?: ''
All subscriptions will also be deleted.: ''
Profile could not be found: ''
Your profile name cannot be empty: ''
Profile has been created: ''
Profile has been updated: ''
Your default profile has been set to {profile}: ''
Removed {profile} from your profiles: ''
Your default profile has been changed to your primary profile: ''
'{profile} is now the active profile': ''
Subscription List: 'Rhestr Tanysgrifiadau'
Other Channels: 'Sianeli Eraill'
'{number} selected': ''
Select All: 'Dewis Popeth'
Select None: 'Dewis Dim'
Delete Selected: ''
Add Selected To Profile: ''
No channel(s) have been selected: ''
? This is your primary profile. Are you sure you want to delete the selected channels? The
same channels will be deleted in any profile they are found in.
: ''
Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: ''
Close Profile Dropdown: ''
Open Profile Dropdown: ''
#On Channel Page
Channel:
Subscribe: 'Tanysgrifio'
Unsubscribe: 'Dad-danysgrifio'
Channel has been removed from your subscriptions: ''
Removed subscription from {count} other channel(s): ''
Added channel to your subscriptions: ''
Search Channel: 'Chwilio Sianel'
Your search results have returned 0 results: ''
Sort By: 'Trefnu yn ôl'
This channel does not exist: ''
This channel does not allow searching: ''
This channel is age-restricted and currently cannot be viewed in FreeTube.: ''
Channel Tabs: 'Tabiau Sianel'
Videos:
Videos: 'Fideos'
This channel does not currently have any videos: ''
Sort Types:
Newest: 'Diweddaraf'
Oldest: 'Hynaf'
Most Popular: 'Mwyaf Poblogaidd'
Shorts:
This channel does not currently have any shorts: ''
Live:
Live: 'Byw'
This channel does not currently have any live streams: ''
Playlists:
Playlists: 'Rhestrau Chwarae'
This channel does not currently have any playlists: ''
Sort Types:
Last Video Added: ''
Newest: 'Diweddaraf'
Oldest: 'Hynaf'
Podcasts:
Podcasts: 'Podlediadau'
This channel does not currently have any podcasts: ''
Releases:
Releases: 'Rhyddhadau'
This channel does not currently have any releases: ''
About:
About: 'Ynghylch'
Channel Description: 'Disgrifiad y Sianel'
Tags:
Tags: 'Tagiau'
Search for: ''
Details: 'Manylion'
Joined: 'Dyddiad ymuno'
Location: 'Lleoliad'
Featured Channels: 'Sianeli Dethol'
Community:
This channel currently does not have any posts: ''
votes: '{votes} o bleidleisiau'
Reveal Answers: 'Datgloi Atebion'
Hide Answers: 'Cuddio Atebion'
Video:
Mark As Watched: ''
Remove From History: ''
Video has been marked as watched: ''
Video has been removed from your history: ''
Save Video: 'Cadw Fideo'
Video has been saved: ''
Video has been removed from your saved list: ''
Open in YouTube: ''
Copy YouTube Link: ''
Open YouTube Embedded Player: ''
Copy YouTube Embedded Player Link: ''
Open in Invidious: ''
Copy Invidious Link: ''
Open Channel in YouTube: ''
Copy YouTube Channel Link: ''
Open Channel in Invidious: ''
Copy Invidious Channel Link: ''
Hide Channel: 'Cuddio Sianel'
Unhide Channel: 'Dangos Sianel'
Views: 'Edrychiadau'
Loop Playlist: 'Ailadrodd Rhestr Chwarae'
Shuffle Playlist: ''
Reverse Playlist: ''
Play Next Video: ''
Play Previous Video: ''
Pause on Current Video: ''
Watched: 'Wedi gwylio'
Autoplay: 'Awtochwarae'
Starting soon, please refresh the page to check again: ''
# As in a Live Video
Premieres on: ''
Premieres: ''
Upcoming: 'I ddod'
Live: 'Byw'
Live Now: 'Yn Fyw'
Live Chat: 'Sgwrs Byw'
Enable Live Chat: ''
Live Chat is currently not supported in this build.: ''
'Chat is disabled or the Live Stream has ended.': ''
Live chat is enabled. Chat messages will appear here once sent.: ''
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': ''
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': ''
Show Super Chat Comment: ''
Scroll to Bottom: ''
Download Video: 'Lawrlwytho Fideo'
video only: 'fideo yn unig'
audio only: 'sain yn unig'
Audio:
Low: 'Isel'
Medium: 'Canolig'
High: 'Uwch'
Best: 'Gorau'
Published:
Jan: 'Ion'
Feb: 'Chw'
Mar: 'Maw'
Apr: 'Ebr'
May: 'Mai'
Jun: 'Meh'
Jul: 'Gor'
Aug: 'Awst'
Sep: 'Medi'
Oct: 'Hyd'
Nov: 'Tach'
Dec: 'Rhag'
Second: 'Eiliad'
Seconds: 'Eiliadau'
Minute: 'Munud'
Minutes: 'Munudau'
Hour: 'Awr'
Hours: 'Oriau'
Day: 'Diwrnod'
Days: 'Diwrnodau'
Week: 'Wythnos'
Weeks: 'Wythnosau'
Month: 'Mis'
Months: 'Misoedd'
Year: 'Blwyddyn'
Years: 'Blynyddoedd'
Ago: 'Yn ôl'
Upcoming: ''
In less than a minute: ''
Published on: ''
Streamed on: ''
Started streaming on: ''
translated from English: ''
Publicationtemplate: ''
Skipped segment: ''
Sponsor Block category:
sponsor: 'Noddwr'
intro: 'Cyflwyniad'
outro: 'Diweddglo'
self-promotion: 'Hunan-Hyrwyddo'
interaction: 'Rhyngweithiad'
music offtopic: ''
recap: 'Crynhoi'
filler: 'Dwli'
External Player:
OpenInTemplate: ''
video: 'fideo'
playlist: 'rhestr chwarae'
OpeningTemplate: ''
UnsupportedActionTemplate: ''
Unsupported Actions:
starting video at offset: ''
setting a playback rate: ''
opening playlists: ''
opening specific video in a playlist (falling back to opening the video): ''
reversing playlists: ''
shuffling playlists: ''
looping playlists: ''
Stats:
Video statistics are not available for legacy videos: ''
Video ID: 'ID fideo'
Resolution: 'Eglurdeb'
Player Dimensions: ''
Bitrate: 'Cyfradd didau'
Volume: 'Sain'
Bandwidth: 'Lled band'
Buffered: ''
Dropped / Total Frames: ''
Mimetype: 'Math mime'
#& Videos
Videos:
#& Sort By
Sort By:
Newest: 'Diweddaraf'
Oldest: 'Hynaf'
#& Most Popular
#& Playlists
Playlist:
#& About
Playlist: 'Rhestr chwarae'
View Full Playlist: ''
Videos: 'Fideos'
View: 'Edrychiad'
Views: 'Edrychiadau'
Last Updated On: ''
# On Video Watch Page
#* Published
#& Views
Toggle Theatre Mode: ''
Change Format:
Change Media Formats: ''
Use Dash Formats: ''
Use Legacy Formats: ''
Use Audio Formats: ''
Dash formats are not available for this video: ''
Audio formats are not available for this video: ''
Share:
Share Video: ''
Share Channel: 'Rhannu Sianel'
Share Playlist: 'Rhannu Rhestr Chwarae'
Include Timestamp: 'Cynnwys Amser'
Copy Link: 'Copïo Dolen'
Open Link: 'Agor Dolen'
Copy Embed: ''
Open Embed: ''
# On Click
Invidious URL copied to clipboard: ''
Invidious Embed URL copied to clipboard: ''
Invidious Channel URL copied to clipboard: ''
YouTube URL copied to clipboard: ''
YouTube Embed URL copied to clipboard: ''
YouTube Channel URL copied to clipboard: ''
Clipboard:
Copy failed: ''
Cannot access clipboard without a secure connection: ''
Chapters:
Chapters: 'Penodau'
'Chapters list visible, current chapter: {chapterName}': ''
'Chapters list hidden, current chapter: {chapterName}': ''
Mini Player: ''
Comments:
Comments: 'Sylwadau'
Click to View Comments: ''
Getting comment replies, please wait: ''
There are no more comments for this video: ''
Show Comments: 'Dangos Sylwadau'
Hide Comments: 'Cuddio Sylwadau'
Sort by: 'Trefnu yn ôl'
Top comments: 'Sylwadau poblogaidd'
Newest first: 'Diweddaraf yn gyntaf'
View {replyCount} replies: ''
# Context: View 10 Replies, View 1 Reply, View 1 Reply from Owner, View 2 Replies from Owner and others
View: 'Edrychiad'
Hide: 'Cuddio'
Replies: 'Atebion'
Show More Replies: ''
Reply: 'Ateb'
From {channelName}: 'gan {channelName}'
And others: 'ac eraill'
There are no comments available for this video: ''
Load More Comments: ''
No more comments available: ''
Pinned by: 'Piniwyd gan'
Member: 'Aelod'
Subscribed: 'Tanysgrifiwyd'
Hearted: 'Hoffwyd'
Up Next: 'Nesaf'
#Tooltips
Tooltips:
General Settings:
Preferred API Backend: ''
Fallback to Non-Preferred Backend on Failure: ''
Thumbnail Preference: ''
Invidious Instance: ''
Region for Trending: ''
External Link Handling: |
Player Settings:
Force Local Backend for Legacy Formats: ''
Proxy Videos Through Invidious: ''
Default Video Format: ''
Allow DASH AV1 formats: ''
Scroll Playback Rate Over Video Player: ''
Skip by Scrolling Over Video Player: ''
External Player Settings:
External Player: ''
Custom External Player Executable: ''
Ignore Warnings: ''
Custom External Player Arguments: ''
DefaultCustomArgumentsTemplate: ""
Distraction Free Settings:
Hide Channels: ''
Hide Subscriptions Live: ''
Subscription Settings:
Fetch Feeds from RSS: ''
Fetch Automatically: ''
Privacy Settings:
Remove Video Meta Files: ''
Experimental Settings:
Replace HTTP Cache: ''
SponsorBlock Settings:
UseDeArrowTitles: ''
# Toast Messages
Local API Error (Click to copy): ''
Invidious API Error (Click to copy): ''
Falling back to Invidious API: ''
Falling back to the local API: ''
This video is unavailable because of missing formats. This can happen due to country unavailability.: ''
Subscriptions have not yet been implemented: ''
Unknown YouTube url type, cannot be opened in app: ''
Hashtags have not yet been implemented, try again later: ''
Loop is now disabled: ''
Loop is now enabled: ''
Shuffle is now disabled: ''
Shuffle is now enabled: ''
The playlist has been reversed: ''
Playing Next Video: ''
Playing Previous Video: ''
Playlist will not pause when current video is finished: ''
Playlist will pause when current video is finished: ''
Playing Next Video Interval: ''
Canceled next video autoplay: ''
Default Invidious instance has been set to {instance}: ''
Default Invidious instance has been cleared: ''
'The playlist has ended. Enable loop to continue playing': ''
Age Restricted:
This {videoOrPlaylist} is age restricted: ''
Type:
Channel: 'Sianel'
Video: 'Fideo'
External link opening has been disabled in the general settings: ''
Downloading has completed: ''
Starting download: ''
Downloading failed: ''
Screenshot Success: ''
Screenshot Error: ''
Channel Hidden: ''
Channel Unhidden: ''
Hashtag:
Hashtag: 'Hashnod'
This hashtag does not currently have any videos: ''
Yes: 'Ie'
No: 'Na'
Ok: 'Iawn'

View File

@ -324,6 +324,7 @@ Settings:
Fetch Feeds from RSS: 'Laadi RSS-uudisvood'
Manage Subscriptions: 'Halda tellimusi'
Fetch Automatically: Laadi tellimuste voog automaatselt
Only Show Latest Video for Each Channel: Iga kanali puhul näita vaid viimast videot
Data Settings:
Data Settings: 'Andmehaldus'
Select Import Type: 'Vali imporditava faili vorming'
@ -488,6 +489,7 @@ Settings:
Remove Password: Eemalda salasõna
Set Password: Määra salasõna
Set Password To Prevent Access: Vältimaks ligipääsu seadistustele määra salasõna
Expand All Settings Sections: Laienda kõik seadistuste lõigud
About:
#On About page
About: 'Teave'
@ -563,6 +565,11 @@ Profile:
Profile Filter: Sirvi profiile
Profile Settings: Profiili seadistused
Toggle Profile List: Lülita profiilide loend sisse/välja
Profile Name: Profiili nimi
Edit Profile Name: Muuda profiili nime
Create Profile Name: Loo profiilile nimi
Open Profile Dropdown: Ava profiili rippmenüü
Close Profile Dropdown: Sulge profiili rippmenüü
Channel:
Subscribe: 'Telli'
Unsubscribe: 'Lõpeta tellimus'

View File

@ -757,6 +757,8 @@ Video:
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Live-chat
ei ole käytettävissä tässä suoratoistossa. Lataaja on saattanut poistaa sen käytöstä.
Pause on Current Video: Keskeytä nykyiseen videoon
Unhide Channel: Näytä kanava
Hide Channel: Piilota kanava
Videos:
#& Sort By
Sort By:
@ -892,6 +894,9 @@ Profile:
Subscription List: Tilauslista
Profile Filter: Profiilisuodatin
Profile Settings: Profiiliasetukset
Profile Name: Profiilin nimi
Edit Profile Name: Muokkaa profiilin nimeä
Create Profile Name: Luo profiilin nimi
Version {versionNumber} is now available! Click for more details: Versio {versionNumber}
on nyt saatavilla! Napsauta saadaksesi lisätietoja
This video is unavailable because of missing formats. This can happen due to country unavailability.: Tämä
@ -1027,3 +1032,6 @@ Playlist will pause when current video is finished: Soittolista keskeytetään,
nykyinen video päättyy
Playlist will not pause when current video is finished: Soittolistaa ei keskeytetä,
kun nykyinen video päättyy
Channel Hidden: '{channel} lisätty kanavasuodattimeen'
Go to page: Siirry sivulle {page}
Channel Unhidden: '{channel} poistettu kanavasuodattimesta'

View File

@ -1,5 +1,5 @@
# Put the name of your locale in the same language
Locale Name: 'magyar'
Locale Name: 'English (US)'
FreeTube: 'FreeTube'
# Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >-
@ -103,8 +103,8 @@ Subscriptions:
elkerülésére
Load More Videos: További videók betöltése
Error Channels: Hibás csatornák
Disabled Automatic Fetching: Az önműködő feliratkozási kérés letiltva. Frissítse
a feliratkozást a megtekintéséhez.
Disabled Automatic Fetching: Ön kikapcsolta a feliratkozások automatikus lekérdezését.
Frissítse a feliratkozásokat, hogy itt láthassa őket.
Empty Channels: A feliratkozott csatornák jelenleg nem tartalmaznak videókat.
All Subscription Tabs Hidden: Az összes feliratkozási lap el van rejtve. Az itteni
tartalom megtekintéséhez, kérjük, jelenítse meg néhány lap elrejtését a(z) „{settingsSection}”
@ -168,7 +168,7 @@ Settings:
Middle: 'Középső'
End: 'Vég'
Hidden: Rejtett
Blur: Elhomályosítás
Blur: Kikockázás
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious példány
(Alapértelmezés: https://invidious.snopyta.org)'
Region for Trending: 'Népszerű területe'
@ -253,9 +253,9 @@ Settings:
örökölt formátumokra'
Play Next Video: 'Következő videó lejátszása'
Turn on Subtitles by Default: 'Alapértelmezés szerint feliratok megjelenítése'
Autoplay Videos: 'Videók önműködően lejátszása'
Autoplay Videos: 'Videók automatikus lejátszása'
Proxy Videos Through Invidious: 'Meghatalmazás videók az Invidious révén'
Autoplay Playlists: 'Lejátszási listák önműködően lejátszása'
Autoplay Playlists: 'Lejátszási listák automatikus lejátszása'
Enable Theatre Mode by Default: 'Alapértelmezés szerint mozi mód engedélyezése'
Default Volume: 'Alapértelmezett hangerő'
Default Playback Rate: 'Alapértelmezett lejátszási sebesség'
@ -267,7 +267,7 @@ Settings:
Audio Formats: 'Hangformátumok'
Default Quality:
Default Quality: 'Alapértelmezett minőség'
Auto: 'Önműködő'
Auto: 'Automatikus'
144p: '144p'
240p: '240p'
360p: '360p'
@ -323,7 +323,7 @@ Settings:
Remove All Subscriptions / Profiles: 'Összes feliratkozás és profil eltávolítása'
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Biztosan
törli az összes feliratkozást és profilt? A művelet nem vonható vissza.'
Automatically Remove Video Meta Files: Videométafájlok önműködő eltávolítása
Automatically Remove Video Meta Files: Videó-metafájlok automatikus eltávolítása
Save Watched Videos With Last Viewed Playlist: Megtekintett videók mentése az
utoljára megtekintett lejátszási listával
Subscription Settings:
@ -331,7 +331,8 @@ Settings:
Hide Videos on Watch: 'Videók elrejtése megtekintés után'
Fetch Feeds from RSS: 'RSS-hírcsatornák beolvasása'
Manage Subscriptions: 'Feliratkozások kezelése'
Fetch Automatically: Hírcsatorna önműködő lekérése
Fetch Automatically: Hírcsatorna automatikus lekérdezése
Only Show Latest Video for Each Channel: Csak a legújabb videókat mutassa a csatornáktól
Data Settings:
Data Settings: 'Adatbeállítások'
Select Import Type: 'Importálás típusa kiválasztása'
@ -483,7 +484,7 @@ Settings:
SponsorBlock Settings: SponsorBlock beállításai
Skip Options:
Skip Option: Beállítás kihagyása
Auto Skip: Önműködő kihagyás
Auto Skip: Automatikus kihagyás
Show In Seek Bar: Megjelenítés a keresősávban
Do Nothing: Nincs művelet
Prompt To Skip: Kihagyás kérése
@ -524,10 +525,11 @@ Settings:
Password: Jelszó
Password Settings:
Password Settings: Jelszóbeállítások
Set Password To Prevent Access: Jelszó beállítása a beállításokhoz való hozzáférés
Set Password To Prevent Access: Jelszó megadása a beállításokhoz való hozzáférés
megakadályozásához
Set Password: Jelszó megadása
Remove Password: Jelszó eltávolítása
Expand All Settings Sections: Minden beállítási szakasz kibontása
About:
#On About page
About: 'Névjegy'
@ -716,7 +718,7 @@ Video:
Play Next Video: 'Következő videó lejátszása'
Play Previous Video: 'Előző videó lejátszása'
Watched: 'Megtekintett'
Autoplay: 'Önműködő lejátszás'
Autoplay: 'Automatikus lejátszás'
Starting soon, please refresh the page to check again: 'Hamarosan kezdődik, kérjük,
frissítse a lapot az ellenőrzéshez'
# As in a Live Video
@ -762,7 +764,7 @@ Video:
Years: 'évvel'
Ago: 'ezelőtt'
Upcoming: 'Első előadás dátuma'
In less than a minute: Kevesebb, mint egy perccel ezelőtt
In less than a minute: Kevesebb, mint egy perce
Published on: 'Megjelent'
Publicationtemplate: '{number} {unit} ezelőtt'
#& Videos
@ -929,7 +931,7 @@ Shuffle is now enabled: 'Véletlen sorrendű lejátszás bekapcsolva'
The playlist has been reversed: 'Lejátszási lista megfordítva'
Playing Next Video: 'Következő videó lejátszása'
Playing Previous Video: 'Előző videó lejátszása'
Canceled next video autoplay: 'Következő videó önműködő lejátszása megszakítva'
Canceled next video autoplay: 'Következő videó automatikus lejátszásának megszakítása'
'The playlist has ended. Enable loop to continue playing': 'A lejátszási lista véget
ért. Engedélyezze a folyamatos lejátszást a lejátszás folytatásához'
@ -946,8 +948,8 @@ Tooltips:
API-hívásokhoz.
Thumbnail Preference: A FreeTube összes indexképét a videó egy képkockája váltja
fel az alapértelmezett miniatűr helyett.
Fallback to Non-Preferred Backend on Failure: Ha az Ön által előnyben részesített
API-val hibába merül fel, a FreeTube önműködően megpróbálja a nem előnyben részesített
Fallback to Non-Preferred Backend on Failure: Ha az előnyben részesített API-jával
hiba merül fel, a FreeTube automatikusan megpróbálja a nem előnyben részesített
API-t tartalékként használni, ha engedélyezve van.
External Link Handling: "Válassza ki az alapértelmezett viselkedést, ha egy hivatkozásra
kattintanak, amely nem nyitható meg FreeTube-ban.\nA FreeTube alapértelmezés
@ -958,7 +960,7 @@ Tooltips:
Az RSS gyorsabb és megakadályozza az IP-zárolást, de nem nyújt bizonyos tájékoztatást,
például a videó időtartamát vagy az élő állapotot
Fetch Automatically: Ha engedélyezve van, a FreeTube új ablak megnyitásakor és
profilváltáskor önműködően lekéri az feliratkozási hírfolyamot.
profilváltáskor automatikusan lekéri az feliratkozási hírfolyamot.
Player Settings:
Default Video Format: Állítsa be a videó lejátszásakor használt formátumokat.
A DASH (dinamikus adaptív sávszélességű folyamatos átvitel HTTP-n keresztül)
@ -986,8 +988,8 @@ Tooltips:
Nem minden videónál érhetők el, ilyenkor a lejátszó a DASH H.264 formátumot
használja helyette.
Privacy Settings:
Remove Video Meta Files: Ha engedélyezve van, a FreeTube önműködően törli a videolejátszás
során létrehozott metafájlokat, amikor a nézőlap bezár.
Remove Video Meta Files: Ha engedélyezve van, a FreeTube automatikusan törli a
videolejátszás során létrehozott metafájlokat, amikor a nézőlapot bezárják.
External Player Settings:
Custom External Player Executable: Alapértelmezés szerint a FreeTube feltételezi,
hogy a kiválasztott külső lejátszó megtalálható a PATH (ÚTVONAL) környezeti
@ -1019,7 +1021,7 @@ Playing Next Video Interval: A következő videó lejátszása folyamatban van.
másodperc múlva történik. Kattintson a törléshez.
More: Több
Hashtags have not yet been implemented, try again later: A kettőskeresztescímkék kezelése
még nincs implementálva. próbálkozz a következő verzióban
még nincs implementálva, próbálkozzon újra később
Unknown YouTube url type, cannot be opened in app: Ismeretlen YouTube URL-típusa,
nem nyitható meg az alkalmazásban
Open New Window: Új ablak megnyitása

View File

@ -38,6 +38,9 @@ Global:
Live: Tiesiogiai
Shorts: Šortai
Community: Bendruomenė
Counts:
Subscriber Count: 1 prenumeruoti | {count} prenumeratorių
Channel Count: 1 kanalas | {count} kanalai
Version {versionNumber} is now available! Click for more details: 'Versija {versionNumber}
jau prieinama! Spustelėkite, jei norite gauti daugiau informacijos'
Download From Site: 'Atsisiųsti iš svetainės'
@ -906,3 +909,4 @@ Clipboard:
Cannot access clipboard without a secure connection: Negalima pasiekti iškarpinės
be saugaus ryšio
Preferences: Nuostatos
Go to page: Eiti į {page}

View File

@ -925,7 +925,7 @@ Share:
YouTube Embed URL copied to clipboard: YouTube уграђени URL је копиран у привремену
меморију
Falling back to the local API: Повратак на локални API
Unknown YouTube url type, cannot be opened in app: Непозната врста YouTube URL-а,
Unknown YouTube url type, cannot be opened in app: Непозната врста YouTube URL адресе,
не може се отворити у апликацији
Search Bar:
Clear Input: Очисти унос

View File

@ -325,6 +325,8 @@ Settings:
Fetch Feeds from RSS: 'Akışları RSS''den Getir'
Manage Subscriptions: 'Abonelikleri Yönet'
Fetch Automatically: Akışı Otomatik Olarak Getir
Only Show Latest Video for Each Channel: Her Kanal için Yalnızca En Son Videoyu
Göster
Data Settings:
Data Settings: 'Veri Ayarları'
Select Import Type: 'İçe Aktarma Türünü Seç'
@ -519,6 +521,7 @@ Settings:
Set Password To Prevent Access: Ayarlara erişimi engellemek için bir parola belirleyin
Remove Password: Parolayı Kaldır
Set Password: Parola Ayarla
Expand All Settings Sections: Tüm Ayarlar Bölümlerini Genişlet
About:
#On About page
About: 'Hakkında'
@ -629,6 +632,11 @@ Profile:
Profile Filter: Profil Filtresi
Profile Settings: Profil Ayarları
Toggle Profile List: Profil Listesini Aç/Kapat
Profile Name: Profil Adı
Edit Profile Name: Profil Adını Düzenle
Create Profile Name: Profil Adı Oluştur
Open Profile Dropdown: Profil Açılır Menüsünü Aç
Close Profile Dropdown: Profil Açılır Menüsünü Kapat
Channel:
Subscriber: 'Abone'
Subscribers: 'Abone'
@ -834,6 +842,8 @@ Video:
sohbet bu yayın için kullanılamıyor. Yükleyen tarafından devre dışı bırakılmış
olabilir.
Pause on Current Video: Geçerli Videoda Duraklat
Unhide Channel: Kanalı Göster
Hide Channel: Kanalı Gizle
Videos:
#& Sort By
Sort By:
@ -1070,3 +1080,6 @@ Playlist will pause when current video is finished: Geçerli video bittiğinde o
listesi duraklatılacak
Playlist will not pause when current video is finished: Geçerli video bittiğinde oynatma
listesi duraklatılmayacak
Channel Hidden: '{channel} kanal filtresine eklendi'
Go to page: '{page}. sayfaya git'
Channel Unhidden: '{channel} kanal filtresinden kaldırıldı'

View File

@ -329,6 +329,8 @@ Settings:
Fetch Feeds from RSS: 'Отримати канали з RSS'
Manage Subscriptions: 'Керування підписками'
Fetch Automatically: Автоматично отримувати стрічку
Only Show Latest Video for Each Channel: Показувати лише останні відео для кожного
каналу
Distraction Free Settings:
Distraction Free Settings: 'Налаштування зосередження'
Hide Video Views: 'Сховати перегляди відео'
@ -369,6 +371,12 @@ Settings:
Hide Profile Pictures in Comments: Сховати зображення профілю в коментарях
Blur Thumbnails: Розмиті мініатюри
Hide Subscriptions Community: Сховати спільноту підписників
Hide Channels Invalid: Вказаний ID каналу недійсний
Hide Channels Disabled Message: Деякі канали були заблоковані за допомогою ID
і не були оброблені. Функція заблокована в той час, як ці ID оновлювалися
Hide Channels Already Exists: ID каналу вже існує
Hide Channels API Error: Помилка під час пошуку користувача з наданим ID. Перевірте
ще раз, чи правильний ID.
Data Settings:
Data Settings: 'Налаштування даних'
Select Import Type: 'Оберіть тип імпорту'
@ -483,6 +491,7 @@ Settings:
Set Password: Установити пароль
Remove Password: Вилучити пароль
Set Password To Prevent Access: Встановіть пароль, щоб запобігти доступу до налаштувань
Expand All Settings Sections: Розгорнути всі розділи налаштувань
About:
#On About page
About: 'Про'
@ -555,6 +564,11 @@ Profile:
Profile Filter: Фільтр профілю
Profile Settings: Налаштування профілю
Toggle Profile List: Перемкнути список профілів
Profile Name: Назва профілю
Edit Profile Name: Змінити назву профілю
Create Profile Name: Створити назву профілю
Open Profile Dropdown: Відкрити спадне меню профілю
Close Profile Dropdown: Закрити спадне меню профілю
Channel:
Subscriber: 'Підписник'
Subscribers: 'Підписники'
@ -757,6 +771,8 @@ Video:
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Спілкування
наживо недоступне для цієї трансляції. Можливо, вивантажувач вимкнув його.
Pause on Current Video: Призупинити на поточному відео
Unhide Channel: Показати канал
Hide Channel: Сховати канал
Videos:
#& Sort By
Sort By:
@ -906,9 +922,9 @@ Tooltips:
Replace HTTP Cache: Вимикає дисковий HTTP-кеш Electron і вмикає власний кеш зображень
у пам'яті. Призведе до збільшення використання оперативної пам'яті.
Distraction Free Settings:
Hide Channels: Введіть назву або ID каналу, щоб сховати всі відео, списки відтворення
та сам канал від появи в пошуку, тренді, найпопулярніших і рекомендованих. Введена
назва каналу повинна повністю збігатися і чутлива до регістру.
Hide Channels: Введіть ID, щоб сховати всі відео, списки відтворення та сам канал
від появи в пошуку, тренді, найпопулярніших і рекомендованих. Введений ID каналу
повинен повністю збігатися і чутливий до регістру.
Hide Subscriptions Live: Цей параметр перевизначається загальнодоступним налаштуванням
"{appWideSetting}" у розділі "{subsection}" "{settingsSection}"
SponsorBlock Settings:
@ -996,3 +1012,6 @@ Playlist will pause when current video is finished: Добірка призуп
відео завершено
Playlist will not pause when current video is finished: Добірка не призупиняється,
коли поточне відео завершено
Channel Hidden: '{channel} додано до фільтра каналу'
Go to page: Перейти до {page}
Channel Unhidden: '{channel} вилучено з фільтра каналу'

278
yarn.lock
View File

@ -28,26 +28,26 @@
"@babel/highlight" "^7.23.4"
chalk "^2.4.2"
"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5":
"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
"@babel/core@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7"
integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==
"@babel/core@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4"
integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.5"
"@babel/helper-compilation-targets" "^7.22.15"
"@babel/generator" "^7.23.6"
"@babel/helper-compilation-targets" "^7.23.6"
"@babel/helper-module-transforms" "^7.23.3"
"@babel/helpers" "^7.23.5"
"@babel/parser" "^7.23.5"
"@babel/helpers" "^7.23.6"
"@babel/parser" "^7.23.6"
"@babel/template" "^7.22.15"
"@babel/traverse" "^7.23.5"
"@babel/types" "^7.23.5"
"@babel/traverse" "^7.23.6"
"@babel/types" "^7.23.6"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@ -63,12 +63,12 @@
eslint-visitor-keys "^2.1.0"
semver "^6.3.1"
"@babel/generator@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755"
integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==
"@babel/generator@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
dependencies:
"@babel/types" "^7.23.5"
"@babel/types" "^7.23.6"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
@ -94,14 +94,14 @@
dependencies:
"@babel/types" "^7.22.15"
"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52"
integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==
"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
dependencies:
"@babel/compat-data" "^7.22.9"
"@babel/helper-validator-option" "^7.22.15"
browserslist "^4.21.9"
"@babel/compat-data" "^7.23.5"
"@babel/helper-validator-option" "^7.23.5"
browserslist "^4.22.2"
lru-cache "^5.1.1"
semver "^6.3.1"
@ -350,7 +350,7 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5":
"@babel/helper-validator-option@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
@ -364,14 +364,14 @@
"@babel/template" "^7.22.15"
"@babel/types" "^7.22.19"
"@babel/helpers@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e"
integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==
"@babel/helpers@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a"
integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==
dependencies:
"@babel/template" "^7.22.15"
"@babel/traverse" "^7.23.5"
"@babel/types" "^7.23.5"
"@babel/traverse" "^7.23.6"
"@babel/types" "^7.23.6"
"@babel/highlight@^7.23.4":
version "7.23.4"
@ -382,10 +382,10 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
"@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563"
integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==
"@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3":
version "7.23.3"
@ -677,12 +677,13 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
"@babel/plugin-transform-for-of@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559"
integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==
"@babel/plugin-transform-for-of@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e"
integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
"@babel/plugin-transform-function-name@^7.23.3":
version "7.23.3"
@ -939,13 +940,13 @@
"@babel/helper-create-regexp-features-plugin" "^7.22.15"
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/preset-env@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.5.tgz#350a3aedfa9f119ad045b068886457e895ba0ca1"
integrity sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==
"@babel/preset-env@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a"
integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==
dependencies:
"@babel/compat-data" "^7.23.5"
"@babel/helper-compilation-targets" "^7.22.15"
"@babel/helper-compilation-targets" "^7.23.6"
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-validator-option" "^7.23.5"
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3"
@ -985,7 +986,7 @@
"@babel/plugin-transform-dynamic-import" "^7.23.4"
"@babel/plugin-transform-exponentiation-operator" "^7.23.3"
"@babel/plugin-transform-export-namespace-from" "^7.23.4"
"@babel/plugin-transform-for-of" "^7.23.3"
"@babel/plugin-transform-for-of" "^7.23.6"
"@babel/plugin-transform-function-name" "^7.23.3"
"@babel/plugin-transform-json-strings" "^7.23.4"
"@babel/plugin-transform-literals" "^7.23.3"
@ -1055,26 +1056,26 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec"
integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==
"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5"
integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==
dependencies:
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.5"
"@babel/generator" "^7.23.6"
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
"@babel/parser" "^7.23.5"
"@babel/types" "^7.23.5"
debug "^4.1.0"
"@babel/parser" "^7.23.6"
"@babel/types" "^7.23.6"
debug "^4.3.1"
globals "^11.1.0"
"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.5", "@babel/types@^7.4.4":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602"
integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==
"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.4.4":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd"
integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==
dependencies:
"@babel/helper-string-parser" "^7.23.4"
"@babel/helper-validator-identifier" "^7.22.20"
@ -1186,10 +1187,10 @@
dependencies:
eslint-visitor-keys "^3.3.0"
"@eslint-community/regexpp@^4.5.0", "@eslint-community/regexpp@^4.6.1":
version "4.6.2"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
"@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1":
version "4.10.0"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
"@eslint/eslintrc@^2.1.4":
version "2.1.4"
@ -1206,10 +1207,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@eslint/js@8.55.0":
version "8.55.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6"
integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==
"@eslint/js@8.56.0":
version "8.56.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b"
integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==
"@fastify/busboy@^2.0.0":
version "2.0.0"
@ -1422,10 +1423,10 @@
resolved "https://registry.yarnpkg.com/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz#165a9a456eaa30d15885b25db83861bcce2c6a74"
integrity sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==
"@seald-io/nedb@^4.0.2":
version "4.0.2"
resolved "https://registry.yarnpkg.com/@seald-io/nedb/-/nedb-4.0.2.tgz#44bc5f9b86e44f7434c5af8064cc7f8e079fc3a8"
integrity sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw==
"@seald-io/nedb@^4.0.3":
version "4.0.3"
resolved "https://registry.yarnpkg.com/@seald-io/nedb/-/nedb-4.0.3.tgz#39c4f47df12e493cb0ae88b8619a70f85e46eea6"
integrity sha512-ik4rn0Ks8q1VEzhe6qFh9/MBrw77ym1OZxF2mBS6/H8cr4lpNhCvF8FqB901Oft1CSP50LL0ay4QQCU3xqn+Ew==
dependencies:
"@seald-io/binary-search-tree" "^1.0.3"
localforage "^1.9.0"
@ -2405,7 +2406,7 @@ braces@^3.0.2, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1:
browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.4, browserslist@^4.22.1:
version "4.22.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
@ -2415,6 +2416,16 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.4, browserslist@^4
node-releases "^2.0.13"
update-browserslist-db "^1.0.13"
browserslist@^4.22.2:
version "4.22.2"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b"
integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==
dependencies:
caniuse-lite "^1.0.30001565"
electron-to-chromium "^1.4.601"
node-releases "^2.0.14"
update-browserslist-db "^1.0.13"
buffer-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
@ -2580,6 +2591,11 @@ caniuse-lite@^1.0.30001541:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz#7d1a3dce7ea78c06ed72c32c2743ea364b3615aa"
integrity sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==
caniuse-lite@^1.0.30001565:
version "1.0.30001570"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz#b4e5c1fa786f733ab78fc70f592df6b3f23244ca"
integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
@ -3432,10 +3448,15 @@ electron-to-chromium@^1.4.535:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz#04e09c2ee31dc0f1546174033809b54cc372740b"
integrity sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==
electron@^27.1.3:
version "27.1.3"
resolved "https://registry.yarnpkg.com/electron/-/electron-27.1.3.tgz#3fd6decda95c1dd0a7e51a9ac77ee0ba37b7c5c6"
integrity sha512-7eD8VMhhlL5J531OOawn00eMthUkX1e3qN5Nqd7eMK8bg5HxQBrn8bdPlvUEnCano9KhrVwaDnGeuzWoDOGpjQ==
electron-to-chromium@^1.4.601:
version "1.4.614"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz#2fe789d61fa09cb875569f37c309d0c2701f91c0"
integrity sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==
electron@^28.0.0:
version "28.0.0"
resolved "https://registry.yarnpkg.com/electron/-/electron-28.0.0.tgz#21e5590c967125a3c1ec6b0d8d923baf9eb6fd72"
integrity sha512-eDhnCFBvG0PGFVEpNIEdBvyuGUBsFdlokd+CtuCe2ER3P+17qxaRfWRxMmksCOKgDHb5Wif5UxqOkZSlA4snlw==
dependencies:
"@electron/get" "^2.0.0"
"@types/node" "^18.11.18"
@ -3677,7 +3698,7 @@ escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-compat-utils@^0.1.0, eslint-compat-utils@^0.1.2:
eslint-compat-utils@^0.1.1, eslint-compat-utils@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653"
integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==
@ -3708,18 +3729,19 @@ eslint-module-utils@^2.8.0:
dependencies:
debug "^3.2.7"
eslint-plugin-es-x@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.1.0.tgz#f0d5421e658cca95c1cfb2355831851bdc83322d"
integrity sha512-AhiaF31syh4CCQ+C5ccJA0VG6+kJK8+5mXKKE7Qs1xcPRg02CDPOj3mWlQxuWS/AYtg7kxrDNgW9YW3vc0Q+Mw==
eslint-plugin-es-x@^7.5.0:
version "7.5.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz#d08d9cd155383e35156c48f736eb06561d07ba92"
integrity sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==
dependencies:
"@eslint-community/eslint-utils" "^4.1.2"
"@eslint-community/regexpp" "^4.5.0"
"@eslint-community/regexpp" "^4.6.0"
eslint-compat-utils "^0.1.2"
eslint-plugin-import@^2.29.0:
version "2.29.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155"
integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==
eslint-plugin-import@^2.29.1:
version "2.29.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643"
integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==
dependencies:
array-includes "^3.1.7"
array.prototype.findlastindex "^1.2.3"
@ -3737,26 +3759,27 @@ eslint-plugin-import@^2.29.0:
object.groupby "^1.0.1"
object.values "^1.1.7"
semver "^6.3.1"
tsconfig-paths "^3.14.2"
tsconfig-paths "^3.15.0"
eslint-plugin-jsonc@^2.10.0:
version "2.10.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.10.0.tgz#4286fd49a79ee3dd86f9c6c61b6f3c65f30b954f"
integrity sha512-9d//o6Jyh4s1RxC9fNSt1+MMaFN2ruFdXPG9XZcb/mR2KkfjADYiNL/hbU6W0Cyxfg3tS/XSFuhl5LgtMD8hmw==
eslint-plugin-jsonc@^2.11.1:
version "2.11.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.11.1.tgz#a6f63ce78362a9d72b4917324f858693c5b35beb"
integrity sha512-zQ2h7x0gOdUfogfZJzLdclDWu9bksUQtC/zYmU17eLCBv4yETht8r2sbCRx4EECUdZAS8sW/UF7bTba95BoXRQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
eslint-compat-utils "^0.1.2"
graphemer "^1.4.0"
jsonc-eslint-parser "^2.0.4"
natural-compare "^1.4.0"
eslint-plugin-n@^16.3.1:
version "16.3.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz#6cd377d1349fed10854b6535392e91fb4123193b"
integrity sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==
eslint-plugin-n@^16.4.0:
version "16.4.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.4.0.tgz#02ff70d2b164319b6d566672969a9c24688a43df"
integrity sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
builtins "^5.0.1"
eslint-plugin-es-x "^7.1.0"
eslint-plugin-es-x "^7.5.0"
get-tsconfig "^4.7.0"
ignore "^5.2.4"
is-builtin-module "^3.2.1"
@ -3820,13 +3843,13 @@ eslint-plugin-vuejs-accessibility@^2.2.0:
emoji-regex "^10.0.0"
vue-eslint-parser "^9.0.1"
eslint-plugin-yml@^1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-yml/-/eslint-plugin-yml-1.10.0.tgz#0c750253825ff352fb11b824d80864d8a2df3408"
integrity sha512-53SUwuNDna97lVk38hL/5++WXDuugPM9SUQ1T645R0EHMRCdBIIxGye/oOX2qO3FQ7aImxaUZJU/ju+NMUBrLQ==
eslint-plugin-yml@^1.11.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-yml/-/eslint-plugin-yml-1.11.0.tgz#7c1db2fdc0cb47aec4b76287e6494009cf703179"
integrity sha512-NBZP1NDGy0u38pY5ieix75jxS9GNOJy9xd4gQa0rU4gWbfEsVhKDwuFaQ6RJpDbv6Lq5TtcAZS/YnAc0oeRw0w==
dependencies:
debug "^4.3.2"
eslint-compat-utils "^0.1.0"
eslint-compat-utils "^0.1.1"
lodash "^4.17.21"
natural-compare "^1.4.0"
yaml-eslint-parser "^1.2.1"
@ -3857,15 +3880,15 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
eslint@^8.55.0:
version "8.55.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8"
integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==
eslint@^8.56.0:
version "8.56.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15"
integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.4"
"@eslint/js" "8.55.0"
"@eslint/js" "8.56.0"
"@humanwhocodes/config-array" "^0.11.13"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
@ -4740,10 +4763,10 @@ html-tags@^3.3.1:
resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
html-webpack-plugin@^5.5.3:
version "5.5.3"
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e"
integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==
html-webpack-plugin@^5.5.4:
version "5.5.4"
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz#517a48e6f046ff1ae1a172c983cd993eb79d2f6a"
integrity sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==
dependencies:
"@types/html-minifier-terser" "^6.0.0"
html-minifier-terser "^6.0.2"
@ -5690,7 +5713,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21:
lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@ -5753,10 +5776,10 @@ map-obj@^4.1.0:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
marked@^11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/marked/-/marked-11.0.0.tgz#02e63c4352a59a268e2e5b3afb7a46851c0b446d"
integrity sha512-2GsW34uXaFEGTQ/+3rCnNC6vUYTAgFuDLGl70v/aWinA5mIJtTrrFAmfbLOfVvgPyxXuDVL9He/7reCK+6j3Sw==
marked@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/marked/-/marked-11.1.0.tgz#f2d12323e80ba8a97cc8262fe7e94fcc007476ab"
integrity sha512-fvKJWAPEafVj1dwGwcPI5mBB/0pvViL6NlCbNDG1HOIRwwAU/jeMoFxfbRLuirO1wRH7m4yPvBqD/O1wyWvayw==
matcher@^3.0.0:
version "3.0.0"
@ -6075,6 +6098,11 @@ node-releases@^2.0.13:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
node-releases@^2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@ -8038,6 +8066,11 @@ svgo@^3.0.2:
csso "^5.0.5"
picocolors "^1.0.0"
swiper@^11.0.5:
version "11.0.5"
resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.0.5.tgz#6ed1ad06e6906ba42fd4b93d4988f0626a49046e"
integrity sha512-rhCwupqSyRnWrtNzWzemnBLMoyYuoDgGgspAm/8iBD3jCvAWycPLH4Z3TB0O5520DHLzMx94yUMH/B9Efpa48w==
synckit@^0.8.5:
version "0.8.5"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
@ -8123,11 +8156,6 @@ thunky@^1.0.2:
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
tiny-slider@^2.9.2:
version "2.9.4"
resolved "https://registry.yarnpkg.com/tiny-slider/-/tiny-slider-2.9.4.tgz#dd5cbf3065f1688ade8383ea6342aefcba22ccc4"
integrity sha512-LAs2kldWcY+BqCKw4kxd4CMx2RhWrHyEePEsymlOIISTlOVkjfK40sSD7ay73eKXBLg/UkluAZpcfCstimHXew==
titleize@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
@ -8189,10 +8217,10 @@ truncate-utf8-bytes@^1.0.0:
dependencies:
utf8-byte-length "^1.0.1"
tsconfig-paths@^3.14.2:
version "3.14.2"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==
tsconfig-paths@^3.15.0:
version "3.15.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
dependencies:
"@types/json5" "^0.0.29"
json5 "^1.0.2"
@ -8619,14 +8647,6 @@ vue-template-es2015-compiler@^1.9.0:
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
vue-tiny-slider@^0.1.39:
version "0.1.39"
resolved "https://registry.yarnpkg.com/vue-tiny-slider/-/vue-tiny-slider-0.1.39.tgz#9301eada256fa12725b050767e1e67a287b3e3ef"
integrity sha512-dLOuMI6YyIBabXPZTQ0LL2jhOqZuwsCD7ztPEoE1ejFQ9GNxyRxwkRsIwUtVnq5SCTzQAhCYlgoibyMGoDHReA==
dependencies:
lodash "^4.17.11"
tiny-slider "^2.9.2"
vue@^2.7.15:
version "2.7.15"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.15.tgz#94cd34e6e9f22cd2d35a02143f96a5beac1c1f54"