diff --git a/.github/workflows/calibreapp-image-actions.yml b/.github/workflows/calibreapp-image-actions.yml
index f94e1ac32c843..d336cad2328ab 100644
--- a/.github/workflows/calibreapp-image-actions.yml
+++ b/.github/workflows/calibreapp-image-actions.yml
@@ -20,7 +20,7 @@ jobs:
compressOnly: true
- name: Create New Pull Request If Needed
if: steps.calibre.outputs.markdown != ''
- uses: peter-evans/create-pull-request@v5
+ uses: peter-evans/create-pull-request@v6
with:
title: Compressed Images Nightly
branch-suffix: timestamp
diff --git a/.github/workflows/label-issue.yml b/.github/workflows/label-issue.yml
index 46eed6d43bfae..24e42dc04f3c9 100644
--- a/.github/workflows/label-issue.yml
+++ b/.github/workflows/label-issue.yml
@@ -11,7 +11,7 @@ jobs:
triage:
runs-on: ubuntu-latest
steps:
- - uses: github/issue-labeler@v3.3
+ - uses: github/issue-labeler@v3.4
with:
configuration-path: .github/issue-labeler.yml
enable-versioned-regex: 0
diff --git a/_icons/iconNordicLightSmall.png b/_icons/iconNordicLightSmall.png
new file mode 100644
index 0000000000000..b5b83494c8e56
Binary files /dev/null and b/_icons/iconNordicLightSmall.png differ
diff --git a/_icons/textNordicLightSmall.png b/_icons/textNordicLightSmall.png
new file mode 100644
index 0000000000000..b23422a08c14f
Binary files /dev/null and b/_icons/textNordicLightSmall.png differ
diff --git a/_scripts/webpack.renderer.config.js b/_scripts/webpack.renderer.config.js
index 057be25f4a65b..385b6e29abd8d 100644
--- a/_scripts/webpack.renderer.config.js
+++ b/_scripts/webpack.renderer.config.js
@@ -1,5 +1,5 @@
const path = require('path')
-const { readFileSync } = require('fs')
+const { readFileSync, readdirSync } = require('fs')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
@@ -117,7 +117,8 @@ const config = {
new webpack.DefinePlugin({
'process.env.IS_ELECTRON': true,
'process.env.IS_ELECTRON_MAIN': false,
- 'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames)
+ 'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames),
+ 'process.env.GEOLOCATION_NAMES': JSON.stringify(readdirSync(path.join(__dirname, '..', 'static', 'geolocations')).map(filename => filename.replace('.json', '')))
}),
new HtmlWebpackPlugin({
excludeChunks: ['processTaskWorker'],
diff --git a/package.json b/package.json
index 5dc59259508ad..3a6bdfb639834 100644
--- a/package.json
+++ b/package.json
@@ -65,7 +65,7 @@
"core-js": "^3.35.1",
"electron-context-menu": "^3.6.1",
"lodash.debounce": "^4.0.8",
- "marked": "^11.1.1",
+ "marked": "^11.2.0",
"path-browserify": "^1.0.1",
"process": "^0.11.10",
"swiper": "^11.0.5",
@@ -83,51 +83,51 @@
"youtubei.js": "^8.2.0"
},
"devDependencies": {
- "@babel/core": "^7.23.7",
- "@babel/eslint-parser": "^7.23.3",
+ "@babel/core": "^7.23.9",
+ "@babel/eslint-parser": "^7.23.10",
"@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/preset-env": "^7.23.8",
- "@double-great/stylelint-a11y": "^3.0.0",
+ "@babel/preset-env": "^7.23.9",
+ "@double-great/stylelint-a11y": "^3.0.1",
"babel-loader": "^9.1.3",
"copy-webpack-plugin": "^12.0.2",
- "css-loader": "^6.9.1",
+ "css-loader": "^6.10.0",
"css-minimizer-webpack-plugin": "^6.0.0",
- "electron": "^28.1.4",
+ "electron": "^28.2.1",
"electron-builder": "^24.9.1",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.29.1",
- "eslint-plugin-jsonc": "^2.11.2",
+ "eslint-plugin-jsonc": "^2.13.0",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-unicorn": "^50.0.1",
- "eslint-plugin-vue": "^9.20.1",
- "eslint-plugin-vuejs-accessibility": "^2.2.0",
- "eslint-plugin-yml": "^1.11.0",
+ "eslint-plugin-vue": "^9.21.1",
+ "eslint-plugin-vuejs-accessibility": "^2.2.1",
+ "eslint-plugin-yml": "^1.12.2",
"html-webpack-plugin": "^5.6.0",
"js-yaml": "^4.1.0",
"json-minimizer-webpack-plugin": "^5.0.0",
- "lefthook": "^1.6.0",
- "mini-css-extract-plugin": "^2.7.7",
+ "lefthook": "^1.6.1",
+ "mini-css-extract-plugin": "^2.8.0",
"npm-run-all": "^4.1.5",
"postcss": "^8.4.33",
"postcss-scss": "^4.0.9",
"prettier": "^2.8.8",
"rimraf": "^5.0.5",
"sass": "^1.70.0",
- "sass-loader": "^14.0.0",
- "stylelint": "^16.2.0",
+ "sass-loader": "^14.1.0",
+ "stylelint": "^16.2.1",
"stylelint-config-sass-guidelines": "^11.0.0",
"stylelint-config-standard": "^36.0.0",
"stylelint-high-performance-animation": "^1.10.0",
"stylelint-use-logical-spec": "^5.0.1",
"tree-kill": "1.2.2",
"vue-devtools": "^5.1.4",
- "vue-eslint-parser": "^9.3.2",
+ "vue-eslint-parser": "^9.4.2",
"vue-loader": "^15.10.0",
- "webpack": "^5.89.0",
+ "webpack": "^5.90.1",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1",
"webpack-watch-external-files-plugin": "^3.0.0",
diff --git a/src/main/index.js b/src/main/index.js
index 23b561cee10b4..2f8944c88df09 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -493,6 +493,8 @@ function runApp() {
return '#ffd1dc'
case 'hot-pink':
return '#de1c85'
+ case 'nordic':
+ return '#2b2f3a'
case 'system':
default:
return nativeTheme.shouldUseDarkColors ? '#212121' : '#f1f1f1'
diff --git a/src/renderer/components/ft-channel-bubble/ft-channel-bubble.css b/src/renderer/components/ft-channel-bubble/ft-channel-bubble.css
index 1a4878d64cb3c..701c0eb961aff 100644
--- a/src/renderer/components/ft-channel-bubble/ft-channel-bubble.css
+++ b/src/renderer/components/ft-channel-bubble/ft-channel-bubble.css
@@ -25,6 +25,7 @@
block-size: 50px;
border-radius: 100%;
-webkit-border-radius: 100%;
+ object-fit: cover;
}
.selected {
diff --git a/src/renderer/components/ft-community-post/ft-community-post.scss b/src/renderer/components/ft-community-post/ft-community-post.scss
index 64a618cfe9f4e..838cb658ba719 100644
--- a/src/renderer/components/ft-community-post/ft-community-post.scss
+++ b/src/renderer/components/ft-community-post/ft-community-post.scss
@@ -144,5 +144,5 @@
}
.sliderContainer {
- display: block;
+ display: grid;
}
diff --git a/src/renderer/components/ft-community-post/ft-community-post.vue b/src/renderer/components/ft-community-post/ft-community-post.vue
index d5701b660fe24..053bd4c61a59d 100644
--- a/src/renderer/components/ft-community-post/ft-community-post.vue
+++ b/src/renderer/components/ft-community-post/ft-community-post.vue
@@ -56,27 +56,25 @@
class="postText"
v-html="postText"
/>
-
-
+
-
-
-
+
+
diff --git a/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.css b/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.css
new file mode 100644
index 0000000000000..20e216423f167
--- /dev/null
+++ b/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.css
@@ -0,0 +1,17 @@
+/*
+ Set a height to invisible/unloaded elements, so that lazy loading actually works.
+ If we don't set a height, they all get a height of 0px (because they have no content),
+ so they all bunch up together and end up loading all of them in one go.
+ */
+.placeholder {
+ block-size: 40px;
+}
+
+.videoIndex {
+ color: var(--tertiary-text-color);
+ text-align: center;
+}
+
+.videoIndexIcon {
+ font-size: 14px;
+}
diff --git a/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.js b/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.js
new file mode 100644
index 0000000000000..9ed32bb8e9a89
--- /dev/null
+++ b/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.js
@@ -0,0 +1,124 @@
+import { defineComponent } from 'vue'
+import FtListVideo from '../ft-list-video/ft-list-video.vue'
+
+export default defineComponent({
+ name: 'FtListVideoNumbered',
+ components: {
+ 'ft-list-video': FtListVideo
+ },
+ props: {
+ data: {
+ type: Object,
+ required: true
+ },
+ playlistId: {
+ type: String,
+ default: null
+ },
+ playlistType: {
+ type: String,
+ default: null
+ },
+ playlistIndex: {
+ type: Number,
+ default: null
+ },
+ playlistReverse: {
+ type: Boolean,
+ default: false
+ },
+ playlistShuffle: {
+ type: Boolean,
+ default: false
+ },
+ playlistLoop: {
+ type: Boolean,
+ default: false
+ },
+ playlistItemId: {
+ type: String,
+ default: null,
+ },
+ appearance: {
+ type: String,
+ required: true
+ },
+ initialVisibleState: {
+ type: Boolean,
+ default: false,
+ },
+ alwaysShowAddToPlaylistButton: {
+ type: Boolean,
+ default: false,
+ },
+ quickBookmarkButtonEnabled: {
+ type: Boolean,
+ default: true,
+ },
+ canMoveVideoUp: {
+ type: Boolean,
+ default: false,
+ },
+ canMoveVideoDown: {
+ type: Boolean,
+ default: false,
+ },
+ canRemoveFromPlaylist: {
+ type: Boolean,
+ default: false,
+ },
+ videoIndex: {
+ type: Number,
+ default: -1
+ },
+ isCurrentVideo: {
+ type: Boolean,
+ default: false
+ },
+ useChannelsHiddenPreference: {
+ type: Boolean,
+ default: false,
+ }
+ },
+ data: function () {
+ return {
+ visible: false,
+ show: true
+ }
+ },
+ computed: {
+ channelsHidden() {
+ // Some component users like channel view will have this disabled
+ if (!this.useChannelsHiddenPreference) { return [] }
+
+ return JSON.parse(this.$store.getters.getChannelsHidden).map((ch) => {
+ // Legacy support
+ if (typeof ch === 'string') {
+ return { name: ch, preferredName: '', icon: '' }
+ }
+ return ch
+ })
+ },
+
+ // As we only use this component in Playlist and watch-video-playlist,
+ // where title filtering is never desired, we don't have any title filtering logic here,
+ // like we do in ft-list-video-lazy
+
+ shouldBeVisible() {
+ return !(this.channelsHidden.some(ch => ch.name === this.data.authorId) ||
+ this.channelsHidden.some(ch => ch.name === this.data.author))
+ }
+ },
+ created() {
+ this.visible = this.initialVisibleState
+ },
+ methods: {
+ onVisibilityChanged: function (visible) {
+ if (visible && this.shouldBeVisible) {
+ this.visible = visible
+ } else if (visible) {
+ this.show = false
+ }
+ }
+ }
+})
diff --git a/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.vue b/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.vue
new file mode 100644
index 0000000000000..745a704fe84c5
--- /dev/null
+++ b/src/renderer/components/ft-list-video-numbered/ft-list-video-numbered.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+ {{ videoIndex + 1 }}
+
+
+
+
+
+
+
+
+
diff --git a/src/renderer/components/ft-list-video/ft-list-video.js b/src/renderer/components/ft-list-video/ft-list-video.js
index 11c35f95475db..1befb4403e3d2 100644
--- a/src/renderer/components/ft-list-video/ft-list-video.js
+++ b/src/renderer/components/ft-list-video/ft-list-video.js
@@ -97,7 +97,6 @@ export default defineComponent({
lengthSeconds: 0,
duration: '',
description: '',
- watched: false,
watchProgress: 0,
publishedText: '',
isLive: false,
@@ -223,7 +222,7 @@ export default defineComponent({
dropdownOptions: function () {
const options = [
{
- label: this.watched
+ label: this.historyEntryExists
? this.$t('Video.Remove From History')
: this.$t('Video.Mark As Watched'),
value: 'history'
@@ -343,7 +342,7 @@ export default defineComponent({
},
addWatchedStyle: function () {
- return this.watched && !this.inHistory
+ return this.historyEntryExists && !this.inHistory
},
externalPlayer: function () {
@@ -576,7 +575,7 @@ export default defineComponent({
}
this.openInExternalPlayer(payload)
- if (this.saveWatchedProgress && !this.watched) {
+ if (this.saveWatchedProgress && !this.historyEntryExists) {
this.markAsWatched()
}
},
@@ -584,7 +583,7 @@ export default defineComponent({
handleOptionsClick: function (option) {
switch (option) {
case 'history':
- if (this.watched) {
+ if (this.historyEntryExists) {
this.removeFromWatched()
} else {
this.markAsWatched()
@@ -727,8 +726,6 @@ export default defineComponent({
checkIfWatched: function () {
if (this.historyEntryExists) {
- this.watched = true
-
const historyEntry = this.historyEntry
if (this.saveWatchedProgress) {
@@ -744,7 +741,6 @@ export default defineComponent({
this.publishedText = ''
}
} else {
- this.watched = false
this.watchProgress = 0
}
},
@@ -766,8 +762,6 @@ export default defineComponent({
}
this.updateHistory(videoData)
showToast(this.$t('Video.Video has been marked as watched'))
-
- this.watched = true
},
removeFromWatched: function () {
@@ -775,7 +769,6 @@ export default defineComponent({
showToast(this.$t('Video.Video has been removed from your history'))
- this.watched = false
this.watchProgress = 0
},
diff --git a/src/renderer/components/ft-list-video/ft-list-video.vue b/src/renderer/components/ft-list-video/ft-list-video.vue
index 898364909ce1e..d8e373d2bc18b 100644
--- a/src/renderer/components/ft-list-video/ft-list-video.vue
+++ b/src/renderer/components/ft-list-video/ft-list-video.vue
@@ -104,7 +104,7 @@
{{ $t("Video.Watched") }}
@@ -126,12 +126,16 @@
>
{{ channelName }}
-
-
- •
- {{ $tc('Global.Counts.View Count', viewCount, {count: parsedViewCount}) }}
-
-
+
+ {{ channelName }}
+
+
+ •
+ {{ $tc('Global.Counts.View Count', viewCount, {count: parsedViewCount}) }}
+
{
this.toggleCopyVideosPrompt(true)
})
diff --git a/src/renderer/components/playlist-info/playlist-info.vue b/src/renderer/components/playlist-info/playlist-info.vue
index 4dd1f1e95bb01..d5af7424e0b15 100644
--- a/src/renderer/components/playlist-info/playlist-info.vue
+++ b/src/renderer/components/playlist-info/playlist-info.vue
@@ -47,9 +47,9 @@
{{ title }}
- {{ videoCount }} {{ $t("Playlist.Videos") }}
+ {{ $tc('Global.Counts.Video Count', videoCount, {count: parsedVideoCount}) }}
- - {{ viewCount }} {{ $t("Playlist.Views") }}
+ - {{ $tc('Global.Counts.View Count', viewCount, {count: parsedViewCount}) }}
-
diff --git a/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.js b/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.js
index f8875cb151428..958c03539324c 100644
--- a/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.js
+++ b/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.js
@@ -108,7 +108,7 @@ export default defineComponent({
case 'r':
case 'R':
case 'F5':
- if (!this.isLoading) {
+ if (!this.isLoading && this.activeSubscriptionList.length > 0) {
this.$emit('refresh')
}
break
diff --git a/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.vue b/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.vue
index cd54567ad14e0..a9eec461f0535 100644
--- a/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.vue
+++ b/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.vue
@@ -56,7 +56,7 @@
/>
{{ title }}
-
-
-
- {{ publishedString }} {{ dateString }}
-
-
- {{ parsedViewCount }}
+
+
+ {{ publishedString }} {{ dateString }} • {{ parsedViewCount }}
-
- {{ parsedLikeCount }}
-
+
{{ parsedLikeCount }}
+
+
diff --git a/src/renderer/helpers/api/local.js b/src/renderer/helpers/api/local.js
index 8f63b8b2bc0e7..81722ac93c613 100644
--- a/src/renderer/helpers/api/local.js
+++ b/src/renderer/helpers/api/local.js
@@ -461,7 +461,7 @@ function handleSearchResponse(response) {
const results = response.results
.filter((item) => {
- return item.type === 'Video' || item.type === 'Channel' || item.type === 'Playlist' || item.type === 'HashtagTile'
+ return item.type === 'Video' || item.type === 'Channel' || item.type === 'Playlist' || item.type === 'HashtagTile' || item.type === 'Movie'
})
.map((item) => parseListItem(item))
@@ -541,22 +541,41 @@ export function parseLocalPlaylistVideo(video) {
}
/**
- * @param {import('youtubei.js').YTNodes.Video} video
+ * @param {import('youtubei.js').YTNodes.Video | import('youtubei.js').YTNodes.Movie} item
*/
-export function parseLocalListVideo(video) {
- return {
- type: 'video',
- videoId: video.id,
- title: video.title.text,
- author: video.author.name,
- authorId: video.author.id,
- description: video.description,
- viewCount: extractNumberFromString(video.view_count.text),
- publishedText: video.published.isEmpty() ? null : video.published.text,
- lengthSeconds: isNaN(video.duration.seconds) ? '' : video.duration.seconds,
- liveNow: video.is_live,
- isUpcoming: video.is_upcoming || video.is_premiere,
- premiereDate: video.upcoming
+export function parseLocalListVideo(item) {
+ if (item.type === 'Movie') {
+ /** @type {import('youtubei.js').YTNodes.Movie} */
+ const movie = item
+
+ return {
+ type: 'video',
+ videoId: movie.id,
+ title: movie.title.text,
+ author: movie.author.name,
+ authorId: movie.author.id !== 'N/A' ? movie.author.id : null,
+ description: movie.description_snippet?.text,
+ lengthSeconds: isNaN(movie.duration.seconds) ? '' : movie.duration.seconds,
+ liveNow: false,
+ isUpcoming: false,
+ }
+ } else {
+ /** @type {import('youtubei.js').YTNodes.Video} */
+ const video = item
+ return {
+ type: 'video',
+ videoId: video.id,
+ title: video.title.text,
+ author: video.author.name,
+ authorId: video.author.id,
+ description: video.description,
+ viewCount: video.view_count == null ? null : extractNumberFromString(video.view_count.text),
+ publishedText: (video.published == null || video.published.isEmpty()) ? null : video.published.text,
+ lengthSeconds: isNaN(video.duration.seconds) ? '' : video.duration.seconds,
+ liveNow: video.is_live,
+ isUpcoming: video.is_upcoming || video.is_premiere,
+ premiereDate: video.upcoming
+ }
}
}
@@ -565,6 +584,7 @@ export function parseLocalListVideo(video) {
*/
function parseListItem(item) {
switch (item.type) {
+ case 'Movie':
case 'Video':
return parseLocalListVideo(item)
case 'Channel': {
@@ -631,8 +651,8 @@ export function parseLocalWatchNextVideo(video) {
title: video.title.text,
author: video.author.name,
authorId: video.author.id,
- viewCount: extractNumberFromString(video.view_count.text),
- publishedText: video.published.isEmpty() ? null : video.published.text,
+ viewCount: video.view_count == null ? null : extractNumberFromString(video.view_count.text),
+ publishedText: (video.published == null || video.published.isEmpty()) ? null : video.published.text,
lengthSeconds: isNaN(video.duration.seconds) ? '' : video.duration.seconds,
liveNow: video.is_live,
isUpcoming: video.is_premiere
@@ -726,7 +746,7 @@ export function parseLocalTextRuns(runs, emojiSize = 16, options = { looseChanne
case 'WEB_PAGE_TYPE_CHANNEL': {
const trimmedText = text.trim()
// In comments, mention can be `@Channel Name` (not handle, but name)
- if (CHANNEL_HANDLE_REGEX.test(trimmedText) || (options.looseChannelNameDetection && trimmedText.startsWith('@'))) {
+ if (CHANNEL_HANDLE_REGEX.test(trimmedText) || options.looseChannelNameDetection) {
// Note that in regex `\s` must be used since the text contain non-default space (the half-width space char when we press spacebar)
const spacesBefore = (spacesBeforeRegex.exec(text) || [''])[0]
const spacesAfter = (spacesAfterRegex.exec(text) || [''])[0]
diff --git a/src/renderer/store/modules/invidious.js b/src/renderer/store/modules/invidious.js
index c104ccf09741b..759632e2ddc55 100644
--- a/src/renderer/store/modules/invidious.js
+++ b/src/renderer/store/modules/invidious.js
@@ -1,5 +1,4 @@
import fs from 'fs/promises'
-import { pathExists } from '../../helpers/filesystem'
import { createWebURL, fetchWithTimeout } from '../../helpers/utils'
const state = {
@@ -47,7 +46,7 @@ const actions = {
/* eslint-disable-next-line n/no-path-concat */
const fileLocation = process.env.NODE_ENV === 'development' ? './static/' : `${__dirname}/static/`
const filePath = `${fileLocation}${fileName}`
- if (!process.env.IS_ELECTRON || await pathExists(filePath)) {
+ if (!process.env.IS_ELECTRON) {
console.warn('reading static file for invidious instances')
const fileData = process.env.IS_ELECTRON ? await fs.readFile(filePath, 'utf8') : await (await fetch(createWebURL(filePath))).text()
instances = JSON.parse(fileData).filter(e => {
diff --git a/src/renderer/store/modules/playlists.js b/src/renderer/store/modules/playlists.js
index 704d6ebb58887..2d24234a8bd6b 100644
--- a/src/renderer/store/modules/playlists.js
+++ b/src/renderer/store/modules/playlists.js
@@ -63,10 +63,13 @@ const actions = {
payload.createdAt = Date.now()
payload.lastUpdatedAt = Date.now()
// Ensure all videos has required attributes
+
+ const currentTime = new Date().getTime()
+
if (Array.isArray(payload.videos)) {
payload.videos.forEach(videoData => {
if (videoData.timeAdded == null) {
- videoData.timeAdded = new Date().getTime()
+ videoData.timeAdded = currentTime
}
if (videoData.playlistItemId == null) {
videoData.playlistItemId = generateRandomUniqueId()
@@ -149,11 +152,14 @@ const actions = {
// Since this action will ensure uniqueness of `playlistItemId` of added video entries
try {
const { _id, videos } = payload
+
+ const currentTime = new Date().getTime()
+
const newVideoObjects = videos.map((video) => {
// Create a new object to prevent changing existing values outside
const videoData = Object.assign({}, video)
if (videoData.timeAdded == null) {
- videoData.timeAdded = new Date().getTime()
+ videoData.timeAdded = currentTime
}
videoData.playlistItemId = generateRandomUniqueId()
// For backward compatibility
@@ -188,6 +194,9 @@ const actions = {
dispatch('addPlaylist', playlist)
})
} else {
+ const dateNow = Date.now()
+ const currentTime = new Date().getTime()
+
payload.forEach((playlist) => {
let anythingUpdated = false
// Assign generated playlist ID in case DB data corrupted
@@ -205,19 +214,19 @@ const actions = {
// Assign current time as created time in case DB data corrupted
if (playlist.createdAt == null) {
// Time now in unix time, in ms
- playlist.createdAt = Date.now()
+ playlist.createdAt = dateNow
anythingUpdated = true
}
// Assign current time as last updated time in case DB data corrupted
if (playlist.lastUpdatedAt == null) {
// Time now in unix time, in ms
- playlist.lastUpdatedAt = Date.now()
+ playlist.lastUpdatedAt = dateNow
anythingUpdated = true
}
playlist.videos.forEach((v) => {
// Ensure all videos has `timeAdded` property
if (v.timeAdded == null) {
- v.timeAdded = new Date().getTime()
+ v.timeAdded = currentTime
anythingUpdated = true
}
@@ -257,8 +266,9 @@ const actions = {
return playlist.playlistName === 'Watch Later' || playlist._id === 'watchLater'
})
- const defaultFavoritesPlaylist = state.defaultPlaylists.find((e) => e._id === 'favorites')
if (favoritesPlaylist != null) {
+ const defaultFavoritesPlaylist = state.defaultPlaylists.find((e) => e._id === 'favorites')
+
// Update existing matching playlist only if it exists
if (favoritesPlaylist._id !== defaultFavoritesPlaylist._id || favoritesPlaylist.protected !== defaultFavoritesPlaylist.protected) {
const oldId = favoritesPlaylist._id
@@ -277,8 +287,9 @@ const actions = {
}
}
- const defaultWatchLaterPlaylist = state.defaultPlaylists.find((e) => e._id === 'watchLater')
if (watchLaterPlaylist != null) {
+ const defaultWatchLaterPlaylist = state.defaultPlaylists.find((e) => e._id === 'watchLater')
+
// Update existing matching playlist only if it exists
if (watchLaterPlaylist._id !== defaultWatchLaterPlaylist._id || watchLaterPlaylist.protected !== defaultWatchLaterPlaylist.protected) {
const oldId = watchLaterPlaylist._id
@@ -394,7 +405,7 @@ const mutations = {
addVideos(state, payload) {
const playlist = state.playlists.find(playlist => playlist._id === payload._id)
if (playlist) {
- playlist.videos = [].concat(playlist.videos).concat(payload.videos)
+ playlist.videos = [].concat(playlist.videos, payload.videos)
}
},
diff --git a/src/renderer/store/modules/utils.js b/src/renderer/store/modules/utils.js
index 1ee49526bf987..243520044a821 100644
--- a/src/renderer/store/modules/utils.js
+++ b/src/renderer/store/modules/utils.js
@@ -358,14 +358,10 @@ const actions = {
},
async getRegionData ({ commit }, { locale }) {
- let localePathExists
+ const localePathExists = process.env.GEOLOCATION_NAMES.includes(locale)
// Exclude __dirname from path if not in electron
const fileLocation = `${process.env.IS_ELECTRON ? process.env.NODE_ENV === 'development' ? '.' : __dirname : ''}/static/geolocations/`
- if (process.env.IS_ELECTRON) {
- localePathExists = await pathExists(`${fileLocation}${locale}.json`)
- } else {
- localePathExists = process.env.GEOLOCATION_NAMES.includes(locale)
- }
+
const pathName = `${fileLocation}${localePathExists ? locale : 'en-US'}.json`
const countries = process.env.IS_ELECTRON ? JSON.parse(await fs.readFile(pathName)) : await (await fetch(createWebURL(pathName))).json()
@@ -580,7 +576,9 @@ const actions = {
urlType: 'channel',
channelId,
subPath,
- url: url.toString()
+ // The original URL could be from Invidious.
+ // We need to make sure it starts with youtube.com, so that YouTube's resolve endpoint can recognise it
+ url: `https://www.youtube.com${url.pathname}`
}
}
@@ -599,15 +597,10 @@ const actions = {
async getExternalPlayerCmdArgumentsData ({ commit }, payload) {
const fileName = 'external-player-map.json'
- let fileData
/* eslint-disable-next-line n/no-path-concat */
const fileLocation = process.env.NODE_ENV === 'development' ? './static/' : `${__dirname}/static/`
- if (await pathExists(`${fileLocation}${fileName}`)) {
- fileData = await fs.readFile(`${fileLocation}${fileName}`)
- } else {
- fileData = '[{"name":"None","value":"","cmdArguments":null}]'
- }
+ const fileData = await fs.readFile(`${fileLocation}${fileName}`)
const externalPlayerMap = JSON.parse(fileData).map((entry) => {
return { name: entry.name, nameTranslationKey: entry.nameTranslationKey, value: entry.value, cmdArguments: entry.cmdArguments }
diff --git a/src/renderer/themes.css b/src/renderer/themes.css
index 0e6ddecf4a285..fd100cc5f5f2f 100644
--- a/src/renderer/themes.css
+++ b/src/renderer/themes.css
@@ -5,7 +5,8 @@
.dracula,
.catppuccinMocha,
.pastelPink,
-.hotPink {
+.hotPink,
+.nordic {
--primary-input-color: rgba(0, 0, 0, 0.50);
}
@@ -15,7 +16,8 @@
.dracula,
.catppuccinMocha,
.pastelPink,
-.hotPink {
+.hotPink,
+.nordic {
--link-color: var(--accent-color);
--link-visited-color: var(--accent-color-visited);
--instance-menu-color: var(--search-bar-color);
@@ -27,7 +29,8 @@
.gray,
.dracula,
.catppuccinMocha,
-.pastelPink {
+.pastelPink,
+.nordic {
--primary-input-color: rgba(0, 0, 0, 0.50);
--side-nav-hover-text-color: var(--primary-text-color);
}
@@ -37,7 +40,8 @@
.black,
.gray,
.dracula,
-.catppuccinMocha {
+.catppuccinMocha,
+.nordic {
--side-nav-active-text-color: var(--primary-text-color);
--scrollbar-text-color-hover: var(--primary-text-color);
@@ -56,7 +60,8 @@
.gray,
.dracula,
.catppuccinMocha,
-.hotPink {
+.hotPink,
+.nordic {
--primary-shadow-color: rgba(0, 0, 0, 0.75);
}
@@ -237,6 +242,25 @@ it can be safely elided. This looks quite pleasant on this theme. */
text-decoration: underline;
}
+.nordic {
+ --primary-text-color: #EEEEEE;
+ --secondary-text-color: #ddd;
+ --tertiary-text-color: #EEEEEE;
+ --title-color: #EEEEEE;
+ --bg-color: #2b2f3a;
+ --favorite-icon-color: #FFEA00;
+ --card-bg-color: #2e3440;
+ --secondary-card-bg-color: rgba(59, 66, 82, 0.75);
+ --scrollbar-color: #4b566a;
+ --scrollbar-color-hover: #4b566a;
+ --side-nav-color: #2e3440;
+ --side-nav-hover-color: #3b4252;
+ --side-nav-active-color: #3b4252;
+ --search-bar-color: #4b566a;
+ --logo-icon: url("../../_icons/iconNordicLightSmall.png");
+ --logo-text: url("../../_icons/textNordicLightSmall.png");
+}
+
.mainRed,
.mainPink,
.mainPurple,
diff --git a/src/renderer/views/Channel/Channel.js b/src/renderer/views/Channel/Channel.js
index 39fc91a0ee4d0..0fedac2c90f4c 100644
--- a/src/renderer/views/Channel/Channel.js
+++ b/src/renderer/views/Channel/Channel.js
@@ -495,6 +495,7 @@ export default defineComponent({
const expectedId = this.id
try {
+ /** @type {import('youtubei.js').YT.Channel|undefined} */
let channel
if (!this.channelInstance) {
channel = await getLocalChannel(this.id)
@@ -651,19 +652,44 @@ export default defineComponent({
this.bannerUrl = null
}
- this.relatedChannels = channel.channels.map(({ author }) => {
- let thumbnailUrl = author.best_thumbnail.url
+ let relatedChannels = channel.channels.map(({ author }) => ({
+ name: author.name,
+ id: author.id,
+ thumbnailUrl: author.best_thumbnail.url
+ }))
- if (thumbnailUrl.startsWith('//')) {
- thumbnailUrl = `https:${thumbnailUrl}`
- }
+ if (channel.memo.has('GameDetails')) {
+ /** @type {import('youtubei.js').YTNodes.GameDetails[]} */
+ const games = channel.memo.get('GameDetails')
- return {
- name: author.name,
- id: author.id,
- thumbnailUrl
- }
- })
+ relatedChannels.push(...games.map(game => ({
+ id: game.endpoint.payload.browseId,
+ name: game.title.text,
+ thumbnailUrl: game.box_art[0].url
+ })))
+ }
+
+ if (relatedChannels.length > 0) {
+ /** @type {Set
} */
+ const knownChannelIds = new Set()
+
+ relatedChannels = relatedChannels.filter(channel => {
+ if (!knownChannelIds.has(channel.id)) {
+ knownChannelIds.add(channel.id)
+ return true
+ }
+
+ return false
+ })
+
+ relatedChannels.forEach(channel => {
+ if (channel.thumbnailUrl.startsWith('//')) {
+ channel.thumbnailUrl = `https:${channel.thumbnailUrl}`
+ }
+ })
+ }
+
+ this.relatedChannels = relatedChannels
this.channelInstance = channel
diff --git a/src/renderer/views/Playlist/Playlist.js b/src/renderer/views/Playlist/Playlist.js
index 826f034494ec3..601284fd9a891 100644
--- a/src/renderer/views/Playlist/Playlist.js
+++ b/src/renderer/views/Playlist/Playlist.js
@@ -4,7 +4,7 @@ import debounce from 'lodash.debounce'
import FtLoader from '../../components/ft-loader/ft-loader.vue'
import FtCard from '../../components/ft-card/ft-card.vue'
import PlaylistInfo from '../../components/playlist-info/playlist-info.vue'
-import FtListVideoLazy from '../../components/ft-list-video-lazy/ft-list-video-lazy.vue'
+import FtListVideoNumbered from '../../components/ft-list-video-numbered/ft-list-video-numbered.vue'
import FtFlexBox from '../../components/ft-flex-box/ft-flex-box.vue'
import FtButton from '../../components/ft-button/ft-button.vue'
import {
@@ -21,12 +21,12 @@ export default defineComponent({
'ft-loader': FtLoader,
'ft-card': FtCard,
'playlist-info': PlaylistInfo,
- 'ft-list-video-lazy': FtListVideoLazy,
+ 'ft-list-video-numbered': FtListVideoNumbered,
'ft-flex-box': FtFlexBox,
'ft-button': FtButton
},
beforeRouteLeave(to, from, next) {
- if (!this.isLoading && to.path.startsWith('/watch') && to.query.playlistId === this.playlistId) {
+ if (!this.isLoading && !this.isUserPlaylistRequested && to.path.startsWith('/watch') && to.query.playlistId === this.playlistId) {
this.setCachedPlaylist({
id: this.playlistId,
title: this.playlistTitle,
@@ -54,6 +54,7 @@ export default defineComponent({
channelId: '',
infoSource: 'local',
playlistItems: [],
+ userPlaylistVisibleLimit: 100,
continuationData: null,
isLoadingMore: false,
getPlaylistInfoDebounce: function() {},
@@ -102,7 +103,11 @@ export default defineComponent({
},
moreVideoDataAvailable() {
- return this.continuationData !== null
+ if (this.isUserPlaylistRequested) {
+ return this.userPlaylistVisibleLimit < this.videoCount
+ } else {
+ return this.continuationData !== null
+ }
},
isUserPlaylistRequested: function () {
@@ -117,6 +122,18 @@ export default defineComponent({
return this.selectedUserPlaylist?._id !== this.quickBookmarkPlaylistId
},
+
+ visiblePlaylistItems: function () {
+ if (!this.isUserPlaylistRequested) {
+ return this.playlistItems
+ }
+
+ if (this.userPlaylistVisibleLimit < this.videoCount) {
+ return this.playlistItems.slice(0, this.userPlaylistVisibleLimit)
+ } else {
+ return this.playlistItems
+ }
+ }
},
watch: {
$route () {
@@ -147,8 +164,10 @@ export default defineComponent({
this.getPlaylistInfoDebounce()
},
},
- mounted: function () {
+ created: function () {
this.getPlaylistInfoDebounce = debounce(this.getPlaylistInfo, 100)
+ },
+ mounted: function () {
this.getPlaylistInfoDebounce()
},
methods: {
@@ -250,7 +269,7 @@ export default defineComponent({
const dateString = new Date(result.updated * 1000)
this.lastUpdated = dateString.toLocaleDateString(this.currentLocale, { year: 'numeric', month: 'short', day: 'numeric' })
- this.playlistItems = this.playlistItems.concat(result.videos)
+ this.allPlaylistItems = result.videos
this.isLoading = false
}).catch((err) => {
@@ -298,6 +317,20 @@ export default defineComponent({
case 'local':
this.getNextPageLocal()
break
+ case 'user':
+ // Stop users from spamming the load more button, by replacing it with a loading symbol until the newly added items are renderered
+ this.isLoadingMore = true
+
+ setTimeout(() => {
+ if (this.userPlaylistVisibleLimit + 100 < this.videoCount) {
+ this.userPlaylistVisibleLimit += 100
+ } else {
+ this.userPlaylistVisibleLimit = this.videoCount
+ }
+
+ this.isLoadingMore = false
+ })
+ break
case 'invidious':
console.error('Playlist pagination is not currently supported when the Invidious backend is selected.')
break
diff --git a/src/renderer/views/Playlist/Playlist.scss b/src/renderer/views/Playlist/Playlist.scss
index 13fd09464488b..e8c2b7681d952 100644
--- a/src/renderer/views/Playlist/Playlist.scss
+++ b/src/renderer/views/Playlist/Playlist.scss
@@ -62,11 +62,6 @@
transform: translate(calc(10% * var(--horizontal-directionality-coefficient)));
}
-.videoIndex {
- color: var(--tertiary-text-color);
- text-align: center;
-}
-
.loadNextPageWrapper {
/* about the same height as the button */
max-block-size: 7vh;
diff --git a/src/renderer/views/Playlist/Playlist.vue b/src/renderer/views/Playlist/Playlist.vue
index ef3efef0ce00e..81d022609632b 100644
--- a/src/renderer/views/Playlist/Playlist.vue
+++ b/src/renderer/views/Playlist/Playlist.vue
@@ -36,42 +36,34 @@
v-if="!isLoading"
class="playlistItems"
>
-
-
-
- {{ index + 1 }}
-
-
-
+ :data="item"
+ :playlist-id="playlistId"
+ :playlist-type="infoSource"
+ :playlist-index="index"
+ :playlist-item-id="item.playlistItemId"
+ appearance="result"
+ :always-show-add-to-playlist-button="true"
+ :quick-bookmark-button-enabled="quickBookmarkButtonEnabled"
+ :can-move-video-up="index > 0"
+ :can-move-video-down="index < visiblePlaylistItems.length - 1"
+ :can-remove-from-playlist="true"
+ :video-index="index"
+ :initial-visible-state="index < 10"
+ @move-video-up="moveVideoUp(item.videoId, item.playlistItemId)"
+ @move-video-down="moveVideoDown(item.videoId, item.playlistItemId)"
+ @remove-from-playlist="removeVideoFromPlaylist(item.videoId, item.playlistItemId)"
+ />
-
+
diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js
index 18504fbc2809b..a4888347581e8 100644
--- a/src/renderer/views/Watch/Watch.js
+++ b/src/renderer/views/Watch/Watch.js
@@ -379,7 +379,7 @@ export default defineComponent({
this.isFamilyFriendly = result.basic_info.is_family_safe
const recommendedVideos = result.watch_next_feed
- ?.filter((item) => item.type === 'CompactVideo')
+ ?.filter((item) => item.type === 'CompactVideo' || item.type === 'CompactMovie')
.map(parseLocalWatchNextVideo) ?? []
// place watched recommended videos last
@@ -396,10 +396,28 @@ export default defineComponent({
let playabilityStatus = result.playability_status
let bypassedResult = null
- if (playabilityStatus.status === 'LOGIN_REQUIRED') {
+ let streamingVideoId = this.videoId
+ let trailerIsNull = false
+
+ // if widevine support is added then we should check if playabilityStatus.status is UNPLAYABLE too
+ if (result.has_trailer) {
+ bypassedResult = result.getTrailerInfo()
+ /**
+ * @type {import ('youtubei.js').YTNodes.PlayerLegacyDesktopYpcTrailer}
+ */
+ const trailerScreen = result.playability_status.error_screen
+ streamingVideoId = trailerScreen.video_id
+ // if the trailer is null then it is likely age restricted.
+ trailerIsNull = bypassedResult == null
+ if (!trailerIsNull) {
+ playabilityStatus = bypassedResult.playability_status
+ }
+ }
+
+ if (playabilityStatus.status === 'LOGIN_REQUIRED' || trailerIsNull) {
// try to bypass the age restriction
- bypassedResult = await getLocalVideoInfo(this.videoId, true)
- playabilityStatus = result.playability_status
+ bypassedResult = await getLocalVideoInfo(streamingVideoId, true)
+ playabilityStatus = bypassedResult.playability_status
}
if (playabilityStatus.status === 'UNPLAYABLE') {
diff --git a/src/renderer/views/Watch/Watch.scss b/src/renderer/views/Watch/Watch.scss
index cf58ed9c5f23c..ad61d8af942a5 100644
--- a/src/renderer/views/Watch/Watch.scss
+++ b/src/renderer/views/Watch/Watch.scss
@@ -16,7 +16,7 @@
display: inline-block;
max-inline-size: calc(80vh * 1.78);
- @media only screen and (min-width: 901px) {
+ @media only screen and (min-width: 1051px) {
inline-size: 300%;
}
}
@@ -99,7 +99,7 @@
.sidebarArea {
grid-area: sidebar;
- @media only screen and (min-width: 901px) {
+ @media only screen and (min-width: 1051px) {
min-inline-size: 380px;
}
@@ -135,7 +135,7 @@
margin-block: 0 16px;
margin-inline: 0;
- @media only screen and (min-width: 901px) {
+ @media only screen and (min-width: 1051px) {
margin-block: 0 16px;
margin-inline: 8px;
}
@@ -145,17 +145,17 @@
@include theatre-mode-template;
}
- @media only screen and (min-width: 901px) {
+ @media only screen and (min-width: 1051px) {
&.useTheatreMode {
@include theatre-mode-template;
}
}
- @media only screen and (max-width: 900px) {
+ @media only screen and (max-width: 1050px) {
@include single-column-template;
}
- @media only screen and (min-width: 901px) {
+ @media only screen and (min-width: 1051px) {
.infoArea {
scroll-margin-block-start: 76px;
}
diff --git a/static/locales/ar.yaml b/static/locales/ar.yaml
index 287a0801c287a..e592f27c427b5 100644
--- a/static/locales/ar.yaml
+++ b/static/locales/ar.yaml
@@ -44,6 +44,8 @@ Global:
Subscriber Count: 1 مشترك | {count} مشتركين
View Count: 1 مشاهدة | {count} مشاهدات
Watching Count: 1 مشاهد | {count} مشاهدون
+ Input Tags:
+ Length Requirement: يجب أن يبلغ طول العلامة {number} حرفًا على الأقل
Search / Go to URL: 'ابحث / اذهب إلى رابط'
# In Filter Button
Search Filters:
@@ -274,6 +276,7 @@ Settings:
Catppuccin Mocha: كاتبوتشين موكا
Pastel Pink: الباستيل الوردي
Hot Pink: وردي فاقع
+ Nordic: بلدان الشمال الأوروبي
Main Color Theme:
Main Color Theme: 'لون السِمة الأساسي'
Red: 'أحمر'
@@ -541,6 +544,9 @@ Settings:
Hide Channels Already Exists: معرف القناة موجود بالفعل
Hide Channels API Error: حدث خطأ أثناء استرداد المستخدم بالمعرف المدخل. يرجى
التحقق مرة أخرى إذا كان المعرف صحيحا.
+ Hide Videos and Playlists Containing Text: إخفاء مقاطع الفيديو وقوائم التشغيل
+ التي تحتوي على نص
+ Hide Videos and Playlists Containing Text Placeholder: كلمة أو جزء كلمة أو عبارة
The app needs to restart for changes to take effect. Restart and apply change?: البرنامج
يحتاج لإعادة التشغيل كي يسري مفعول التغييرات. هل تريد إعادة التشغيل و تطبيق التغييرات؟
Proxy Settings:
@@ -767,6 +773,7 @@ Channel:
Hide Answers: إخفاء الأجوبة
votes: '{votes} أصوات'
Reveal Answers: كشف الإجابات
+ Video hidden by FreeTube: تم إخفاء الفيديو بواسطة FreeTube
Live:
Live: مباشر
This channel does not currently have any live streams: لا يوجد حاليا أي بث مباشر
@@ -1091,6 +1098,10 @@ Tooltips:
معرف القناة الذي تم إدخاله متطابقًا تمامًا وأن يكون حساسًا لحالة الأحرف.
Hide Subscriptions Live: يتم تجاوز هذا الإعداد من خلال إعداد "{appWideSetting}"
على مستوى التطبيق، في قسم "{subsection}" من "{settingsSection}"
+ Hide Videos and Playlists Containing Text: أدخل كلمة أو جزء كلمة أو عبارة (غير
+ حساسة لحالة الأحرف) لإخفاء جميع مقاطع الفيديو وقوائم التشغيل التي تحتوي عناوينها
+ الأصلية عليها في جميع أنحاء FreeTube، باستثناء السجل وقوائم التشغيل الخاصة بك
+ ومقاطع الفيديو الموجودة داخل قوائم التشغيل فقط.
SponsorBlock Settings:
UseDeArrowTitles: استبدل عناوين الفيديو بالعناوين التي أرسلها المستخدم من DeArrow.
UseDeArrowThumbnails: استبدل الصور المصغرة للفيديو بالصور المصغرة من DeArrow.
@@ -1157,3 +1168,7 @@ Playlist will not pause when current video is finished: لن تتوقف قائم
Channel Hidden: تم إضافة {channel} إلى مرشح القناة
Go to page: إذهب إلى {page}
Channel Unhidden: تمت إزالة {channel} من مرشح القناة
+Trimmed input must be at least N characters long: يجب أن يكون طول الإدخال المقتطع
+ حرفًا واحدًا على الأقل | يجب أن يبلغ طول الإدخال المقتطع {length} من الأحرف على
+ الأقل
+Tag already exists: العلامة "{tagName}" موجودة بالفعل
diff --git a/static/locales/cs.yaml b/static/locales/cs.yaml
index fab5bbc22d745..40429ce2e99e3 100644
--- a/static/locales/cs.yaml
+++ b/static/locales/cs.yaml
@@ -292,6 +292,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Hot Pink: Horká růžová
Pastel Pink: Pastelově růžová
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: 'Hlavní barva motivu'
Red: 'Červená'
diff --git a/static/locales/de-DE.yaml b/static/locales/de-DE.yaml
index 81eee77f46112..d4b411d365225 100644
--- a/static/locales/de-DE.yaml
+++ b/static/locales/de-DE.yaml
@@ -44,7 +44,7 @@ Global:
View Count: 1 Aufruf | {count} Aufrufe
Watching Count: 1 Zuschauer | {count} Zuschauer
Input Tags:
- Length Requirement: Deutsch
+ Length Requirement: Der Tag muss mindestens {number} Zeichen lang sein
Search / Go to URL: Suche / Gehe zur URL
# In Filter Button
Search Filters:
@@ -294,6 +294,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Hot Pink: Pink
Pastel Pink: Pastellrosa
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: Hauptfarbe des Farbschemas
Red: Rot
@@ -568,6 +569,10 @@ Settings:
Hide Channels Already Exists: Kanal-ID bereits vorhanden
Hide Channels API Error: Fehler beim Abrufen von Benutzern mit der bereitgestellten
ID. Bitte überprüfen Sie erneut, ob der Ausweis korrekt ist.
+ Hide Videos and Playlists Containing Text: Videos und Playlisten verstecken, die
+ Text enthalten
+ Hide Videos and Playlists Containing Text Placeholder: Wort, Teil eines Wortes
+ oder Satz
The app needs to restart for changes to take effect. Restart and apply change?: Die
App muss neu gestartet werden, damit die Änderungen wirksam werden. Neu starten
und Änderung übernehmen?
@@ -764,6 +769,7 @@ Channel:
votes: '{votes} Stimmen'
Reveal Answers: Antworten aufzeigen
Hide Answers: Antworten verbergen
+ Video hidden by FreeTube: Video versteckt von FreeTube
Live:
Live: Live
This channel does not currently have any live streams: Dieser Kanal hat derzeit
@@ -1163,6 +1169,11 @@ Tooltips:
Hide Subscriptions Live: Diese Einstellung wird durch die App-weite Einstellung
„{appWideSetting}“ im Abschnitt „{subsection}“ der „{settingsSection}“ außer
Kraft gesetzt
+ Hide Videos and Playlists Containing Text: Gebe ein Wort, einen Teil eines Wortes
+ oder einen Satz ein (Groß-/Kleinschreibung wird ignoriert) um alle Videos und
+ Playlisten, welche es in ihren Originaltiteln enthalten, auf ganz FreeTube auszublenden.
+ Dein Verlauf, deine eigenen Playlisten und Videos innerhalb deiner Playlisten
+ sind davon nicht betroffen.
SponsorBlock Settings:
UseDeArrowTitles: Videotitel durch von Benutzern eingereichte Titel von DeArrow
ersetzen.
@@ -1231,3 +1242,7 @@ Playlist will not pause when current video is finished: Wiedergabeliste wird nic
Channel Hidden: '{channel} wurde zum Kanalfilter hinzugefügt'
Go to page: Gehe zu {page}
Channel Unhidden: '{channel} wurde aus dem Kanalfilter entfernt'
+Trimmed input must be at least N characters long: Gekürzte Eingaben müssen mindestens
+ 1 Zeichen lang sein | Gekürzte Eingaben müssen mindestens {length} Zeichen lang
+ sein
+Tag already exists: Die Markierung „{tagName}“ existiert bereits
diff --git a/static/locales/en-US.yaml b/static/locales/en-US.yaml
index b8fc52b81a3b5..0289cf6a4ae27 100644
--- a/static/locales/en-US.yaml
+++ b/static/locales/en-US.yaml
@@ -296,6 +296,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastel Pink
Hot Pink: Hot Pink
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: Main Color Theme
Red: Red
diff --git a/static/locales/en_GB.yaml b/static/locales/en_GB.yaml
index 5c6b5c5ec283b..37eb409998b8e 100644
--- a/static/locales/en_GB.yaml
+++ b/static/locales/en_GB.yaml
@@ -43,6 +43,8 @@ Global:
View Count: 1 view | {count} views
Watching Count: 1 watching | {count} watching
Channel Count: 1 channel | {count} channels
+ Input Tags:
+ Length Requirement: Tag must be at least {number} characters long
Version {versionNumber} is now available! Click for more details: 'Version {versionNumber}
is now available! Click for more details'
Download From Site: 'Download from site'
@@ -167,6 +169,14 @@ User Playlists:
There was an issue with updating this playlist.: There was an issue with updating
this playlist.
There were no videos to remove.: There were no videos to remove.
+ Reverted to use {oldPlaylistName} for quick bookmark: Reverted to use {oldPlaylistName}
+ for quick bookmark
+ This playlist is now used for quick bookmark: This playlist is now used for
+ quick bookmark
+ This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: This
+ playlist is now used for quick bookmark instead of {oldPlaylistName}. Click
+ here to undo
+ Quick bookmark disabled: Quick bookmark disabled
AddVideoPrompt:
N playlists selected: '{playlistCount} selected'
Search in Playlists: Search in playlists
@@ -193,6 +203,9 @@ User Playlists:
Are you sure you want to delete this playlist? This cannot be undone: Are you sure
you want to delete this playlist? This cannot be undone.
Add to Favorites: Add to {playlistName}
+ Remove from Favorites: Remove from {playlistName}
+ Enable Quick Bookmark With This Playlist: Enable quick bookmark with this playlist
+ Disable Quick Bookmark: Disable quick bookmark
History:
# On History Page
History: 'History'
@@ -230,14 +243,14 @@ Settings:
Hidden: Hidden
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious Instance
(Default is https://invidious.snopyta.org)'
- Region for Trending: 'Region for Trending'
+ Region for Trending: 'Region for trending'
#! List countries
View all Invidious instance information: View all Invidious instance information
System Default: System default
External Player: External Player
External Player Executable: Custom External Player Executable
Clear Default Instance: Clear default instance
- Set Current Instance as Default: Set Current Instance as Default
+ Set Current Instance as Default: Set current instance as default
Current instance will be randomized on startup: Current instance will be randomised
on startup
No default instance has been set: No default instance has been set
@@ -245,23 +258,24 @@ Settings:
is {instance}
Current Invidious Instance: Current Invidious Instance
External Link Handling:
- No Action: No Action
- Ask Before Opening Link: Ask Before Opening Link
- Open Link: Open Link
- External Link Handling: External Link Handling
+ No Action: No action
+ Ask Before Opening Link: Ask before opening link
+ Open Link: Open link
+ External Link Handling: External link handling
Theme Settings:
- Theme Settings: 'Theme Settings'
+ Theme Settings: 'Theme settings'
Match Top Bar with Main Color: 'Match top bar with main colour'
Base Theme:
Base Theme: 'Base theme'
Black: 'Black'
Dark: 'Dark'
- System Default: 'System Default'
+ System Default: 'System default'
Light: 'Light'
Dracula: 'Dracula'
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastel pink
Hot Pink: Hot pink
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: 'Main colour theme'
Red: 'Red'
@@ -307,7 +321,7 @@ Settings:
Disable Smooth Scrolling: Disable smooth scrolling
Expand Side Bar by Default: Expand side bar by default
Hide Side Bar Labels: Hide side bar labels
- Hide FreeTube Header Logo: Hide FreeTube Header Logo
+ Hide FreeTube Header Logo: Hide FreeTube header logo
Player Settings:
Player Settings: 'Player settings'
Force Local Backend for Legacy Formats: 'Force local back-end for legacy formats'
@@ -581,6 +595,7 @@ Settings:
Remove Password: Remove password
Password Settings: Password settings
Set Password: Set password
+ Expand All Settings Sections: Expand all settings sections
About:
#On About page
About: About
@@ -1099,3 +1114,4 @@ Playlist will pause when current video is finished: Playlist will pause when cur
Playlist will not pause when current video is finished: Playlist will not pause when
current video is finished
Go to page: Go to {page}
+Tag already exists: ‘{tagName}’ tag already exists
diff --git a/static/locales/es.yaml b/static/locales/es.yaml
index 09c74e9462cbe..bf44ecca0bd74 100644
--- a/static/locales/es.yaml
+++ b/static/locales/es.yaml
@@ -287,6 +287,7 @@ Settings:
Catppuccin Mocha: Catppuccin Moca
Pastel Pink: Rosa pastel
Hot Pink: Rosa fuerte
+ Nordic: Nórdico
Main Color Theme:
Main Color Theme: 'Color principal'
Red: 'Rojo'
diff --git a/static/locales/et.yaml b/static/locales/et.yaml
index e5e921e3e4246..34c45d8c0def0 100644
--- a/static/locales/et.yaml
+++ b/static/locales/et.yaml
@@ -43,6 +43,8 @@ Global:
Subscriber Count: 1 tellija | {count} tellijat
View Count: 1 vaatamine | {count} vaatamist
Watching Count: 1 vaatamas | {count} vaatamas
+ Input Tags:
+ Length Requirement: Silt peab olema vähemalt {number} tähemärki pikk
Version {versionNumber} is now available! Click for more details: 'Versioon {versionNumber}
in nüüd saadaval! Lisateavet leiad siit'
Download From Site: 'Laadi veebisaidist alla'
@@ -284,6 +286,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastelne roosa
Hot Pink: Säravroosa
+ Nordic: Põhjala
Main Color Theme:
Main Color Theme: 'Põhiline värviteema'
Red: 'Punane'
@@ -520,6 +523,9 @@ Settings:
Hide Channels Already Exists: Selline kanali tunnus juba on sul kirjas
Hide Channels API Error: Selle kanali tunnus alusel andmete või kasutaja andmete
laadimine ei õnnestunud. Palun kontrolli, et kanali tunnus oleks õige.
+ Hide Videos and Playlists Containing Text Placeholder: Sõna, sõnaosa või fraas
+ Hide Videos and Playlists Containing Text: Peida videod ja esitusloendid, kus
+ leidub sellist teksti
Proxy Settings:
Error getting network information. Is your proxy configured properly?: Võrguteavet
ei õnnestu leida. Kas sa oled puhverserveri ikka korralikult seadistanud?
@@ -723,6 +729,7 @@ Channel:
Reveal Answers: Näita vastuseid
Hide Answers: Peida vastused
votes: '{votes} häält'
+ Video hidden by FreeTube: FreeTube'i poolt peidetud video
This channel does not exist: Sellist kanalit ei leidu
This channel is age-restricted and currently cannot be viewed in FreeTube.: Sellel
kanalil on vanusega seotud piirangud ja teda ei saa hetkel FreeTube'i vahendusel
@@ -1048,6 +1055,10 @@ Tooltips:
ja on tõstutundlik.
Hide Subscriptions Live: Selle seadistuse tühistab rakenduseülene „{appWideSetting}“
seadistus „{subsection}“/„{settingsSection}“
+ Hide Videos and Playlists Containing Text: Sisesta sõna, sõnaosa või fraas (tõstutundetuna),
+ mille alusel peidetakse läbivalt FreeTube'is kõik videod või esitusloendid,
+ kus see leidub algses pealkirjas. Peitmine ei toimi ajaloos, sinu loodud esitusloendites
+ ja esitusloendi sees olevate videote puhul.
Experimental Settings:
Replace HTTP Cache: Sellega lülitatakse välja Electron'i standardne kettal paiknev
http-puhver ja võetakse kasutusele rakenduse mälupõhine puhver. Üheks tulemuseks
@@ -1111,3 +1122,6 @@ Playlist will not pause when current video is finished: Hetkel mängiva video l
Channel Hidden: '{channel} on lisatud kanalite filtrisse'
Go to page: 'Ava leht: {page}'
Channel Unhidden: '{channel} on eemaldatud kanalite filtrist'
+Tag already exists: Silt „{tagName}“ on juba olemas
+Trimmed input must be at least N characters long: Kärbitud sisend peab olema vähemalt
+ 1 tähemärgi pikkune | Kärbitud sisend peab olema vähemalt {length} tähemärgi pikkune
diff --git a/static/locales/fi.yaml b/static/locales/fi.yaml
index a8552458415de..a5a490450c94e 100644
--- a/static/locales/fi.yaml
+++ b/static/locales/fi.yaml
@@ -173,6 +173,9 @@ User Playlists:
nimellä on jo olemassa soittolista. Valitse eri nimi.
Playlist {playlistName} has been successfully created.: Soittolista {playlistName}
on luotu.
+ Add to Favorites: Lisää soittolistaan {playlistName}
+ Remove from Favorites: Poista soittolistalta {playlistName}
+ Remove Watched Videos: Poista katsotut videot
History:
# On History Page
History: 'Historia'
diff --git a/static/locales/fr-FR.yaml b/static/locales/fr-FR.yaml
index 0137c944d1971..75c0853e4224a 100644
--- a/static/locales/fr-FR.yaml
+++ b/static/locales/fr-FR.yaml
@@ -145,8 +145,8 @@ User Playlists:
You haven't selected any playlist yet.: Vous n'avez pas encore sélectionné de
liste de lecture.
"{videoCount} video(s) added to {playlistCount} playlists": 1 vidéo ajoutée
- à {playlistCount} liste de lecture | {videoCount} vidéos ajoutées à {playlistCount}
- listes de lecture.
+ à {playlistCount} listes de lecture | {videoCount} vidéos ajoutées à {playlistCount}
+ listes de lecture
N playlists selected: '{playlistCount} Sélectionnée(s)'
SinglePlaylistView:
Toast:
@@ -299,6 +299,7 @@ Settings:
Catppuccin Mocha: Catppuccin Moka
Pastel Pink: Rose pastel
Hot Pink: Rose vif
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: 'Couleur principale du thème'
Red: 'Rouge'
@@ -467,7 +468,7 @@ Settings:
sûr(e) de vouloir supprimer tous les abonnements et les profils ? Cette action
est définitive.
Remove All Subscriptions / Profiles: Supprimer tous les Abonnements / Profils
- Automatically Remove Video Meta Files: Suppression automatiquement les métafichiers
+ Automatically Remove Video Meta Files: Supprimer automatiquement les métafichiers
vidéo
Save Watched Videos With Last Viewed Playlist: Sauvegarder les vidéos regardées
avec la dernière liste de lecture vue
@@ -1044,7 +1045,7 @@ Canceled next video autoplay: 'Annuler la lecture automatique'
Yes: 'Oui'
No: 'Non'
-Locale Name: français
+Locale Name: Français
Profile:
'{profile} is now the active profile': '{profile} est maintenant le profil actif'
Your default profile has been changed to your primary profile: Votre profil par
@@ -1263,3 +1264,6 @@ Playlist will not pause when current video is finished: La liste de lecture ne s
Go to page: Aller à {page}
Channel Hidden: '{channel} ajouté au filtre de chaîne'
Channel Unhidden: '{channel} retiré du filtre de chaîne'
+Trimmed input must be at least N characters long: L'entrée tronquée doit comporter
+ au moins 1 caractère | L'entrée tronquée doit comporter au moins {length} caractères
+Tag already exists: L'étiquette « {tagName} » existe déjà
diff --git a/static/locales/gl.yaml b/static/locales/gl.yaml
index 6138c6079e9a8..534e621214e8c 100644
--- a/static/locales/gl.yaml
+++ b/static/locales/gl.yaml
@@ -36,6 +36,10 @@ Global:
Videos: 'Vídeos'
Community: Comunidade
+ Shorts: Cortos
+ Input Tags:
+ Length Requirement: A etiqueta debe ser de polo menos {number} caracteres.
+ Live: En vivo
Version {versionNumber} is now available! Click for more details: 'A versión {versionNumber}
está dispoñible! Fai clic para veres máis detalles'
Download From Site: 'Descargar do sitio'
@@ -656,8 +660,8 @@ Video:
nesta versión.'
'Chat is disabled or the Live Stream has ended.': 'O chat foi desactivado ou a transmisión
en vivo rematou.'
- Live chat is enabled. Chat messages will appear here once sent.: 'Chat en vivo
- activado. As mensaxes aparecerán aquí ao seren enviadas.'
+ Live chat is enabled. Chat messages will appear here once sent.: 'Chat en vivo activado. As
+ mensaxes aparecerán aquí ao seren enviadas.'
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'Chat
en vivo actualmente non soportado coa API de Invidious. Precísase dunha conexión
directa con YouTube.'
@@ -844,9 +848,9 @@ Tooltips:
as chamadas da aplicacion.'
Region for Trending: 'A rexión das tendencias permíteche escoller os vídeos máis
populares nun Estado.'
- External Link Handling: "Escolla o comportamento predeterminado cando se fai clic\
- \ nunha ligazón, que non se pode abrir en FreeTube.\nDe forma predeterminada,\
- \ FreeTube abrirá a ligazón na que premeches no teu navegador predeterminado.\n"
+ External Link Handling: "Escolla o comportamento predeterminado cando se fai clic
+ nunha ligazón, que non se pode abrir en FreeTube.\nDe forma predeterminada,
+ FreeTube abrirá a ligazón na que premeches no teu navegador predeterminado.\n"
Player Settings:
Force Local Backend for Legacy Formats: 'Só funcionará se a API de Invidious está
escollida por defecto. Cando estea activa, a API local usará formatos antigos
@@ -977,3 +981,4 @@ Chapters:
capítulo actual: {chapterName}'
Screenshot Success: Captura da pantalla gardada como "{filePath}"
Ok: De acordo
+Go to page: Ir a {page}
diff --git a/static/locales/hr.yaml b/static/locales/hr.yaml
index 9888377ebdca1..a57585b8ac84d 100644
--- a/static/locales/hr.yaml
+++ b/static/locales/hr.yaml
@@ -101,8 +101,8 @@ Subscriptions:
Disabled Automatic Fetching: Automatsko dohvaćanje pretplata je deaktivirano. Aktualiziraj
pretplate da bi se ovdje prikazale.
Subscriptions Tabs: Kartica pretplata
- All Subscription Tabs Hidden: Sve kartice pretplate su skrivene. Za prikaz sadržaja
- na ovom mjestu, sakrij neke kartice u odjeljku „{subsection}” u „{settingsSection}”.
+ All Subscription Tabs Hidden: Sve kartice pretplata su skrivene. Za prikaz sadržaja
+ na ovom mjestu, sakrij neke kartice u pododjeljku „{subsection}” u „{settingsSection}”.
Empty Posts: Kanali na koje si pretplaćen/a trenutačno nemaju objave.
Load More Posts: Učitaj još objava
Trending:
@@ -175,6 +175,14 @@ User Playlists:
Some videos in the playlist are not loaded yet. Click here to copy anyway.: Neka
videa zbirke još nisu učitani. Pritisni ovdje za kopiranje.
There were no videos to remove.: Nije bilo videa za uklanjanje.
+ This playlist is now used for quick bookmark: Ova se zbirka sada koristi za
+ brze zabilješke
+ Quick bookmark disabled: Brze zabilješke su deaktivirane
+ Reverted to use {oldPlaylistName} for quick bookmark: Vraćeno na korištenje
+ zbirke {oldPlaylistName} za brze zabilješke
+ This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: Ova
+ se zbirka sada koristi za brze zabilješke umjesto zbirke {oldPlaylistName}.
+ Pritisni ovdje za poništavanje
AddVideoPrompt:
N playlists selected: 'Odabrano: {playlistCount}'
Search in Playlists: Traži u zbirkama
@@ -199,6 +207,8 @@ User Playlists:
New Playlist Name: Ime nove zbirke
Add to Favorites: Dodaj u zbirku {playlistName}
Remove from Favorites: Ukloni iz zbirke {playlistName}
+ Enable Quick Bookmark With This Playlist: Aktiviraj brze zabilješke s ovom zbirkom
+ Disable Quick Bookmark: Deaktiviraj brze zabilješke
History:
# On History Page
History: 'Povijest'
@@ -440,7 +450,7 @@ Settings:
Data Settings:
Unknown data key: Nepoznat podatkovni ključ
Unable to write file: Datoteka se ne može zapisati
- Unable to read file: Datoteka se ne može pročitati
+ Unable to read file: Datoteka se ne može čitati
All watched history has been successfully exported: Sva povijest gledanja je uspješno
izvezena
All watched history has been successfully imported: Sva povijest gledanja je uspješno
@@ -486,7 +496,7 @@ Settings:
Export Playlists For Older FreeTube Versions:
Tooltip: "Ova opcija izvozi videa iz svih zbirki u jednu zbirku pod nazivom
„Favoriti”.\nKako izvesti i uvesti videa zbirki za stariju FreeTube verziju:\n
- 1. Izvezi tvoje zbirke s ovom opcijom uključenom.\n2. Izbriši sve svoje postojeće
+ 1. Izvezi svoje zbirke s ovom opcijom aktiviranom.\n2. Izbriši sve svoje postojeće
zbirke pomoću opcije „Ukloni sve zbirke” u postavkama privatnosti.\n3. Pokreni
stariju FreeTube verziju i uvezi izvezene zbirke.\""
Label: Izvezi zbirke za starije FreeTube verzije
@@ -538,6 +548,7 @@ Settings:
provjeri točnost ID-a.
Hide Videos and Playlists Containing Text Placeholder: Riječ, fragment riječi
ili fraza
+ Hide Videos and Playlists Containing Text: Sakrij videa i zbirke koji sadrže tekst
The app needs to restart for changes to take effect. Restart and apply change?: Promjene
će se primijeniti nakon ponovnog pokeretanja programa. Ponovo pokrenuti program?
Proxy Settings:
@@ -575,7 +586,7 @@ Settings:
UseDeArrowThumbnails: Koristi DeArrow za minijature
External Player Settings:
Custom External Player Arguments: Argumenti prilagođenog vanjskog playera
- Custom External Player Executable: Izvršna datoteka prilagođenog vanjskog playera
+ Custom External Player Executable: Izvršna datoteka prilagođenog eksternog playera
Ignore Unsupported Action Warnings: Zanemari upozorenja o nepodržanim radnjama
External Player: Vanjski player
External Player Settings: Postavke vanjskog playera
@@ -1042,7 +1053,7 @@ Tooltips:
Proxy Videos Through Invidious: Za reprodukciju videa povezat će se s Invidiousom
umjesto izravnog povezivanja s YouTubeom. Zanemaruje postavke sučelja.
Force Local Backend for Legacy Formats: Radi samo, kad se Invidious postavi kao
- standardno sučelje. Kad je aktivirano, lokalno sučelje će pokretati i koristiti
+ standardno sučelje. Kada je aktivirano, lokalno sučelje će pokretati i koristiti
stare formate umjesto onih koje dostavlja Invidious. Pomaže u slučajevima, kad
je reprodukcija videa koje dostavlja Invidious u zemlji zabranjena/ograničena.
Scroll Playback Rate Over Video Player: Dok se pokazivač nalazi na videu, pritisni
@@ -1073,14 +1084,14 @@ Tooltips:
koja se ne može otvoriti u FreeTubeu.\nFreeTube takve poveznice otvara u tvom
standardnom pregledniku.\n"
Subscription Settings:
- Fetch Feeds from RSS: Kad je aktivirano, FreeTube će koristiti RSS umjesto vlastite
+ Fetch Feeds from RSS: Kada je aktivirano, FreeTube će koristiti RSS umjesto vlastite
standardne metode za dohvaćanje podataka tvoje pretplate. RSS je brži i sprečava
blokiranje IP adresa, ali ne pruža određene podatke kao što su trajanje videa
ili stanja „uživo”
Fetch Automatically: Kada je aktivirano, FreeTube će automatski dohvatiti feed
tvoje pretplate kada se otvori novi prozor i prilikom mijenjanja profila.
Privacy Settings:
- Remove Video Meta Files: Kad je aktivirano, FreeTube automatski uklanja datoteke
+ Remove Video Meta Files: Kada je aktivirano, FreeTube automatski uklanja datoteke
metapodataka koji su stvoreni tijekom reprodukcije videa, kad se zatvori stranica
gledanja.
External Player Settings:
@@ -1107,6 +1118,10 @@ Tooltips:
se mora potpuno poklapati i razlikuje velika i mala slova.
Hide Subscriptions Live: Ovu postavku nadjačava aplikacijska postavka „{appWideSetting}”,
u odjeljku „{subsection}” u „{settingsSection}”
+ Hide Videos and Playlists Containing Text: Upiši riječ, fragment riječi ili izraz
+ (ne razlikuje velika i mala slova) za skrivanje svih videa i zbirki s tim sadržajem
+ u njihovim izvornim naslovima u cijelom FreeTubeu, isključujući samo povijest,
+ tvoje zbirke i videa unutar zbirki.
SponsorBlock Settings:
UseDeArrowTitles: Zamijeni naslove videa koje su poslali korisnici s DeArrow naslovima.
UseDeArrowThumbnails: Zamijeni minijature videa s DeArrow minijaturama.
@@ -1122,8 +1137,8 @@ Open New Window: Otvori novi prozor
Default Invidious instance has been cleared: Standardna Invidious instanca je izbrisana
Default Invidious instance has been set to {instance}: Standardna Invidious instanca
je postavljena na {instance}
-External link opening has been disabled in the general settings: Vanjsko otvaranje
- poveznica je deaktivirano u općim postavkama
+External link opening has been disabled in the general settings: Otvaranje eksterne
+ poveznice je deaktivirano u općim postavkama
Search Bar:
Clear Input: Izbriši unos
Are you sure you want to open this link?: Stvarno želiš otvoriti ovu poveznicu?
diff --git a/static/locales/hu.yaml b/static/locales/hu.yaml
index 0d431f89843d0..d7a488e51f68d 100644
--- a/static/locales/hu.yaml
+++ b/static/locales/hu.yaml
@@ -296,6 +296,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pasztell rózsaszín
Hot Pink: Forró rózsaszín
+ Nordic: Skandináv
Main Color Theme:
Main Color Theme: 'Fő színtéma'
Red: 'Vörös'
diff --git a/static/locales/it.yaml b/static/locales/it.yaml
index 39ad919c263a2..d934e1098f694 100644
--- a/static/locales/it.yaml
+++ b/static/locales/it.yaml
@@ -287,6 +287,7 @@ Settings:
Catppuccin Mocha: Cappuccino moka
Pastel Pink: Rosa pastello
Hot Pink: Rosa caldo
+ Nordic: Nordico
Main Color Theme:
Main Color Theme: 'Colore principale del tema'
Red: 'Rosso'
diff --git a/static/locales/nl.yaml b/static/locales/nl.yaml
index 6f6d323369fb7..43b440c100822 100644
--- a/static/locales/nl.yaml
+++ b/static/locales/nl.yaml
@@ -1085,4 +1085,4 @@ Playlist will pause when current video is finished: Afspeellijst zal pauzeren wa
de huidige video is afgelopen
Playlist will not pause when current video is finished: Afspeellijst zal niet pauzeren
wanneer de huidige video is afgelopen
-Go to page: Naar pagina {page}
+Go to page: Ga naar {page}
diff --git a/static/locales/pl.yaml b/static/locales/pl.yaml
index d07c3209a655b..1d9b10834ada1 100644
--- a/static/locales/pl.yaml
+++ b/static/locales/pl.yaml
@@ -284,6 +284,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Hot Pink: Gorący róż
Pastel Pink: Pastelowy róż
+ Nordic: Nordycki
Main Color Theme:
Main Color Theme: 'Główny kolor motywu'
Red: 'Czerwony'
diff --git a/static/locales/pt-BR.yaml b/static/locales/pt-BR.yaml
index a4ad27157ffb0..7fc92c4c8a643 100644
--- a/static/locales/pt-BR.yaml
+++ b/static/locales/pt-BR.yaml
@@ -279,6 +279,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Rosa Pastel
Hot Pink: Rosa Choque
+ Nordic: Nordico
Main Color Theme:
Main Color Theme: 'Cor principal'
Red: 'Vermelha'
@@ -584,8 +585,8 @@ Settings:
são pulados
'SponsorBlock API Url (Default is https://sponsor.ajay.app)': URL da API SponsorBlock
(o padrão é https://sponsor.ajay.app)
- Enable SponsorBlock: Ativar o Bloqueio de Patrocinadores
- SponsorBlock Settings: Configurações de Bloqueio de Patrocinadores
+ Enable SponsorBlock: Ativar o SponsorBlock
+ SponsorBlock Settings: Configurações das APIs de Ajay (SponsorBlock & DeArrow)
Skip Options:
Show In Seek Bar: Mostrar na barra de busca
Prompt To Skip: Solicitar para pular
@@ -804,8 +805,8 @@ Video:
Hours: 'horas'
Day: 'dia'
Days: 'dias'
- Week: 'semana'
- Weeks: 'semanas'
+ Week: 'Semana'
+ Weeks: 'Semanas'
Month: 'mês'
Months: 'meses'
Year: 'ano'
@@ -853,7 +854,7 @@ Video:
outro: Conclusão
intro: Introdução
sponsor: Patrocinador
- filler: Enchimento
+ filler: Preenchimento
recap: Recapitulação
Skipped segment: Segmentos pulados
External Player:
diff --git a/static/locales/pt.yaml b/static/locales/pt.yaml
index a2004dfa1e31e..11ef36b06b338 100644
--- a/static/locales/pt.yaml
+++ b/static/locales/pt.yaml
@@ -43,6 +43,8 @@ Global:
Subscriber Count: 1 assinante | {count} assinantes
View Count: 1 visualização | {contagem} visualizações
Watching Count: 1 a assistir | {count} a assistir
+ Input Tags:
+ Length Requirement: A etiqueta tem que ter, pelo menos, {number} caracteres
Version {versionNumber} is now available! Click for more details: 'A versão {versionNumber}
está disponível! Clique aqui para mais informações.'
Download From Site: 'Descarregar do site'
@@ -175,6 +177,9 @@ User Playlists:
Playlist {playlistName} has been deleted.: A lista de reprodução {playlistName}
foi eliminada.
This playlist does not exist: Esta lista de reprodução não existe
+ This playlist is now used for quick bookmark: Esta lista de reprodução é agora
+ usada como marcador rápido
+ Quick bookmark disabled: Marcador rápido desativado
AddVideoPrompt:
Search in Playlists: Pesquisar nas listas de reprodução
Save: Guardar
@@ -212,6 +217,9 @@ User Playlists:
Playlist Description: Descrição da lista de reprodução
Add to Favorites: Adicionar a {playlistName}
Remove from Favorites: Remover de {playlistName}
+ Enable Quick Bookmark With This Playlist: Ativar marcador rápido para esta lista
+ de reprodução
+ Disable Quick Bookmark: Desativar marcador rápido
History:
# On History Page
History: 'Histórico'
@@ -279,6 +287,7 @@ Settings:
Catppuccin Mocha: Cappuccino mocha
Pastel Pink: Rosa pastel
Hot Pink: Rosa choque
+ Nordic: Nórdico
Main Color Theme:
Main Color Theme: 'Cor principal'
Red: 'Vermelho'
@@ -516,6 +525,8 @@ Settings:
Category Color: Cor da categoria
UseDeArrowTitles: Utilizar títulos de vídeo DeArrow
UseDeArrowThumbnails: Usar 'DeArrow' para miniaturas
+ 'DeArrow Thumbnail Generator API Url (Default is https://dearrow-thumb.ajay.app)': 'URL
+ da API do gerador de miniaturas DeArrow (padrão: https://dearrow-thumb.ajay.app)'
Proxy Settings:
Error getting network information. Is your proxy configured properly?: Erro ao
obter informações da rede. O seu proxy está configurado corretamente?
@@ -579,6 +590,10 @@ Settings:
Hide Channels Already Exists: Este ID já existe
Hide Channels API Error: Não foi possível obter o utilizador através do ID. Verifique
se o ID indicado está correto.
+ Hide Videos and Playlists Containing Text Placeholder: Palavra, fragmento de palavra
+ ou frase
+ Hide Videos and Playlists Containing Text: Ocultar vídeos e listas de reprodução
+ que contenham textos
External Player Settings:
Custom External Player Arguments: Argumentos do reprodutor externo
Custom External Player Executable: Executável do reprodutor externo
@@ -779,6 +794,7 @@ Channel:
Hide Answers: Ocultar respostas
Reveal Answers: Revelar respostas
votes: '{votes} votos'
+ Video hidden by FreeTube: Freetube ocultou este vídeo
Live:
Live: Em direto
This channel does not currently have any live streams: Este canal não tem, atualmente,
@@ -1126,6 +1142,7 @@ Tooltips:
SponsorBlock Settings:
UseDeArrowTitles: Substituir títulos de vídeo por títulos enviados pelo utilizador
a partir do DeArrow.
+ UseDeArrowThumbnails: Substituir miniaturas do vídeo por miniaturas DeArrow.
Search Bar:
Clear Input: Limpar entrada
Are you sure you want to open this link?: Tem a certeza de que deseja abrir a ligação?
@@ -1176,3 +1193,4 @@ Playlist will not pause when current video is finished: A lista de reprodução
Channel Hidden: '{channel} adicionado ao filtro do canal'
Go to page: Ir para {page}
Channel Unhidden: '{channel} removido do filtro do canal'
+Tag already exists: '"{tagName}" já existe'
diff --git a/static/locales/ru.yaml b/static/locales/ru.yaml
index f980c8eb2df98..1bc035777082e 100644
--- a/static/locales/ru.yaml
+++ b/static/locales/ru.yaml
@@ -1089,9 +1089,9 @@ Tooltips:
позволяющий открыть видео (подборку, если поддерживается) во внешнем проигрывателе.
Внимание, настройки Invidious не применяются ко внешним проигрывателям.
DefaultCustomArgumentsTemplate: "(По умолчанию: '{defaultCustomArguments}')"
- Ignore Default Arguments: Не отправлять какие-либо умолчательные аргументы во
- внешний проигрыватель кроме адреса видео (например, частота проигрывания, адрес
- подборки и подобное). Пользовательские аргументы всё ещё будут передаваться.
+ Ignore Default Arguments: 'Не передавать никаких аргументов внешнему проигрывателю
+ по умолчанию, кроме адреса видео (напр.: частота проигрывания, адрес списка
+ воспроизведения и т. д.). Пользовательские аргументы всё ещё будут передаваться.'
Experimental Settings:
Replace HTTP Cache: Отключает дисковый HTTP-кэш Electron и включает пользовательский
кэш изображений в памяти. Приведёт к увеличению использования оперативной памяти.
diff --git a/static/locales/ti.yaml b/static/locales/ti.yaml
index c6f189c432bf0..4de64898df59f 100644
--- a/static/locales/ti.yaml
+++ b/static/locales/ti.yaml
@@ -1,5 +1,5 @@
# Put the name of your locale in the same language
-Locale Name: 'እንግሊዘኛ (us)'
+Locale Name: 'ትግርኛ'
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.': >-
diff --git a/static/locales/tr.yaml b/static/locales/tr.yaml
index 3be02d386ded2..b33c2d20d1c8d 100644
--- a/static/locales/tr.yaml
+++ b/static/locales/tr.yaml
@@ -288,6 +288,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastel Pembe
Hot Pink: Sıcak Pembe
+ Nordic: Nord
Main Color Theme:
Main Color Theme: 'Ana Renk Teması'
Red: 'Kırmızı'
diff --git a/static/locales/zh-CN.yaml b/static/locales/zh-CN.yaml
index 9d0a0632c375d..ad89f4eb49320 100644
--- a/static/locales/zh-CN.yaml
+++ b/static/locales/zh-CN.yaml
@@ -249,6 +249,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastel Pink
Hot Pink: Hot Pink
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: '主题色'
Red: '红'
diff --git a/static/locales/zh-TW.yaml b/static/locales/zh-TW.yaml
index 30b4ae5642182..20488705349dc 100644
--- a/static/locales/zh-TW.yaml
+++ b/static/locales/zh-TW.yaml
@@ -250,6 +250,7 @@ Settings:
Catppuccin Mocha: 卡布奇諾摩卡
Pastel Pink: 淡粉紅色
Hot Pink: 亮粉紅色
+ Nordic: 北歐
Main Color Theme:
Main Color Theme: '主題色'
Red: '紅'
diff --git a/yarn.lock b/yarn.lock
index 23ecdd30362bc..47fe00b13926b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -20,7 +20,7 @@
"@jridgewell/gen-mapping" "^0.1.0"
"@jridgewell/trace-mapping" "^0.3.9"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
@@ -33,31 +33,31 @@
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.7":
- version "7.23.7"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f"
- integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==
+"@babel/core@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1"
+ integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.6"
"@babel/helper-compilation-targets" "^7.23.6"
"@babel/helper-module-transforms" "^7.23.3"
- "@babel/helpers" "^7.23.7"
- "@babel/parser" "^7.23.6"
- "@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.7"
- "@babel/types" "^7.23.6"
+ "@babel/helpers" "^7.23.9"
+ "@babel/parser" "^7.23.9"
+ "@babel/template" "^7.23.9"
+ "@babel/traverse" "^7.23.9"
+ "@babel/types" "^7.23.9"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/eslint-parser@^7.23.3":
- version "7.23.3"
- resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz#7bf0db1c53b54da0c8a12627373554a0828479ca"
- integrity sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==
+"@babel/eslint-parser@^7.23.10":
+ version "7.23.10"
+ resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz#2d4164842d6db798873b40e0c4238827084667a2"
+ integrity sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==
dependencies:
"@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
eslint-visitor-keys "^2.1.0"
@@ -159,10 +159,10 @@
regexpu-core "^5.3.1"
semver "^6.3.0"
-"@babel/helper-define-polyfill-provider@^0.4.4":
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088"
- integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==
+"@babel/helper-define-polyfill-provider@^0.5.0":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b"
+ integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==
dependencies:
"@babel/helper-compilation-targets" "^7.22.6"
"@babel/helper-plugin-utils" "^7.22.5"
@@ -364,14 +364,14 @@
"@babel/template" "^7.22.15"
"@babel/types" "^7.22.19"
-"@babel/helpers@^7.23.7":
- version "7.23.7"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.7.tgz#eb543c36f81da2873e47b76ee032343ac83bba60"
- integrity sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==
+"@babel/helpers@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d"
+ integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==
dependencies:
- "@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.7"
- "@babel/types" "^7.23.6"
+ "@babel/template" "^7.23.9"
+ "@babel/traverse" "^7.23.9"
+ "@babel/types" "^7.23.9"
"@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.22.15", "@babel/parser@^7.23.5", "@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/parser@^7.23.5", "@babel/parser@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b"
+ integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3":
version "7.23.3"
@@ -558,10 +558,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-async-generator-functions@^7.23.7":
- version "7.23.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd"
- integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==
+"@babel/plugin-transform-async-generator-functions@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce"
+ integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==
dependencies:
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-plugin-utils" "^7.22.5"
@@ -740,10 +740,10 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-simple-access" "^7.22.5"
-"@babel/plugin-transform-modules-systemjs@^7.23.3":
- version "7.23.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81"
- integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==
+"@babel/plugin-transform-modules-systemjs@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be"
+ integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==
dependencies:
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-module-transforms" "^7.23.3"
@@ -939,10 +939,10 @@
"@babel/helper-create-regexp-features-plugin" "^7.22.15"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/preset-env@^7.23.8":
- version "7.23.8"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.8.tgz#7d6f8171ea7c221ecd28059e65ad37c20e441e3e"
- integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==
+"@babel/preset-env@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669"
+ integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==
dependencies:
"@babel/compat-data" "^7.23.5"
"@babel/helper-compilation-targets" "^7.23.6"
@@ -971,7 +971,7 @@
"@babel/plugin-syntax-top-level-await" "^7.14.5"
"@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
"@babel/plugin-transform-arrow-functions" "^7.23.3"
- "@babel/plugin-transform-async-generator-functions" "^7.23.7"
+ "@babel/plugin-transform-async-generator-functions" "^7.23.9"
"@babel/plugin-transform-async-to-generator" "^7.23.3"
"@babel/plugin-transform-block-scoped-functions" "^7.23.3"
"@babel/plugin-transform-block-scoping" "^7.23.4"
@@ -993,7 +993,7 @@
"@babel/plugin-transform-member-expression-literals" "^7.23.3"
"@babel/plugin-transform-modules-amd" "^7.23.3"
"@babel/plugin-transform-modules-commonjs" "^7.23.3"
- "@babel/plugin-transform-modules-systemjs" "^7.23.3"
+ "@babel/plugin-transform-modules-systemjs" "^7.23.9"
"@babel/plugin-transform-modules-umd" "^7.23.3"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
"@babel/plugin-transform-new-target" "^7.23.3"
@@ -1019,9 +1019,9 @@
"@babel/plugin-transform-unicode-regex" "^7.23.3"
"@babel/plugin-transform-unicode-sets-regex" "^7.23.3"
"@babel/preset-modules" "0.1.6-no-external-plugins"
- babel-plugin-polyfill-corejs2 "^0.4.7"
- babel-plugin-polyfill-corejs3 "^0.8.7"
- babel-plugin-polyfill-regenerator "^0.5.4"
+ babel-plugin-polyfill-corejs2 "^0.4.8"
+ babel-plugin-polyfill-corejs3 "^0.9.0"
+ babel-plugin-polyfill-regenerator "^0.5.5"
core-js-compat "^3.31.0"
semver "^6.3.1"
@@ -1046,19 +1046,19 @@
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/template@^7.18.6", "@babel/template@^7.22.15", "@babel/template@^7.22.5":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
- integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
+"@babel/template@^7.18.6", "@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
+ integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==
dependencies:
- "@babel/code-frame" "^7.22.13"
- "@babel/parser" "^7.22.15"
- "@babel/types" "^7.22.15"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/parser" "^7.23.9"
+ "@babel/types" "^7.23.9"
-"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.7":
- version "7.23.7"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305"
- integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==
+"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950"
+ integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==
dependencies:
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.6"
@@ -1066,15 +1066,15 @@
"@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.6"
- "@babel/types" "^7.23.6"
+ "@babel/parser" "^7.23.9"
+ "@babel/types" "^7.23.9"
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.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==
+"@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.23.9", "@babel/types@^7.4.4":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002"
+ integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==
dependencies:
"@babel/helper-string-parser" "^7.23.4"
"@babel/helper-validator-identifier" "^7.22.20"
@@ -1113,10 +1113,10 @@
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
-"@double-great/stylelint-a11y@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@double-great/stylelint-a11y/-/stylelint-a11y-3.0.0.tgz#da9eb5558f065a6488fe48f054fec64e4aae8aa1"
- integrity sha512-MdBk83+r4R7AhycEGi4uueUh6rFJYIZzRrkt4Dtqc0lzNTQ101/1n54qES0SMMty/pqBYykPt/B4xdZO+wibeg==
+"@double-great/stylelint-a11y@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@double-great/stylelint-a11y/-/stylelint-a11y-3.0.1.tgz#37a974be01924acf6522523cbf2d13aeb207eeb3"
+ integrity sha512-0wRzfuDrXnSFvZGrAizngaJBhwCgZwjAVp2Vm4zPLekKW4eXccvB7HBEkhAeVSIuGCg3ki2h7eSHEoqZNfVOew==
dependencies:
postcss "^8.4.32"
@@ -1337,6 +1337,14 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
+"@jridgewell/source-map@^0.3.3":
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91"
+ integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.0"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
"@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.14"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
@@ -1347,7 +1355,7 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.21", "@jridgewell/trace-mapping@^0.3.9":
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.21", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.22"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c"
integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==
@@ -1538,10 +1546,10 @@
"@types/estree" "*"
"@types/json-schema" "*"
-"@types/estree@*", "@types/estree@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2"
- integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==
+"@types/estree@*", "@types/estree@^1.0.5":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
+ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18":
version "4.17.28"
@@ -1963,10 +1971,10 @@ acorn-jsx@^5.3.2:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.9.0:
- version "8.9.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
- integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
+acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.9.0:
+ version "8.11.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
aes-decrypter@3.1.3:
version "3.1.3"
@@ -2262,29 +2270,29 @@ babel-loader@^9.1.3:
find-cache-dir "^4.0.0"
schema-utils "^4.0.0"
-babel-plugin-polyfill-corejs2@^0.4.7:
- version "0.4.7"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c"
- integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==
+babel-plugin-polyfill-corejs2@^0.4.8:
+ version "0.4.8"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269"
+ integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==
dependencies:
"@babel/compat-data" "^7.22.6"
- "@babel/helper-define-polyfill-provider" "^0.4.4"
+ "@babel/helper-define-polyfill-provider" "^0.5.0"
semver "^6.3.1"
-babel-plugin-polyfill-corejs3@^0.8.7:
- version "0.8.7"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04"
- integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==
+babel-plugin-polyfill-corejs3@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81"
+ integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.4.4"
- core-js-compat "^3.33.1"
+ "@babel/helper-define-polyfill-provider" "^0.5.0"
+ core-js-compat "^3.34.0"
-babel-plugin-polyfill-regenerator@^0.5.4:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4"
- integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==
+babel-plugin-polyfill-regenerator@^0.5.5:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a"
+ integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.4.4"
+ "@babel/helper-define-polyfill-provider" "^0.5.0"
balanced-match@^1.0.0:
version "1.0.2"
@@ -2407,23 +2415,13 @@ braces@^3.0.2, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
-browserslist@^4.0.0, browserslist@^4.14.5:
- version "4.22.1"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
- integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
- dependencies:
- caniuse-lite "^1.0.30001541"
- electron-to-chromium "^1.4.535"
- 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==
+browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.22.2:
+ version "4.22.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6"
+ integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==
dependencies:
- caniuse-lite "^1.0.30001565"
- electron-to-chromium "^1.4.601"
+ caniuse-lite "^1.0.30001580"
+ electron-to-chromium "^1.4.648"
node-releases "^2.0.14"
update-browserslist-db "^1.0.13"
@@ -2572,15 +2570,10 @@ caniuse-lite@^1.0.0:
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz"
integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==
-caniuse-lite@^1.0.30001541:
- version "1.0.30001549"
- 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==
+caniuse-lite@^1.0.30001580:
+ version "1.0.30001581"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4"
+ integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==
caseless@~0.12.0:
version "0.12.0"
@@ -2851,7 +2844,7 @@ copy-webpack-plugin@^12.0.2:
schema-utils "^4.2.0"
serialize-javascript "^6.0.2"
-core-js-compat@^3.31.0, core-js-compat@^3.33.1, core-js-compat@^3.34.0:
+core-js-compat@^3.31.0, core-js-compat@^3.34.0:
version "3.35.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.0.tgz#c149a3d1ab51e743bc1da61e39cb51f461a41873"
integrity sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==
@@ -2920,10 +2913,10 @@ css-functions-list@^3.2.1:
resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.1.tgz#2eb205d8ce9f9ce74c5c1d7490b66b77c45ce3ea"
integrity sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==
-css-loader@^6.9.1:
- version "6.9.1"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.9.1.tgz#9ec9a434368f2bdfeffbf8f6901a1ce773586c6b"
- integrity sha512-OzABOh0+26JKFdMzlK6PY1u5Zx8+Ck7CVRlcGNZoY9qwJjdfu2VWFuprTIpPW+Av5TZTVViYWcFQaEEQURLknQ==
+css-loader@^6.10.0:
+ version "6.10.0"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7"
+ integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==
dependencies:
icss-utils "^5.1.0"
postcss "^8.4.33"
@@ -3421,20 +3414,15 @@ electron-publish@24.8.1:
lazy-val "^1.0.5"
mime "^2.5.2"
-electron-to-chromium@^1.4.535:
- version "1.4.554"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz#04e09c2ee31dc0f1546174033809b54cc372740b"
- integrity sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==
-
-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-to-chromium@^1.4.648:
+ version "1.4.648"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz#c7b46c9010752c37bb4322739d6d2dd82354fbe4"
+ integrity sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==
-electron@^28.1.4:
- version "28.1.4"
- resolved "https://registry.yarnpkg.com/electron/-/electron-28.1.4.tgz#3e1772521d19a8c70162c6c86deb3e57bb28721f"
- integrity sha512-WE6go611KOhtH6efRPMnVC7FE7DCKnQ3ZyHFeI1DbaCy8OU4UjZ8/CZGcuZmZgRdxSBEHoHdgaJkWRHZzF0FOg==
+electron@^28.2.1:
+ version "28.2.1"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-28.2.1.tgz#8edf2be24d97160b7eb52b7ce9a2424cf14c0791"
+ integrity sha512-wlzXf+OvOiVlBf9dcSeMMf7Q+N6DG+wtgFbMK0sA/JpIJcdosRbLMQwLg/LTwNVKIbmayqFLDp4FmmFkEMhbYA==
dependencies:
"@electron/get" "^2.0.0"
"@types/node" "^18.11.18"
@@ -3676,11 +3664,18 @@ 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.1, eslint-compat-utils@^0.1.2:
+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==
+eslint-compat-utils@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.4.1.tgz#498d9dad03961174a283f7741838a3fbe4a34e89"
+ integrity sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==
+ dependencies:
+ semver "^7.5.4"
+
eslint-config-prettier@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f"
@@ -3739,17 +3734,18 @@ eslint-plugin-import@^2.29.1:
semver "^6.3.1"
tsconfig-paths "^3.15.0"
-eslint-plugin-jsonc@^2.11.2:
- version "2.11.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.11.2.tgz#5829ec7b4abd11378be525a85deb3dfbc6348dc7"
- integrity sha512-F6A0MZhIGRBPOswzzn4tJFXXkPLiLwJaMlQwz/Qj1qx+bV5MCn79vBeJh2ynMmtqqHloi54KDCnsT/KWrcCcnQ==
+eslint-plugin-jsonc@^2.13.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.13.0.tgz#e05f88d3671c08ca96e87b5be6a4cfe8d66e6746"
+ integrity sha512-2wWdJfpO/UbZzPDABuUVvlUQjfMJa2p2iQfYt/oWxOMpXCcjuiMUSaA02gtY/Dbu82vpaSqc+O7Xq6ECHwtIxA==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
- eslint-compat-utils "^0.1.2"
+ eslint-compat-utils "^0.4.0"
espree "^9.6.1"
graphemer "^1.4.0"
jsonc-eslint-parser "^2.0.4"
natural-compare "^1.4.0"
+ synckit "^0.6.0"
eslint-plugin-n@^16.6.2:
version "16.6.2"
@@ -3803,35 +3799,35 @@ eslint-plugin-unicorn@^50.0.1:
semver "^7.5.4"
strip-indent "^3.0.0"
-eslint-plugin-vue@^9.20.1:
- version "9.20.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.20.1.tgz#7ed78846898574b2cd26939f28b0b87798a7b528"
- integrity sha512-GyCs8K3lkEvoyC1VV97GJhP1SvqsKCiWGHnbn0gVUYiUhaH2+nB+Dv1uekv1THFMPbBfYxukrzQdltw950k+LQ==
+eslint-plugin-vue@^9.21.1:
+ version "9.21.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.21.1.tgz#da5629efa48527cec98278dca0daa90fada4caf7"
+ integrity sha512-XVtI7z39yOVBFJyi8Ljbn7kY9yHzznKXL02qQYn+ta63Iy4A9JFBw6o4OSB9hyD2++tVT+su9kQqetUyCCwhjw==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
natural-compare "^1.4.0"
nth-check "^2.1.1"
postcss-selector-parser "^6.0.13"
semver "^7.5.4"
- vue-eslint-parser "^9.4.0"
+ vue-eslint-parser "^9.4.2"
xml-name-validator "^4.0.0"
-eslint-plugin-vuejs-accessibility@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vuejs-accessibility/-/eslint-plugin-vuejs-accessibility-2.2.0.tgz#7880e5dd3fa8e707f9170e698427894e92d6ac36"
- integrity sha512-/Dr02rkrBU/mDE4+xO8/9Y230mC9ZTkh2U5tJHEFHxw/CldccmVCWgWs4NM1lq+Bbu9bJzwJPHOsZ+o5wIQuOA==
+eslint-plugin-vuejs-accessibility@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vuejs-accessibility/-/eslint-plugin-vuejs-accessibility-2.2.1.tgz#51c53b24f7e76c958334773a213b1085f3ceaee5"
+ integrity sha512-+QpTYEb4UcVD5+RIfKs3YVPoH1mfUj3nadTixmpPw9+kYp6AFAiZ3CQ/HMiexAAgFGBgL3Np5/nwbqcfQomdEQ==
dependencies:
aria-query "^5.3.0"
emoji-regex "^10.0.0"
vue-eslint-parser "^9.0.1"
-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==
+eslint-plugin-yml@^1.12.2:
+ version "1.12.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-yml/-/eslint-plugin-yml-1.12.2.tgz#e75d27cfbf5c0297c509b409fd8d43dfc2c4dc8b"
+ integrity sha512-hvS9p08FhPT7i/ynwl7/Wt7ke7Rf4P2D6fT8lZlL43peZDTsHtH2A0SIFQ7Kt7+mJ6if6P+FX3iJhMkdnxQwpg==
dependencies:
debug "^4.3.2"
- eslint-compat-utils "^0.1.1"
+ eslint-compat-utils "^0.4.0"
lodash "^4.17.21"
natural-compare "^1.4.0"
yaml-eslint-parser "^1.2.1"
@@ -5514,59 +5510,59 @@ lazy-val@^1.0.4, lazy-val@^1.0.5:
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
-lefthook-darwin-arm64@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.6.0.tgz#bc3c7e082d4a2098bd6589b1eee19bc2d8fbfc80"
- integrity sha512-rfyfpC6aIVU3qmr4nGBiTeFPV87NXJ5y6BX1WgHqYojKBSlADL0hoCNLZxPakySugY5DHJ7TBcl46eQKXsjJ4g==
-
-lefthook-darwin-x64@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook-darwin-x64/-/lefthook-darwin-x64-1.6.0.tgz#e5bceafde7675097e8eeb3e14422d069786184d6"
- integrity sha512-8icA0+M87Oq9p4UlPReRYl7X0AzSE+gqiCZK5g8GNmxiEZY79u34Cw88rgr3IbQmrAAaQcD/N2G0q/a6LgI/0g==
-
-lefthook-freebsd-arm64@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.6.0.tgz#1dc18a8541a9f516080bbebab44969fc7be45e25"
- integrity sha512-eK1YIP/BpI+aUNzdyaW7ucVlcKCeKDaGHTMmUB8zMVb3NFjcUXZfqtUGeeX20VdGT62DEYuzPBcIJN1rF9VD6Q==
-
-lefthook-freebsd-x64@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.6.0.tgz#8cec31909a81c5e25cc80981e51e54f3783295f9"
- integrity sha512-u28hbye+9eMzKbdlhKnpuVhjJ4eZlbhw4b1AyFse1jJCNM8mWkjC2V2Gz5Ms0yvW5sLT7torM/fj3T5ljpdfaQ==
-
-lefthook-linux-arm64@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook-linux-arm64/-/lefthook-linux-arm64-1.6.0.tgz#d15f85fcd8d481c6bbdc8557a6608e106aed81c9"
- integrity sha512-L02GU57pOoPuxoeCfM7831ZFPebBie54C5ny7erLbW3/M0buOwgb/zEpCJKbtfAcdX3LwiykxgJUO61Ux5Yduw==
-
-lefthook-linux-x64@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook-linux-x64/-/lefthook-linux-x64-1.6.0.tgz#695eec65ca77d272ce95c7100594353ab81bf131"
- integrity sha512-pvBZ5UEl3nNDRMX5GItbuQaGvHfu0cd1ory6K5Z4x8aA1tlJ8ln9OBYLn3kbUP89hmb8vSYQmTkNtri0DaHn7g==
-
-lefthook-windows-arm64@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook-windows-arm64/-/lefthook-windows-arm64-1.6.0.tgz#719f1933cae6220317e81d2d4adbb6ed6c149708"
- integrity sha512-pKpIwvkme3C1wGQUFSEkQDyjnYqemSxEjr6eFOxa0zaHTEUtz+cKhbNLnAAW+humQXjorvHDreWjt1LtCNosIg==
-
-lefthook-windows-x64@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook-windows-x64/-/lefthook-windows-x64-1.6.0.tgz#897f956877fc556588f8ba4de2d4edc6fd83568a"
- integrity sha512-6+UbtalKvPXEiIovL1XPzHnjo+NlvGf17++RfP9iFNcM7YmY6s5DA3dxNnF1SBzSbT0DsPxAriIm9B+AyLUmng==
-
-lefthook@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lefthook/-/lefthook-1.6.0.tgz#cfd6bc0f54531cbf4080d31726e81dbbf02e9bf0"
- integrity sha512-s7AkCE4dn83UDmMhbV36xMPUwjO3kAjYTDpeFmv3rEsRM9DYQGC78QbGJy476xK/grS/gGxMGtw3jt9/Yd2dSw==
+lefthook-darwin-arm64@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.6.1.tgz#387d245d39673ceede01da7de2a0d44d2c368e85"
+ integrity sha512-q6+sYr2Dpt6YnBGXRjMFcXZUnVB97nH+s7EP/tX8m9ewvQxLPqIiUPyAumfyJ2Siomkc5WgAinG+kT63VjUN3A==
+
+lefthook-darwin-x64@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook-darwin-x64/-/lefthook-darwin-x64-1.6.1.tgz#a677f7262d29317964c96f13509c06d3bf54e93f"
+ integrity sha512-utm7FwtbW8SxGMALIw5/iG4loYS2FI0crDKp/YIamrZgQr6M4pS2C3rxGj5OwiHFIm3arVU+3VZywdvRLJAw0w==
+
+lefthook-freebsd-arm64@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.6.1.tgz#3d527cfa40da0b57b2b81e853f7c11bd13fc618c"
+ integrity sha512-F2BoDnGznkJyn6lyhmXpu62yq7SMCeHAl3Bl8c+P6mXfmatjjxEpVmrzRuzKMPd/MRGpy2B/glkuyO4wZZazow==
+
+lefthook-freebsd-x64@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.6.1.tgz#fbc9a5a7c2acaacc5494cf0e21083f21bad8057d"
+ integrity sha512-/NBjMUtnwvdc/p821sfPnZCbWZ6FQkAvnvjoaQu6tkajKZbZYSKsl7UtAicO0nT+79BQFt7TbaZjpua2T9tM5w==
+
+lefthook-linux-arm64@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook-linux-arm64/-/lefthook-linux-arm64-1.6.1.tgz#5f50008da8fa164ba9d83542361a0c83429da6ae"
+ integrity sha512-ke+2ni/bmxgYJSRsH+uIYYfTLj2It7WP+mcF4rfJHRbzn5yDYIjFgylUMC2CgW5urS4DSbxcRIbAqLY3OXAHnw==
+
+lefthook-linux-x64@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook-linux-x64/-/lefthook-linux-x64-1.6.1.tgz#a1370cbfc2def92ff7dd1f7dcc71bddca97a8286"
+ integrity sha512-/HLkl9jt3XRjT0RPaLpAgUQmvp4zV/KKZ/8x6xslPl89krv3ZkHKKrqeaHdhiengq3hzx3N+KbOfFcxBRzdT6A==
+
+lefthook-windows-arm64@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook-windows-arm64/-/lefthook-windows-arm64-1.6.1.tgz#eaffe44e437182e417006ef7b68f49f219fb7e5e"
+ integrity sha512-RyQ8S4/45BpJpRPy7KsOuJeXQ5FOa7MASoPtOYvrXt4A8kayCv1jlGs7MTv3XJbUosCJhfNpw3ReeHVGfw1KIw==
+
+lefthook-windows-x64@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook-windows-x64/-/lefthook-windows-x64-1.6.1.tgz#c3da7ec991918543be69fe268e91dc5f77ec7548"
+ integrity sha512-poYLk2tfg1Ncr4aZeFuhHjv1qH6f9hX3tV1FOK2MfWkXkRTYPl6MF5h/ONMIv71BsLjGbAA7LNXM5Mj4/B//lQ==
+
+lefthook@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/lefthook/-/lefthook-1.6.1.tgz#56d35b18ba2231b93d669434c1bd52c4532299e9"
+ integrity sha512-1T+tk0V6ubZgiZJGi39QlLMAcgEw+lhoDeSpT3L8Y/f8nUpJW9ntcMOmt+uvMfQ3TVjNcR1r/Lhtm7gTqgdcPg==
optionalDependencies:
- lefthook-darwin-arm64 "1.6.0"
- lefthook-darwin-x64 "1.6.0"
- lefthook-freebsd-arm64 "1.6.0"
- lefthook-freebsd-x64 "1.6.0"
- lefthook-linux-arm64 "1.6.0"
- lefthook-linux-x64 "1.6.0"
- lefthook-windows-arm64 "1.6.0"
- lefthook-windows-x64 "1.6.0"
+ lefthook-darwin-arm64 "1.6.1"
+ lefthook-darwin-x64 "1.6.1"
+ lefthook-freebsd-arm64 "1.6.1"
+ lefthook-freebsd-x64 "1.6.1"
+ lefthook-linux-arm64 "1.6.1"
+ lefthook-linux-x64 "1.6.1"
+ lefthook-windows-arm64 "1.6.1"
+ lefthook-windows-x64 "1.6.1"
levn@^0.4.1:
version "0.4.1"
@@ -5723,10 +5719,10 @@ m3u8-parser@4.8.0:
"@videojs/vhs-utils" "^3.0.5"
global "^4.4.0"
-marked@^11.1.1:
- version "11.1.1"
- resolved "https://registry.yarnpkg.com/marked/-/marked-11.1.1.tgz#e1b2407241f744fb1935fac224680874d9aff7a3"
- integrity sha512-EgxRjgK9axsQuUa/oKMx5DEY8oXpKJfk61rT5iY3aRlgU6QJtUcxU5OAymdhCvWvhYcd9FKmO5eQoX8m9VGJXg==
+marked@^11.2.0:
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-11.2.0.tgz#fc908aeca962b721b0392ee4205e6f90ebffb074"
+ integrity sha512-HR0m3bvu0jAPYiIvLUUQtdg1g6D247//lvcekpHO1WMvbwDlwSkZAX9Lw4F4YHE1T0HaaNve0tuAWuV1UJ6vtw==
matcher@^3.0.0:
version "3.0.0"
@@ -5861,12 +5857,13 @@ min-indent@^1.0.0:
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
-mini-css-extract-plugin@^2.7.7:
- version "2.7.7"
- resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.7.tgz#4acf02f362c641c38fb913bfcb7ca2fc4a7cf339"
- integrity sha512-+0n11YGyRavUR3IlaOzJ0/4Il1avMvJ1VJfhWfCn24ITQXhRr1gghbhhrda6tgtNcpZaWKdSuwKq20Jb7fnlyw==
+mini-css-extract-plugin@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz#1aeae2a90a954b6426c9e8311eab36b450f553a0"
+ integrity sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==
dependencies:
schema-utils "^4.0.0"
+ tapable "^2.2.1"
minimalistic-assert@^1.0.0:
version "1.0.1"
@@ -6018,11 +6015,6 @@ node-forge@^1:
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
-node-releases@^2.0.13:
- version "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"
@@ -7282,10 +7274,10 @@ sanitize-filename@^1.6.3:
dependencies:
truncate-utf8-bytes "^1.0.0"
-sass-loader@^14.0.0:
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-14.0.0.tgz#fc8390f7cc16863622cd16f3ea07b36ba6ea8f91"
- integrity sha512-oceP9wWbep/yRJ2+sMbCzk0UsXsDzdNis+N8nu9i5GwPXjy6v3DNB6TqfJLSpPO9k4+B8x8p/CEgjA9ZLkoLug==
+sass-loader@^14.1.0:
+ version "14.1.0"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-14.1.0.tgz#43ba90e0cd8a15a1e932e818c525b0115a0ce8a3"
+ integrity sha512-LS2mLeFWA+orYxHNu+O18Xe4jR0kyamNOOUsE3NyBP4DvIL+8stHpNX0arYTItdPe80kluIiJ7Wfe/9iHSRO0Q==
dependencies:
neo-async "^2.6.2"
@@ -7844,10 +7836,10 @@ stylelint-use-logical-spec@^5.0.1:
resolved "https://registry.yarnpkg.com/stylelint-use-logical-spec/-/stylelint-use-logical-spec-5.0.1.tgz#d5aa254d615d373f18214297c0b49a03a6ca5980"
integrity sha512-UfLB4LW6iG4r3cXxjxkiHQrFyhWFqt8FpNNngD+TyvgMWSokk5TYwTvBHS3atUvZhOogllTOe/PUrGE+4z84AA==
-stylelint@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.2.0.tgz#60678f64d7660350fdd06415fd449f332b4fcbf6"
- integrity sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==
+stylelint@^16.2.1:
+ version "16.2.1"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.2.1.tgz#895d6d42523c5126ec0895f0ca2a58febeb77e89"
+ integrity sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==
dependencies:
"@csstools/css-parser-algorithms" "^2.5.0"
"@csstools/css-tokenizer" "^2.2.3"
@@ -7952,6 +7944,13 @@ swiper@^11.0.5:
resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.0.5.tgz#6ed1ad06e6906ba42fd4b93d4988f0626a49046e"
integrity sha512-rhCwupqSyRnWrtNzWzemnBLMoyYuoDgGgspAm/8iBD3jCvAWycPLH4Z3TB0O5520DHLzMx94yUMH/B9Efpa48w==
+synckit@^0.6.0:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.6.2.tgz#e1540b97825f2855f7170b98276e8463167f33eb"
+ integrity sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==
+ dependencies:
+ tslib "^2.3.1"
+
synckit@^0.8.6:
version "0.8.6"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.6.tgz#b69b7fbce3917c2673cbdc0d87fb324db4a5b409"
@@ -7971,7 +7970,7 @@ table@^6.8.1:
string-width "^4.2.3"
strip-ansi "^6.0.1"
-tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
@@ -7996,16 +7995,16 @@ temp-file@^3.4.0:
async-exit-hook "^2.0.1"
fs-extra "^10.0.0"
-terser-webpack-plugin@^5.3.7:
- version "5.3.7"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7"
- integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==
+terser-webpack-plugin@^5.3.10:
+ version "5.3.10"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199"
+ integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==
dependencies:
- "@jridgewell/trace-mapping" "^0.3.17"
+ "@jridgewell/trace-mapping" "^0.3.20"
jest-worker "^27.4.5"
schema-utils "^3.1.1"
serialize-javascript "^6.0.1"
- terser "^5.16.5"
+ terser "^5.26.0"
terser@^5.10.0:
version "5.14.2"
@@ -8017,13 +8016,13 @@ terser@^5.10.0:
commander "^2.20.0"
source-map-support "~0.5.20"
-terser@^5.16.5:
- version "5.16.9"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.9.tgz#7a28cb178e330c484369886f2afd623d9847495f"
- integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==
+terser@^5.26.0:
+ version "5.27.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c"
+ integrity sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==
dependencies:
- "@jridgewell/source-map" "^0.3.2"
- acorn "^8.5.0"
+ "@jridgewell/source-map" "^0.3.3"
+ acorn "^8.8.2"
commander "^2.20.0"
source-map-support "~0.5.20"
@@ -8103,7 +8102,7 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^2.0.3, tslib@^2.3.0, tslib@^2.5.0, tslib@^2.6.0, tslib@^2.6.2:
+tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.5.0, tslib@^2.6.0, tslib@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -8466,10 +8465,10 @@ vue-devtools@^5.1.4:
resolved "https://registry.yarnpkg.com/vue-devtools/-/vue-devtools-5.1.4.tgz#265a7458ade2affb291739176964256b597fa302"
integrity sha512-EBAEXvAHUinsPzoSiElps0JgtLXUnJXKIJbP6nfdz/R63VdKBMfJ34/rFip+4iT7iMbVS5lA4W6N1jq4Hj4LCg==
-vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.3.2, vue-eslint-parser@^9.4.0:
- version "9.4.0"
- resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.0.tgz#dfd22302e2992fe45748a76553cef7afa5bdde27"
- integrity sha512-7KsNBb6gHFA75BtneJsoK/dbZ281whUIwFYdQxA68QrCrGMXYzUMbPDHGcOQ0OocIVKrWSKWXZ4mL7tonCXoUw==
+vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.4.2:
+ version "9.4.2"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d"
+ integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==
dependencies:
debug "^4.3.4"
eslint-scope "^7.1.1"
@@ -8638,19 +8637,19 @@ webpack-watch-external-files-plugin@^3.0.0:
glob "10.3.10"
path "0.12.7"
-webpack@^5.89.0:
- version "5.89.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc"
- integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==
+webpack@^5.90.1:
+ version "5.90.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.1.tgz#62ab0c097d7cbe83d32523dbfbb645cdb7c3c01c"
+ integrity sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==
dependencies:
"@types/eslint-scope" "^3.7.3"
- "@types/estree" "^1.0.0"
+ "@types/estree" "^1.0.5"
"@webassemblyjs/ast" "^1.11.5"
"@webassemblyjs/wasm-edit" "^1.11.5"
"@webassemblyjs/wasm-parser" "^1.11.5"
acorn "^8.7.1"
acorn-import-assertions "^1.9.0"
- browserslist "^4.14.5"
+ browserslist "^4.21.10"
chrome-trace-event "^1.0.2"
enhanced-resolve "^5.15.0"
es-module-lexer "^1.2.1"
@@ -8664,7 +8663,7 @@ webpack@^5.89.0:
neo-async "^2.6.2"
schema-utils "^3.2.0"
tapable "^2.1.1"
- terser-webpack-plugin "^5.3.7"
+ terser-webpack-plugin "^5.3.10"
watchpack "^2.4.0"
webpack-sources "^3.2.3"