From e48321a2c49d535752d67994ef7e127b43d151f4 Mon Sep 17 00:00:00 2001 From: gnattu Date: Sat, 24 Aug 2024 07:31:25 +0800 Subject: [PATCH 001/120] Add option to always burn in subtitles if transcoding is triggered --- src/components/playback/playbackmanager.js | 14 ++++++++++++-- .../subtitlesettings/subtitlesettings.js | 2 ++ .../subtitlesettings.template.html | 8 ++++++++ src/scripts/settings/appSettings.js | 13 +++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index e14aa062d1..086ab3c937 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1,4 +1,5 @@ import { PlaybackErrorCode } from '@jellyfin/sdk/lib/generated-client/models/playback-error-code.js'; +import { getMediaInfoApi } from '@jellyfin/sdk/lib/utils/api/media-info-api'; import merge from 'lodash-es/merge'; import Screenfull from 'screenfull'; @@ -22,6 +23,7 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type' import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; const UNLIMITED_ITEMS = -1; @@ -401,7 +403,7 @@ function setStreamUrls(items, deviceProfile, maxBitrate, apiClient, startPositio }); } -function getPlaybackInfo(player, apiClient, item, deviceProfile, mediaSourceId, liveStreamId, options) { +async function getPlaybackInfo(player, apiClient, item, deviceProfile, mediaSourceId, liveStreamId, options) { if (!itemHelper.isLocalItem(item) && item.MediaType === 'Audio' && !player.useServerPlaybackInfoForAudio) { return Promise.resolve({ MediaSources: [ @@ -427,6 +429,9 @@ function getPlaybackInfo(player, apiClient, item, deviceProfile, mediaSourceId, StartTimeTicks: options.startPosition || 0 }; + const api = toApi(apiClient); + const mediaInfoApi = getMediaInfoApi(api); + if (options.isPlayback) { query.IsPlayback = true; query.AutoOpenLiveStream = true; @@ -480,7 +485,12 @@ function getPlaybackInfo(player, apiClient, item, deviceProfile, mediaSourceId, query.DirectPlayProtocols = player.getDirectPlayProtocols(); } - return apiClient.getPlaybackInfo(itemId, query, deviceProfile); + query.AlwaysBurnInSubtitleWhenTranscoding = appSettings.alwaysBurnInSubtitleWhenTranscoding(); + + query.DeviceProfile = deviceProfile; + + const res = await mediaInfoApi.getPostedPlaybackInfo({ itemId: itemId, playbackInfoDto: query }); + return res.data; } function getOptimalMediaSource(apiClient, item, versions) { diff --git a/src/components/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js index da548a747c..b7852a79fb 100644 --- a/src/components/subtitlesettings/subtitlesettings.js +++ b/src/components/subtitlesettings/subtitlesettings.js @@ -64,6 +64,7 @@ function loadForm(context, user, userSettings, appearanceSettings, apiClient) { context.querySelector('#chkSubtitleRenderPgs').checked = appSettings.get('subtitlerenderpgs') === 'true'; context.querySelector('#selectSubtitleBurnIn').dispatchEvent(new CustomEvent('change', {})); + context.querySelector('#chkAlwaysBurnInSubtitleWhenTranscoding').checked = appSettings.alwaysBurnInSubtitleWhenTranscoding(); onAppearanceFieldChange({ target: context.querySelector('#selectTextSize') @@ -90,6 +91,7 @@ function save(instance, context, userId, userSettings, apiClient, enableSaveConf appSettings.set('subtitleburnin', context.querySelector('#selectSubtitleBurnIn').value); appSettings.set('subtitlerenderpgs', context.querySelector('#chkSubtitleRenderPgs').checked); + appSettings.alwaysBurnInSubtitleWhenTranscoding(context.querySelector('#chkAlwaysBurnInSubtitleWhenTranscoding').checked); apiClient.getUser(userId).then(function (user) { saveUser(context, user, userSettings, instance.appearanceKey, apiClient).then(function () { diff --git a/src/components/subtitlesettings/subtitlesettings.template.html b/src/components/subtitlesettings/subtitlesettings.template.html index 003a2a4e22..32584fc6da 100644 --- a/src/components/subtitlesettings/subtitlesettings.template.html +++ b/src/components/subtitlesettings/subtitlesettings.template.html @@ -42,6 +42,14 @@ +
+ +
${AlwaysBurnInSubtitleWhenTranscodingHelp}
+
+

${HeaderSubtitleAppearance} diff --git a/src/scripts/settings/appSettings.js b/src/scripts/settings/appSettings.js index cf6cbea284..e10d6053d3 100644 --- a/src/scripts/settings/appSettings.js +++ b/src/scripts/settings/appSettings.js @@ -156,6 +156,19 @@ class AppSettings { return this.get('preferredTranscodeVideoAudioCodec') || ''; } + /** + * Get or set 'Always burn in subtitle when transcoding' state. + * @param {boolean|undefined} val - Flag to enable 'Always burn in subtitle when transcoding' or undefined. + * @return {boolean} 'Always burn in subtitle when transcoding' state. + */ + alwaysBurnInSubtitleWhenTranscoding(val) { + if (val !== undefined) { + return this.set('alwaysBurnInSubtitleWhenTranscoding', val.toString()); + } + + return toBoolean(this.get('alwaysBurnInSubtitleWhenTranscoding'), false); + } + /** * Get or set 'Enable DTS' state. * @param {boolean|undefined} val - Flag to enable 'Enable DTS' or undefined. From 0dbd659bc48f3b846844d1098d8a2c017b89a6ff Mon Sep 17 00:00:00 2001 From: gnattu Date: Sat, 24 Aug 2024 14:40:07 +0800 Subject: [PATCH 002/120] Fix localization --- src/strings/en-us.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index a43a7bd8cc..0cf522a0c2 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -34,6 +34,8 @@ "AllowStreamSharingHelp": "Allow Jellyfin to duplicate the mpegts stream from tuner and share this duplicated stream to its clients. This is useful when the tuner has total stream count limit but may also cause playback issues.", "Alternate" : "Alternate", "AlternateDVD" : "Alternate DVD", + "AlwaysBurnInSubtitleWhenTranscoding": "Always burn in subtitle when transcoding", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Burn in all subtitles when transcoding is triggered. This ensures subtitle synchronization after transcoding at the cost of reduced transcoding speed.", "LabelThrottleDelaySeconds": "Throttle after", "LabelThrottleDelaySecondsHelp": "Time in seconds after which the transcoder will be throttled. Must be large enough for the client to maintain a healthy buffer. Only works if throttling is enabled.", "LabelSegmentKeepSeconds": "Time to keep segments", @@ -84,7 +86,7 @@ "BoxRear": "Box (rear)", "BoxSet": "Box Set", "Browse": "Browse", - "BurnSubtitlesHelp": "Determine if the server should burn in subtitles while transcoding videos. Avoiding this will greatly improve performance. Select Auto to burn image based formats (VobSub, PGS, SUB, IDX, etc.) and certain ASS or SSA subtitles.", + "BurnSubtitlesHelp": "Determine if the server should burn in subtitles. Avoiding this will greatly improve performance. Select Auto to burn image based formats (VobSub, PGS, SUB, IDX, etc.) and certain ASS or SSA subtitles.", "ButtonActivate": "Activate", "ButtonAddImage": "Add Image", "ButtonAddMediaLibrary": "Add Media Library", From 2d12aec9b425da4d768af30a92fbc14dfa4f87c7 Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 22 Sep 2024 00:36:29 +0800 Subject: [PATCH 003/120] Only load subtitle when direct play/remux --- src/plugins/htmlVideoPlayer/plugin.js | 52 ++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 46a3062a11..908248e6a4 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1,6 +1,7 @@ import DOMPurify from 'dompurify'; import browser from '../../scripts/browser'; +import appSettings from '../../scripts/settings/appSettings'; import { appHost } from '../../components/apphost'; import loading from '../../components/loading/loading'; import dom from '../../scripts/dom'; @@ -1566,15 +1567,50 @@ export class HtmlVideoPlayer { return t.Index === streamIndex; })[0]; - this.setTrackForDisplay(this.#mediaElement, track, targetTextTrackIndex); - if (enableNativeTrackSupport(this._currentPlayOptions?.mediaSource, track)) { - if (streamIndex !== -1) { - this.setCueAppearance(); - } + // This play method can only check if it is real direct play, and will mark Remux as Transcode as well + const isDirectPlay = this._currentPlayOptions.playMethod === "DirectPlay"; + const burnInWhenTranscoding = appSettings.alwaysBurnInSubtitleWhenTranscoding(); + + if (!isDirectPlay && burnInWhenTranscoding) { + const apiClient = ServerConnections.getApiClient(this._currentPlayOptions.item.ServerId); + const sessionPromise = apiClient.getSessions({ + deviceId: apiClient.deviceId() + }).then(function (sessions) { + return sessions[0] || {};; + }, function () { + return Promise.resolve({}); + }); + + const player = this; + + sessionPromise.then((s) => { + if (!s.TranscodingInfo || s.TranscodingInfo?.IsVideoDirect) { + player.setTrackForDisplay(player.#mediaElement, track, targetTextTrackIndex); + if (enableNativeTrackSupport(player._currentPlayOptions?.mediaSource, track)) { + if (streamIndex !== -1) { + player.setCueAppearance(); + } + } else { + // null these out to disable the player's native display (handled below) + streamIndex = -1; + track = null; + } + } else { + // unset stream when switching to transcode + player.setTrackForDisplay(player.#mediaElement, null, -1); + } + }) } else { - // null these out to disable the player's native display (handled below) - streamIndex = -1; - track = null; + this.setTrackForDisplay(this.#mediaElement, track, targetTextTrackIndex); + if (enableNativeTrackSupport(this._currentPlayOptions?.mediaSource, track)) { + if (streamIndex !== -1) { + this.setCueAppearance(); + } + } else { + // null these out to disable the player's native display (handled below) + streamIndex = -1; + track = null; + } } } From 040b2d490198271edbdf9b118987b2b296219c9d Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 22 Sep 2024 00:39:24 +0800 Subject: [PATCH 004/120] Fix Lint Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/plugins/htmlVideoPlayer/plugin.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 908248e6a4..202c197d79 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1568,7 +1568,7 @@ export class HtmlVideoPlayer { })[0]; // This play method can only check if it is real direct play, and will mark Remux as Transcode as well - const isDirectPlay = this._currentPlayOptions.playMethod === "DirectPlay"; + const isDirectPlay = this._currentPlayOptions.playMethod === 'DirectPlay'; const burnInWhenTranscoding = appSettings.alwaysBurnInSubtitleWhenTranscoding(); if (!isDirectPlay && burnInWhenTranscoding) { @@ -1576,7 +1576,7 @@ export class HtmlVideoPlayer { const sessionPromise = apiClient.getSessions({ deviceId: apiClient.deviceId() }).then(function (sessions) { - return sessions[0] || {};; + return sessions[0] || {}; }, function () { return Promise.resolve({}); }); @@ -1599,7 +1599,7 @@ export class HtmlVideoPlayer { // unset stream when switching to transcode player.setTrackForDisplay(player.#mediaElement, null, -1); } - }) + }); } else { this.setTrackForDisplay(this.#mediaElement, track, targetTextTrackIndex); if (enableNativeTrackSupport(this._currentPlayOptions?.mediaSource, track)) { From e4c20df5aebd4b5564577274d7b9f9396356f8fd Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 22 Sep 2024 00:41:33 +0800 Subject: [PATCH 005/120] Remove redundant Promise.resolve --- src/components/playback/playbackmanager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 086ab3c937..5ea1d3440d 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -405,7 +405,7 @@ function setStreamUrls(items, deviceProfile, maxBitrate, apiClient, startPositio async function getPlaybackInfo(player, apiClient, item, deviceProfile, mediaSourceId, liveStreamId, options) { if (!itemHelper.isLocalItem(item) && item.MediaType === 'Audio' && !player.useServerPlaybackInfoForAudio) { - return Promise.resolve({ + return { MediaSources: [ { StreamUrl: getAudioStreamUrlFromDeviceProfile(item, deviceProfile, options.maxBitrate, apiClient, options.startPosition), @@ -413,7 +413,7 @@ async function getPlaybackInfo(player, apiClient, item, deviceProfile, mediaSour MediaStreams: [], RunTimeTicks: item.RunTimeTicks }] - }); + }; } if (item.PresetMediaSource) { From fc9485c49d66a6dd3f434cdf629fcce210724c6d Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 22 Sep 2024 05:04:19 +0800 Subject: [PATCH 006/120] Remove more Promise.Resolve --- src/components/playback/playbackmanager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 5ea1d3440d..30842b1f77 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -417,9 +417,9 @@ async function getPlaybackInfo(player, apiClient, item, deviceProfile, mediaSour } if (item.PresetMediaSource) { - return Promise.resolve({ + return { MediaSources: [item.PresetMediaSource] - }); + }; } const itemId = item.Id; From 1216305992d3b770b2a2448d684736f246227ddd Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 22 Sep 2024 05:46:54 +0800 Subject: [PATCH 007/120] Refactor sessionPromise --- src/plugins/htmlVideoPlayer/plugin.js | 53 ++++++++++++++------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 202c197d79..a30c53d65e 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1571,47 +1571,48 @@ export class HtmlVideoPlayer { const isDirectPlay = this._currentPlayOptions.playMethod === 'DirectPlay'; const burnInWhenTranscoding = appSettings.alwaysBurnInSubtitleWhenTranscoding(); + let sessionPromise; if (!isDirectPlay && burnInWhenTranscoding) { const apiClient = ServerConnections.getApiClient(this._currentPlayOptions.item.ServerId); - const sessionPromise = apiClient.getSessions({ + sessionPromise = apiClient.getSessions({ deviceId: apiClient.deviceId() }).then(function (sessions) { return sessions[0] || {}; }, function () { return Promise.resolve({}); }); + } else { + sessionPromise = Promise.resolve({}); + } - const player = this; + const player = this; - sessionPromise.then((s) => { - if (!s.TranscodingInfo || s.TranscodingInfo?.IsVideoDirect) { - player.setTrackForDisplay(player.#mediaElement, track, targetTextTrackIndex); - if (enableNativeTrackSupport(player._currentPlayOptions?.mediaSource, track)) { - if (streamIndex !== -1) { - player.setCueAppearance(); - } - } else { - // null these out to disable the player's native display (handled below) - streamIndex = -1; - track = null; + sessionPromise.then((s) => { + if (!s.TranscodingInfo || s.TranscodingInfo?.IsVideoDirect) { + // restore recorded delivery method if any + mediaStreamTextTracks.forEach((t) => { + t.DeliveryMethod = t.realDeliveryMethod ?? t.DeliveryMethod; + }); + player.setTrackForDisplay(player.#mediaElement, track, targetTextTrackIndex); + if (enableNativeTrackSupport(player._currentPlayOptions?.mediaSource, track)) { + if (streamIndex !== -1) { + player.setCueAppearance(); } } else { - // unset stream when switching to transcode - player.setTrackForDisplay(player.#mediaElement, null, -1); - } - }); - } else { - this.setTrackForDisplay(this.#mediaElement, track, targetTextTrackIndex); - if (enableNativeTrackSupport(this._currentPlayOptions?.mediaSource, track)) { - if (streamIndex !== -1) { - this.setCueAppearance(); + // null these out to disable the player's native display (handled below) + streamIndex = -1; + track = null; } } else { - // null these out to disable the player's native display (handled below) - streamIndex = -1; - track = null; + // record the original delivery method and set all delivery method to encode + mediaStreamTextTracks.forEach((t) => { + t.realDeliveryMethod = t.DeliveryMethod; + t.DeliveryMethod = 'Encode'; + }); + // unset stream when switching to transcode + player.setTrackForDisplay(player.#mediaElement, null, -1); } - } + }) } /** From 43e4c2a5176f0726a88652c22ff8315517ff5ccc Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 22 Sep 2024 05:47:50 +0800 Subject: [PATCH 008/120] Better comment --- src/plugins/htmlVideoPlayer/plugin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index a30c53d65e..f82ee12703 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1605,6 +1605,7 @@ export class HtmlVideoPlayer { } } else { // record the original delivery method and set all delivery method to encode + // this is needed for subtitle track switching to properly reload the video stream mediaStreamTextTracks.forEach((t) => { t.realDeliveryMethod = t.DeliveryMethod; t.DeliveryMethod = 'Encode'; From fb1b9b15bb8165fca9fbcb5461650f955867e487 Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 22 Sep 2024 05:50:10 +0800 Subject: [PATCH 009/120] fix lint Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/plugins/htmlVideoPlayer/plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index f82ee12703..8452074907 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1613,7 +1613,7 @@ export class HtmlVideoPlayer { // unset stream when switching to transcode player.setTrackForDisplay(player.#mediaElement, null, -1); } - }) + }); } /** From f05b90ce1a677aba8019adc19989ee42c974f581 Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 22 Sep 2024 13:16:52 +0800 Subject: [PATCH 010/120] Fix unnecessary optional chaining Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/plugins/htmlVideoPlayer/plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 8452074907..0697b65e56 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1588,7 +1588,7 @@ export class HtmlVideoPlayer { const player = this; sessionPromise.then((s) => { - if (!s.TranscodingInfo || s.TranscodingInfo?.IsVideoDirect) { + if (!s.TranscodingInfo || s.TranscodingInfo.IsVideoDirect) { // restore recorded delivery method if any mediaStreamTextTracks.forEach((t) => { t.DeliveryMethod = t.realDeliveryMethod ?? t.DeliveryMethod; From 52477f04e12c0589e26511400a31eb22c571e063 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 28 Sep 2024 14:44:13 +0300 Subject: [PATCH 011/120] Fix refresh on profle page --- src/apps/dashboard/routes/users/profile.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index 92ef21cf5d..d441fc857e 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -1,6 +1,6 @@ import type { BaseItemDto, NameIdPair, SyncPlayUserAccessType, UserDto } from '@jellyfin/sdk/lib/generated-client'; import escapeHTML from 'escape-html'; -import React, { useCallback, useEffect, useState, useRef } from 'react'; +import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import Dashboard from '../../../../utils/dashboard'; @@ -42,6 +42,7 @@ const UserEdit = () => { const [ deleteFoldersAccess, setDeleteFoldersAccess ] = useState([]); const [ authProviders, setAuthProviders ] = useState([]); const [ passwordResetProviders, setPasswordResetProviders ] = useState([]); + const libraryMenu = useMemo(async () => ((await import('../../../../scripts/libraryMenu')).default), []); const [ authenticationProviderId, setAuthenticationProviderId ] = useState(''); const [ passwordResetProviderId, setPasswordResetProviderId ] = useState(''); @@ -147,7 +148,8 @@ const UserEdit = () => { txtUserName.disabled = false; txtUserName.removeAttribute('disabled'); - LibraryMenu.setTitle(user.Name); + void libraryMenu.then(menu => menu.setTitle(user.Name)); + setUserDto(user); (page.querySelector('#txtUserName') as HTMLInputElement).value = user.Name || ''; (page.querySelector('.chkIsAdmin') as HTMLInputElement).checked = !!user.Policy?.IsAdministrator; From 1752d0bf1a6e72df46a8679d66182a79b7085f22 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 28 Sep 2024 14:57:45 +0300 Subject: [PATCH 012/120] Fix additional pages --- src/apps/dashboard/routes/users/access.tsx | 6 +++--- src/apps/dashboard/routes/users/parentalcontrol.tsx | 6 +++--- src/apps/dashboard/routes/users/profile.tsx | 1 - src/apps/stable/routes/user/userprofile.tsx | 5 +++-- src/components/dashboard/users/UserPasswordForm.tsx | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/apps/dashboard/routes/users/access.tsx b/src/apps/dashboard/routes/users/access.tsx index 25489d2d65..e55c94412a 100644 --- a/src/apps/dashboard/routes/users/access.tsx +++ b/src/apps/dashboard/routes/users/access.tsx @@ -1,9 +1,8 @@ import type { BaseItemDto, DeviceInfoDto, UserDto } from '@jellyfin/sdk/lib/generated-client'; -import React, { useCallback, useEffect, useState, useRef } from 'react'; +import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import loading from '../../../../components/loading/loading'; -import libraryMenu from '../../../../scripts/libraryMenu'; import globalize from '../../../../lib/globalize'; import toast from '../../../../components/toast/toast'; import SectionTabs from '../../../../components/dashboard/users/SectionTabs'; @@ -28,6 +27,7 @@ const UserLibraryAccess = () => { const [channelsItems, setChannelsItems] = useState([]); const [mediaFoldersItems, setMediaFoldersItems] = useState([]); const [devicesItems, setDevicesItems] = useState([]); + const libraryMenu = useMemo(async () => ((await import('../../../../scripts/libraryMenu')).default), []); const element = useRef(null); @@ -133,7 +133,7 @@ const UserLibraryAccess = () => { const loadUser = useCallback((user: UserDto, mediaFolders: BaseItemDto[], channels: BaseItemDto[], devices: DeviceInfoDto[]) => { setUserName(user.Name || ''); - libraryMenu.setTitle(user.Name); + void libraryMenu.then(menu => menu.setTitle(user.Name)); loadChannels(user, channels); loadMediaFolders(user, mediaFolders); loadDevices(user, devices); diff --git a/src/apps/dashboard/routes/users/parentalcontrol.tsx b/src/apps/dashboard/routes/users/parentalcontrol.tsx index 754129cec7..867cc2d043 100644 --- a/src/apps/dashboard/routes/users/parentalcontrol.tsx +++ b/src/apps/dashboard/routes/users/parentalcontrol.tsx @@ -2,11 +2,10 @@ import type { AccessSchedule, ParentalRating, UserDto } from '@jellyfin/sdk/lib/ import { UnratedItem } from '@jellyfin/sdk/lib/generated-client/models/unrated-item'; import { DynamicDayOfWeek } from '@jellyfin/sdk/lib/generated-client/models/dynamic-day-of-week'; import escapeHTML from 'escape-html'; -import React, { useCallback, useEffect, useState, useRef } from 'react'; +import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import globalize from '../../../../lib/globalize'; -import LibraryMenu from '../../../../scripts/libraryMenu'; import AccessScheduleList from '../../../../components/dashboard/users/AccessScheduleList'; import TagList from '../../../../components/dashboard/users/TagList'; import ButtonElement from '../../../../elements/ButtonElement'; @@ -69,6 +68,7 @@ const UserParentalControl = () => { const [ accessSchedules, setAccessSchedules ] = useState([]); const [ allowedTags, setAllowedTags ] = useState([]); const [ blockedTags, setBlockedTags ] = useState([]); + const libraryMenu = useMemo(async () => ((await import('../../../../scripts/libraryMenu')).default), []); const element = useRef(null); @@ -219,7 +219,7 @@ const UserParentalControl = () => { } setUserName(user.Name || ''); - LibraryMenu.setTitle(user.Name); + void libraryMenu.then(menu => menu.setTitle(user.Name)); loadUnratedItems(user); loadAllowedTags(user.Policy?.AllowedTags || []); diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index d441fc857e..d85cd847ff 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -5,7 +5,6 @@ import { useSearchParams } from 'react-router-dom'; import Dashboard from '../../../../utils/dashboard'; import globalize from '../../../../lib/globalize'; -import LibraryMenu from '../../../../scripts/libraryMenu'; import ButtonElement from '../../../../elements/ButtonElement'; import CheckBoxElement from '../../../../elements/CheckBoxElement'; import InputElement from '../../../../elements/InputElement'; diff --git a/src/apps/stable/routes/user/userprofile.tsx b/src/apps/stable/routes/user/userprofile.tsx index ccd05d6ad6..edd0748db4 100644 --- a/src/apps/stable/routes/user/userprofile.tsx +++ b/src/apps/stable/routes/user/userprofile.tsx @@ -1,6 +1,6 @@ import type { UserDto } from '@jellyfin/sdk/lib/generated-client'; import { ImageType } from '@jellyfin/sdk/lib/generated-client/models/image-type'; -import React, { FunctionComponent, useEffect, useState, useRef, useCallback } from 'react'; +import React, { FunctionComponent, useEffect, useState, useRef, useCallback, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import Dashboard from '../../../../utils/dashboard'; @@ -18,6 +18,7 @@ const UserProfile: FunctionComponent = () => { const [ searchParams ] = useSearchParams(); const userId = searchParams.get('userId'); const [ userName, setUserName ] = useState(''); + const libraryMenu = useMemo(async () => ((await import('../../../../scripts/libraryMenu')).default), []); const element = useRef(null); @@ -41,7 +42,7 @@ const UserProfile: FunctionComponent = () => { } setUserName(user.Name); - LibraryMenu.setTitle(user.Name); + void libraryMenu.then(menu => menu.setTitle(user.Name)); let imageUrl = 'assets/img/avatar.png'; if (user.PrimaryImageTag) { diff --git a/src/components/dashboard/users/UserPasswordForm.tsx b/src/components/dashboard/users/UserPasswordForm.tsx index 2ad67180a8..dd3eec0c57 100644 --- a/src/components/dashboard/users/UserPasswordForm.tsx +++ b/src/components/dashboard/users/UserPasswordForm.tsx @@ -1,8 +1,7 @@ -import React, { FunctionComponent, useCallback, useEffect, useRef } from 'react'; +import React, { FunctionComponent, useCallback, useEffect, useMemo, useRef } from 'react'; import type { UserDto } from '@jellyfin/sdk/lib/generated-client'; import Dashboard from '../../../utils/dashboard'; import globalize from '../../../lib/globalize'; -import LibraryMenu from '../../../scripts/libraryMenu'; import confirm from '../../confirm/confirm'; import loading from '../../loading/loading'; import toast from '../../toast/toast'; @@ -16,6 +15,7 @@ type IProps = { const UserPasswordForm: FunctionComponent = ({ userId }: IProps) => { const element = useRef(null); const user = useRef(); + const libraryMenu = useMemo(async () => ((await import('../../../scripts/libraryMenu')).default), []); const loadUser = useCallback(async () => { const page = element.current; @@ -37,7 +37,7 @@ const UserPasswordForm: FunctionComponent = ({ userId }: IProps) => { throw new Error('Unexpected null user policy or configuration'); } - LibraryMenu.setTitle(user.current.Name); + (await libraryMenu).setTitle(user.current.Name); if (user.current.HasConfiguredPassword) { if (!user.current.Policy?.IsAdministrator) { From c4e87649005f1513390a6d3008a52329a23a94cf Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:00:55 +0300 Subject: [PATCH 013/120] Remove LibraryMenu import --- src/apps/stable/routes/user/userprofile.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/apps/stable/routes/user/userprofile.tsx b/src/apps/stable/routes/user/userprofile.tsx index edd0748db4..0c40b24478 100644 --- a/src/apps/stable/routes/user/userprofile.tsx +++ b/src/apps/stable/routes/user/userprofile.tsx @@ -5,7 +5,6 @@ import { useSearchParams } from 'react-router-dom'; import Dashboard from '../../../../utils/dashboard'; import globalize from '../../../../lib/globalize'; -import LibraryMenu from '../../../../scripts/libraryMenu'; import { appHost } from '../../../../components/apphost'; import confirm from '../../../../components/confirm/confirm'; import ButtonElement from '../../../../elements/ButtonElement'; From 563126dc1d0112dcbc587abf792bed7ae799d26b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 29 Sep 2024 06:27:06 +0000 Subject: [PATCH 014/120] Update dependency jsdom to v25.0.1 --- package-lock.json | 187 ++++++++++++++++++---------------------------- package.json | 2 +- 2 files changed, 73 insertions(+), 116 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa0e5591f3..e485f5a066 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,7 +104,7 @@ "fork-ts-checker-webpack-plugin": "9.0.2", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.0", - "jsdom": "25.0.0", + "jsdom": "25.0.1", "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", "postcss-loader": "8.1.1", @@ -9636,12 +9636,13 @@ "license": "CC0-1.0" }, "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", "dev": true, + "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "rrweb-cssom": "^0.7.1" }, "engines": { "node": ">=18" @@ -14733,13 +14734,13 @@ } }, "node_modules/jsdom": { - "version": "25.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.0.tgz", - "integrity": "sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "dev": true, "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.1.0", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.0", @@ -14752,7 +14753,7 @@ "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", @@ -14800,13 +14801,6 @@ "node": ">= 14" } }, - "node_modules/jsdom/node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true, - "license": "MIT" - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -19241,12 +19235,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "peer": true }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -19279,12 +19267,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -20072,10 +20054,11 @@ } }, "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT" }, "node_modules/run-applescript": { "version": "7.0.0", @@ -24609,6 +24592,26 @@ "node": ">=14.0.0" } }, + "node_modules/tldts": { + "version": "6.1.48", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.48.tgz", + "integrity": "sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.48" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.48", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.48.tgz", + "integrity": "sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==", + "dev": true, + "license": "MIT" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -24693,28 +24696,16 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/tr46": { @@ -25434,16 +25425,6 @@ "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -32404,12 +32385,12 @@ } }, "cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", "dev": true, "requires": { - "rrweb-cssom": "^0.6.0" + "rrweb-cssom": "^0.7.1" } }, "csstype": { @@ -36105,12 +36086,12 @@ } }, "jsdom": { - "version": "25.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.0.tgz", - "integrity": "sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "dev": true, "requires": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.1.0", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.0", @@ -36123,7 +36104,7 @@ "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", @@ -36151,12 +36132,6 @@ "agent-base": "^7.0.2", "debug": "4" } - }, - "rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true } } }, @@ -39019,12 +38994,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "peer": true }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, "punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -39045,12 +39014,6 @@ "side-channel": "^1.0.4" } }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -39617,9 +39580,9 @@ } }, "rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "dev": true }, "run-applescript": { @@ -42904,6 +42867,21 @@ "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true }, + "tldts": { + "version": "6.1.48", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.48.tgz", + "integrity": "sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==", + "dev": true, + "requires": { + "tldts-core": "^6.1.48" + } + }, + "tldts-core": { + "version": "6.1.48", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.48.tgz", + "integrity": "sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -42969,23 +42947,12 @@ "dev": true }, "tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } + "tldts": "^6.1.32" } }, "tr46": { @@ -43506,16 +43473,6 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", diff --git a/package.json b/package.json index 47063fda6f..935978a356 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "fork-ts-checker-webpack-plugin": "9.0.2", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.0", - "jsdom": "25.0.0", + "jsdom": "25.0.1", "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", "postcss-loader": "8.1.1", From f8f729ceefa0f915f8b9aa010658acc49e39598b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 29 Sep 2024 16:39:02 +0000 Subject: [PATCH 015/120] Update dependency postcss-preset-env to v10.0.5 --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa0e5591f3..aa2c81befe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -108,7 +108,7 @@ "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.0.3", + "postcss-preset-env": "10.0.5", "postcss-scss": "4.0.9", "sass": "1.79.3", "sass-loader": "16.0.2", @@ -3102,9 +3102,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.2.tgz", - "integrity": "sha512-QAWWDJtJ7ywzhaMe09QwhjhuwB0XN04fW1MFwoEJMcYyiQub4a57mVFV+ngQEekUhsqe/EtKVCzyOx4q3xshag==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.4.tgz", + "integrity": "sha512-yHUt5DZ61Irvp72notmAl3Zt4Me50EWToWNocazyIFTVYFwwo/EucmV3hWi9zJehu3rOSvMclL7DzvRDfbak/A==", "dev": true, "funding": [ { @@ -18695,9 +18695,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.3.tgz", - "integrity": "sha512-1nrZ4IeBXEEj53IMoRKE+k/Ub6nQb3gFjaxTeyUNG5zv3JQclFDY5GKKhAi3nsa1lnPMWgzQX+/1y6wUt2+I7Q==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.5.tgz", + "integrity": "sha512-ipPOgr3RY0utgJDbNoCX2dxKoQ4e4WO1pC21QhDlxCAX8+qC8O2Ezkzb54fd+8XtZ1UveA5gLjBsVo6dJDoWIg==", "dev": true, "funding": [ { @@ -18723,7 +18723,7 @@ "@csstools/postcss-ic-unit": "^4.0.0", "@csstools/postcss-initial": "^2.0.0", "@csstools/postcss-is-pseudo-class": "^5.0.0", - "@csstools/postcss-light-dark-function": "^2.0.2", + "@csstools/postcss-light-dark-function": "^2.0.4", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", @@ -28399,9 +28399,9 @@ } }, "@csstools/postcss-light-dark-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.2.tgz", - "integrity": "sha512-QAWWDJtJ7ywzhaMe09QwhjhuwB0XN04fW1MFwoEJMcYyiQub4a57mVFV+ngQEekUhsqe/EtKVCzyOx4q3xshag==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.4.tgz", + "integrity": "sha512-yHUt5DZ61Irvp72notmAl3Zt4Me50EWToWNocazyIFTVYFwwo/EucmV3hWi9zJehu3rOSvMclL7DzvRDfbak/A==", "dev": true, "requires": { "@csstools/css-parser-algorithms": "^3.0.1", @@ -38639,9 +38639,9 @@ } }, "postcss-preset-env": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.3.tgz", - "integrity": "sha512-1nrZ4IeBXEEj53IMoRKE+k/Ub6nQb3gFjaxTeyUNG5zv3JQclFDY5GKKhAi3nsa1lnPMWgzQX+/1y6wUt2+I7Q==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.5.tgz", + "integrity": "sha512-ipPOgr3RY0utgJDbNoCX2dxKoQ4e4WO1pC21QhDlxCAX8+qC8O2Ezkzb54fd+8XtZ1UveA5gLjBsVo6dJDoWIg==", "dev": true, "requires": { "@csstools/postcss-cascade-layers": "^5.0.0", @@ -38656,7 +38656,7 @@ "@csstools/postcss-ic-unit": "^4.0.0", "@csstools/postcss-initial": "^2.0.0", "@csstools/postcss-is-pseudo-class": "^5.0.0", - "@csstools/postcss-light-dark-function": "^2.0.2", + "@csstools/postcss-light-dark-function": "^2.0.4", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", diff --git a/package.json b/package.json index 47063fda6f..646b60630c 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.0.3", + "postcss-preset-env": "10.0.5", "postcss-scss": "4.0.9", "sass": "1.79.3", "sass-loader": "16.0.2", From 7fe4c5c63fb58d83934dd9f10c7bcba083aa4d39 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Tue, 1 Oct 2024 18:50:44 +0200 Subject: [PATCH 016/120] Fix editing device info when there are no options yet --- src/controllers/dashboard/devices/device.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/controllers/dashboard/devices/device.js b/src/controllers/dashboard/devices/device.js index e911b361af..120b478163 100644 --- a/src/controllers/dashboard/devices/device.js +++ b/src/controllers/dashboard/devices/device.js @@ -6,7 +6,7 @@ import Dashboard from '../../../utils/dashboard'; import { getParameterByName } from '../../../utils/url.ts'; function load(page, device, deviceOptions) { - page.querySelector('#txtCustomName', page).value = deviceOptions.CustomName || ''; + page.querySelector('#txtCustomName', page).value = deviceOptions?.CustomName || ''; page.querySelector('.reportedName', page).innerText = device.Name || ''; } @@ -14,13 +14,13 @@ function loadData() { const page = this; loading.show(); const id = getParameterByName('id'); - const promise1 = ApiClient.getJSON(ApiClient.getUrl('Devices/Info', { + const device = ApiClient.getJSON(ApiClient.getUrl('Devices/Info', { Id: id })); - const promise2 = ApiClient.getJSON(ApiClient.getUrl('Devices/Options', { + const deviceOptions = ApiClient.getJSON(ApiClient.getUrl('Devices/Options', { Id: id - })); - Promise.all([promise1, promise2]).then(function (responses) { + })).catch(() => undefined); + Promise.all([device, deviceOptions]).then(function (responses) { load(page, responses[0], responses[1]); loading.hide(); }); From d2e9a8b6b396f13ae058a791400bd495a33084f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9A=87=E7=94=AB=E6=9C=9D=E4=BA=91?= Date: Thu, 3 Oct 2024 00:36:46 +0000 Subject: [PATCH 017/120] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index f32fc318d6..6dff69d2e9 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -197,7 +197,7 @@ "GuestStar": "特邀明星", "GuideProviderLogin": "登入", "GuideProviderSelectListings": "选择列表", - "H264CrfHelp": "恒定速率因子 (CRF) 是 x264 软件编码器的默认质量设置。您可以设置介于0和51之间的值, 其中较低的值将导致更好的质量 (以更高的文件大小为代价)。正常值介于 18 和 28 之间。x264 的默认值为 23,x265 的默认值为 28,因此可以将其用作起始点。硬件编码器不使用这些设置。", + "H264CrfHelp": "恒定速率因子 (CRF) 是 x264 和x265 软件编码的默认质量设置。您可以设置介于0和51之间的值, 较低的数值会带来更高的画质,但同时也会导致文件大小的增加。正常值介于 18 和 28 之间。x264 的默认值为 23,x265 的默认值为 28,因此可以用它作为初始参考值。硬件编码不使用这些设置。", "EncoderPresetHelp": "选择较快的值以提高性能,或选择较慢的值以提高质量。", "HDPrograms": "高清节目", "HardwareAccelerationWarning": "启动硬件加速可能在某些环境下导致系统不稳定。请确认你的操作系统和显卡驱动程序是最新的。如果你在开启此项后播放视频时遇到困难,那么你需要将此选项设置回“没有”。", From 1fc1dc1e65f5b2dd86eb9295a94079c96d8fb20a Mon Sep 17 00:00:00 2001 From: Kityn Date: Thu, 3 Oct 2024 05:35:56 +0000 Subject: [PATCH 018/120] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 8812e9afff..9b63dd969d 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1780,7 +1780,7 @@ "LabelAlbumGain": "Wzmocnienie albumu", "LabelSelectAudioNormalization": "Normalizacja dźwięku", "LabelTrackGain": "Wzmocnienie utworu", - "SelectAudioNormalizationHelp": "Wzmocnienie utworu – reguluje głośność każdego utworu tak, aby odtwarzał się z tą samą głośnością. Wzmocnienie albumu – reguluje głośność tylko wszystkich utworów w albumie, zachowując zakres dynamiki albumu.", + "SelectAudioNormalizationHelp": "Wzmocnienie utworu – reguluje głośność każdego utworu tak, aby odtwarzał się z tą samą głośnością. Wzmocnienie albumu – reguluje głośność tylko wszystkich utworów w albumie, zachowując zakres dynamiki albumu. Przełączanie między opcją \"Wyłączone\" a innymi wymaga ponownego uruchomienia bieżącego odtwarzania.", "SearchResultsEmpty": "Wybacz! Nie znaleziono wyników dla „{0}”", "HeaderAllRecordings": "Wszystkie nagrania", "LabelBuildVersion": "Wersja kompilacji", From 9875194da6af9a3b29424f20c08554fc3de46ce5 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 3 Oct 2024 18:22:37 +0000 Subject: [PATCH 019/120] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index db2f7c16c8..42486c88d7 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1926,5 +1926,6 @@ "LabelTrickplayAccelEncoding": "Käyttöönota rautakiihdytetty MJPEG enkoodaus", "LabelTrickplayAccelEncodingHelp": "Tällä hetkellä ainoastaan käytettävissä QSV, VAAPI ja VideoToolbox, tällä valinnalla ei ole vaikutusta muihin rautakiihdytysmetodeihin.", "HeaderVideoAdvanced": "Edistynyt video", - "PlaylistPublicDescription": "Salli tämän soittolistan katsominen jokaiselle kirjautuneelle käyttäjälle." + "PlaylistPublicDescription": "Salli tämän soittolistan katsominen jokaiselle kirjautuneelle käyttäjälle.", + "DateModified": "Muokkauspäivämäärä" } From 077e9181d385bd32a0cddb8946db6e7de0ba3711 Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Thu, 3 Oct 2024 23:43:17 +0000 Subject: [PATCH 020/120] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index f54f367915..ba2e3e4d54 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1777,7 +1777,7 @@ "LabelIsHearingImpaired": "For hearing impaired (SDH)", "BackdropScreensaver": "Backdrop Screensaver", "LogoScreensaver": "Logo Screensaver", - "SelectAudioNormalizationHelp": "Track gain - adjusts the volume of each track so they playback with the same loudness. Album gain - adjusts the volume of all the tracks in an album only, keeping the album's dynamic range.", + "SelectAudioNormalizationHelp": "Track gain - adjusts the volume of each track so they playback with the same loudness. Album gain - adjusts the volume of all the tracks in an album only, keeping the album's dynamic range. Switching between \"Off\" and other options requires restarting the current playback.", "LabelAlbumGain": "Album Gain", "SearchResultsEmpty": "Sorry! No results found for \"{0}\"", "LabelSelectAudioNormalization": "Audio Normalisation", From 7504daba70e314f3a4adb6e58e541ce8223710be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 4 Oct 2024 07:07:53 +0000 Subject: [PATCH 021/120] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 7fac2a9281..d1d81cb6e6 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1780,7 +1780,7 @@ "LabelSelectAudioNormalization": "Normalizace hlasitosti", "LabelAlbumGain": "Na úrovni alba", "LabelTrackGain": "Na úrovni skladby", - "SelectAudioNormalizationHelp": "Normalizace na úrovni skladby upraví hlasitost všech skladeb tak, aby byla všude stejná. Normalizace na úrovni alba upraví hlasitost všech skladeb tak, aby byla hlasitost stejná v rámci jednotlivých alb.", + "SelectAudioNormalizationHelp": "Normalizace na úrovni skladby upraví hlasitost všech skladeb tak, aby byla všude stejná. Normalizace na úrovni alba upraví hlasitost všech skladeb tak, aby byla hlasitost stejná v rámci jednotlivých alb. Vypnutí a následné zapnutí vyžaduje restart aktuálně hrající skladby.", "SearchResultsEmpty": "Pro “{0}” nebylo nic nalezeno", "HeaderAllRecordings": "Všechny nahrávky", "LabelBuildVersion": "Verze sestavení", From f1a6bfe111d3f656834581c1696571b7bdb75100 Mon Sep 17 00:00:00 2001 From: Mylan1173 Date: Fri, 4 Oct 2024 09:19:18 +0000 Subject: [PATCH 022/120] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index a000a8be7f..a9d4d3faa8 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1873,5 +1873,31 @@ "AllowFmp4TranscodingContainerHelp": "Az fMP4 átkódolási konténer engedélyezése ehhez a tunerhez, a HEVC és HDR tartalmak engedélyezéséhez. Nem minden tuner kompatibilis ezzel a tárolóval. Tiltsa le, ha lejátszási problémákat tapasztal.", "Alternate": "Alternatív", "AlternateDVD": "Alternatív DVD", - "AllowTonemappingSoftwareHelp": "A tónusleképzés képes a HDR videók dinamika tartományát SDR tartományba átalakítani, miközben megtartja a kép színét és részleteit, ami elengedhetetlen az eredeti jelenet megőrzéséhez. Jelenleg csak 10 bites HDR10, HLG és DoVi tartalmakon működik." + "AllowTonemappingSoftwareHelp": "A tónusleképzés képes a HDR videók dinamika tartományát SDR tartományba átalakítani, miközben megtartja a kép színét és részleteit, ami elengedhetetlen az eredeti jelenet megőrzéséhez. Jelenleg csak 10 bites HDR10, HLG és DoVi tartalmakon működik.", + "DateModified": "Dátum módosítva", + "EditLyrics": "Dalszöveg módosítása", + "DisableVbrAudioEncodingHelp": "Megakadályozza a szervert hogy a hangot VBR-rel kódolja a kliensnek.", + "HeaderAddLyrics": "Dalszöveg hozzáadása", + "EnableHi10p": "H.264 High 10 profil bekapcsolása", + "EnableHi10pHelp": "Kapcsold be hogy megakadályozd a H.264 10-bites videók transzkódolását. Kapcsold ki ezt a beállítást ha a videó üres képkockákat jelenít meg.", + "HeaderAudioAdvanced": "Haladó Hang", + "EnableTrueHdHelp": "Csak akkor kapcsold be ha az eszköz támogatja a TrueHD-t vagy csatlakoztatva van egy kompatibilis hang vevőhöz, egyébként lejátszási hibát okozhat.", + "HeaderPreviewLyrics": "Dalszöveg Előnézet", + "HeaderLyricDownloads": "Dalszöveg Letöltések", + "HeaderUploadLyrics": "Dalszöveg Feltöltése", + "HeaderNextItemPlayingInValue": "Következő: {0} Lejátszás kezdődik: {1}", + "Inker": "Színező", + "LabelAllowFmp4TranscodingContainer": "fMP4 transzkódoló container engedélyezése", + "Colorist": "Kolorista", + "AlwaysRemuxFlacAudioFilesHelp": "Ha vannak olyan fájlok amiket a böngésző nem játszik le vagy helytelenül számítja ki az időbélyegeket akkor kapcsold be ezt mint megoldás.", + "AlwaysRemuxMp3AudioFilesHelp": "Ha vannak olyan fájlok amikben a böngésző helytelenül számítja ki az időbélyegeket akkor kapcsold be ezt mint megoldás.", + "CoverArtist": "Borító művész", + "AndOtherArtists": "{0} és {1} további művész.", + "EnableDts": "DTS (DCA) bekapcsolása", + "EnableTrueHd": "TrueHD bekapcsolása", + "HeaderNextItem": "Következő {0}", + "HeaderVideoAdvanced": "Haladó VIdeó", + "Illustrator": "Illusztrátor", + "LabelAlwaysRemuxFlacAudioFiles": "Mindig remux-olja a FLAC hang fájlokat", + "LabelAlwaysRemuxMp3AudioFiles": "Mindig remux-olja a MP3 hang fájlokat" } From 3a33ed9ffc59263bac99818b84879f24f857730a Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Fri, 4 Oct 2024 21:42:41 +0000 Subject: [PATCH 023/120] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index 9b6d56cb43..ae0bc382fc 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -3,7 +3,7 @@ "Add": "הוסף", "AddToCollection": "הוסף לאוסף", "AddToPlayQueue": "הוסף לתור ברשימת ניגון", - "AddToPlaylist": "הוסף לרשימת ניגון", + "AddToPlaylist": "הוסף לרשימת השמעה", "AdditionalNotificationServices": "עיין ברשימת התוספים להתקנת שירותי התראות נוספים.", "All": "הכול", "AllChannels": "כל הערוצים", @@ -67,7 +67,7 @@ "HeaderActiveDevices": "מכשירים פעילים", "HeaderActiveRecordings": "הקלטות פעילות", "HeaderAddToCollection": "להוסיף לאוסף", - "HeaderAddToPlaylist": "הוסף לרשימת ניגון", + "HeaderAddToPlaylist": "הוסף לרשימת השמעה", "HeaderAdditionalParts": "חלקים נוספים", "HeaderCancelRecording": "ביטול הקלטה", "HeaderCancelSeries": "בטל סדרה", @@ -103,7 +103,7 @@ "HeaderScenes": "סצנות", "HeaderSeriesOptions": "אפשרויות סדרה", "HeaderServerSettings": "הגדרות שרת", - "HeaderSetupLibrary": "הגדר את ספריית המדיה שלך", + "HeaderSetupLibrary": "הגדרת ספריות המדיה שלך", "HeaderSpecialEpisodeInfo": "פרטי אפיזודות מיוחדות", "HeaderStatus": "מצב", "HeaderSystemDlnaProfiles": "פרופילי מערכת", @@ -477,7 +477,7 @@ "ButtonAddImage": "הוסף תמונה", "AskAdminToCreateLibrary": "בקש ממנהל ליצור ספרייה.", "Ascending": "בסדר עולה", - "Photos": "תמונות", + "Photos": "צילומים", "MessageConfirmShutdown": "‫האם אתה בטוח שברצונך לכבות את השרת?", "MessageConfirmRestart": "‫האם אתה בטוח שברצונך לאתחל את שרת ה-Jellyfin‏?", "HeaderThisUserIsCurrentlyDisabled": "משתמש זה אינו פעיל כרגע", @@ -584,7 +584,7 @@ "BookLibraryHelp": "ניתן להוסיף ספרים מוקלטים וספרים כתובים. עיינו {0} במדריך מתן שמות לספרים {1}.", "Desktop": "שולחן עבודה", "MessageDeleteTaskTrigger": "האם אתה בטוח כי ברצונך למחוק את מפעיל משימה זה?", - "LastSeen": "נראה לאחרונה ב-{0}", + "LastSeen": "פעילות אחרונה ב-{0}", "PersonRole": "כ-{0}", "ListPaging": "{0}-{1} מתוך {2}", "EveryXHours": "בכל {0} שעות", @@ -840,7 +840,7 @@ "HeaderDeleteDevices": "מחק את כל המכשירים", "HeaderApiKeysHelp": "תוכנות חיצוניות נדרשות להשתמש במפתח API חיצוני על מנת לתקשר עם השרת. מפתחות מונפקים ע\"י התחברות עם משתמש רגיל, או באמצעות הנפקה ידנית של מפתח לתוכנה.", "EncoderPresetHelp": "בחר ערך מהיר יותר לשיפור ביצועים, או ערך איטי יותר לשיפור איכות.", - "H264CrfHelp": "Constant Rate Factor (CRF) הוא הגדרת איכות ברירת המחדל של מקודדי ה-x264 ו-x265. ניתן לקבוע ערך בין 0 ל-51, כשערך נמוך יותר יביא לאיכות גבוהה יותר (על חשבון קבצים גדולים יותר). ההגדרות המומלצות הן בין 18 ל-28. ערך ברירת המחדל של x264 הוא 23, ושל x265 הוא 28, אז ניתן לראות בכך נקודת התחלה.", + "H264CrfHelp": "Constant Rate Factor (CRF) הוא הגדרת איכות ברירת המחדל של מקודדי התוכנה x264 ו-x265. ניתן לקבוע ערך בין 0 ל-51, כשערך נמוך יותר יביא לאיכות גבוהה יותר (על חשבון קבצים גדולים יותר). ההגדרות המומלצות הן בין 18 ל-28. ערך ברירת המחדל של x264 הוא 23, ושל x265 הוא 28, אז ניתן לראות בכך נקודת התחלה. מקודדי חומרה לא משתמשים בהגדרות אלה.", "FFmpegSavePathNotFound": "תיקיית FFmpeg לא נמצאה באמצעות נתיב התיקייה שהוכנס. FFprobe נדרש וצריך גם הוא להימצא באותה התיקייה. רכיבים אלו בד\"כ נמצאים ביחד באותה ההורדה. אנא בדוק את נתיב בתיקייה ונסה שנית.", "DeleteDevicesConfirmation": "האם אתה בטוח כי ברצונך למחוק את כל המכשירים? כל החיבורים האחרים ינותקו. מכשירים יופיעו מחדש בפעם הבאה שיתחברו דרכם.", "DeleteAll": "מחק הכל", @@ -851,7 +851,7 @@ "EnableFasterAnimations": "אנימציות מהירות", "EnableBlurHash": "הפעל מצייני מיקום מטושטשים לתמונות", "EnableBlurHashHelp": "תמונות שעדיין נטענות יוצגו עם מציין מיקום ייחודי.", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "ButtonCast": "שדר למכשיר", "AllowTonemappingHelp": "מיפוי-טונים מאפשר המרה של וידאו מ-HDR ל-SDR תוך שמירה על פרטי וצבעי תמונה, החשובים לשימור מידע מהסצנה המקורית. כרגע עובד רק בקידוד קבצים של HDR10, HLG ו-DoVi. תכונה זו מצריכה הרצה של GPGPU בהתאם.", "Subtitle": "כתובית", @@ -866,7 +866,7 @@ "ShowLess": "הצג פחות", "ShowAdvancedSettings": "הצג הגדרות מתקדמות", "SettingsWarning": "שינוי ערכים אלו עלול לגרום לחוסר יציבות או בעיות חיבור. אם אתה נתקל בבעיות, אנו ממליצים להחזיר אותם לערכי ברירת המחדל.", - "ServerRestartNeededAfterPluginInstall": "Jellyfin יצטרך לאתחל לאחר התקנת תוסף.", + "ServerRestartNeededAfterPluginInstall": "Jellyfin יצטרך לאתחל לאחר התקנת התוסף.", "SeriesDisplayOrderHelp": "סדר פרקים על פי תאריך שידור, סדר DVD, או מספרים אבסולוטיים.", "Series": "סדרה", "SendMessage": "שלח הודעה", @@ -904,7 +904,7 @@ "SubtitleOffset": "קיזוז כתוביות", "SubtitleAppearanceSettingsDisclaimer": "הגדרות אלו לא יחולו את קבצי כתוביות גרפיים (DVD ,PGS, וכו') או כתוביות SSA\\ASS עם סגנונות מוטמעים.", "LabelAutoDiscoveryTracing": "אפשר מעקב אחר גילוי אוטומטי.", - "LabelAppNameExample": "דוגמא: Sickbeard, Sonarr", + "LabelAppNameExample": "שם לזיהוי מפתחות API. הגדרה זו לא תשנה התנהגות.", "LabelAllowHWTranscoding": "אפשר קידוד חומרה", "LabelAlbumArtMaxWidth": "רוחב מירבי של אומנות אלבום", "LabelAlbumArtMaxHeight": "גובה מירבי של אומנות אלבום", @@ -1129,7 +1129,7 @@ "TypeOptionPluralBook": "ספרים", "TypeOptionPluralAudio": "קטעי שמע", "Video": "סרטון", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "LabelMaxChromecastBitrate": "איכות הזרמת Google Cast", "LabelMethod": "שיטה", "LabelNewsCategories": "קטגוריות חדשות", @@ -1269,7 +1269,7 @@ "DeleteSeries": "מחיקת סידרה", "DeleteEpisode": "מחיקת פרק", "DeleteName": "מחיקת {0}", - "SelectAudioNormalizationHelp": "עוצמת רצועת שמע - משנה את העוצמה של כל רצועה כך שהם יתנגנו בעוצמת קול זהה. עוצמת אלבום - משנה את העוצמה של כל רצועות השמע באלבום בלבד, תוך שמירה על התחום הדינמי של האלבום.", + "SelectAudioNormalizationHelp": "עוצמת רצועת שמע - משנה את העוצמה של כל רצועה כך שעוצמת הקול תישאר זהה. עוצמת אלבום - משנה את העוצמה של רצועות השמע באלבום בלבד, תוך שמירה על התחום הדינמי של האלבום. החלפה בין \"כבוי\" ושאר האפשרויות דורשת ריסוט המנגינה.", "LabelAllowContentWithTags": "אפשר פריטים עם תגיות", "EnableSmoothScroll": "הפעל גלילה חלקה", "HeaderDeleteSeries": "מחק סדרה", @@ -1278,11 +1278,11 @@ "LabelMaxDaysForNextUpHelp": "הגדר את מספר הימים המקסימלי שתכנית צריכה להישאר ברשימת 'הבא בתור' מבלי לצפות בה.", "LabelMaxVideoResolution": "רזולוצייה מקסימלית המותרת להמרת קידוד וידאו", "LabelLocalCustomCss": "קוד CSS לעיצוב מותאם אישית ללקוח זה בלבד. ייתכן שתרצה להשבית את קוד ה-CSS המסופק על ידי השרת.", - "LabelMaxAudiobookResume": "דקות נותרות בספר המוקלט להמשך", + "LabelMaxAudiobookResume": "דקות שנותרו להמשך הספר המוקלט", "LabelMaxAudiobookResumeHelp": "כותרים נחשבים כנוגנו במלואם כאשר משך הזמן הנותר קטן יותר מערך זה.", "LabelMetadataReaders": "קוראי מטא-דאטה", "LabelMetadataSavers": "שומרי מטא-דאטה", - "PlaybackError.RateLimitExceeded": "מדיה", + "PlaybackError.RateLimitExceeded": "לא ניתן לנגן את המדיה כרגע עקבת מגבלה על קצב השימוש.", "CoverArtist": "אמן קאבר", "Colorist": "רשימת צבעים", "Author": "יוצר", From c54db604d9426f3b3d46222c9161b88aa210d4da Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 5 Oct 2024 08:47:03 +0300 Subject: [PATCH 024/120] Fix LiveTV Playback --- src/components/playback/playbackmanager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index e90aff609f..f19bb51e53 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2573,8 +2573,8 @@ export class PlaybackManager { } const apiClient = ServerConnections.getApiClient(item.ServerId); - const mediaSourceId = playOptions.mediaSourceId || item.Id; - const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId) + const mediaSourceId = playOptions.mediaSourceId; + const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId || item.Id) .then(fullItem => { return fullItem.MediaStreams; }); From 95e23875f4e2761a8ed65d73dd5b94977e0d0d79 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 5 Oct 2024 09:56:06 +0300 Subject: [PATCH 025/120] Only specify mediaSourceId if index changed --- src/components/playback/playbackmanager.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index f19bb51e53..3dfa961856 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2573,7 +2573,7 @@ export class PlaybackManager { } const apiClient = ServerConnections.getApiClient(item.ServerId); - const mediaSourceId = playOptions.mediaSourceId; + let mediaSourceId = playOptions.mediaSourceId; const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId || item.Id) .then(fullItem => { return fullItem.MediaStreams; @@ -2611,9 +2611,11 @@ export class PlaybackManager { autoSetNextTracks(prevSource, mediaStreams, trackOptions, user.Configuration.RememberAudioSelections, user.Configuration.RememberSubtitleSelections); if (trackOptions.DefaultAudioStreamIndex != null) { options.audioStreamIndex = trackOptions.DefaultAudioStreamIndex; + mediaSourceId = mediaSourceId || item.Id; } if (trackOptions.DefaultSubtitleStreamIndex != null) { options.subtitleStreamIndex = trackOptions.DefaultSubtitleStreamIndex; + mediaSourceId = mediaSourceId || item.Id; } return getPlaybackMediaSource(player, apiClient, deviceProfile, item, mediaSourceId, options).then(async (mediaSource) => { From c1df20f6ec53a976dbae45e1eedc06b56ea9ef65 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Sat, 5 Oct 2024 09:48:58 +0000 Subject: [PATCH 026/120] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index af21e7faf2..9a3c1cd564 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1102,7 +1102,7 @@ "MediaInfoPixelFormat": "Pixel formát", "MediaInfoFramerate": "Snímková frekvencia", "MediaInfoDefault": "Predvolený", - "MediaInfoCodecTag": "Štítok kodeku", + "MediaInfoCodecTag": "Tag kodeku", "MediaInfoBitrate": "Dátový tok", "MediaInfoAnamorphic": "Anamorfné", "MapChannels": "Mapovať kanály", @@ -1777,7 +1777,7 @@ "LabelThrottleDelaySecondsHelp": "Čas v sekundách, po ktorom bude prekódovanie obmedzené. Musí byť dostatočne veľký, aby mal klient v rezerve dostatočné množstvo prehrávaného súboru. Funguje len vtedy, ak je povolená funkcia Obmedziť prekódovanie.", "AllowSegmentDeletionHelp": "Odstránenie starých segmentov po ich stiahnutí klientom. Tým sa zabráni tomu, aby sa celý prekódovaný súbor uložil na disk. Ak sa vyskytnú problémy s prehrávaním, vypnite túto funkciu.", "LabelSegmentKeepSecondsHelp": "Čas v sekundách, počas ktorého sa majú segmenty uchovávať po ich stiahnutí klientom. Funguje len vtedy, ak je povolené mazanie segmentov.", - "SelectAudioNormalizationHelp": "Zosilnenie stopy - upravuje hlasitosť jednotlivých stôp tak, aby sa prehrávali s rovnakou hlasitosťou. Zosilnenie pre album - upravuje hlasitosť všetkých skladieb iba v albume, pričom zachováva dynamický rozsah albumu.", + "SelectAudioNormalizationHelp": "Zosilnenie stopy - upravuje hlasitosť jednotlivých stôp tak, aby sa prehrávali s rovnakou hlasitosťou. Zosilnenie pre album - upravuje hlasitosť všetkých skladieb iba v albume, pričom zachováva dynamický rozsah albumu. Vypnutie a následné zapnutie si vyžaduje reštartovanie aktuálne prehrávanej skladby.", "LabelAlbumGain": "Zosilnenie pre album", "LabelSelectAudioNormalization": "Normalizácia hlasitosti", "LabelTrackGain": "Zosilnenie stopy", @@ -1914,7 +1914,7 @@ "MediaInfoRotation": "Rotácia", "MoveToBottom": "Presunúť na spodnú časť", "MoveToTop": "Presunúť na vrchnú časť", - "PreferNonstandardArtistsTagHelp": "Ak je to možné, použiť neštandardnú značku ARTISTS namiesto značky ARTIST.", + "PreferNonstandardArtistsTagHelp": "Ak je to možné, použiť neštandardný tag ARTISTS namiesto tagu ARTIST.", "PreviewLyrics": "Náhľad textov piesní", "Reset": "Resetovať", "ReplaceTrickplayImages": "Nahradiť existujúce obrázky trickplay", @@ -1952,5 +1952,20 @@ "LabelFallbackMaxStreamingBitrate": "Záložný maximálny dátový tok (Mbps)", "LabelSaveTrickplayLocally": "Uložit obrázky trickplay k médiám", "LabelDelimiterWhitelistHelp": "Položky, ktoré sa majú vylúčiť z oddelovania tagov. Jedna položka na riadok.", - "LabelNoChangelog": "Pre túto verziu nie je k dispozícii žiadny zoznam zmien." + "LabelNoChangelog": "Pre túto verziu nie je k dispozícii žiadny zoznam zmien.", + "HeaderNextItemPlayingInValue": "Nasleduje {0} Prehrávanie za {1}", + "MessageSplitVersionsError": "Pri rozdeľovaní verzií došlo k chybe", + "PasswordMissingSaveError": "Nové heslo nesmie byť prázdne.", + "PluginLoadConfigError": "Pri získavaní konfigurácie zásuvného modulu došlo k chybe.", + "UseCustomTagDelimiters": "Použiť vlastný oddeľovač tagov", + "UseCustomTagDelimitersHelp": "Rozdeliť tagy umelcov/žánrov pomocou vlastných znakov.", + "LabelTrickplayKeyFrameOnlyExtraction": "Generovať obrázky len z kľúčových snímkov", + "MessageCancelSeriesTimerError": "Pri rušení časovača seriálu došlo k chybe", + "MessageCancelTimerError": "Pri rušení časovača došlo k chybe", + "PluginDisableError": "Pri zakazovaní zásuvného modulu došlo k chybe.", + "PluginEnableError": "Pri povoľovaní zásuvného modulu došlo k chybe.", + "PluginUninstallError": "Pri odinštalovaní zásuvného modulu došlo k chybe.", + "PreferNonstandardArtistsTag": "Preferovať tag ARTISTS, ak je k dispozícii", + "RenderPgsSubtitle": "Experimentálne vykresľovanie titulkov formátu PGS", + "VideoCodecTagNotSupported": "Tag video kodeku nie je podporovaný" } From 24c8a2220f8dceda32ab60f41111d78a9bf63f13 Mon Sep 17 00:00:00 2001 From: Nico Date: Sat, 5 Oct 2024 16:49:02 +0000 Subject: [PATCH 027/120] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 7187a3c4c8..3805109a91 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1267,7 +1267,7 @@ "OnWakeFromSleep": "À la sortie de veille", "WeeklyAt": "{0} à {1}", "DailyAt": "Tous les jours à {0}", - "LastSeen": "Dernière connexion {0}", + "LastSeen": "Dernière activité {0}", "PersonRole": "est {0}", "ListPaging": "{0}-{1} de {2}", "WriteAccessRequired": "Jellyfin a besoin d'un accès en écriture à ce dossier. Merci de vérifier les permissions de ce-dernier puis de réessayer.", @@ -1778,7 +1778,7 @@ "HeaderGuestCast": "Invités vedettes", "LabelIsHearingImpaired": "Sous-titrage pour sourds et malentendants", "SearchResultsEmpty": "Désolé ! Aucun résultat trouvé pour \"{0}\"", - "SelectAudioNormalizationHelp": "Gain de piste - permet de régler le volume de chaque piste de manière à ce qu'elles soient lues avec la même intensité sonore. Gain de l'album - ajuste le volume de toutes les pistes d'un album uniquement, en conservant la plage dynamique de l'album.", + "SelectAudioNormalizationHelp": "Gain de piste - permet de régler le volume de chaque piste de manière à ce qu'elles soient lues avec la même intensité sonore. Gain de l'album - ajuste le volume de toutes les pistes d'un album uniquement, en conservant la plage dynamique de l'album. Passer de \"Off\" à une autre option, requiert le redémarrage la lecture en cours.", "LabelAlbumGain": "Gain de l'album", "LabelSelectAudioNormalization": "Normalisation de l'audio", "LabelTrackGain": "Gain de piste", @@ -1944,11 +1944,11 @@ "LabelAudioTagSettings": "Paramètres des balises audio", "LabelCustomTagDelimiters": "Délimiteur de balise personnalisé", "LabelCustomTagDelimitersHelp": "Caractères à traiter comme délimiteurs pour séparer les balises.", - "LabelLyricDownloaders": "Téléchargeurs de Lyrics", + "LabelLyricDownloaders": "Téléchargeurs de paroles", "LabelDelimiterWhitelist": "Liste blanche des délimiteurs", "LabelDelimiterWhitelistHelp": "Éléments à exclure de la division des balises. Un élément par ligne.", "LabelDisableVbrAudioEncoding": "Désactiver l'encodage audio VBR", - "LabelSaveTrickplayLocally": "Enregistrer les images trickplay au même emplacement que les médias", + "LabelSaveTrickplayLocally": "Enregistrer les images de prévisualisation (trickplay) au même emplacement que les médias", "LabelSaveTrickplayLocallyHelp": "Enregistrer les images trickplay dans les dossiers de médias les placera à côté de vos médias pour une migration et un accès faciles.", "MediaInfoRotation": "Rotation", "RenderPgsSubtitle": "Rendu expérimental des sous-titres PGS", @@ -1966,5 +1966,6 @@ "LabelAllowFmp4TranscodingContainer": "Autoriser le conteneur de transcodage fMP4", "AllowTonemappingSoftwareHelp": "Le tone-mapping peut transformer la plage dynamique d'une vidéo de HDR à SDR tout en conservant les détails et les couleurs de l'image, qui sont des informations très importantes pour représenter la scène originale. Fonctionne uniquement avec les vidéos 10 bits HDR10, HLG et DoVi.", "LabelTrickplayKeyFrameOnlyExtraction": "Générer uniquement des images à partir des images clés", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extraire uniquement les images clés pour un traitement beaucoup plus rapide avec un minutage moins précis. Si le décodeur matériel configuré ne prend pas en charge ce mode, il utilisera le décodeur logiciel à la place." + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extraire uniquement les images clés pour un traitement beaucoup plus rapide avec un minutage moins précis. Si le décodeur matériel configuré ne prend pas en charge ce mode, il utilisera le décodeur logiciel à la place.", + "AllowFmp4TranscodingContainerHelp": "Autoriser le conteneur de transcodage fMP4 pour ce tuner afin d'activer les contenus HEVC et HDR. Tous les tuners ne sont pas compatibles avec ce conteneur. Désactivez ceci si vous rencontrez des problèmes de lecture." } From 81cf8df5c98397300b41a606d21c228221bae58d Mon Sep 17 00:00:00 2001 From: stanol Date: Sun, 6 Oct 2024 12:51:27 +0000 Subject: [PATCH 028/120] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 66f2dc6a5b..55b688db07 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -1774,7 +1774,7 @@ "BackdropScreensaver": "Заставка «Задники»", "LogoScreensaver": "Заставка з логотипом", "LabelIsHearingImpaired": "Для людей з вадами слуху (SDH)", - "SelectAudioNormalizationHelp": "Посилення треку - регулює гучність кожного треку так, щоб вони відтворювалися з однаковою гучністю. Посилення альбому - регулює гучність лише всіх треків в альбомі, зберігаючи динамічний діапазон альбому.", + "SelectAudioNormalizationHelp": "Посилення треку - регулює гучність кожного треку так, щоб вони відтворювалися з однаковою гучністю. Посилення альбому - регулює гучність лише всіх треків в альбомі, зберігаючи динамічний діапазон альбому. Перемикання між «Вимкнено» та іншими опціями вимагає перезапуску поточного відтворення.", "LabelAlbumGain": "Посилення альбому", "LabelSelectAudioNormalization": "Нормалізація звуку", "LabelTrackGain": "Посилення треку", From 708226763a0644c0cddad7740269ca557de1b5ce Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sun, 6 Oct 2024 15:04:11 +0000 Subject: [PATCH 029/120] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 5c8fb2a9b9..7dffb27c75 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1764,7 +1764,7 @@ "LabelTrackGain": "Điều Chỉnh Nhạc", "GridView": "Xem Lưới", "ListView": "Xem Danh Sách", - "SelectAudioNormalizationHelp": "Điều chỉnh nhạc - điều chỉnh âm lượng của mỗi bản nhạc để chúng phát lại với cùng một độ to. Điều chỉnh album - điều chỉnh âm lượng tất cả bản nhạc trong album, giữ nguyên dải động của album.", + "SelectAudioNormalizationHelp": "Chỉnh nhạc - điều chỉnh âm lượng mỗi bản nhạc để chúng phát với cùng một độ to. Chỉnh album - điều chỉnh âm lượng tất cả bản nhạc trong album, giữ nguyên dải động của album. Việc chuyển đổi giữa \"Tắt\" và các tùy chọn khác yêu cầu khởi động lại quá trình phát lại hiện tại.", "LabelAlbumGain": "Điều Chỉnh Album", "LabelSegmentKeepSecondsHelp": "Thời gian tính bằng giây mà các phân đoạn cần được giữ lại sau khi chúng được khách hàng tải xuống.. Chỉ hoạt động nếu tính năng xóa phân đoạn được bật.", "MenuClose": "Đóng Menu", @@ -1796,8 +1796,8 @@ "Lyric": "Lời bài hát", "HeaderLyricDownloads": "Tải Xuống Lời Bài Hát", "LabelSelectPreferredTranscodeVideoAudioCodec": "Bộ giải mã âm thanh chuyển mã ưa thích khi phát lại video", - "LibraryScanFanoutConcurrency": "Giới hạn nhiệm vụ quét thư viện song song", - "LibraryScanFanoutConcurrencyHelp": "Số lượng tác vụ song song tối đa trong quá trình quét thư viện. Đặt giá trị này thành 0 sẽ chọn một giới hạn dựa trên số lõi của hệ thống của bạn. CẢNH BÁO: Đặt số này quá cao có thể gây ra vấn đề với hệ thống tệp mạng; nếu gặp sự cố, hãy giảm số này.", + "LibraryScanFanoutConcurrency": "Giới hạn tác vụ quét thư viện song song", + "LibraryScanFanoutConcurrencyHelp": "Số lượng tác vụ song song tối đa trong quá trình quét thư viện. Đặt là 0 sẽ chọn một giới hạn dựa trên số lõi trên hệ thống của bạn. CẢNH BÁO: Đặt số này quá cao có thể gây ra vấn đề với hệ thống tệp mạng; nếu gặp sự cố, hãy giảm số này xuống thấp.", "Lyrics": "Lời bài hát", "PlaybackError.ASS_RENDER_ERROR": "Đã xảy ra lỗi trong trình kết xuất phụ đề ASS/SSA.", "PlaybackError.FATAL_HLS_ERROR": "Đã xảy ra lỗi nghiêm trọng trong luồng HLS.", From 60c2f7366f9f163974b553cc7c7100b179742de7 Mon Sep 17 00:00:00 2001 From: rushmash Date: Sun, 6 Oct 2024 18:46:44 +0000 Subject: [PATCH 030/120] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index e9add6931b..fb7e674e11 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -311,7 +311,7 @@ "HeaderYears": "Гады", "LabelValue": "Значэнне", "Image": "Малюнак", - "LastSeen": "Апошні раз бачылі {0}", + "LastSeen": "Апошняе дзеянне {0}", "List": "Спіс", "Live": "Трансляцыя", "MediaInfoAnamorphic": "Анаморфны", @@ -1760,7 +1760,7 @@ "LogLevel.Error": "Памылка", "LabelTrackGain": "Узмацненне дарожкі", "GoHome": "На галоўную", - "SelectAudioNormalizationHelp": "Узмацненне дарожкі - рэгулюе гучнасць кожнай дарожкі, каб яны прайграваліся з аднолькавай гучнасцю. Узмацненне альбома - рэгулюе гучнасць толькі ўсіх дарожак у альбоме, захоўваючы дынамічны дыяпазон альбома.", + "SelectAudioNormalizationHelp": "Узмацненне дарожкі - рэгулюе гучнасць кожнай дарожкі, каб яны прайграваліся з аднолькавай гучнасцю. Узмацненне альбома - рэгулюе гучнасць толькі ўсіх дарожак у альбоме, захоўваючы дынамічны дыяпазон альбома. Пераключэнне паміж \"Выкл\" і іншымі опцыямі патрабуе перазапуску бягучага прайгравання.", "SearchResultsEmpty": "Выбачайце! Няма вынікаў для \"{0}\"", "UnknownError": "Адбылася невядомая памылка.", "LabelIsHearingImpaired": "Для людзей з парушэннем слыху (SDH)", @@ -1893,5 +1893,15 @@ "PluginEnableError": "Адбылася памылка пры ўключэнні плагіна.", "PluginLoadConfigError": "Адбылася памылка падчас атрымання старонак канфігурацыі плагіна.", "PluginLoadRepoError": "Адбылася памылка падчас атрымання дэталяў плагіна з рэпазітара.", - "PluginUninstallError": "Адбылася памылка пры выдаленні плагіна." + "PluginUninstallError": "Адбылася памылка пры выдаленні плагіна.", + "HeaderAudioAdvanced": "Пашыраны аўдыё", + "EnableHi10p": "Уключыць профіль H.264 High 10", + "HeaderUploadLyrics": "Спампаваць тэксты песень", + "DateModified": "Дата змяненняў", + "DisableVbrAudioEncodingHelp": "Забараніць серверу кадаваць аўдыя з VBR для гэтага кліента.", + "HeaderPreviewLyrics": "Папярэдні прагляд тэкстаў песень", + "LabelIsSynced": "Сінхранізавана", + "LabelDuration": "Працягласць", + "NoLyricsSearchResultsFound": "Тэксты песень не знойдзены.", + "FallbackMaxStreamingBitrateHelp": "Максімальны бітрэйт плыні выкарыстоўваецца ў якасці запаснога, калі ffprobe не можа вызначыць бітрэйт зыходнага патоку. Гэта дапамагае прадухіліць кліенты ад запытаў празмерна высокага бітрэйту транскадавання, які можа прывесці да збою прайгравальніка і перагрузкі кадавальніка." } From ca4763512f4a4e2a73e37600a5dc520f917c2274 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:58:02 +0300 Subject: [PATCH 031/120] Explicitly check for Live TV --- src/components/playback/playbackmanager.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 3dfa961856..c85b2fd579 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -22,6 +22,7 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type' import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; +import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/index.js'; const UNLIMITED_ITEMS = -1; @@ -2573,8 +2574,15 @@ export class PlaybackManager { } const apiClient = ServerConnections.getApiClient(item.ServerId); - let mediaSourceId = playOptions.mediaSourceId; - const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId || item.Id) + let mediaSourceId; + + const isLiveTv = [BaseItemKind.TvChannel, BaseItemKind.Channel, BaseItemKind.LiveTvChannel].includes(item.Type); + + if (!isLiveTv) { + mediaSourceId = playOptions.mediaSourceId || item.Id; + } + + const getMediaStreams = isLiveTv ? Promise.resolve([]) : apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId) .then(fullItem => { return fullItem.MediaStreams; }); @@ -2611,11 +2619,9 @@ export class PlaybackManager { autoSetNextTracks(prevSource, mediaStreams, trackOptions, user.Configuration.RememberAudioSelections, user.Configuration.RememberSubtitleSelections); if (trackOptions.DefaultAudioStreamIndex != null) { options.audioStreamIndex = trackOptions.DefaultAudioStreamIndex; - mediaSourceId = mediaSourceId || item.Id; } if (trackOptions.DefaultSubtitleStreamIndex != null) { options.subtitleStreamIndex = trackOptions.DefaultSubtitleStreamIndex; - mediaSourceId = mediaSourceId || item.Id; } return getPlaybackMediaSource(player, apiClient, deviceProfile, item, mediaSourceId, options).then(async (mediaSource) => { From 213047dc296ecc543c0607d43f03bcad33a0c857 Mon Sep 17 00:00:00 2001 From: Anders Date: Tue, 8 Oct 2024 09:03:41 +0000 Subject: [PATCH 032/120] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/strings/da.json b/src/strings/da.json index 7364c60cd1..c7a5878978 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1085,7 +1085,7 @@ "LearnHowYouCanContribute": "Lær hvordan du kan bidrage.", "LeaveBlankToNotSetAPassword": "Du kan lade dette felt være tomt hvis du ikke ønsker adgangskode.", "List": "Liste", - "Live": "Live", + "Live": "Direkte", "LiveTV": "Direkte TV", "Logo": "Logo", "ManageRecording": "Håndtér optagelse", @@ -1095,7 +1095,7 @@ "MediaInfoInterlaced": "Interlaceret", "MediaInfoLayout": "Udlæg", "MediaInfoRefFrames": "Ref billeder", - "MediaInfoSampleRate": "Sample rate", + "MediaInfoSampleRate": "Samplingsfrekvens", "MediaIsBeingConverted": "Mediet bliver konverteret til et format der er kompatibel med enheden der afspiller mediet.", "Menu": "Menu", "MessageImageFileTypeAllowed": "Kun JPEG og PNG filer er understøttet.", @@ -1341,9 +1341,9 @@ "MessagePlaybackError": "Der opstod en fejl under afspilning af denne fil på din Google Cast modtager.", "MessageChromecastConnectionError": "Din Google Cast modtager kan ikke komme i kontakt med Jellyfin serveren. Undersøg venligst forbindelsen og prøv igen.", "LabelPlaybackInfo": "Afspilningsinformation", - "Remuxing": "Remuxing", + "Remuxing": "Ompakning", "AspectRatioFill": "Udfyld", - "AspectRatioCover": "Cover", + "AspectRatioCover": "Omslag", "EnableFallbackFont": "Aktiver fald tilbage på skrifttype", "Writers": "Forfattere", "ViewAlbumArtist": "Vis album kunstner", @@ -1369,7 +1369,7 @@ "QuickConnectAuthorizeFail": "Ukendt Quick Connect kode", "QuickConnectAuthorizeCode": "Angiv kode {0} for at logge ind", "QuickConnectActivationSuccessful": "Aktivering blev gennemført", - "QuickConnect": "Quick Connect", + "QuickConnect": "Hurtigtilkobling", "PluginFromRepo": "{0} fra arkiv {1}", "Profile": "Profil", "PreviousTrack": "Gå til forrige", @@ -1603,7 +1603,7 @@ "Remixer": "Remixer", "ReleaseGroup": "Udgivelsesgruppe", "Production": "Produktion", - "Print": "Print", + "Print": "Udskriv", "PreviousChapter": "Sidste kapitel", "AllowEmbeddedSubtitlesAllowTextOption": "Tillad tekst", "AllowEmbeddedSubtitlesAllowImageOption": "Tillad billede", @@ -1749,7 +1749,7 @@ "Notifications": "Notifikationer", "PleaseConfirmRepositoryInstallation": "Venligst klik OK for at bekræfte at du har læst ovenstående og ønsker at fortsætte med installationen af plugin repository.", "SaveRecordingImagesHelp": "Gem billeder fra EPG listings udbyder samt billeder fra side media.", - "SelectAudioNormalizationHelp": "Track gain - justerer volumen for hvert track så de afspiller med samme volume. Album gain - justerer volumen kun volumen for alle tracks i et album, samt bevarer albummets dynamic range.", + "SelectAudioNormalizationHelp": "Track gain - justerer volumen for hvert track så de afspiller med samme volume. Album gain - justerer volumen kun volumen for alle tracks i et album, samt bevarer albummets dynamic range. Skift mellem \"Fra\" og andre muligheder kræver genstart af den indeværende afspilning.", "Select": "Vælg", "LabelLevel": "Niveau", "LabelMediaDetails": "Media detaljer", @@ -1875,7 +1875,7 @@ "Translator": "Oversætter", "ViewLyrics": "Se sangtekst", "LabelTrickplayAccelEncoding": "Aktivér hardware acceleret MJPEG kodning", - "LabelTrickplayAccelEncodingHelp": "På nuværende tidspunkt kun tilgængeligt på QSV, VAAPI og VideoToolbox; denne indstilling har ingen effekt på andre hardware accelerationsmetoder.", + "LabelTrickplayAccelEncodingHelp": "På nuværende tidspunkt kun tilgængeligt på QSV, VA-API, VideoToolbox og RKMPP; denne indstilling har ingen effekt på andre hardware accelerationsmetoder.", "HeaderNoLyrics": "Ingen sangtekst blev fundet", "HeaderVideoAdvanced": "Video Avanceret", "PlaylistPublic": "Tillad offentlig adgang", @@ -1924,7 +1924,7 @@ "PreviewLyrics": "Gennemse sangtekster", "SearchForLyrics": "Find sangtekster", "LabelRepository": "Arkiv", - "AllowTonemappingSoftwareHelp": "Tone-mapping kan transformere det dynamiske område af en video fra HDR til SDR, uden tab af billeddetalje og farver, hvilket er meget vigtige informationer for at representere den originale scene. Virker lige nu kun med 10bit HDR10 og HLG videoer.", + "AllowTonemappingSoftwareHelp": "Tone-mapping kan transformere det dynamiske område af en video fra HDR til SDR, uden tab af billeddetalje og farver, hvilket er meget vigtige informationer for at repræsentere den originale scene. Virker lige nu kun med 10bit HDR10-, HLG- og DoVi-videoer.", "HeaderAddLyrics": "Tilføj sangtekst", "LabelNoChangelog": "Ingen ændringer fortaget for denne udgivelse.", "LabelSelectPreferredTranscodeVideoCodec": "Fforetrukne video codec til omkodning", From a3df9bd637e24f4d5db93e186198e939d02f077e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Tue, 8 Oct 2024 11:30:21 +0000 Subject: [PATCH 033/120] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index a9d4d3faa8..ffa4e680ec 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -164,7 +164,7 @@ "Label3DFormat": "3D formátum", "LabelAlbumArtists": "Album előadók", "LabelArtists": "Előadók", - "LabelAudioLanguagePreference": "Audió nyelvének beállítása", + "LabelAudioLanguagePreference": "Hang előnyben részesített nyelve", "LabelBirthYear": "Születési év", "LabelCachePath": "Gyorsítótár útvonal", "LabelCollection": "Gyűjtemény", @@ -683,8 +683,8 @@ "LabelAllowHWTranscoding": "Hardveres átkódolás engedélyezése", "LabelAllowedRemoteAddresses": "Távoli IP cím szűrő", "LabelAllowedRemoteAddressesMode": "Távoli IP cím szűrő mód", - "LabelAppName": "App neve", - "LabelAppNameExample": "Például: Sickbeard, Sonarr", + "LabelAppName": "Alkalmazás neve", + "LabelAppNameExample": "Ember számára olvasható név az API -kulcsok azonosításához. Ez a beállítás nincs hatással a működésre.", "LabelAutomaticallyRefreshInternetMetadataEvery": "A metaadatok automatikus frissítése az internetről", "LabelBindToLocalNetworkAddress": "Kötés a helyi hálózati címhez", "LabelBindToLocalNetworkAddressHelp": "A helyi IP cím felülbírálása a HTTP szerverhez való csatlakozáshoz. Ha üres marad, a szerver minden elérhető címhez kötődik. Az érték megváltoztatásához a szerver újraindítása szükséges.", @@ -1148,11 +1148,11 @@ "XmlDocumentAttributeListHelp": "Ezek a tulajdonságok minden XML válaszüzenet gyökér elemére alkalmazásra kerülnek.", "Thumb": "Miniatűr", "LabelBitrate": "Bitráta", - "LabelAudioSampleRate": "Audió mintavételi ráta", - "LabelAudioCodec": "Audió kódek", - "LabelAudioChannels": "Audió csatorna", - "LabelAudioBitrate": "Audió bitráta", - "LabelAudioBitDepth": "Audió bitmélység", + "LabelAudioSampleRate": "Hang mintavételi sebessége", + "LabelAudioCodec": "Hangkodek", + "LabelAudioChannels": "Hangcsatornák", + "LabelAudioBitrate": "Hang bitsebessége", + "LabelAudioBitDepth": "Hang bitmélysége", "CopyStreamURLSuccess": "URL másolása sikeres.", "CopyStreamURL": "Stream URL másolása", "PlaybackData": "Lejátszási információk", @@ -1269,7 +1269,7 @@ "Album": "Album", "LabelLibraryPageSizeHelp": "Az oldalnként megmutatott elemek száma. Nullára állítva a lapozási funkció ki lesz kapcsolva.", "LabelLibraryPageSize": "Könyvtár oldalméret", - "LabelDeinterlaceMethod": "Deinterlacing mód", + "LabelDeinterlaceMethod": "Váltottsorosság-mentesítő mód", "DeinterlaceMethodHelp": "Válaszd ki a szétválasztási módot, amelyet a váltott soros tartalom szoftveres átkódolásához használ. Ha engedélyezed a hardveres deinterlace-t támogató hardveres gyorsítást, akkor a hardveres deinterlacer lesz használva e beállítás helyett.", "UnsupportedPlayback": "A Jellyfin nem tudja feloldani a DRM-mel védett tartalmak titkosítását, de ettől függetlenül mindig megpróbálja a lejátszást, a védett címek esetén is. Néhány fájl emiatt teljesen feketeként jelenhet meg a titkosítás vagy a nem támogatott funkciók miatt, például az interaktív címeknél.", "Yadif": "YADIF", @@ -1373,7 +1373,7 @@ "ButtonUseQuickConnect": "Gyors kapcsolódás használata", "ButtonActivate": "Aktiválás", "Authorize": "Engedélyezés", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver váltottsorosság-mentesítő szűrő (BWDIF)", "SpecialFeatures": "Speciális tartalmak", "QuickConnectNotActive": "A gyors csatlakozás nem engedélyezett ezen a szerveren", "QuickConnectNotAvailable": "Kérd meg a szerver adminisztrátorát, hogy engedélyezze a gyors csatlakozást", @@ -1773,9 +1773,9 @@ "LabelIsHearingImpaired": "Hallássérültek számára (SDH)", "GoHome": "Kezdőlapra", "BackdropScreensaver": "Háttér képernyővédő", - "SelectAudioNormalizationHelp": "Sáverősítés - az egyes sávok hangerejét állítja be, hogy azonos hangerővel játsszák le őket. Album gain - csak az album összes zeneszámának hangerejét állítja be, megtartva az album dinamikatartományát.", + "SelectAudioNormalizationHelp": "Számerősítés – az egyes számok hangerejét állítja be, hogy azonos hangerővel legyenek lejátszva. Albumerősítés – az album összes számának hangerejét állítja, megtartva az album dinamikatartományát.", "LabelAlbumGain": "Album nyereség", - "LabelSelectAudioNormalization": "Hang normalizálás", + "LabelSelectAudioNormalization": "Hangnormalizálás", "LogoScreensaver": "Logo képernyővédő", "UnknownError": "Ismeretlen hiba történt.", "LabelTrackGain": "Címnyereség", @@ -1898,6 +1898,13 @@ "HeaderNextItem": "Következő {0}", "HeaderVideoAdvanced": "Haladó VIdeó", "Illustrator": "Illusztrátor", - "LabelAlwaysRemuxFlacAudioFiles": "Mindig remux-olja a FLAC hang fájlokat", - "LabelAlwaysRemuxMp3AudioFiles": "Mindig remux-olja a MP3 hang fájlokat" + "LabelAlwaysRemuxFlacAudioFiles": "Mindig remuxolja a FLAC-hangfájlokat", + "LabelAlwaysRemuxMp3AudioFiles": "Mindig remuxolja az MP3-hangfájlokat", + "LabelCustomTagDelimiters": "Egyéni címkeelválasztó", + "LabelCustomTagDelimitersHelp": "A címkék elválasztójaként kezelendő karakterek.", + "LabelDuration": "Hossz", + "LabelAudioTagSettings": "Hangcímke-beállítások", + "LabelDelimiterWhitelist": "Elválasztók engedélyezési listája", + "LabelDelimiterWhitelistHelp": "Elemek, melyek nem lesznek figyelembe véve a címkefelosztásnál. Soronként egy elem.", + "LabelDisableVbrAudioEncoding": "Változó bitsebességű hangfelvétel letiltása" } From c2c5228c06a55a8b946de5741d4f9e1c30f1c837 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:27:46 +0300 Subject: [PATCH 034/120] Update playbackmanager.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/components/playback/playbackmanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index c85b2fd579..ffec28ab6b 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -22,7 +22,7 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type' import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; -import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/index.js'; +import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind.js'; const UNLIMITED_ITEMS = -1; From 07316cf870948483bd740a147b222282d2ab4818 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:19:38 +0300 Subject: [PATCH 035/120] Update playbackmanager.js Co-authored-by: Bill Thornton --- src/components/playback/playbackmanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index ffec28ab6b..a036008033 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2576,7 +2576,7 @@ export class PlaybackManager { const apiClient = ServerConnections.getApiClient(item.ServerId); let mediaSourceId; - const isLiveTv = [BaseItemKind.TvChannel, BaseItemKind.Channel, BaseItemKind.LiveTvChannel].includes(item.Type); + const isLiveTv = [BaseItemKind.TvChannel, BaseItemKind.LiveTvChannel].includes(item.Type); if (!isLiveTv) { mediaSourceId = playOptions.mediaSourceId || item.Id; From 49433cd6402fa0cee666125015ba025497a48ed5 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 8 Oct 2024 11:46:27 -0400 Subject: [PATCH 036/120] Fix playback subscriber callback binding --- .../playback/utils/playbackSubscriber.ts | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/apps/stable/features/playback/utils/playbackSubscriber.ts b/src/apps/stable/features/playback/utils/playbackSubscriber.ts index dfc79360a2..d492469f71 100644 --- a/src/apps/stable/features/playback/utils/playbackSubscriber.ts +++ b/src/apps/stable/features/playback/utils/playbackSubscriber.ts @@ -39,35 +39,35 @@ export interface PlaybackSubscriber { } export abstract class PlaybackSubscriber { - private player: Plugin | undefined; + protected player: Plugin | undefined; private readonly playbackManagerEvents = { - [PlaybackManagerEvent.PlaybackCancelled]: this.onPlaybackCancelled, - [PlaybackManagerEvent.PlaybackError]: this.onPlaybackError, - [PlaybackManagerEvent.PlaybackStart]: this.onPlaybackStart, - [PlaybackManagerEvent.PlaybackStop]: this.onPlaybackStop, - [PlaybackManagerEvent.PlayerChange]: this.onPlayerChange, - [PlaybackManagerEvent.ReportPlayback]: this.onReportPlayback + [PlaybackManagerEvent.PlaybackCancelled]: this.onPlaybackCancelled?.bind(this), + [PlaybackManagerEvent.PlaybackError]: this.onPlaybackError?.bind(this), + [PlaybackManagerEvent.PlaybackStart]: this.onPlaybackStart?.bind(this), + [PlaybackManagerEvent.PlaybackStop]: this.onPlaybackStop?.bind(this), + [PlaybackManagerEvent.PlayerChange]: this.onPlayerChange?.bind(this), + [PlaybackManagerEvent.ReportPlayback]: this.onReportPlayback?.bind(this) }; private readonly playerEvents = { - [PlayerEvent.Error]: this.onPlayerError, - [PlayerEvent.FullscreenChange]: this.onPlayerFullscreenChange, - [PlayerEvent.ItemStarted]: this.onPlayerItemStarted, - [PlayerEvent.ItemStopped]: this.onPlayerItemStopped, - [PlayerEvent.MediaStreamsChange]: this.onPlayerMediaStreamsChange, - [PlayerEvent.Pause]: this.onPlayerPause, - [PlayerEvent.PlaybackStart]: this.onPlayerPlaybackStart, - [PlayerEvent.PlaybackStop]: this.onPlayerPlaybackStop, - [PlayerEvent.PlaylistItemAdd]: this.onPlayerPlaylistItemAdd, - [PlayerEvent.PlaylistItemMove]: this.onPlayerPlaylistItemMove, - [PlayerEvent.PlaylistItemRemove]: this.onPlayerPlaylistItemRemove, - [PlayerEvent.RepeatModeChange]: this.onPlayerRepeatModeChange, - [PlayerEvent.ShuffleModeChange]: this.onPlayerShuffleModeChange, - [PlayerEvent.Stopped]: this.onPlayerStopped, - [PlayerEvent.TimeUpdate]: this.onPlayerTimeUpdate, - [PlayerEvent.Unpause]: this.onPlayerUnpause, - [PlayerEvent.VolumeChange]: this.onPlayerVolumeChange + [PlayerEvent.Error]: this.onPlayerError?.bind(this), + [PlayerEvent.FullscreenChange]: this.onPlayerFullscreenChange?.bind(this), + [PlayerEvent.ItemStarted]: this.onPlayerItemStarted?.bind(this), + [PlayerEvent.ItemStopped]: this.onPlayerItemStopped?.bind(this), + [PlayerEvent.MediaStreamsChange]: this.onPlayerMediaStreamsChange?.bind(this), + [PlayerEvent.Pause]: this.onPlayerPause?.bind(this), + [PlayerEvent.PlaybackStart]: this.onPlayerPlaybackStart?.bind(this), + [PlayerEvent.PlaybackStop]: this.onPlayerPlaybackStop?.bind(this), + [PlayerEvent.PlaylistItemAdd]: this.onPlayerPlaylistItemAdd?.bind(this), + [PlayerEvent.PlaylistItemMove]: this.onPlayerPlaylistItemMove?.bind(this), + [PlayerEvent.PlaylistItemRemove]: this.onPlayerPlaylistItemRemove?.bind(this), + [PlayerEvent.RepeatModeChange]: this.onPlayerRepeatModeChange?.bind(this), + [PlayerEvent.ShuffleModeChange]: this.onPlayerShuffleModeChange?.bind(this), + [PlayerEvent.Stopped]: this.onPlayerStopped?.bind(this), + [PlayerEvent.TimeUpdate]: this.onPlayerTimeUpdate?.bind(this), + [PlayerEvent.Unpause]: this.onPlayerUnpause?.bind(this), + [PlayerEvent.VolumeChange]: this.onPlayerVolumeChange?.bind(this) }; constructor( From 2ca5a60e90384b70b15d1f9e50927e938ccd6ed8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:46:31 +0000 Subject: [PATCH 037/120] Update dependency @jellyfin/sdk to v0.0.0-unstable.202410080502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 355a5821d3..16cb15f5ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202410020501", + "@jellyfin/sdk": "0.0.0-unstable.202410080502", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", @@ -5068,9 +5068,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202410020501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410020501.tgz", - "integrity": "sha512-Tl+bE4GoGDf5qmzYiauNLFclAYF4cPFVX3HldKl/KuwEarzRdQfudGNFCu0KmDbJGiZ6HtDlec6LoUaYeXmvng==", + "version": "0.0.0-unstable.202410080502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410080502.tgz", + "integrity": "sha512-GJx92FQUByJSWtVwuegWNJLop8g8PdQxcs1ucZuSNHZD0FT7EK92gnEf/N80Wj7ef9zFrWnWQgu+Hn4K9r11jg==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -29306,9 +29306,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202410020501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410020501.tgz", - "integrity": "sha512-Tl+bE4GoGDf5qmzYiauNLFclAYF4cPFVX3HldKl/KuwEarzRdQfudGNFCu0KmDbJGiZ6HtDlec6LoUaYeXmvng==", + "version": "0.0.0-unstable.202410080502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410080502.tgz", + "integrity": "sha512-GJx92FQUByJSWtVwuegWNJLop8g8PdQxcs1ucZuSNHZD0FT7EK92gnEf/N80Wj7ef9zFrWnWQgu+Hn4K9r11jg==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index fb62f4be96..56239095fe 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202410020501", + "@jellyfin/sdk": "0.0.0-unstable.202410080502", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", From 1cfaf1e7b747ae7e1c5dbca6bfb18a777134e4d7 Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Tue, 8 Oct 2024 22:00:37 +0000 Subject: [PATCH 038/120] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index ae0bc382fc..5e49c03e6f 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1285,9 +1285,23 @@ "PlaybackError.RateLimitExceeded": "לא ניתן לנגן את המדיה כרגע עקבת מגבלה על קצב השימוש.", "CoverArtist": "אמן קאבר", "Colorist": "רשימת צבעים", - "Author": "יוצר", + "Author": "מחבר", "ConfirmDeleteLyrics": "מחיקת המילים הללו ימחקו גם בקבצים שלך וגם בספריית המדיה שלך. אתה בטוח שברצונך להמשיך?", "AirPlay": "AirPlay", "Alternate": "אלטרנטיבי", - "AlternateDVD": "DVD אלטרנטיבי" + "AlternateDVD": "DVD אלטרנטיבי", + "DateModified": "תאריך שינוי", + "DeleteLyrics": "מחיקת מילות השיר", + "DisableVbrAudioEncodingHelp": "מונע מהשרת לקודד שמע בפורמט VBR עבור לקוח זה.", + "Editor": "עורך", + "Creator": "יוצר", + "EnableHi10p": "הפעלת פרופיל H.264 High 10", + "AllowFmp4TranscodingContainerHelp": "אפשר טרנסקודינג של fMP4 עבור מכוון זה כדי לאפשר תוכן HEVC ו-HDR. לא כל המכוונים תומכים בפורמט זה. בטל זאת אם יש בעיה בניגון.", + "AllowStreamSharingHelp": "אפשר ל-Jellyfin לשכפל את זרם mpgets מהמכוון ולשתףללקוחות. זה עוזר כשהמכוון מוגבל במספר הזרמים אך עלול לגרום לבעיות בניגון.", + "AlwaysRemuxFlacAudioFilesHelp": "אם יש לך קבצים שהדפדפן מסרב להציג או מראה זמנים שגויים, ניתן להפעיל זאת כפתרון חלופי.", + "AlwaysRemuxMp3AudioFilesHelp": "אם יש לך קבצים שהדפדפן מראה עבורם זמנים שגויים, ניתן להפעיל זאת כפתרון חלופי.", + "AndOtherArtists": "{0} ו-{1} אומנים נוספים.", + "AllowTonemappingSoftwareHelp": "מיפוי טונים יכול להמיר שת הטווח הדינמי של וידיאו מ-HDR ל-SDR תוך כדי שמירה על איכות וצבע התמונות, שהם חשובים להצגה. כרגע עובד רק עם סרטונים בפורמט 10bit HDR10, HLG, ו-DoVi.", + "EditLyrics": "עריכת מילות השיר", + "EnableDts": "הפעלת DTS (DCA)" } From 40d9f43049ac7d37409daa7b94414ef1e4cd5ae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Eduardo=20Allende=20Pino?= Date: Wed, 9 Oct 2024 12:31:12 +0000 Subject: [PATCH 039/120] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 8c0c6a221f..c7e7d595f6 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -9,7 +9,7 @@ "Alerts": "Alertas", "All": "Todo", "AllChannels": "Todos los canales", - "AllComplexFormats": "Todos los formatos ((ASS, SSA, VobSub, PGS, SUB, IDX, …)", + "AllComplexFormats": "Todos los formatos (ASS, SSA, VobSub, PGS, SUB, IDX, …)", "AllEpisodes": "Todos los episodios", "AllLanguages": "Todos los idiomas", "AllLibraries": "Todas las bibliotecas", From cd5aff50cc5120729feb64a0d383250bc69ae8ce Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 14:44:57 +0000 Subject: [PATCH 040/120] Update dependency @jellyfin/sdk to v0.0.0-unstable.202410090502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 16cb15f5ca..05e38aa428 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202410080502", + "@jellyfin/sdk": "0.0.0-unstable.202410090502", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", @@ -5068,9 +5068,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202410080502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410080502.tgz", - "integrity": "sha512-GJx92FQUByJSWtVwuegWNJLop8g8PdQxcs1ucZuSNHZD0FT7EK92gnEf/N80Wj7ef9zFrWnWQgu+Hn4K9r11jg==", + "version": "0.0.0-unstable.202410090502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410090502.tgz", + "integrity": "sha512-aJO3XOZ5CQ1rTCLmNqhQRlSB6dXg05HpH2PBW6ICO7ftf8AsyYQXAKN/vpn9un0dEsOB1Y+F7wMrj4UKTbpKlA==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -29306,9 +29306,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202410080502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410080502.tgz", - "integrity": "sha512-GJx92FQUByJSWtVwuegWNJLop8g8PdQxcs1ucZuSNHZD0FT7EK92gnEf/N80Wj7ef9zFrWnWQgu+Hn4K9r11jg==", + "version": "0.0.0-unstable.202410090502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410090502.tgz", + "integrity": "sha512-aJO3XOZ5CQ1rTCLmNqhQRlSB6dXg05HpH2PBW6ICO7ftf8AsyYQXAKN/vpn9un0dEsOB1Y+F7wMrj4UKTbpKlA==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index 56239095fe..71d4c47eb0 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202410080502", + "@jellyfin/sdk": "0.0.0-unstable.202410090502", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", From 0cc2b0698abbed66289e6b3bd4ad34f33db9975e Mon Sep 17 00:00:00 2001 From: Ethan Messinger-Arns Date: Wed, 9 Oct 2024 14:45:19 +0000 Subject: [PATCH 041/120] Add option to control how long the screensaver takes to start (#6165) * Added option to control how long the screensaver takes to start * ESLint fixes * Requested pull request fixes * Alphabetized the translation string placement * Simplified getter --- src/components/displaySettings/displaySettings.js | 4 ++++ .../displaySettings/displaySettings.template.html | 6 ++++++ src/scripts/screensavermanager.js | 4 ++-- src/scripts/settings/userSettings.js | 14 ++++++++++++++ src/strings/en-us.json | 2 ++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/components/displaySettings/displaySettings.js b/src/components/displaySettings/displaySettings.js index 5ecae5a69a..354ef54d09 100644 --- a/src/components/displaySettings/displaySettings.js +++ b/src/components/displaySettings/displaySettings.js @@ -91,9 +91,11 @@ function loadForm(context, user, userSettings) { if (appHost.supports('screensaver')) { context.querySelector('.selectScreensaverContainer').classList.remove('hide'); context.querySelector('.txtBackdropScreensaverIntervalContainer').classList.remove('hide'); + context.querySelector('.txtScreensaverTimeContainer').classList.remove('hide'); } else { context.querySelector('.selectScreensaverContainer').classList.add('hide'); context.querySelector('.txtBackdropScreensaverIntervalContainer').classList.add('hide'); + context.querySelector('.txtScreensaverTimeContainer').classList.add('hide'); } if (datetime.supportsLocalization()) { @@ -108,6 +110,7 @@ function loadForm(context, user, userSettings) { loadScreensavers(context, userSettings); context.querySelector('#txtBackdropScreensaverInterval').value = userSettings.backdropScreensaverInterval(); + context.querySelector('#txtScreensaverTime').value = userSettings.screensaverTime(); context.querySelector('.chkDisplayMissingEpisodes').checked = user.Configuration.DisplayMissingEpisodes || false; @@ -152,6 +155,7 @@ function saveUser(context, user, userSettingsInstance, apiClient) { userSettingsInstance.dashboardTheme(context.querySelector('#selectDashboardTheme').value); userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value); userSettingsInstance.backdropScreensaverInterval(context.querySelector('#txtBackdropScreensaverInterval').value); + userSettingsInstance.screensaverTime(context.querySelector('#txtScreensaverTime').value); userSettingsInstance.libraryPageSize(context.querySelector('#txtLibraryPageSize').value); diff --git a/src/components/displaySettings/displaySettings.template.html b/src/components/displaySettings/displaySettings.template.html index a9b7b9d2a3..1b5579b4c3 100644 --- a/src/components/displaySettings/displaySettings.template.html +++ b/src/components/displaySettings/displaySettings.template.html @@ -203,6 +203,12 @@

+
+ +
${LabelScreensaverTimeHelp}
+
+
${LabelBackdropScreensaverIntervalHelp}
diff --git a/src/scripts/screensavermanager.js b/src/scripts/screensavermanager.js index a187da6ae2..2ef416a387 100644 --- a/src/scripts/screensavermanager.js +++ b/src/scripts/screensavermanager.js @@ -11,7 +11,7 @@ import './screensavermanager.scss'; function getMinIdleTime() { // Returns the minimum amount of idle time required before the screen saver can be displayed //time units used Millisecond - return 180000; + return userSettings.screensaverTime() * 1000; } let lastFunctionalEvent = 0; @@ -129,7 +129,7 @@ function ScreenSaverManager() { this.show(); }; - setInterval(onInterval, 10000); + setInterval(onInterval, 5000); } export default new ScreenSaverManager; diff --git a/src/scripts/settings/userSettings.js b/src/scripts/settings/userSettings.js index f667cda465..ba5d16d2e6 100644 --- a/src/scripts/settings/userSettings.js +++ b/src/scripts/settings/userSettings.js @@ -431,6 +431,19 @@ export class UserSettings { return parseInt(this.get('backdropScreensaverInterval', false), 10) || 5; } + /** + * Get or set the amount of time it takes to activate the screensaver in seconds. Default 3 minutes. + * @param {number|undefined} [val] - The amount of time it takes to activate the screensaver in seconds. + * @return {number} The amount of time it takes to activate the screensaver in seconds. + */ + screensaverTime(val) { + if (val !== undefined) { + return this.set('screensaverTime', val.toString(), false); + } + + return parseInt(this.get('screensaverTime', false), 10) || 180; + } + /** * Get or set library page size. * @param {number|undefined} [val] - Library page size. @@ -650,6 +663,7 @@ export const skin = currentSettings.skin.bind(currentSettings); export const theme = currentSettings.theme.bind(currentSettings); export const screensaver = currentSettings.screensaver.bind(currentSettings); export const backdropScreensaverInterval = currentSettings.backdropScreensaverInterval.bind(currentSettings); +export const screensaverTime = currentSettings.screensaverTime.bind(currentSettings); export const libraryPageSize = currentSettings.libraryPageSize.bind(currentSettings); export const maxDaysForNextUp = currentSettings.maxDaysForNextUp.bind(currentSettings); export const enableRewatchingInNextUp = currentSettings.enableRewatchingInNextUp.bind(currentSettings); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5cd78810ef..a220b2341e 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -861,6 +861,8 @@ "LabelSaveTrickplayLocallyHelp": "Saving trickplay images into media folders will put them next to your media for easy migration and access.", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "LabelScreensaver": "Screensaver", + "LabelScreensaverTime": "Screensaver Time", + "LabelScreensaverTimeHelp": "The amount of time in seconds of inactivity required to start the screensaver.", "LabelSeasonNumber": "Season number", "LabelSelectFolderGroups": "Automatically group content from the following folders into views such as 'Movies', 'Music' and 'TV'", "LabelSelectFolderGroupsHelp": "Folders that are unchecked will be displayed by themselves in their own view.", From c131ff9c3e8905026001fd399f2a94f43254f31e Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:07:35 +0300 Subject: [PATCH 042/120] Fix creating & deleting access schedules (#6133) * Fix deleting & creating access schedules * Remove unnecessary splice * Add missing semicolon * Correct check * Add userId to dependency Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../routes/users/parentalcontrol.tsx | 49 +++++++++---------- src/elements/IconButtonElement.tsx | 2 +- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/apps/dashboard/routes/users/parentalcontrol.tsx b/src/apps/dashboard/routes/users/parentalcontrol.tsx index 867cc2d043..da7262af1b 100644 --- a/src/apps/dashboard/routes/users/parentalcontrol.tsx +++ b/src/apps/dashboard/routes/users/parentalcontrol.tsx @@ -188,28 +188,6 @@ const UserParentalControl = () => { } }, []); - const renderAccessSchedule = useCallback((schedules: AccessSchedule[]) => { - const page = element.current; - - if (!page) { - console.error('[userparentalcontrol] Unexpected null page reference'); - return; - } - - setAccessSchedules(schedules); - - const accessScheduleList = page.querySelector('.accessScheduleList') as HTMLDivElement; - - for (const btnDelete of accessScheduleList.querySelectorAll('.btnDelete')) { - btnDelete.addEventListener('click', function () { - const index = parseInt(btnDelete.getAttribute('data-index') ?? '0', 10); - schedules.splice(index, 1); - const newindex = schedules.filter((_, i) => i != index); - renderAccessSchedule(newindex); - }); - } - }, []); - const loadUser = useCallback((user: UserDto, allParentalRatings: ParentalRating[]) => { const page = element.current; @@ -242,9 +220,9 @@ const UserParentalControl = () => { } else { (page.querySelector('.accessScheduleSection') as HTMLDivElement).classList.remove('hide'); } - renderAccessSchedule(user.Policy?.AccessSchedules || []); + setAccessSchedules(user.Policy?.AccessSchedules || []); loading.hide(); - }, [loadAllowedTags, loadBlockedTags, loadUnratedItems, populateRatings, renderAccessSchedule]); + }, [loadAllowedTags, loadBlockedTags, loadUnratedItems, populateRatings]); const loadData = useCallback(() => { if (!userId) { @@ -285,7 +263,7 @@ const UserParentalControl = () => { } schedules[index] = updatedSchedule; - renderAccessSchedule(schedules); + setAccessSchedules(schedules); }).catch(() => { // access schedule closed }); @@ -389,7 +367,26 @@ const UserParentalControl = () => { }); (page.querySelector('.userParentalControlForm') as HTMLFormElement).addEventListener('submit', onSubmit); - }, [loadAllowedTags, loadBlockedTags, loadData, renderAccessSchedule]); + }, [loadAllowedTags, loadBlockedTags, loadData, userId]); + + useEffect(() => { + const page = element.current; + + if (!page) { + console.error('[userparentalcontrol] Unexpected null page reference'); + return; + } + + const accessScheduleList = page.querySelector('.accessScheduleList') as HTMLDivElement; + + for (const btnDelete of accessScheduleList.querySelectorAll('.btnDelete')) { + btnDelete.addEventListener('click', function () { + const index = parseInt(btnDelete.getAttribute('data-index') ?? '0', 10); + const newindex = accessSchedules.filter((_e, i) => i != index); + setAccessSchedules(newindex); + }); + } + }, [accessSchedules]); const optionMaxParentalRating = () => { let content = ''; diff --git a/src/elements/IconButtonElement.tsx b/src/elements/IconButtonElement.tsx index da176e7fc6..93e3fd2b87 100644 --- a/src/elements/IconButtonElement.tsx +++ b/src/elements/IconButtonElement.tsx @@ -37,7 +37,7 @@ const IconButtonElement: FunctionComponent = ({ is, id, className, title className: className, title: title ? `title="${globalize.translate(title)}"` : '', icon: icon, - dataIndex: dataIndex ? `data-index="${dataIndex}"` : '', + dataIndex: (dataIndex || dataIndex === 0) ? `data-index="${dataIndex}"` : '', dataTag: dataTag ? `data-tag="${dataTag}"` : '', dataProfileid: dataProfileid ? `data-profileid="${dataProfileid}"` : '' })} From a7672eb338cf556314da469793243d68783d27ad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:30:28 +0000 Subject: [PATCH 043/120] Update Sass to v1.79.4 --- package-lock.json | 360 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 182 insertions(+), 182 deletions(-) diff --git a/package-lock.json b/package-lock.json index 16cb15f5ca..0992cbb853 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,7 +110,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", - "sass": "1.79.3", + "sass": "1.79.4", "sass-loader": "16.0.2", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -136,7 +136,7 @@ "yarn": "YARN NO LONGER USED - use npm instead." }, "optionalDependencies": { - "sass-embedded": "1.79.3" + "sass-embedded": "1.79.4" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -20195,9 +20195,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz", - "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz", + "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==", "dev": true, "license": "MIT", "dependencies": { @@ -20213,9 +20213,9 @@ } }, "node_modules/sass-embedded": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.3.tgz", - "integrity": "sha512-zUve2qCn6uSOMZnZazLzrDWq//OQWFle5G45vJjv3B/ADIA3TXVgqHqN3u7D2vGajOGREz0HN5nhliSoKmQqZA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.4.tgz", + "integrity": "sha512-3AATrtStMgxYjkit02/Ix8vx/P7qderYG6DHjmehfk5jiw53OaWVScmcGJSwp/d77kAkxDQ+Y0r+79VynGmrkw==", "license": "MIT", "optional": true, "dependencies": { @@ -20234,32 +20234,32 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.79.3", - "sass-embedded-android-arm64": "1.79.3", - "sass-embedded-android-ia32": "1.79.3", - "sass-embedded-android-riscv64": "1.79.3", - "sass-embedded-android-x64": "1.79.3", - "sass-embedded-darwin-arm64": "1.79.3", - "sass-embedded-darwin-x64": "1.79.3", - "sass-embedded-linux-arm": "1.79.3", - "sass-embedded-linux-arm64": "1.79.3", - "sass-embedded-linux-ia32": "1.79.3", - "sass-embedded-linux-musl-arm": "1.79.3", - "sass-embedded-linux-musl-arm64": "1.79.3", - "sass-embedded-linux-musl-ia32": "1.79.3", - "sass-embedded-linux-musl-riscv64": "1.79.3", - "sass-embedded-linux-musl-x64": "1.79.3", - "sass-embedded-linux-riscv64": "1.79.3", - "sass-embedded-linux-x64": "1.79.3", - "sass-embedded-win32-arm64": "1.79.3", - "sass-embedded-win32-ia32": "1.79.3", - "sass-embedded-win32-x64": "1.79.3" + "sass-embedded-android-arm": "1.79.4", + "sass-embedded-android-arm64": "1.79.4", + "sass-embedded-android-ia32": "1.79.4", + "sass-embedded-android-riscv64": "1.79.4", + "sass-embedded-android-x64": "1.79.4", + "sass-embedded-darwin-arm64": "1.79.4", + "sass-embedded-darwin-x64": "1.79.4", + "sass-embedded-linux-arm": "1.79.4", + "sass-embedded-linux-arm64": "1.79.4", + "sass-embedded-linux-ia32": "1.79.4", + "sass-embedded-linux-musl-arm": "1.79.4", + "sass-embedded-linux-musl-arm64": "1.79.4", + "sass-embedded-linux-musl-ia32": "1.79.4", + "sass-embedded-linux-musl-riscv64": "1.79.4", + "sass-embedded-linux-musl-x64": "1.79.4", + "sass-embedded-linux-riscv64": "1.79.4", + "sass-embedded-linux-x64": "1.79.4", + "sass-embedded-win32-arm64": "1.79.4", + "sass-embedded-win32-ia32": "1.79.4", + "sass-embedded-win32-x64": "1.79.4" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.3.tgz", - "integrity": "sha512-rrdaVDkKBLUqzdqlBFamUbeuLG+8r/QLXHIgz4qPhIDqceJH6ds0Vzrae9Ef6DhYfMatOg2xiScdatwQ8Yl/hA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.4.tgz", + "integrity": "sha512-YOVpDGDcwWUQvktpJhYo4zOkknDpdX6ALpaeHDTX6GBUvnZfx+Widh76v+QFUhiJQ/I/hndXg1jv/PKilOHRrw==", "cpu": [ "arm" ], @@ -20273,9 +20273,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.3.tgz", - "integrity": "sha512-Wqm/WKHIDQl7w7eIQRO/GQ7EXfnwNpipCyJL7Xtb15vSAV64J4/0D/esy6GOPlVG+qcu8/XN8NV7Bf5wZ2ExUw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.4.tgz", + "integrity": "sha512-0JAZ8TtXYv9yI3Yasaq03xvo7DLJOmD+Exb30oJKxXcWTAV9TB0ZWKoIRsFxbCyPxyn7ouxkaCEXQtaTRKrmfw==", "cpu": [ "arm64" ], @@ -20289,9 +20289,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.3.tgz", - "integrity": "sha512-6rDmH0O7hjBP04/xBAFzSYYMU/7MrQYCak4541BZIbIfa2uw0x/8+mB7lZjdgFsBrFjcpdVCPhZPUE6Y50c00A==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.4.tgz", + "integrity": "sha512-IjO3RoyvNN84ZyfAR5s/a8TIdNPfClb7CLGrswB3BN/NElYIJUJMVHD6+Y8W9QwBIZ8DrK1IdLFSTV8nn82xMA==", "cpu": [ "ia32" ], @@ -20305,9 +20305,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.3.tgz", - "integrity": "sha512-B/PgB0AfTCvOlF1g89raJTwTXIUQUM3OXDWqEKIlJEZM1Yao91i8ZkyrFkDMzT4G5sETy4o8pgK+qE9+7bFlug==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.4.tgz", + "integrity": "sha512-uOT8nXmKxSwuIdcqvElVWBFcm/+YcIvmwfoKbpuuSOSxUe9eqFzxo+fk7ILhynzf6FBlvRUH5DcjGj+sXtCc3w==", "cpu": [ "riscv64" ], @@ -20321,9 +20321,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.3.tgz", - "integrity": "sha512-a5cpo9Yw4xnX32Uo3WfMZLaTVnI/h2n7U3K3eTygyj707yhGkUB0i+qxldzCw8MmKivIu9irG6O4kmnRjW6f7g==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.4.tgz", + "integrity": "sha512-W2FQoj3Z2J2DirNs3xSBVvrhMuqLnsqvOPulxOkhL/074+faKOZZnPx2tZ5zsHbY97SonciiU0SV0mm98xI42w==", "cpu": [ "x64" ], @@ -20337,9 +20337,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.3.tgz", - "integrity": "sha512-imafD0nlVz5FJhqBqxUbG5rK4E3cu1GxhMZ5VhKm0k4t5jFQo+3OjN7sHT4Ee2Mk1g8sjr5dtq5enDU4fs6lXA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.4.tgz", + "integrity": "sha512-pcYtbN1VUAAcfgyHeX8ySndDWGjIvcq6rldduktPbGGuAlEWFDfnwjTbv0hS945ggdzZ6TFnaFlLEDr0SjKzBA==", "cpu": [ "arm64" ], @@ -20353,9 +20353,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.3.tgz", - "integrity": "sha512-pjciT1FcMUMA4rWdpyZYSwMOvxk5JP7R6vy7TzvqkUEqXxP9FTflYnAiwgYUDVTpngHHqRxTjdyW+e+h2L9dHw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.4.tgz", + "integrity": "sha512-ir8CFTfc4JLx/qCP8LK1/3pWv35nRyAQkUK7lBIKM6hWzztt64gcno9rZIk4SpHr7Z/Bp1IYWWRS4ZT+4HmsbA==", "cpu": [ "x64" ], @@ -20369,9 +20369,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.3.tgz", - "integrity": "sha512-n0bDtzABPE5YaL9wSLxNPiQMl1zArsGblHJyED6fEHz41m+OkCTopfO8IVjcf+MBrK/j11gonxiIGWO+fNOxvg==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.4.tgz", + "integrity": "sha512-H/XEE3rY7c+tY0qDaELjPjC6VheAhBo1tPJQ6UHoBEf8xrbT/RT3dWiIS8grp9Vk54RCn05BEB/+POaljvvKGA==", "cpu": [ "arm" ], @@ -20385,9 +20385,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.3.tgz", - "integrity": "sha512-ODo8ghwk6KHxchgwxq4CwgfYwWdreEbsQoukeEgRKxHcuLB9XF6tol9pGlfrc8sYox48Vp5WDCZuzgoo6rJ6tg==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.4.tgz", + "integrity": "sha512-XIVn2mCuA422SR2kmKjF6jhjMs1Vrt1DbZ/ktSp+eR0sU4ugu2htg45GajiUFSKKRj7Sc+cBdThq1zPPsDLf1w==", "cpu": [ "arm64" ], @@ -20401,9 +20401,9 @@ } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.3.tgz", - "integrity": "sha512-oC3rUyIE6mEm2etsc4CuNu6IVmB6CoSM4KsubxzCD3S37QFXq8wYbI0t9iiDdTkKb5Iu+vUyhn+tYJRVHg0tvw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.4.tgz", + "integrity": "sha512-3nqZxV4nuUTb1ahLexVl4hsnx1KKwiGdHEf1xHWTZai6fYFMcwyNPrHySCQzFHqb5xiqSpPzzrKjuDhF6+guuQ==", "cpu": [ "ia32" ], @@ -20417,9 +20417,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.3.tgz", - "integrity": "sha512-TOUYMtDs9xoMsJSEEr7NjtcVCqVpg1eSOQHXXruJ1kiYfxwmHrCYTjTLoefbZ29mWqIq8NUaXJG4rZNDK6NzRA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.4.tgz", + "integrity": "sha512-HnbU1DEiQdUayioNzxh2WlbTEgQRBPTgIIvof8J63QLmVItUqE7EkWYkSUy4RhO+8NsuN9wzGmGTzFBvTImU7g==", "cpu": [ "arm" ], @@ -20433,9 +20433,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.3.tgz", - "integrity": "sha512-Q9/5lsrK/JnQci3DwxZ9PGIIrRxuo/bySv+gbyVp8Kb7gdkZcEsY7HkxaBJfwVEwpZSGAyCviyZDHDMILjliOw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.4.tgz", + "integrity": "sha512-C6qX06waPEfDgOHR8jXoYxl0EtIXOyBDyyonrLO3StRjWjGx7XMQj2hA/KXSsV+Hr71fBOsaViosqWXPzTbEiQ==", "cpu": [ "arm64" ], @@ -20449,9 +20449,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.3.tgz", - "integrity": "sha512-T2uERh3gs9eWUzdkDadPuYbelQJQLZyX8myutUd4fxyrQ7ToQRBwcMoynEjl48DBHnM0oRiJUHrV9uFuJ+fmRA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.4.tgz", + "integrity": "sha512-y5b0fdOPWyhj4c+mc88GvQiC5onRH1V0iNaWNjsiZ+L4hHje6T98nDLrCJn0fz5GQnXjyLCLZduMWbfV0QjHGg==", "cpu": [ "ia32" ], @@ -20465,9 +20465,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.3.tgz", - "integrity": "sha512-XTuYtTBPFeEjydS2GsIUkMztzXIiz13noknE7m1yAbVxOchu9jD9FCLAdK9pVPPki+9BiLSxsutYwOcQn8atqQ==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.4.tgz", + "integrity": "sha512-G2M5ADMV9SqnkwpM0S+UzDz7xR2njCOhofku/sDMZABzAjQQWTsAykKoGmzlT98fTw2HbNhb6u74umf2WLhCfw==", "cpu": [ "riscv64" ], @@ -20481,9 +20481,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.3.tgz", - "integrity": "sha512-gDHfaPlxT/XQTMbfb2y+U6zDMuI8pfapVXTYlUrgYhKH2KoICclIvahhjFii5i5+1dHpfGzjgYKBqI3nvZsYFg==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.4.tgz", + "integrity": "sha512-kQm8dCU3DXf7DtUGWYPiPs03KJYKvFeiZJHhSx993DCM8D2b0wCXWky0S0Z46gf1sEur0SN4Lvnt1WczTqxIBw==", "cpu": [ "x64" ], @@ -20497,9 +20497,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.3.tgz", - "integrity": "sha512-NONTa//1ZfxA87+Zjp3rabL+Z9gM67FJBdktRKXXMBAce5i8eCj/eqJGUOGPjYxtvxtQw77cex0qMr9SZnX6ww==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.4.tgz", + "integrity": "sha512-GaTI/mXYWYSzG5wxtM4H2cozLpATyh+4l+rO9FFKOL8e1sUOLAzTeRdU2nSBYCuRqsxRuTZIwCXhSz9Q3NRuNA==", "cpu": [ "riscv64" ], @@ -20513,9 +20513,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.3.tgz", - "integrity": "sha512-drlUqMMw222+f/T5sNrIAv+z0vQwLkO4zAlDmf4biLdWIloPP/3plTodAkMyfagNcvA8jG2jN414pJXBI3zK6w==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.4.tgz", + "integrity": "sha512-f9laGkqHgC01h99Qt4LsOV+OLMffjvUcTu14hYWqMS9QVX5a4ihMwpf1NoAtTUytb7cVF3rYY/NVGuXt6G3ppQ==", "cpu": [ "x64" ], @@ -20529,9 +20529,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.3.tgz", - "integrity": "sha512-gYz0IUb0fLkHUbhq+HR52wvQfG75Zu1s48/v48TqC+b04H/01k2eiawp/Ec1f+lhpIL/pr5+n5jWR6CjkxPdnQ==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.4.tgz", + "integrity": "sha512-cidBvtaA2cJ6dNlwQEa8qak+ezypurzKs0h0QAHLH324+j/6Jum7LCnQhZRPYJBFjHl+WYd7KwzPnJ2X5USWnQ==", "cpu": [ "arm64" ], @@ -20545,9 +20545,9 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.3.tgz", - "integrity": "sha512-fbDTyzbqRc+xCWZ+YHSDt2WvGk5PW2K0SjyHuwes/Fls1+wdO4iHIukE/pD+HSWytYrtCqhe7EFq5Ug5HxGTLg==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.4.tgz", + "integrity": "sha512-hexdmNTIZGTKNTzlMcdvEXzYuxOJcY89zqgsf45aQ2YMy4y2M8dTOxRI/Vz7p4iRxVp1Jow6LCtaLHrNI2Ordg==", "cpu": [ "ia32" ], @@ -20561,9 +20561,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.3.tgz", - "integrity": "sha512-vvfr6wyCaHvdQbGS8UkYab6DXc1FKJRYFT5aFE3QTVqbzCqmJ5tf80E4+gvB99nljLtMjwKR1d332iWI9KDLhw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.4.tgz", + "integrity": "sha512-73yrpiWIbti6DkxhWURklkgSLYKfU9itDmvHxB+oYSb4vQveIApqTwSyTOuIUb/6Da/EsgEpdJ4Lbj4sLaMZWA==", "cpu": [ "x64" ], @@ -20660,9 +20660,9 @@ } }, "node_modules/sass/node_modules/readdirp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", - "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, "license": "MIT", "engines": { @@ -39704,9 +39704,9 @@ "dev": true }, "sass": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz", - "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz", + "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==", "dev": true, "requires": { "chokidar": "^4.0.0", @@ -39724,17 +39724,17 @@ } }, "readdirp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", - "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true } } }, "sass-embedded": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.3.tgz", - "integrity": "sha512-zUve2qCn6uSOMZnZazLzrDWq//OQWFle5G45vJjv3B/ADIA3TXVgqHqN3u7D2vGajOGREz0HN5nhliSoKmQqZA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.4.tgz", + "integrity": "sha512-3AATrtStMgxYjkit02/Ix8vx/P7qderYG6DHjmehfk5jiw53OaWVScmcGJSwp/d77kAkxDQ+Y0r+79VynGmrkw==", "optional": true, "requires": { "@bufbuild/protobuf": "^2.0.0", @@ -39742,26 +39742,26 @@ "colorjs.io": "^0.5.0", "immutable": "^4.0.0", "rxjs": "^7.4.0", - "sass-embedded-android-arm": "1.79.3", - "sass-embedded-android-arm64": "1.79.3", - "sass-embedded-android-ia32": "1.79.3", - "sass-embedded-android-riscv64": "1.79.3", - "sass-embedded-android-x64": "1.79.3", - "sass-embedded-darwin-arm64": "1.79.3", - "sass-embedded-darwin-x64": "1.79.3", - "sass-embedded-linux-arm": "1.79.3", - "sass-embedded-linux-arm64": "1.79.3", - "sass-embedded-linux-ia32": "1.79.3", - "sass-embedded-linux-musl-arm": "1.79.3", - "sass-embedded-linux-musl-arm64": "1.79.3", - "sass-embedded-linux-musl-ia32": "1.79.3", - "sass-embedded-linux-musl-riscv64": "1.79.3", - "sass-embedded-linux-musl-x64": "1.79.3", - "sass-embedded-linux-riscv64": "1.79.3", - "sass-embedded-linux-x64": "1.79.3", - "sass-embedded-win32-arm64": "1.79.3", - "sass-embedded-win32-ia32": "1.79.3", - "sass-embedded-win32-x64": "1.79.3", + "sass-embedded-android-arm": "1.79.4", + "sass-embedded-android-arm64": "1.79.4", + "sass-embedded-android-ia32": "1.79.4", + "sass-embedded-android-riscv64": "1.79.4", + "sass-embedded-android-x64": "1.79.4", + "sass-embedded-darwin-arm64": "1.79.4", + "sass-embedded-darwin-x64": "1.79.4", + "sass-embedded-linux-arm": "1.79.4", + "sass-embedded-linux-arm64": "1.79.4", + "sass-embedded-linux-ia32": "1.79.4", + "sass-embedded-linux-musl-arm": "1.79.4", + "sass-embedded-linux-musl-arm64": "1.79.4", + "sass-embedded-linux-musl-ia32": "1.79.4", + "sass-embedded-linux-musl-riscv64": "1.79.4", + "sass-embedded-linux-musl-x64": "1.79.4", + "sass-embedded-linux-riscv64": "1.79.4", + "sass-embedded-linux-x64": "1.79.4", + "sass-embedded-win32-arm64": "1.79.4", + "sass-embedded-win32-ia32": "1.79.4", + "sass-embedded-win32-x64": "1.79.4", "supports-color": "^8.1.1", "varint": "^6.0.0" }, @@ -39784,123 +39784,123 @@ } }, "sass-embedded-android-arm": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.3.tgz", - "integrity": "sha512-rrdaVDkKBLUqzdqlBFamUbeuLG+8r/QLXHIgz4qPhIDqceJH6ds0Vzrae9Ef6DhYfMatOg2xiScdatwQ8Yl/hA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.4.tgz", + "integrity": "sha512-YOVpDGDcwWUQvktpJhYo4zOkknDpdX6ALpaeHDTX6GBUvnZfx+Widh76v+QFUhiJQ/I/hndXg1jv/PKilOHRrw==", "optional": true }, "sass-embedded-android-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.3.tgz", - "integrity": "sha512-Wqm/WKHIDQl7w7eIQRO/GQ7EXfnwNpipCyJL7Xtb15vSAV64J4/0D/esy6GOPlVG+qcu8/XN8NV7Bf5wZ2ExUw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.4.tgz", + "integrity": "sha512-0JAZ8TtXYv9yI3Yasaq03xvo7DLJOmD+Exb30oJKxXcWTAV9TB0ZWKoIRsFxbCyPxyn7ouxkaCEXQtaTRKrmfw==", "optional": true }, "sass-embedded-android-ia32": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.3.tgz", - "integrity": "sha512-6rDmH0O7hjBP04/xBAFzSYYMU/7MrQYCak4541BZIbIfa2uw0x/8+mB7lZjdgFsBrFjcpdVCPhZPUE6Y50c00A==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.4.tgz", + "integrity": "sha512-IjO3RoyvNN84ZyfAR5s/a8TIdNPfClb7CLGrswB3BN/NElYIJUJMVHD6+Y8W9QwBIZ8DrK1IdLFSTV8nn82xMA==", "optional": true }, "sass-embedded-android-riscv64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.3.tgz", - "integrity": "sha512-B/PgB0AfTCvOlF1g89raJTwTXIUQUM3OXDWqEKIlJEZM1Yao91i8ZkyrFkDMzT4G5sETy4o8pgK+qE9+7bFlug==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.4.tgz", + "integrity": "sha512-uOT8nXmKxSwuIdcqvElVWBFcm/+YcIvmwfoKbpuuSOSxUe9eqFzxo+fk7ILhynzf6FBlvRUH5DcjGj+sXtCc3w==", "optional": true }, "sass-embedded-android-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.3.tgz", - "integrity": "sha512-a5cpo9Yw4xnX32Uo3WfMZLaTVnI/h2n7U3K3eTygyj707yhGkUB0i+qxldzCw8MmKivIu9irG6O4kmnRjW6f7g==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.4.tgz", + "integrity": "sha512-W2FQoj3Z2J2DirNs3xSBVvrhMuqLnsqvOPulxOkhL/074+faKOZZnPx2tZ5zsHbY97SonciiU0SV0mm98xI42w==", "optional": true }, "sass-embedded-darwin-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.3.tgz", - "integrity": "sha512-imafD0nlVz5FJhqBqxUbG5rK4E3cu1GxhMZ5VhKm0k4t5jFQo+3OjN7sHT4Ee2Mk1g8sjr5dtq5enDU4fs6lXA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.4.tgz", + "integrity": "sha512-pcYtbN1VUAAcfgyHeX8ySndDWGjIvcq6rldduktPbGGuAlEWFDfnwjTbv0hS945ggdzZ6TFnaFlLEDr0SjKzBA==", "optional": true }, "sass-embedded-darwin-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.3.tgz", - "integrity": "sha512-pjciT1FcMUMA4rWdpyZYSwMOvxk5JP7R6vy7TzvqkUEqXxP9FTflYnAiwgYUDVTpngHHqRxTjdyW+e+h2L9dHw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.4.tgz", + "integrity": "sha512-ir8CFTfc4JLx/qCP8LK1/3pWv35nRyAQkUK7lBIKM6hWzztt64gcno9rZIk4SpHr7Z/Bp1IYWWRS4ZT+4HmsbA==", "optional": true }, "sass-embedded-linux-arm": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.3.tgz", - "integrity": "sha512-n0bDtzABPE5YaL9wSLxNPiQMl1zArsGblHJyED6fEHz41m+OkCTopfO8IVjcf+MBrK/j11gonxiIGWO+fNOxvg==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.4.tgz", + "integrity": "sha512-H/XEE3rY7c+tY0qDaELjPjC6VheAhBo1tPJQ6UHoBEf8xrbT/RT3dWiIS8grp9Vk54RCn05BEB/+POaljvvKGA==", "optional": true }, "sass-embedded-linux-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.3.tgz", - "integrity": "sha512-ODo8ghwk6KHxchgwxq4CwgfYwWdreEbsQoukeEgRKxHcuLB9XF6tol9pGlfrc8sYox48Vp5WDCZuzgoo6rJ6tg==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.4.tgz", + "integrity": "sha512-XIVn2mCuA422SR2kmKjF6jhjMs1Vrt1DbZ/ktSp+eR0sU4ugu2htg45GajiUFSKKRj7Sc+cBdThq1zPPsDLf1w==", "optional": true }, "sass-embedded-linux-ia32": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.3.tgz", - "integrity": "sha512-oC3rUyIE6mEm2etsc4CuNu6IVmB6CoSM4KsubxzCD3S37QFXq8wYbI0t9iiDdTkKb5Iu+vUyhn+tYJRVHg0tvw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.4.tgz", + "integrity": "sha512-3nqZxV4nuUTb1ahLexVl4hsnx1KKwiGdHEf1xHWTZai6fYFMcwyNPrHySCQzFHqb5xiqSpPzzrKjuDhF6+guuQ==", "optional": true }, "sass-embedded-linux-musl-arm": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.3.tgz", - "integrity": "sha512-TOUYMtDs9xoMsJSEEr7NjtcVCqVpg1eSOQHXXruJ1kiYfxwmHrCYTjTLoefbZ29mWqIq8NUaXJG4rZNDK6NzRA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.4.tgz", + "integrity": "sha512-HnbU1DEiQdUayioNzxh2WlbTEgQRBPTgIIvof8J63QLmVItUqE7EkWYkSUy4RhO+8NsuN9wzGmGTzFBvTImU7g==", "optional": true }, "sass-embedded-linux-musl-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.3.tgz", - "integrity": "sha512-Q9/5lsrK/JnQci3DwxZ9PGIIrRxuo/bySv+gbyVp8Kb7gdkZcEsY7HkxaBJfwVEwpZSGAyCviyZDHDMILjliOw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.4.tgz", + "integrity": "sha512-C6qX06waPEfDgOHR8jXoYxl0EtIXOyBDyyonrLO3StRjWjGx7XMQj2hA/KXSsV+Hr71fBOsaViosqWXPzTbEiQ==", "optional": true }, "sass-embedded-linux-musl-ia32": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.3.tgz", - "integrity": "sha512-T2uERh3gs9eWUzdkDadPuYbelQJQLZyX8myutUd4fxyrQ7ToQRBwcMoynEjl48DBHnM0oRiJUHrV9uFuJ+fmRA==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.4.tgz", + "integrity": "sha512-y5b0fdOPWyhj4c+mc88GvQiC5onRH1V0iNaWNjsiZ+L4hHje6T98nDLrCJn0fz5GQnXjyLCLZduMWbfV0QjHGg==", "optional": true }, "sass-embedded-linux-musl-riscv64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.3.tgz", - "integrity": "sha512-XTuYtTBPFeEjydS2GsIUkMztzXIiz13noknE7m1yAbVxOchu9jD9FCLAdK9pVPPki+9BiLSxsutYwOcQn8atqQ==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.4.tgz", + "integrity": "sha512-G2M5ADMV9SqnkwpM0S+UzDz7xR2njCOhofku/sDMZABzAjQQWTsAykKoGmzlT98fTw2HbNhb6u74umf2WLhCfw==", "optional": true }, "sass-embedded-linux-musl-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.3.tgz", - "integrity": "sha512-gDHfaPlxT/XQTMbfb2y+U6zDMuI8pfapVXTYlUrgYhKH2KoICclIvahhjFii5i5+1dHpfGzjgYKBqI3nvZsYFg==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.4.tgz", + "integrity": "sha512-kQm8dCU3DXf7DtUGWYPiPs03KJYKvFeiZJHhSx993DCM8D2b0wCXWky0S0Z46gf1sEur0SN4Lvnt1WczTqxIBw==", "optional": true }, "sass-embedded-linux-riscv64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.3.tgz", - "integrity": "sha512-NONTa//1ZfxA87+Zjp3rabL+Z9gM67FJBdktRKXXMBAce5i8eCj/eqJGUOGPjYxtvxtQw77cex0qMr9SZnX6ww==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.4.tgz", + "integrity": "sha512-GaTI/mXYWYSzG5wxtM4H2cozLpATyh+4l+rO9FFKOL8e1sUOLAzTeRdU2nSBYCuRqsxRuTZIwCXhSz9Q3NRuNA==", "optional": true }, "sass-embedded-linux-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.3.tgz", - "integrity": "sha512-drlUqMMw222+f/T5sNrIAv+z0vQwLkO4zAlDmf4biLdWIloPP/3plTodAkMyfagNcvA8jG2jN414pJXBI3zK6w==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.4.tgz", + "integrity": "sha512-f9laGkqHgC01h99Qt4LsOV+OLMffjvUcTu14hYWqMS9QVX5a4ihMwpf1NoAtTUytb7cVF3rYY/NVGuXt6G3ppQ==", "optional": true }, "sass-embedded-win32-arm64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.3.tgz", - "integrity": "sha512-gYz0IUb0fLkHUbhq+HR52wvQfG75Zu1s48/v48TqC+b04H/01k2eiawp/Ec1f+lhpIL/pr5+n5jWR6CjkxPdnQ==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.4.tgz", + "integrity": "sha512-cidBvtaA2cJ6dNlwQEa8qak+ezypurzKs0h0QAHLH324+j/6Jum7LCnQhZRPYJBFjHl+WYd7KwzPnJ2X5USWnQ==", "optional": true }, "sass-embedded-win32-ia32": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.3.tgz", - "integrity": "sha512-fbDTyzbqRc+xCWZ+YHSDt2WvGk5PW2K0SjyHuwes/Fls1+wdO4iHIukE/pD+HSWytYrtCqhe7EFq5Ug5HxGTLg==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.4.tgz", + "integrity": "sha512-hexdmNTIZGTKNTzlMcdvEXzYuxOJcY89zqgsf45aQ2YMy4y2M8dTOxRI/Vz7p4iRxVp1Jow6LCtaLHrNI2Ordg==", "optional": true }, "sass-embedded-win32-x64": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.3.tgz", - "integrity": "sha512-vvfr6wyCaHvdQbGS8UkYab6DXc1FKJRYFT5aFE3QTVqbzCqmJ5tf80E4+gvB99nljLtMjwKR1d332iWI9KDLhw==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.4.tgz", + "integrity": "sha512-73yrpiWIbti6DkxhWURklkgSLYKfU9itDmvHxB+oYSb4vQveIApqTwSyTOuIUb/6Da/EsgEpdJ4Lbj4sLaMZWA==", "optional": true }, "sass-loader": { diff --git a/package.json b/package.json index 56239095fe..a58a6d6d83 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", - "sass": "1.79.3", + "sass": "1.79.4", "sass-loader": "16.0.2", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -127,7 +127,7 @@ "whatwg-fetch": "3.6.20" }, "optionalDependencies": { - "sass-embedded": "1.79.3" + "sass-embedded": "1.79.4" }, "browserslist": [ "last 2 Firefox versions", From 6c3ea5a4b7977f8e3415bca1065d37f13a79d704 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:30:53 +0000 Subject: [PATCH 044/120] Update dependency @types/react to v18.3.11 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 16cb15f5ca..31b387e5eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,7 +77,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.8", + "@types/react": "18.3.11", "@types/react-dom": "18.3.0", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -6549,9 +6549,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz", - "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==", + "version": "18.3.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", + "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -30214,9 +30214,9 @@ "dev": true }, "@types/react": { - "version": "18.3.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz", - "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==", + "version": "18.3.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", + "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" diff --git a/package.json b/package.json index 56239095fe..c0f652c971 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.8", + "@types/react": "18.3.11", "@types/react-dom": "18.3.0", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", From 6c386793ca3745323a8649fc19c20570e75c18c0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:37:40 +0000 Subject: [PATCH 045/120] Update Babel to v7.25.7 --- package-lock.json | 2229 ++++++++++++++++++++++----------------------- package.json | 8 +- 2 files changed, 1115 insertions(+), 1122 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae689ece63..5bd15df298 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66,10 +66,10 @@ "whatwg-fetch": "3.6.20" }, "devDependencies": { - "@babel/core": "7.25.2", - "@babel/plugin-transform-modules-umd": "7.24.7", - "@babel/preset-env": "7.25.4", - "@babel/preset-react": "7.24.7", + "@babel/core": "7.25.7", + "@babel/plugin-transform-modules-umd": "7.25.7", + "@babel/preset-env": "7.25.7", + "@babel/preset-react": "7.25.7", "@eslint-community/eslint-plugin-eslint-comments": "4.4.0", "@stylistic/eslint-plugin": "2.8.0", "@types/dompurify": "3.0.5", @@ -163,12 +163,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -176,9 +176,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", "dev": true, "license": "MIT", "engines": { @@ -186,22 +186,22 @@ } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", + "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -224,57 +224,57 @@ "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -298,18 +298,18 @@ "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", "semver": "^6.3.1" }, "engines": { @@ -320,14 +320,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" }, "engines": { @@ -355,43 +355,43 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -401,22 +401,22 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", "dev": true, "license": "MIT", "engines": { @@ -424,15 +424,15 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -442,15 +442,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -460,55 +460,55 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "dev": true, "license": "MIT", "engines": { @@ -516,41 +516,41 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -560,12 +560,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.25.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -575,14 +575,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -592,13 +592,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -608,13 +608,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -624,15 +624,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -642,14 +642,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -734,13 +734,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -750,13 +750,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", + "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -790,13 +790,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz", + "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -924,13 +924,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -940,16 +940,16 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", - "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.7.tgz", + "integrity": "sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.4" + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -959,15 +959,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", + "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -977,13 +977,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -993,13 +993,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1009,14 +1009,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1026,14 +1026,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.7.tgz", + "integrity": "sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1044,17 +1044,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", "globals": "^11.1.0" }, "engines": { @@ -1065,14 +1065,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1082,13 +1082,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1098,14 +1098,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1115,13 +1115,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1131,14 +1131,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1148,13 +1148,13 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.7.tgz", + "integrity": "sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1165,14 +1165,14 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1182,13 +1182,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.7.tgz", + "integrity": "sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1199,14 +1199,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1216,15 +1216,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1234,13 +1234,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.7.tgz", + "integrity": "sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1251,13 +1251,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1267,13 +1267,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.7.tgz", + "integrity": "sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1284,13 +1284,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1300,14 +1300,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1317,15 +1317,15 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1335,16 +1335,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1354,14 +1354,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1371,14 +1371,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1388,13 +1388,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1404,13 +1404,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.7.tgz", + "integrity": "sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1421,13 +1421,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.7.tgz", + "integrity": "sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1438,16 +1438,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.7.tgz", + "integrity": "sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/plugin-transform-parameters": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1457,14 +1457,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1474,13 +1474,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.7.tgz", + "integrity": "sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1491,14 +1491,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.7.tgz", + "integrity": "sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1509,13 +1509,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1525,14 +1525,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1542,15 +1542,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.7.tgz", + "integrity": "sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1561,13 +1561,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1577,13 +1577,13 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz", + "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1593,17 +1593,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", - "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz", + "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-jsx": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1613,13 +1613,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz", + "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.7" + "@babel/plugin-transform-react-jsx": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1629,14 +1629,14 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz", + "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1646,13 +1646,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1663,13 +1663,13 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1679,13 +1679,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1695,14 +1695,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1712,13 +1712,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1728,13 +1728,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1744,13 +1744,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1760,13 +1760,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1776,14 +1776,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1793,14 +1793,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1810,14 +1810,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1827,29 +1827,29 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz", + "integrity": "sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/compat-data": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1861,60 +1861,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.7", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.7", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.7", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.7", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.7", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.7", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.7", + "@babel/plugin-transform-numeric-separator": "^7.25.7", + "@babel/plugin-transform-object-rest-spread": "^7.25.7", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.7", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "engines": { @@ -1939,18 +1939,18 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz", + "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-transform-react-display-name": "^7.25.7", + "@babel/plugin-transform-react-jsx": "^7.25.7", + "@babel/plugin-transform-react-jsx-development": "^7.25.7", + "@babel/plugin-transform-react-pure-annotations": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1959,12 +1959,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, "node_modules/@babel/runtime": { "version": "7.25.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", @@ -1978,30 +1972,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2010,13 +2004,13 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -8299,9 +8293,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -8319,8 +8313,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -8528,9 +8522,9 @@ "dev": true }, "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "version": "1.0.30001667", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", + "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", "dev": true, "funding": [ { @@ -10253,9 +10247,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", - "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "version": "1.5.34", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.34.tgz", + "integrity": "sha512-/TZAiChbAflBNjCg+VvstbcwAtIL/VdMFO3NgRFIzBjpvPzWOTIbbO8kNb6RwU4bt9TP7K+3KqBKw/lOU+Y+GA==", "dev": true, "license": "ISC" }, @@ -14802,14 +14796,15 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -19717,13 +19712,15 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -19777,15 +19774,16 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -19793,27 +19791,26 @@ "node": ">=4" } }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", + "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -25140,10 +25137,11 @@ } }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -25153,6 +25151,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -25162,10 +25161,11 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -25175,6 +25175,7 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -26774,36 +26775,36 @@ } }, "@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "requires": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" } }, "@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", "dev": true }, "@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", + "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -26820,44 +26821,44 @@ } }, "@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "requires": { - "@babel/types": "^7.25.6", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" } }, "@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", "dev": true, "requires": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", "dev": true, "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dev": true, "requires": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -26880,28 +26881,28 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", "semver": "^6.3.1" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" } }, @@ -26919,196 +26920,196 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", "dev": true, "requires": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", "dev": true, "requires": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" } }, "@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dev": true, "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", "dev": true, "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==" + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==" }, "@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==" }, "@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", "dev": true, "requires": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", "dev": true, "requires": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "requires": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", "requires": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.25.7" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" } }, "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-proposal-private-property-in-object": { @@ -27164,21 +27165,21 @@ } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", + "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-syntax-import-meta": { @@ -27200,12 +27201,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz", + "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -27291,560 +27292,560 @@ } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", - "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.7.tgz", + "integrity": "sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.4" + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", + "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.7.tgz", + "integrity": "sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.7.tgz", + "integrity": "sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.7.tgz", + "integrity": "sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" } }, "@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.7.tgz", + "integrity": "sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.7.tgz", + "integrity": "sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.7.tgz", + "integrity": "sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.7.tgz", + "integrity": "sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.7.tgz", + "integrity": "sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/plugin-transform-parameters": "^7.25.7" } }, "@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" } }, "@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.7.tgz", + "integrity": "sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.7.tgz", + "integrity": "sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.7.tgz", + "integrity": "sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz", + "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", - "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz", + "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-jsx": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz", + "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.24.7" + "@babel/plugin-transform-react-jsx": "^7.25.7" } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz", + "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "regenerator-transform": "^0.15.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/preset-env": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz", + "integrity": "sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==", "dev": true, "requires": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/compat-data": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -27856,60 +27857,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.7", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.7", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.7", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.7", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.7", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.7", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.7", + "@babel/plugin-transform-numeric-separator": "^7.25.7", + "@babel/plugin-transform-object-rest-spread": "^7.25.7", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.7", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" } }, @@ -27925,25 +27926,19 @@ } }, "@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz", + "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-transform-react-display-name": "^7.25.7", + "@babel/plugin-transform-react-jsx": "^7.25.7", + "@babel/plugin-transform-react-jsx-development": "^7.25.7", + "@babel/plugin-transform-react-pure-annotations": "^7.25.7" } }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, "@babel/runtime": { "version": "7.25.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", @@ -27953,36 +27948,36 @@ } }, "@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", "requires": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" } }, @@ -31483,13 +31478,13 @@ } }, "browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" } @@ -31642,9 +31637,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "version": "1.0.30001667", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", + "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", "dev": true }, "canvas": { @@ -32849,9 +32844,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", - "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "version": "1.5.34", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.34.tgz", + "integrity": "sha512-/TZAiChbAflBNjCg+VvstbcwAtIL/VdMFO3NgRFIzBjpvPzWOTIbbO8kNb6RwU4bt9TP7K+3KqBKw/lOU+Y+GA==", "dev": true }, "emoji-regex": { @@ -36136,9 +36131,9 @@ } }, "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==" }, "json-buffer": { "version": "3.0.1", @@ -39325,9 +39320,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -39370,34 +39365,32 @@ } }, "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "dev": true, "requires": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" } }, + "regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", + "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", "dev": true, "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } + "jsesc": "~3.0.2" } }, "relateurl": { @@ -43264,9 +43257,9 @@ } }, "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true }, "unicode-match-property-ecmascript": { @@ -43280,9 +43273,9 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true }, "unicode-property-aliases-ecmascript": { diff --git a/package.json b/package.json index 7afa75714e..ad13c2054a 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "repository": "https://github.com/jellyfin/jellyfin-web", "license": "GPL-2.0-or-later", "devDependencies": { - "@babel/core": "7.25.2", - "@babel/plugin-transform-modules-umd": "7.24.7", - "@babel/preset-env": "7.25.4", - "@babel/preset-react": "7.24.7", + "@babel/core": "7.25.7", + "@babel/plugin-transform-modules-umd": "7.25.7", + "@babel/preset-env": "7.25.7", + "@babel/preset-react": "7.25.7", "@eslint-community/eslint-plugin-eslint-comments": "4.4.0", "@stylistic/eslint-plugin": "2.8.0", "@types/dompurify": "3.0.5", From 880fb3c2015ecb96e9aa1531e3421ec4f30490f4 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:13:16 +0000 Subject: [PATCH 046/120] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 6033a8b8c9..4c1b9f67e8 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1966,5 +1966,7 @@ "MessageCancelTimerError": "Er is een fout opgetreden bij het annuleren van de tijdklok", "MessageSplitVersionsError": "Er is een fout opgetreden bij het splitsen van de versies", "MessageCancelSeriesTimerError": "Er is een fout opgetreden bij het annuleren van de serietijdklok", - "DateModified": "Datum gewijzigd" + "DateModified": "Datum gewijzigd", + "LabelScreensaverTimeHelp": "Het aantal seconden inactiviteit waarna de schermbeveiliging gestart wordt.", + "LabelScreensaverTime": "Wachttijd schermbeveiliging" } From c23d576c28c588fc3d6747dadcef05c0e2c3314d Mon Sep 17 00:00:00 2001 From: Kityn Date: Wed, 9 Oct 2024 15:11:22 +0000 Subject: [PATCH 047/120] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 9b63dd969d..1face327a4 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1967,5 +1967,7 @@ "MessageCancelSeriesTimerError": "Wystąpił błąd podczas anulowania timera serialu", "MessageCancelTimerError": "Wystąpił błąd podczas anulowania timera", "MessageSplitVersionsError": "Wystąpił błąd podczas podziału wersji", - "DateModified": "Data modyfikacji" + "DateModified": "Data modyfikacji", + "LabelScreensaverTime": "Czas wygaszacza ekranu", + "LabelScreensaverTimeHelp": "Ilość czasu bezczynności w sekundach, potrzebna do uruchomienia wygaszacza ekranu." } From fb2d4487f3bf64e62e9a0b0ccfda886e1eb2d878 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sun, 6 Oct 2024 16:10:27 +0300 Subject: [PATCH 048/120] Fix UI freeze when opening same path --- src/components/router/appRouter.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/components/router/appRouter.js b/src/components/router/appRouter.js index bbd2a8b241..6e156073b3 100644 --- a/src/components/router/appRouter.js +++ b/src/components/router/appRouter.js @@ -39,6 +39,9 @@ class AppRouter { constructor() { document.addEventListener('viewshow', () => this.onViewShow()); + this.lastPath = history.location.pathname + history.location.search; + this.listen(); + // TODO: Can this baseRoute logic be simplified? this.baseRoute = window.location.href.split('?')[0].replace(this.#getRequestFile(), ''); // support hashbang @@ -100,6 +103,20 @@ class AppRouter { return this.promiseShow; } + listen() { + history.listen(({ location }) => { + const normalizedPath = location.pathname.replace(/^!/, ''); + const fullPath = normalizedPath + location.search; + + if (fullPath === this.lastPath) { + console.debug('[appRouter] path did not change, resolving promise'); + this.onViewShow(); + } + + this.lastPath = fullPath; + }); + } + baseUrl() { return this.baseRoute; } From aa1304935555ca93a9c8f6628d3ad9da6e1db756 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:20:07 +0000 Subject: [PATCH 049/120] Update Vitest to v2.1.2 --- package-lock.json | 186 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 95 insertions(+), 95 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6cd3836e4..46bac74076 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,7 +83,7 @@ "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "2.1.1", + "@vitest/coverage-v8": "2.1.2", "autoprefixer": "10.4.20", "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", @@ -122,7 +122,7 @@ "stylelint-scss": "5.3.2", "ts-loader": "9.5.1", "typescript": "5.6.2", - "vitest": "2.1.1", + "vitest": "2.1.2", "webpack": "5.94.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", @@ -6966,9 +6966,9 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", - "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.2.tgz", + "integrity": "sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g==", "dev": true, "license": "MIT", "dependencies": { @@ -6989,8 +6989,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.1", - "vitest": "2.1.1" + "@vitest/browser": "2.1.2", + "vitest": "2.1.2" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -6999,14 +6999,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", - "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.2.tgz", + "integrity": "sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -7015,9 +7015,9 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", - "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.2.tgz", + "integrity": "sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==", "dev": true, "license": "MIT", "dependencies": { @@ -7029,7 +7029,7 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.1", + "@vitest/spy": "2.1.2", "msw": "^2.3.5", "vite": "^5.0.0" }, @@ -7043,9 +7043,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", - "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.2.tgz", + "integrity": "sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==", "dev": true, "license": "MIT", "dependencies": { @@ -7056,13 +7056,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", - "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.2.tgz", + "integrity": "sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.1", + "@vitest/utils": "2.1.2", "pathe": "^1.1.2" }, "funding": { @@ -7070,13 +7070,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", - "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.2.tgz", + "integrity": "sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "magic-string": "^0.30.11", "pathe": "^1.1.2" }, @@ -7085,9 +7085,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", - "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.2.tgz", + "integrity": "sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==", "dev": true, "license": "MIT", "dependencies": { @@ -7098,13 +7098,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", - "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.2.tgz", + "integrity": "sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -25610,9 +25610,9 @@ } }, "node_modules/vite-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", - "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.2.tgz", + "integrity": "sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -25632,19 +25632,19 @@ } }, "node_modules/vitest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", - "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.2.tgz", + "integrity": "sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.1", - "@vitest/mocker": "2.1.1", - "@vitest/pretty-format": "^2.1.1", - "@vitest/runner": "2.1.1", - "@vitest/snapshot": "2.1.1", - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/expect": "2.1.2", + "@vitest/mocker": "2.1.2", + "@vitest/pretty-format": "^2.1.2", + "@vitest/runner": "2.1.2", + "@vitest/snapshot": "2.1.2", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "debug": "^4.3.6", "magic-string": "^0.30.11", @@ -25655,7 +25655,7 @@ "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.1", + "vite-node": "2.1.2", "why-is-node-running": "^2.3.0" }, "bin": { @@ -25670,8 +25670,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.1", - "@vitest/ui": "2.1.1", + "@vitest/browser": "2.1.2", + "@vitest/ui": "2.1.2", "happy-dom": "*", "jsdom": "*" }, @@ -30493,9 +30493,9 @@ "dev": true }, "@vitest/coverage-v8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", - "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.2.tgz", + "integrity": "sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g==", "dev": true, "requires": { "@ampproject/remapping": "^2.3.0", @@ -30513,21 +30513,21 @@ } }, "@vitest/expect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", - "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.2.tgz", + "integrity": "sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==", "dev": true, "requires": { - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" } }, "@vitest/mocker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", - "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.2.tgz", + "integrity": "sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==", "dev": true, "requires": { "@vitest/spy": "^2.1.0-beta.1", @@ -30536,51 +30536,51 @@ } }, "@vitest/pretty-format": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", - "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.2.tgz", + "integrity": "sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==", "dev": true, "requires": { "tinyrainbow": "^1.2.0" } }, "@vitest/runner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", - "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.2.tgz", + "integrity": "sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==", "dev": true, "requires": { - "@vitest/utils": "2.1.1", + "@vitest/utils": "2.1.2", "pathe": "^1.1.2" } }, "@vitest/snapshot": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", - "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.2.tgz", + "integrity": "sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==", "dev": true, "requires": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "magic-string": "^0.30.11", "pathe": "^1.1.2" } }, "@vitest/spy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", - "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.2.tgz", + "integrity": "sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==", "dev": true, "requires": { "tinyspy": "^3.0.0" } }, "@vitest/utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", - "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.2.tgz", + "integrity": "sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==", "dev": true, "requires": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" } @@ -43572,9 +43572,9 @@ } }, "vite-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", - "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.2.tgz", + "integrity": "sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==", "dev": true, "requires": { "cac": "^6.7.14", @@ -43584,18 +43584,18 @@ } }, "vitest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", - "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.2.tgz", + "integrity": "sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==", "dev": true, "requires": { - "@vitest/expect": "2.1.1", - "@vitest/mocker": "2.1.1", - "@vitest/pretty-format": "^2.1.1", - "@vitest/runner": "2.1.1", - "@vitest/snapshot": "2.1.1", - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/expect": "2.1.2", + "@vitest/mocker": "2.1.2", + "@vitest/pretty-format": "^2.1.2", + "@vitest/runner": "2.1.2", + "@vitest/snapshot": "2.1.2", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "debug": "^4.3.6", "magic-string": "^0.30.11", @@ -43606,7 +43606,7 @@ "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.1", + "vite-node": "2.1.2", "why-is-node-running": "^2.3.0" } }, diff --git a/package.json b/package.json index daddbd8029..d5650b7796 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "2.1.1", + "@vitest/coverage-v8": "2.1.2", "autoprefixer": "10.4.20", "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", @@ -61,7 +61,7 @@ "stylelint-scss": "5.3.2", "ts-loader": "9.5.1", "typescript": "5.6.2", - "vitest": "2.1.1", + "vitest": "2.1.2", "webpack": "5.94.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", From 2eae71ca631dd8f2075e32ae409ebab10e48bdc3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:20:50 +0000 Subject: [PATCH 050/120] Update dependency eslint-plugin-react to v7.37.1 --- package-lock.json | 15 ++++++++------- package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6cd3836e4..a17016e23d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -97,7 +97,7 @@ "eslint-plugin-compat": "4.2.0", "eslint-plugin-import": "2.30.0", "eslint-plugin-jsx-a11y": "6.10.0", - "eslint-plugin-react": "7.36.1", + "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-sonarjs": "0.25.1", "expose-loader": "5.0.0", @@ -11009,10 +11009,11 @@ "license": "MIT" }, "node_modules/eslint-plugin-react": { - "version": "7.36.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", - "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", + "version": "7.37.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", + "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -33612,9 +33613,9 @@ } }, "eslint-plugin-react": { - "version": "7.36.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", - "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", + "version": "7.37.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", + "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", "dev": true, "requires": { "array-includes": "^3.1.8", diff --git a/package.json b/package.json index daddbd8029..84d83c4649 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "eslint-plugin-compat": "4.2.0", "eslint-plugin-import": "2.30.0", "eslint-plugin-jsx-a11y": "6.10.0", - "eslint-plugin-react": "7.36.1", + "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-sonarjs": "0.25.1", "expose-loader": "5.0.0", From 0d449a23eef61dfaf115fc47ddf31cf4450d7f11 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:26:11 +0000 Subject: [PATCH 051/120] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 4c1b9f67e8..d13ba225c2 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1968,5 +1968,7 @@ "MessageCancelSeriesTimerError": "Er is een fout opgetreden bij het annuleren van de serietijdklok", "DateModified": "Datum gewijzigd", "LabelScreensaverTimeHelp": "Het aantal seconden inactiviteit waarna de schermbeveiliging gestart wordt.", - "LabelScreensaverTime": "Wachttijd schermbeveiliging" + "LabelScreensaverTime": "Wachttijd schermbeveiliging", + "AlwaysBurnInSubtitleWhenTranscoding": "Ondertiteling altijd inbranden bij transcoderen", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Alle ondertiteling inbranden wanneer er getranscodeerd wordt. Dit verzekert dat ondertiteling gelijkloopt, maar verlaagt de transcodeersnelheid." } From 03ad81744f9517a823c44687b8689b72966fae58 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:31:09 +0000 Subject: [PATCH 052/120] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index d13ba225c2..984e897dda 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -46,7 +46,7 @@ "BoxRear": "Hoes (achterkant)", "Browse": "Bladeren", "MessageBrowsePluginCatalog": "Bekijk de plug-in-catalogus voor beschikbare plug-ins.", - "BurnSubtitlesHelp": "Bepaal of de server ondertiteling moet inbranden bij het transcoderen van video's. Dit heeft een nadelig effect op de systeemprestaties. Selecteer Automatisch om afbeelding-gebaseerde formaten (VobSub, PGS, SUB, IDX etc.) en bepaalde ASS- of SSA-ondertiteling in te branden.", + "BurnSubtitlesHelp": "Bepaal of de server ondertiteling moet inbranden. Dit heeft een nadelig effect op de systeemprestaties. Selecteer Automatisch om op afbeeldingen gebaseerde formaten (VobSub, PGS, SUB, IDX etc.) en bepaalde ASS- of SSA-ondertiteling in te branden.", "ButtonAddMediaLibrary": "Mediabibliotheek toevoegen", "ButtonAddScheduledTaskTrigger": "Trigger toevoegen", "ButtonAddServer": "Server toevoegen", From c6b4d4153577129a179d1e5c60eb77020b6ec3f0 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Wed, 9 Oct 2024 18:58:35 +0000 Subject: [PATCH 053/120] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 6dff69d2e9..9cf587c2fb 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -45,7 +45,7 @@ "Books": "书籍", "Browse": "浏览", "MessageBrowsePluginCatalog": "浏览我们的插件目录来查看现有插件。", - "BurnSubtitlesHelp": "确定服务器是否应该在转码视频时刻录字幕。 避免这种情况将大大提高性能。 选择自动刻录基于图像的格式(VobSub、PGS、SUB、IDX 等)和某些 ASS 或 SSA 字幕。", + "BurnSubtitlesHelp": "确定服务器是否应该烧录字幕。 避免这种情况将大大提高性能。 选择自动烧录基于图像的格式(VobSub、PGS、SUB、IDX 等)和某些 ASS 或 SSA 字幕。", "ButtonAddMediaLibrary": "添加媒体库", "ButtonAddScheduledTaskTrigger": "添加触发器", "ButtonAddServer": "添加服务器", @@ -1967,5 +1967,9 @@ "MessageCancelSeriesTimerError": "取消节目计时器时发生错误", "MessageCancelTimerError": "取消计时器时发生错误", "MessageSplitVersionsError": "分割版本时发生错误", - "DateModified": "修改日期" + "DateModified": "修改日期", + "AlwaysBurnInSubtitleWhenTranscoding": "转码时总是烧录字幕", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "当转码触发时烧录所有字幕。 这样可以保证转码后的字幕同步,但转码速度会降低。", + "LabelScreensaverTime": "屏幕保护时间", + "LabelScreensaverTimeHelp": "启动屏幕保护程序所需的无活动时间(以秒为单位)。" } From 809dba510a45dc7e4a162a02c4b9297b4822d13f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 25 Sep 2024 16:55:53 -0400 Subject: [PATCH 054/120] Add media segment action settings --- .../playback/constants/mediaSegmentAction.ts | 7 +++ .../playbackSettings/playbackSettings.js | 50 +++++++++++++++++-- .../playbackSettings.template.html | 3 ++ src/controllers/user/playback/index.js | 2 +- src/strings/en-us.json | 10 ++++ 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 src/apps/stable/features/playback/constants/mediaSegmentAction.ts diff --git a/src/apps/stable/features/playback/constants/mediaSegmentAction.ts b/src/apps/stable/features/playback/constants/mediaSegmentAction.ts new file mode 100644 index 0000000000..c1eb9652f0 --- /dev/null +++ b/src/apps/stable/features/playback/constants/mediaSegmentAction.ts @@ -0,0 +1,7 @@ +/** + * Actions that are triggered for media segments. + */ +export enum MediaSegmentAction { + None = 'None', + Skip = 'Skip' +} diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index 1461dbb54d..d9688a210a 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -1,3 +1,8 @@ +import { MediaSegmentType } from '@jellyfin/sdk/lib/generated-client/models/media-segment-type'; +import escapeHTML from 'escape-html'; + +import { MediaSegmentAction } from 'apps/stable/features/playback/constants/mediaSegmentAction'; + import appSettings from '../../scripts/settings/appSettings'; import { appHost } from '../apphost'; import browser from '../../scripts/browser'; @@ -6,12 +11,12 @@ import qualityoptions from '../qualityOptions'; import globalize from '../../lib/globalize'; import loading from '../loading/loading'; import Events from '../../utils/events.ts'; -import '../../elements/emby-select/emby-select'; -import '../../elements/emby-checkbox/emby-checkbox'; import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './playbackSettings.template.html'; -import escapeHTML from 'escape-html'; + +import '../../elements/emby-select/emby-select'; +import '../../elements/emby-checkbox/emby-checkbox'; function fillSkipLengths(select) { const options = [5, 10, 15, 20, 25, 30]; @@ -40,6 +45,37 @@ function populateLanguages(select, languages) { select.innerHTML = html; } +function populateMediaSegments(container, userSettings) { + const selectedValues = {}; + const actionOptions = Object.values(MediaSegmentAction) + .map(action => { + const actionLabel = globalize.translate(`MediaSegmentAction.${action}`); + return ``; + }) + .join(''); + + const segmentSettings = Object.values(MediaSegmentType) + .map(segmentType => { + const segmentTypeLabel = globalize.translate('LabelMediaSegmentsType', globalize.translate(`MediaSegmentType.${segmentType}`)); + const id = `segmentTypeAction__${segmentType}`; + selectedValues[id] = userSettings.get(id, false) || MediaSegmentAction.None; + return `
+ +
`; + }) + .join(''); + + container.innerHTML = segmentSettings; + + Object.entries(selectedValues) + .forEach(([id, value]) => { + const field = container.querySelector(`#${id}`); + if (field) field.value = value; + }); +} + function fillQuality(select, isInNetwork, mediatype, maxVideoWidth) { const options = mediatype === 'Audio' ? qualityoptions.getAudioQualityOptions({ @@ -219,6 +255,9 @@ function loadForm(context, user, userSettings, systemInfo, apiClient) { fillSkipLengths(selectSkipBackLength); selectSkipBackLength.value = userSettings.skipBackLength(); + const mediaSegmentContainer = context.querySelector('.mediaSegmentActionContainer'); + populateMediaSegments(mediaSegmentContainer, userSettings); + loading.hide(); } @@ -257,6 +296,11 @@ function saveUser(context, user, userSettingsInstance, apiClient) { userSettingsInstance.skipForwardLength(context.querySelector('.selectSkipForwardLength').value); userSettingsInstance.skipBackLength(context.querySelector('.selectSkipBackLength').value); + const segmentTypeActions = context.querySelectorAll('.segmentTypeAction') || []; + Array.prototype.forEach.call(segmentTypeActions, actionEl => { + userSettingsInstance.set(actionEl.id, actionEl.value, false); + }); + return apiClient.updateUserConfiguration(user.Id, user.Configuration); } diff --git a/src/components/playbackSettings/playbackSettings.template.html b/src/components/playbackSettings/playbackSettings.template.html index 0ad66b3c9a..ed1409eff0 100644 --- a/src/components/playbackSettings/playbackSettings.template.html +++ b/src/components/playbackSettings/playbackSettings.template.html @@ -156,6 +156,9 @@
+ +

${HeaderMediaSegmentActions}

+
diff --git a/src/controllers/user/playback/index.js b/src/controllers/user/playback/index.js index efb24c76ee..6f652be4a4 100644 --- a/src/controllers/user/playback/index.js +++ b/src/controllers/user/playback/index.js @@ -19,7 +19,7 @@ export default function (view, params) { } else { settingsInstance = new PlaybackSettings({ serverId: ApiClient.serverId(), - userId: userId, + userId, element: view.querySelector('.settingsContainer'), userSettings: currentSettings, enableSaveButton: true, diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 88f0125fbc..8dd84f6110 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -446,6 +446,7 @@ "HeaderLyricDownloads": "Lyric Downloads", "HeaderMedia": "Media", "HeaderMediaFolders": "Media Folders", + "HeaderMediaSegmentActions": "Media Segment Actions", "HeaderMetadataSettings": "Metadata Settings", "HeaderMoreLikeThis": "More Like This", "HeaderMusicQuality": "Music Quality", @@ -751,6 +752,7 @@ "LabelMaxDaysForNextUpHelp": "Set the maximum amount of days a show should stay in the 'Next Up' list without watching it.", "LabelMaxVideoResolution": "Maximum Allowed Video Transcoding Resolution", "LabelMediaDetails": "Media details", + "LabelMediaSegmentsType": "{0} Segments", "LabelLineup": "Lineup", "LabelLocalCustomCss": "Custom CSS code for styling which applies to this client only. You may want to disable server custom CSS code.", "LabelLocalHttpServerPortNumber": "Local HTTP port number", @@ -1065,6 +1067,14 @@ "MediaInfoTitle": "Title", "MediaInfoVideoRange": "Video range", "MediaIsBeingConverted": "The media is being converted into a format that is compatible with the device that is playing the media.", + "MediaSegmentAction.None": "None", + "MediaSegmentAction.Skip": "Skip", + "MediaSegmentType.Unknown": "Unknown", + "MediaSegmentType.Commercial": "Commercial", + "MediaSegmentType.Preview": "Preview", + "MediaSegmentType.Recap": "Recap", + "MediaSegmentType.Outro": "Outro", + "MediaSegmentType.Intro": "Intro", "Menu": "Menu", "MenuOpen": "Open Menu", "MenuClose": "Close Menu", From b93450098a452242b4cbdef0417a6ffe2d03cd4e Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 2 Oct 2024 17:09:59 -0400 Subject: [PATCH 055/120] Add media segment manager --- .../playback/utils/mediaSegmentManager.ts | 102 ++++++++++++++++++ .../playback/utils/mediaSegmentSettings.ts | 14 +++ .../features/playback/utils/mediaSegments.ts | 41 +++++++ src/components/playback/playbackmanager.js | 5 +- .../playbackSettings/playbackSettings.js | 28 +++-- src/scripts/settings/userSettings.js | 2 +- src/strings/en-us.json | 1 - 7 files changed, 179 insertions(+), 14 deletions(-) create mode 100644 src/apps/stable/features/playback/utils/mediaSegmentManager.ts create mode 100644 src/apps/stable/features/playback/utils/mediaSegmentSettings.ts create mode 100644 src/apps/stable/features/playback/utils/mediaSegments.ts diff --git a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts new file mode 100644 index 0000000000..8d245cdd92 --- /dev/null +++ b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts @@ -0,0 +1,102 @@ +import type { Api } from '@jellyfin/sdk/lib/api'; +import type { MediaSegmentDto } from '@jellyfin/sdk/lib/generated-client/models/media-segment-dto'; +import { MediaSegmentType } from '@jellyfin/sdk/lib/generated-client/models/media-segment-type'; +import { MediaSegmentsApi } from '@jellyfin/sdk/lib/generated-client/api/media-segments-api'; + +import type { PlaybackManager } from 'components/playback/playbackmanager'; +import ServerConnections from 'components/ServerConnections'; +import { currentSettings as userSettings } from 'scripts/settings/userSettings'; +import type { PlayerState } from 'types/playbackStopInfo'; +import type { Event } from 'utils/events'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; + +import { getMediaSegmentAction } from './mediaSegmentSettings'; +import { findCurrentSegment } from './mediaSegments'; +import { PlaybackSubscriber } from './playbackSubscriber'; +import { MediaSegmentAction } from '../constants/mediaSegmentAction'; + +class MediaSegmentManager extends PlaybackSubscriber { + private hasSegments = false; + private lastIndex = 0; + private mediaSegmentTypeActions: Record, MediaSegmentAction> | undefined; + private mediaSegments: MediaSegmentDto[] = []; + + private async fetchMediaSegments(api: Api, itemId: string, includeSegmentTypes: MediaSegmentType[]) { + // FIXME: Replace with SDK getMediaSegmentsApi function when available in stable + const mediaSegmentsApi = new MediaSegmentsApi(api.configuration, undefined, api.axiosInstance); + + try { + const { data: mediaSegments } = await mediaSegmentsApi.getItemSegments({ itemId, includeSegmentTypes }); + this.mediaSegments = mediaSegments.Items || []; + } catch (err) { + console.error('[MediaSegmentManager] failed to fetch segments', err); + this.mediaSegments = []; + } + } + + private performAction(mediaSegment: MediaSegmentDto) { + if (!this.mediaSegmentTypeActions || !mediaSegment.Type || !this.mediaSegmentTypeActions[mediaSegment.Type]) { + console.error('[MediaSegmentManager] segment type missing from action map', mediaSegment, this.mediaSegmentTypeActions); + return; + } + + const action = this.mediaSegmentTypeActions[mediaSegment.Type]; + if (action === MediaSegmentAction.Skip) { + // Perform skip + if (mediaSegment.EndTicks) { + console.debug('[MediaSegmentManager] skipping to %s ms', mediaSegment.EndTicks / 10000); + this.playbackManager.seek(mediaSegment.EndTicks, this.player); + } else { + console.debug('[MediaSegmentManager] skipping to next item in queue'); + this.playbackManager.nextTrack(this.player); + } + } + } + + onPlayerPlaybackStart(_e: Event, state: PlayerState) { + this.lastIndex = 0; + this.hasSegments = !!state.MediaSource?.HasSegments; + + const itemId = state.MediaSource?.Id; + const serverId = state.NowPlayingItem?.ServerId || ServerConnections.currentApiClient()?.serverId(); + + if (!this.hasSegments || !serverId || !itemId) return; + + // Get the user settings for media segment actions + this.mediaSegmentTypeActions = Object.values(MediaSegmentType) + .map(type => ({ + type, + action: getMediaSegmentAction(userSettings, type) + })) + .filter(({ action }) => !!action && action !== MediaSegmentAction.None) + .reduce((acc, { type, action }) => { + if (action) acc[type] = action; + return acc; + }, {} as Record, MediaSegmentAction>); + + if (!Object.keys(this.mediaSegmentTypeActions).length) { + console.info('[MediaSegmentManager] user has no media segment actions enabled'); + return; + } + + const api = toApi(ServerConnections.getApiClient(serverId)); + void this.fetchMediaSegments( + api, + itemId, + Object.keys(this.mediaSegmentTypeActions).map(t => t as keyof typeof MediaSegmentType)); + } + + onPlayerTimeUpdate() { + if (this.hasSegments && this.mediaSegments.length) { + const time = this.playbackManager.currentTime(this.player) * 10000; + const currentSegmentDetails = findCurrentSegment(this.mediaSegments, time, this.lastIndex); + if (currentSegmentDetails) { + console.debug('[MediaSegmentManager] found %s segment at %s ms', currentSegmentDetails.segment.Type, time / 10000, currentSegmentDetails); + this.performAction(currentSegmentDetails.segment); + this.lastIndex = currentSegmentDetails.index; + } + } + } +} + +export const bindMediaSegmentManager = (playbackManager: PlaybackManager) => new MediaSegmentManager(playbackManager); diff --git a/src/apps/stable/features/playback/utils/mediaSegmentSettings.ts b/src/apps/stable/features/playback/utils/mediaSegmentSettings.ts new file mode 100644 index 0000000000..e190a60f95 --- /dev/null +++ b/src/apps/stable/features/playback/utils/mediaSegmentSettings.ts @@ -0,0 +1,14 @@ +import { MediaSegmentType } from '@jellyfin/sdk/lib/generated-client/models/media-segment-type'; + +import { UserSettings } from 'scripts/settings/userSettings'; + +import { MediaSegmentAction } from '../constants/mediaSegmentAction'; + +const PREFIX = 'segmentTypeAction'; + +export const getId = (type: MediaSegmentType) => `${PREFIX}__${type}`; + +export function getMediaSegmentAction(userSettings: UserSettings, type: MediaSegmentType): MediaSegmentAction | undefined { + const action = userSettings.get(getId(type), false); + return action ? action as MediaSegmentAction : undefined; +} diff --git a/src/apps/stable/features/playback/utils/mediaSegments.ts b/src/apps/stable/features/playback/utils/mediaSegments.ts new file mode 100644 index 0000000000..fd2c45e4b7 --- /dev/null +++ b/src/apps/stable/features/playback/utils/mediaSegments.ts @@ -0,0 +1,41 @@ +import type { MediaSegmentDto } from '@jellyfin/sdk/lib/generated-client/models/media-segment-dto'; + +const isBeforeSegment = (segment: MediaSegmentDto, time: number, direction: number) => { + if (direction === -1) { + return ( + typeof segment.EndTicks !== 'undefined' + && segment.EndTicks < time + ); + } + return ( + typeof segment.StartTicks !== 'undefined' + && segment.StartTicks > time + ); +}; + +const isInSegment = (segment: MediaSegmentDto, time: number) => ( + typeof segment.StartTicks !== 'undefined' + && segment.StartTicks < time + && (typeof segment.EndTicks === 'undefined' || segment.EndTicks > time) +); + +export const findCurrentSegment = (segments: MediaSegmentDto[], time: number, lastIndex = 0) => { + const lastSegment = segments[lastIndex]; + if (isInSegment(lastSegment, time)) { + return { index: lastIndex, segment: lastSegment }; + } + + let direction = 1; + if (lastIndex > 0 && lastSegment.StartTicks && lastSegment.StartTicks > time) { + direction = -1; + } + + for ( + let index = lastIndex, segment = segments[index]; + index >= 0 && index < segments.length; + index += direction, segment = segments[index] + ) { + if (isBeforeSegment(segment, time, direction)) return; + if (isInSegment(segment, time)) return { index, segment }; + } +}; diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 784c7248f2..bddc34930f 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1,5 +1,6 @@ import { PlaybackErrorCode } from '@jellyfin/sdk/lib/generated-client/models/playback-error-code.js'; import { getMediaInfoApi } from '@jellyfin/sdk/lib/utils/api/media-info-api'; +import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; import merge from 'lodash-es/merge'; import Screenfull from 'screenfull'; @@ -19,8 +20,8 @@ import { PluginType } from '../../types/plugin.ts'; import { includesAny } from '../../utils/container.ts'; import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts'; import { getItemBackdropImageUrl } from '../../utils/jellyfin-apiclient/backdropImage'; -import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; +import { bindMediaSegmentManager } from 'apps/stable/features/playback/utils/mediaSegmentManager'; import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; import { toApi } from 'utils/jellyfin-apiclient/compat'; @@ -3663,6 +3664,8 @@ export class PlaybackManager { Events.on(serverNotifications, 'ServerRestarting', self.setDefaultPlayerActive.bind(self)); }); } + + bindMediaSegmentManager(self); } getCurrentPlayer() { diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index d9688a210a..05374a78d5 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -2,6 +2,7 @@ import { MediaSegmentType } from '@jellyfin/sdk/lib/generated-client/models/medi import escapeHTML from 'escape-html'; import { MediaSegmentAction } from 'apps/stable/features/playback/constants/mediaSegmentAction'; +import { getId, getMediaSegmentAction } from 'apps/stable/features/playback/utils/mediaSegmentSettings'; import appSettings from '../../scripts/settings/appSettings'; import { appHost } from '../apphost'; @@ -54,18 +55,23 @@ function populateMediaSegments(container, userSettings) { }) .join(''); - const segmentSettings = Object.values(MediaSegmentType) - .map(segmentType => { - const segmentTypeLabel = globalize.translate('LabelMediaSegmentsType', globalize.translate(`MediaSegmentType.${segmentType}`)); - const id = `segmentTypeAction__${segmentType}`; - selectedValues[id] = userSettings.get(id, false) || MediaSegmentAction.None; - return `
- + const segmentSettings = [ + // List the types in a logical order (and exclude "Unknown" type) + MediaSegmentType.Intro, + MediaSegmentType.Preview, + MediaSegmentType.Recap, + MediaSegmentType.Commercial, + MediaSegmentType.Outro + ].map(segmentType => { + const segmentTypeLabel = globalize.translate('LabelMediaSegmentsType', globalize.translate(`MediaSegmentType.${segmentType}`)); + const id = getId(segmentType); + selectedValues[id] = getMediaSegmentAction(userSettings, segmentType) || MediaSegmentAction.None; + return `
+
`; - }) - .join(''); + }).join(''); container.innerHTML = segmentSettings; diff --git a/src/scripts/settings/userSettings.js b/src/scripts/settings/userSettings.js index ba5d16d2e6..27de2f2641 100644 --- a/src/scripts/settings/userSettings.js +++ b/src/scripts/settings/userSettings.js @@ -91,7 +91,7 @@ export class UserSettings { * Get value of setting. * @param {string} name - Name of setting. * @param {boolean} [enableOnServer] - Flag to return preferences from server (cached). - * @return {string} Value of setting. + * @return {string | null} Value of setting. */ get(name, enableOnServer) { const userId = this.currentUserId; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 8dd84f6110..c378a4a559 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1069,7 +1069,6 @@ "MediaIsBeingConverted": "The media is being converted into a format that is compatible with the device that is playing the media.", "MediaSegmentAction.None": "None", "MediaSegmentAction.Skip": "Skip", - "MediaSegmentType.Unknown": "Unknown", "MediaSegmentType.Commercial": "Commercial", "MediaSegmentType.Preview": "Preview", "MediaSegmentType.Recap": "Recap", From 9aeb64e347498e455afa96fdb5b00dd16c06b758 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 9 Oct 2024 12:04:47 -0400 Subject: [PATCH 056/120] Add tests for segment utils --- .../playback/utils/mediaSegments.test.ts | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/apps/stable/features/playback/utils/mediaSegments.test.ts diff --git a/src/apps/stable/features/playback/utils/mediaSegments.test.ts b/src/apps/stable/features/playback/utils/mediaSegments.test.ts new file mode 100644 index 0000000000..17dc9e7383 --- /dev/null +++ b/src/apps/stable/features/playback/utils/mediaSegments.test.ts @@ -0,0 +1,68 @@ +import type { MediaSegmentDto } from '@jellyfin/sdk/lib/generated-client/models/media-segment-dto'; +import { MediaSegmentType } from '@jellyfin/sdk/lib/generated-client/models/media-segment-type'; +import { describe, expect, it } from 'vitest'; + +import { findCurrentSegment } from './mediaSegments'; + +const TEST_SEGMENTS: MediaSegmentDto[] = [ + { + Id: 'intro', + Type: MediaSegmentType.Intro, + StartTicks: 0, + EndTicks: 10 + }, + { + Id: 'preview', + Type: MediaSegmentType.Preview, + StartTicks: 20, + EndTicks: 30 + }, + { + Id: 'recap', + Type: MediaSegmentType.Recap, + StartTicks: 30, + EndTicks: 40 + }, + { + Id: 'commercial', + Type: MediaSegmentType.Commercial, + StartTicks: 40, + EndTicks: 50 + }, + { + Id: 'outro', + Type: MediaSegmentType.Outro, + StartTicks: 50, + EndTicks: 60 + } +]; + +describe('findCurrentSegment()', () => { + it('Should return the current segment', () => { + let segmentDetails = findCurrentSegment(TEST_SEGMENTS, 23); + expect(segmentDetails).toBeDefined(); + expect(segmentDetails?.index).toBe(1); + expect(segmentDetails?.segment?.Id).toBe('preview'); + + segmentDetails = findCurrentSegment(TEST_SEGMENTS, 5, 1); + expect(segmentDetails).toBeDefined(); + expect(segmentDetails?.index).toBe(0); + expect(segmentDetails?.segment?.Id).toBe('intro'); + + segmentDetails = findCurrentSegment(TEST_SEGMENTS, 42, 3); + expect(segmentDetails).toBeDefined(); + expect(segmentDetails?.index).toBe(3); + expect(segmentDetails?.segment?.Id).toBe('commercial'); + }); + + it('Should return undefined if not in a segment', () => { + let segmentDetails = findCurrentSegment(TEST_SEGMENTS, 16); + expect(segmentDetails).toBeUndefined(); + + segmentDetails = findCurrentSegment(TEST_SEGMENTS, 10, 1); + expect(segmentDetails).toBeUndefined(); + + segmentDetails = findCurrentSegment(TEST_SEGMENTS, 100); + expect(segmentDetails).toBeUndefined(); + }); +}); From 7c4962de80986af6d434ec4a8a5bcce55406f26e Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 9 Oct 2024 13:23:17 -0400 Subject: [PATCH 057/120] Skip skipping if skip is short --- .../playback/utils/mediaSegmentManager.ts | 17 ++++++++++++++--- src/constants/time.ts | 8 ++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/constants/time.ts diff --git a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts index 8d245cdd92..68e65dd7ab 100644 --- a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts +++ b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts @@ -5,6 +5,7 @@ import { MediaSegmentsApi } from '@jellyfin/sdk/lib/generated-client/api/media-s import type { PlaybackManager } from 'components/playback/playbackmanager'; import ServerConnections from 'components/ServerConnections'; +import { TICKS_PER_MILLISECOND, TICKS_PER_SECOND } from 'constants/time'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; import type { PlayerState } from 'types/playbackStopInfo'; import type { Event } from 'utils/events'; @@ -44,7 +45,13 @@ class MediaSegmentManager extends PlaybackSubscriber { if (action === MediaSegmentAction.Skip) { // Perform skip if (mediaSegment.EndTicks) { - console.debug('[MediaSegmentManager] skipping to %s ms', mediaSegment.EndTicks / 10000); + // Do not skip if duration < 1s to avoid slow stream changes + if (mediaSegment.StartTicks && mediaSegment.EndTicks - mediaSegment.StartTicks < TICKS_PER_SECOND) { + console.info('[MediaSegmentManager] ignoring skipping segment with duration <1s', mediaSegment); + return; + } + + console.debug('[MediaSegmentManager] skipping to %s ms', mediaSegment.EndTicks / TICKS_PER_MILLISECOND); this.playbackManager.seek(mediaSegment.EndTicks, this.player); } else { console.debug('[MediaSegmentManager] skipping to next item in queue'); @@ -88,10 +95,14 @@ class MediaSegmentManager extends PlaybackSubscriber { onPlayerTimeUpdate() { if (this.hasSegments && this.mediaSegments.length) { - const time = this.playbackManager.currentTime(this.player) * 10000; + const time = this.playbackManager.currentTime(this.player) * TICKS_PER_MILLISECOND; const currentSegmentDetails = findCurrentSegment(this.mediaSegments, time, this.lastIndex); if (currentSegmentDetails) { - console.debug('[MediaSegmentManager] found %s segment at %s ms', currentSegmentDetails.segment.Type, time / 10000, currentSegmentDetails); + console.debug( + '[MediaSegmentManager] found %s segment at %s ms', + currentSegmentDetails.segment.Type, + time / TICKS_PER_MILLISECOND, + currentSegmentDetails); this.performAction(currentSegmentDetails.segment); this.lastIndex = currentSegmentDetails.index; } diff --git a/src/constants/time.ts b/src/constants/time.ts new file mode 100644 index 0000000000..4555b91192 --- /dev/null +++ b/src/constants/time.ts @@ -0,0 +1,8 @@ +/** The number of ticks per millisecond */ +export const TICKS_PER_MILLISECOND = 10_000; + +/** The number of ticks per second */ +export const TICKS_PER_SECOND = 1_000 * TICKS_PER_MILLISECOND; + +/** The number of ticks per minute */ +export const TICKS_PER_MINUTE = 60 * TICKS_PER_SECOND; From e673037a5412bbc1dedc30706f37ab77f4ab50a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Fern=C3=A1ndez?= Date: Wed, 11 Sep 2024 23:34:53 +0000 Subject: [PATCH 058/120] Securize CI, reusable workflows, simplifications --- .../{automation.yml => __automation.yml} | 14 +- .github/workflows/__codeql.yml | 40 ++++++ .github/workflows/__deploy.yml | 59 ++++++++ .github/workflows/__job_messages.yml | 65 +++++++++ .github/workflows/__package.yml | 44 ++++++ .github/workflows/__quality_checks.yml | 60 ++++++++ .github/workflows/build.yml | 129 ------------------ .github/workflows/codeql.yml | 34 ----- .github/workflows/commands.yml | 36 ----- .github/workflows/pr-suggestions.yml | 36 ----- .github/workflows/pull_request.yml | 99 ++++++++++++++ .github/workflows/push.yml | 58 ++++++++ .github/workflows/quality.yml | 123 ----------------- .github/workflows/{stale.yml => schedule.yml} | 46 ++++++- package.json | 1 + 15 files changed, 473 insertions(+), 371 deletions(-) rename .github/workflows/{automation.yml => __automation.yml} (59%) create mode 100644 .github/workflows/__codeql.yml create mode 100644 .github/workflows/__deploy.yml create mode 100644 .github/workflows/__job_messages.yml create mode 100644 .github/workflows/__package.yml create mode 100644 .github/workflows/__quality_checks.yml delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/codeql.yml delete mode 100644 .github/workflows/commands.yml delete mode 100644 .github/workflows/pr-suggestions.yml create mode 100644 .github/workflows/pull_request.yml create mode 100644 .github/workflows/push.yml delete mode 100644 .github/workflows/quality.yml rename .github/workflows/{stale.yml => schedule.yml} (61%) diff --git a/.github/workflows/automation.yml b/.github/workflows/__automation.yml similarity index 59% rename from .github/workflows/automation.yml rename to .github/workflows/__automation.yml index 0405a694e6..21e9f04ef7 100644 --- a/.github/workflows/automation.yml +++ b/.github/workflows/__automation.yml @@ -1,20 +1,12 @@ -name: Automation - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true +name: Automation 🎛️ on: - push: - branches: - - master - pull_request_target: + workflow_call: jobs: conflicts: - name: Merge conflict labeling + name: Merge conflict labeling 🏷️ runs-on: ubuntu-latest - if: ${{ github.repository == 'jellyfin/jellyfin-web' }} steps: - uses: eps1lon/actions-label-merge-conflict@1b1b1fcde06a9b3d089f3464c96417961dde1168 # v3.0.2 with: diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml new file mode 100644 index 0000000000..320a5b4b81 --- /dev/null +++ b/.github/workflows/__codeql.yml @@ -0,0 +1,40 @@ +name: GitHub CodeQL 🔬 + +on: + workflow_call: + inputs: + commit: + required: true + type: string + +jobs: + analyze: + name: Analyze ${{ matrix.language }} 🔬 + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + language: + - javascript-typescript + + steps: + - name: Checkout repository ⬇️ + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + ref: ${{ inputs.commit }} + show-progress: false + + - name: Initialize CodeQL 🛠️ + uses: github/codeql-action/init@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + with: + queries: security-and-quality + languages: ${{ matrix.language }} + + - name: Autobuild 📦 + uses: github/codeql-action/autobuild@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + + - name: Perform CodeQL Analysis 🧪 + uses: github/codeql-action/analyze@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + with: + category: '/language:${{matrix.language}}' diff --git a/.github/workflows/__deploy.yml b/.github/workflows/__deploy.yml new file mode 100644 index 0000000000..bcdd2bd875 --- /dev/null +++ b/.github/workflows/__deploy.yml @@ -0,0 +1,59 @@ +name: Deploy 🏗️ + +on: + workflow_call: + inputs: + branch: + required: true + type: string + commit: + required: false + type: string + comment: + required: false + type: boolean + artifact_name: + required: false + type: string + default: frontend + +jobs: + cf-pages: + name: CloudFlare Pages 📃 + runs-on: ubuntu-latest + environment: + name: ${{ inputs.branch == 'master' && 'Production' || 'Preview' }} + url: ${{ steps.cf.outputs.deployment-url }} + outputs: + url: ${{ steps.cf.outputs.deployment-url }} + + steps: + - name: Download workflow artifact ⬇️ + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: ${{ inputs.artifact_name }} + path: dist + + - name: Publish to Cloudflare Pages 📃 + uses: cloudflare/wrangler-action@f84a562284fc78278ff9052435d9526f9c718361 # v3.7.0 + id: cf + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy dist --project-name=jellyfin-web --branch=${{ inputs.branch }} + + compose-comment: + name: Compose and push comment 📝 + # Always run so the comment is composed for the workflow summary + if: ${{ always() }} + uses: ./.github/workflows/__job_messages.yml + secrets: inherit + needs: + - cf-pages + + with: + branch: ${{ inputs.branch }} + commit: ${{ inputs.commit }} + preview_url: ${{ needs.cf-pages.outputs.url }} + in_progress: false + comment: ${{ inputs.comment }} diff --git a/.github/workflows/__job_messages.yml b/.github/workflows/__job_messages.yml new file mode 100644 index 0000000000..db39f1dca2 --- /dev/null +++ b/.github/workflows/__job_messages.yml @@ -0,0 +1,65 @@ +name: Job messages ⚙️ + +on: + workflow_call: + inputs: + branch: + required: false + type: string + commit: + required: true + type: string + preview_url: + required: false + type: string + in_progress: + required: true + type: boolean + comment: + required: false + type: boolean + marker: + description: Hidden marker to detect PR comments composed by the bot + required: false + type: string + default: "CFPages-deployment" + + +jobs: + cf_pages_msg: + name: CloudFlare Pages deployment 📃🚀 + runs-on: ubuntu-latest + + steps: + - name: Compose message 📃 + if: ${{ always() }} + id: compose + env: + COMMIT: ${{ inputs.commit }} + PREVIEW_URL: ${{ inputs.preview_url != '' && (inputs.branch != 'master' && inputs.preview_url || format('https://jellyfin-web.pages.dev ({0})', inputs.preview_url)) || 'Not available' }} + DEPLOY_STATUS: ${{ inputs.in_progress && '🔄 Deploying...' || (inputs.preview_url != '' && '✅ Deployed!' || '❌ Failure. Check workflow logs for details') }} + DEPLOYMENT_TYPE: ${{ inputs.branch != 'master' && '🔀 Preview' || '⚙️ Production' }} + WORKFLOW_RUN: ${{ !inputs.in_progress && format('**[View build logs](https://github.com/{0}/actions/runs/{1})**', github.repository, github.run_id) || '' }} + # EOF is needed for multiline environment variables in a GitHub Actions context + run: | + echo "## Cloudflare Pages deployment" > $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| **Latest commit** | ${COMMIT::7} |" >> $GITHUB_STEP_SUMMARY + echo "|------------------------- |:----------------------------: |" >> $GITHUB_STEP_SUMMARY + echo "| **Status** | $DEPLOY_STATUS |" >> $GITHUB_STEP_SUMMARY + echo "| **Preview URL** | $PREVIEW_URL |" >> $GITHUB_STEP_SUMMARY + echo "| **Type** | $DEPLOYMENT_TYPE |" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "$WORKFLOW_RUN" >> $GITHUB_STEP_SUMMARY + COMPOSED_MSG=$(cat $GITHUB_STEP_SUMMARY) + echo "msg<> $GITHUB_ENV + echo "$COMPOSED_MSG" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + + - name: Push comment to Pull Request 🔼 + uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0 + if: ${{ inputs.comment && steps.compose.conclusion == 'success' }} + with: + GITHUB_TOKEN: ${{ secrets.JF_BOT_TOKEN }} + message: ${{ env.msg }} + comment_tag: ${{ inputs.marker }} diff --git a/.github/workflows/__package.yml b/.github/workflows/__package.yml new file mode 100644 index 0000000000..4b7e15d3bc --- /dev/null +++ b/.github/workflows/__package.yml @@ -0,0 +1,44 @@ +name: Packaging 📦 + +on: + workflow_call: + inputs: + commit: + required: false + type: string + +jobs: + run-build-prod: + name: Run production build 🏗️ + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + ref: ${{ inputs.commit || github.sha }} + + - name: Setup node environment + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + with: + node-version: 20 + check-latest: true + + - name: Install Node.js dependencies + run: npm ci --no-audit + + - name: Run a production build + env: + JELLYFIN_VERSION: ${{ inputs.commit || github.sha }} + run: npm run build:production + + - name: Update config.json for testing + run: | + jq '.multiserver=true | .servers=["https://demo.jellyfin.org/unstable"]' dist/config.json > dist/config.tmp.json + mv dist/config.tmp.json dist/config.json + + - name: Upload artifact + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + with: + name: frontend + path: dist diff --git a/.github/workflows/__quality_checks.yml b/.github/workflows/__quality_checks.yml new file mode 100644 index 0000000000..f89ecc8a56 --- /dev/null +++ b/.github/workflows/__quality_checks.yml @@ -0,0 +1,60 @@ +name: Quality checks 👌🧪 + +on: + workflow_call: + inputs: + commit: + required: true + type: string + workflow_dispatch: + +jobs: + dependency-review: + name: Vulnerable dependencies 🔎 + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + ref: ${{ inputs.commit }} + show-progress: false + + - name: Scan + uses: actions/dependency-review-action@5a2ce3f5b92ee19cbb1541a4984c76d921601d7c # v4.3.4 + with: + ## Workaround from https://github.com/actions/dependency-review-action/issues/456 + ## TODO: Remove when necessary + base-ref: ${{ github.event.pull_request.base.sha || 'master' }} + head-ref: ${{ github.event.pull_request.head.sha || github.ref }} + + quality: + name: Run ${{ matrix.command }} 🕵️‍♂️ + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + command: + - build:es-check + - lint + - stylelint + - build:check + - test + + steps: + - name: Checkout ⬇️ + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + ref: ${{ inputs.commit }} + show-progress: false + + - name: Setup node environment ⚙️ + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + with: + node-version: 20 + check-latest: true + + - name: Install dependencies 📦 + run: npm ci --no-audit + + - name: Run ${{ matrix.command }} ⚙️ + run: npm run ${{ matrix.command }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index c1896f0397..0000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: Build - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -on: - push: - branches: [ master, release* ] - pull_request_target: - branches: [ master, release* ] - workflow_dispatch: - -jobs: - run-build-prod: - name: Run production build - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - - - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Install Node.js dependencies - run: npm ci --no-audit - - - name: Run a production build - env: - JELLYFIN_VERSION: ${{ github.event.pull_request.head.sha || github.sha }} - run: npm run build:production - - - name: Update config.json for testing - run: | - jq '.multiserver=true | .servers=["https://demo.jellyfin.org/unstable"]' dist/config.json > dist/config.tmp.json - mv dist/config.tmp.json dist/config.json - - - name: Upload artifact - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 - with: - name: jellyfin-web__prod - path: dist - - publish: - name: Deploy to Cloudflare Pages - runs-on: ubuntu-latest - if: ${{ github.repository == 'jellyfin/jellyfin-web' }} - needs: - - run-build-prod - permissions: - contents: read - deployments: write - - steps: - - name: Add comment - uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0 - if: ${{ github.event_name == 'pull_request_target' }} - with: - GITHUB_TOKEN: ${{ secrets.JF_BOT_TOKEN }} - message: | - ## Cloudflare Pages deployment - - | **Latest commit** | ${{ github.event.pull_request.head.sha || github.sha }} | - |-------------------|:-:| - | **Status** | 🔄 Deploying... | - | **Preview URL** | Not available | - | **Type** | 🔀 Preview | - pr_number: ${{ github.event.pull_request.number }} - comment_tag: CFPages-deployment - mode: recreate - - - name: Download workflow artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 - with: - name: jellyfin-web__prod - path: dist - - - name: Publish to Cloudflare - id: cf - uses: cloudflare/wrangler-action@f84a562284fc78278ff9052435d9526f9c718361 # v3.7.0 - with: - apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} - accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - command: pages deploy dist --project-name=jellyfin-web --branch=${{ - (github.event_name != 'pull_request_target' || github.event.pull_request.head.repo.full_name == github.repository) - && (github.event.pull_request.head.ref || github.ref_name) - || format('{0}/{1}', github.event.pull_request.head.repo.full_name, github.event.pull_request.head.ref) - }} --commit-hash=${{ github.event.pull_request.head.sha || github.sha }} - - - name: Update status comment (Success) - if: ${{ github.event_name == 'pull_request_target' && success() }} - uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0 - with: - GITHUB_TOKEN: ${{ secrets.JF_BOT_TOKEN }} - message: | - ## Cloudflare Pages deployment - - | **Latest commit** | ${{ github.event.pull_request.head.sha || github.sha }} | - |-------------------|:-:| - | **Status** | ✅ Deployed! | - | **Preview URL** | ${{ steps.cf.outputs.deployment-url != '' && steps.cf.outputs.deployment-url || 'Not available' }} | - | **Type** | 🔀 Preview | - pr_number: ${{ github.event.pull_request.number }} - comment_tag: CFPages-deployment - mode: recreate - - - name: Update status comment (Failure) - if: ${{ github.event_name == 'pull_request_target' && failure() }} - uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0 - with: - GITHUB_TOKEN: ${{ secrets.JF_BOT_TOKEN }} - message: | - ## Cloudflare Pages deployment - - | **Latest commit** | ${{ github.event.pull_request.head.sha || github.sha }} | - |-------------------|:-:| - | **Status** | ❌ Failure. Check workflow logs for details | - | **Preview URL** | Not available | - | **Type** | 🔀 Preview | - pr_number: ${{ github.event.pull_request.number }} - comment_tag: CFPages-deployment - mode: recreate diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 7060ef9b9a..0000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: CodeQL - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -on: - push: - branches: [ master, release* ] - pull_request: - branches: [ master, release* ] - schedule: - - cron: '30 7 * * 6' - -jobs: - codeql: - name: Run CodeQL - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - - name: Initialize CodeQL - uses: github/codeql-action/init@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 - with: - languages: javascript - queries: +security-extended - - - name: Autobuild - uses: github/codeql-action/autobuild@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 diff --git a/.github/workflows/commands.yml b/.github/workflows/commands.yml deleted file mode 100644 index c4a95a6259..0000000000 --- a/.github/workflows/commands.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Commands -on: - issue_comment: - types: - - created - - edited - -jobs: - rebase: - name: Rebase - if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '@jellyfin-bot rebase') && github.event.comment.author_association == 'MEMBER' - runs-on: ubuntu-latest - steps: - - name: Notify as seen - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 - with: - token: ${{ secrets.JF_BOT_TOKEN }} - comment-id: ${{ github.event.comment.id }} - reactions: '+1' - - name: Checkout the latest code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - with: - token: ${{ secrets.JF_BOT_TOKEN }} - fetch-depth: 0 - - name: Automatic Rebase - uses: cirrus-actions/rebase@b87d48154a87a85666003575337e27b8cd65f691 # 1.8 - env: - GITHUB_TOKEN: ${{ secrets.JF_BOT_TOKEN }} - - name: Comment on failure - if: failure() - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 - with: - token: ${{ secrets.JF_BOT_TOKEN }} - issue-number: ${{ github.event.issue.number }} - body: | - I'm sorry @${{ github.event.comment.user.login }}, I'm afraid I can't do that. diff --git a/.github/workflows/pr-suggestions.yml b/.github/workflows/pr-suggestions.yml deleted file mode 100644 index e57ab85eb6..0000000000 --- a/.github/workflows/pr-suggestions.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: PR suggestions - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.id || github.run_id }} - cancel-in-progress: true - -on: - pull_request_target: - branches: [ master, release* ] - -jobs: - run-eslint: - name: Run eslint suggestions - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - with: - ref: ${{ github.event.pull_request.head.sha }} - - - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Install Node.js dependencies - run: npm ci --no-audit - - - name: Run eslint - if: ${{ github.repository == 'jellyfin/jellyfin-web' }} - uses: CatChen/eslint-suggestion-action@09aa3e557bafa4bebe3e026d8808bffff08e67a9 # v4.1.6 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 0000000000..de33fd0c42 --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,99 @@ +name: Pull Request 📥 + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +on: + pull_request_target: + branches: + - master + - release* + paths-ignore: + - '**/*.md' + merge_group: + +jobs: + push-comment: + name: Create comments ✍️ + if: ${{ always() && !cancelled() && github.repository == 'jellyfin/jellyfin-web' }} + uses: ./.github/workflows/__job_messages.yml + secrets: inherit + with: + commit: ${{ github.event.pull_request.head.sha }} + in_progress: true + comment: true + + build: + name: Build 🏗️ + if: ${{ always() && !cancelled() }} + uses: ./.github/workflows/__package.yml + with: + commit: ${{ github.event.pull_request.head.sha }} + + automation: + name: Automation 🎛️ + if: ${{ github.repository == 'jellyfin/jellyfin-web' }} + uses: ./.github/workflows/__automation.yml + secrets: inherit + + quality_checks: + name: Quality checks 👌🧪 + if: ${{ always() && !cancelled() }} + uses: ./.github/workflows/__quality_checks.yml + permissions: {} + with: + commit: ${{ github.event.pull_request.head.ref }} + + codeql: + name: GitHub CodeQL 🔬 + if: ${{ always() && !cancelled() }} + uses: ./.github/workflows/__codeql.yml + permissions: + actions: read + contents: read + security-events: write + with: + commit: ${{ github.event.pull_request.head.sha }} + + deploy: + name: Deploy 🚀 + uses: ./.github/workflows/__deploy.yml + if: ${{ always() && !cancelled() && needs.build.result == 'success' && github.repository == 'jellyfin/jellyfin-web' }} + needs: + - push-comment + - build + permissions: + contents: read + deployments: write + secrets: inherit + with: + # If the PR is from the master branch of a fork, append the fork's name to the branch name + branch: ${{ github.event.pull_request.head.repo.full_name != github.repository && github.event.pull_request.head.ref == 'master' && format('{0}/{1}', github.event.pull_request.head.repo.full_name, github.event.pull_request.head.ref) || github.event.pull_request.head.ref }} + comment: true + commit: ${{ github.event.pull_request.head.sha }} + + run-eslint: + name: Run eslint suggestions + if: ${{ github.repository == 'jellyfin/jellyfin-web' }} + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Setup node environment + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + with: + node-version: 20 + check-latest: true + + - name: Install Node.js dependencies + run: npm ci --no-audit + + - name: Run eslint + uses: CatChen/eslint-suggestion-action@09aa3e557bafa4bebe3e026d8808bffff08e67a9 # v4.1.6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 0000000000..93e3e09f1f --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,58 @@ +name: Push & Release 🌍 + +concurrency: + group: ${{ github.workflow }}-${{ github.event_name == 'push' && github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - master + - release* + paths-ignore: + - '**/*.md' + +jobs: + automation: + name: Automation 🎛️ + if: ${{ github.repository == 'jellyfin/jellyfin-web' }} + uses: ./.github/workflows/__automation.yml + secrets: inherit + + main: + name: 'Unstable release 🚀⚠️' + uses: ./.github/workflows/__package.yml + with: + commit: ${{ github.sha }} + + quality_checks: + name: Quality checks 👌🧪 + if: ${{ always() && !cancelled() }} + uses: ./.github/workflows/__quality_checks.yml + permissions: {} + with: + commit: ${{ github.sha }} + + codeql: + name: GitHub CodeQL 🔬 + uses: ./.github/workflows/__codeql.yml + permissions: + actions: read + contents: read + security-events: write + with: + commit: ${{ github.sha }} + + deploy: + name: Deploy 🚀 + if: ${{ github.repository == 'jellyfin/jellyfin-web' }} + uses: ./.github/workflows/__deploy.yml + needs: + - main + permissions: + contents: read + deployments: write + secrets: inherit + with: + branch: ${{ github.ref_name }} + comment: diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml deleted file mode 100644 index f9861cec21..0000000000 --- a/.github/workflows/quality.yml +++ /dev/null @@ -1,123 +0,0 @@ -name: Quality checks - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -on: - push: - branches: [ master, release* ] - pull_request: - branches: [ master, release* ] - -jobs: - run-escheck: - name: Run es-check - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Install Node.js dependencies - run: npm ci --no-audit - - - name: Run a production build - run: npm run build:production - - - name: Run es-check - run: npm run escheck - - run-eslint: - name: Run eslint - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Install Node.js dependencies - run: npm ci --no-audit - - - name: Run eslint - run: npx eslint --quiet "." - - run-stylelint: - name: Run stylelint - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Set up stylelint matcher - uses: xt0rted/stylelint-problem-matcher@34db1b874c0452909f0696aedef70b723870a583 # tag=v1 - - - name: Install Node.js dependencies - run: npm ci --no-audit - - - name: Run stylelint - run: npm run stylelint - - run-tsc: - name: Run TypeScript build check - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Install Node.js dependencies - run: npm ci --no-audit - - - name: Run tsc - run: npm run build:check - - run-test: - name: Run tests - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Install Node.js dependencies - run: npm ci --no-audit - - - name: Run test suite - run: npm run test diff --git a/.github/workflows/stale.yml b/.github/workflows/schedule.yml similarity index 61% rename from .github/workflows/stale.yml rename to .github/workflows/schedule.yml index 2f3bca85e1..5c07f5a302 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/schedule.yml @@ -1,10 +1,10 @@ -name: Stale Check +name: Scheduled tasks 🕑 on: schedule: - cron: '30 1 * * *' workflow_dispatch: - + permissions: issues: write pull-requests: write @@ -49,3 +49,45 @@ jobs: stale-pr-label: merge conflict close-pr-message: |- This PR has been closed due to having unresolved merge conflicts. + + update: + name: Update the Jellyfin SDK + runs-on: ubuntu-latest + if: ${{ github.repository == 'jellyfin/jellyfin-web' }} + + steps: + - name: Check out Git repository + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + ref: master + token: ${{ secrets.JF_BOT_TOKEN }} + + - name: Set up Node.js + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + with: + node-version: 20 + check-latest: true + cache: npm + + - name: Install latest unstable SDK + run: | + npm i --save @jellyfin/sdk@unstable + VERSION=$(jq -r '.dependencies["@jellyfin/sdk"]' package.json) + echo "JF_SDK_VERSION=${VERSION}" >> $GITHUB_ENV + + - name: Open a pull request + uses: peter-evans/create-pull-request@8867c4aba1b742c39f8d0ba35429c2dfa4b6cb20 # v7.0.1 + with: + token: ${{ secrets.JF_BOT_TOKEN }} + commit-message: Update @jellyfin/sdk to ${{env.JF_SDK_VERSION}} + committer: jellyfin-bot + author: jellyfin-bot + branch: update-jf-sdk + delete-branch: true + title: Update @jellyfin/sdk to ${{env.JF_SDK_VERSION}} + body: | + **Changes** + Updates to the latest unstable @jellyfin/sdk build + labels: | + dependencies + npm diff --git a/package.json b/package.json index d5650b7796..26d1c09d3b 100644 --- a/package.json +++ b/package.json @@ -152,6 +152,7 @@ "build:development": "webpack --config webpack.dev.js", "build:production": "cross-env NODE_ENV=\"production\" webpack --config webpack.prod.js", "build:check": "tsc --noEmit", + "build:es-check": "npm run build:production && npm run escheck", "escheck": "es-check", "lint": "eslint \"./\"", "test": "vitest --watch=false --config vite.config.ts", From d1f8742ce780ee5c0f74359233901c820b59b34b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Fern=C3=A1ndez?= Date: Wed, 25 Sep 2024 00:22:47 +0200 Subject: [PATCH 059/120] Remove unnecessary whitespace Co-authored-by: Bill Thornton --- .github/workflows/schedule.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/schedule.yml b/.github/workflows/schedule.yml index 5c07f5a302..809bf4c439 100644 --- a/.github/workflows/schedule.yml +++ b/.github/workflows/schedule.yml @@ -4,7 +4,6 @@ on: schedule: - cron: '30 1 * * *' workflow_dispatch: - permissions: issues: write pull-requests: write From 7820a52609b5fe89725388002004f5da47a149fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Fern=C3=A1ndez?= Date: Wed, 9 Oct 2024 22:15:23 +0000 Subject: [PATCH 060/120] Update with upstream changes --- .github/workflows/__package.yml | 1 + .github/workflows/__quality_checks.yml | 1 + .github/workflows/pull_request.yml | 1 + .github/workflows/schedule.yml | 42 -------------------------- 4 files changed, 3 insertions(+), 42 deletions(-) diff --git a/.github/workflows/__package.yml b/.github/workflows/__package.yml index 4b7e15d3bc..e0e9a2a3ba 100644 --- a/.github/workflows/__package.yml +++ b/.github/workflows/__package.yml @@ -22,6 +22,7 @@ jobs: uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version: 20 + cache: npm check-latest: true - name: Install Node.js dependencies diff --git a/.github/workflows/__quality_checks.yml b/.github/workflows/__quality_checks.yml index f89ecc8a56..546d7a954e 100644 --- a/.github/workflows/__quality_checks.yml +++ b/.github/workflows/__quality_checks.yml @@ -51,6 +51,7 @@ jobs: uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version: 20 + cache: npm check-latest: true - name: Install dependencies 📦 diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index de33fd0c42..07f1f467b5 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -88,6 +88,7 @@ jobs: uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version: 20 + cache: npm check-latest: true - name: Install Node.js dependencies diff --git a/.github/workflows/schedule.yml b/.github/workflows/schedule.yml index 809bf4c439..13209c4504 100644 --- a/.github/workflows/schedule.yml +++ b/.github/workflows/schedule.yml @@ -48,45 +48,3 @@ jobs: stale-pr-label: merge conflict close-pr-message: |- This PR has been closed due to having unresolved merge conflicts. - - update: - name: Update the Jellyfin SDK - runs-on: ubuntu-latest - if: ${{ github.repository == 'jellyfin/jellyfin-web' }} - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - with: - ref: master - token: ${{ secrets.JF_BOT_TOKEN }} - - - name: Set up Node.js - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Install latest unstable SDK - run: | - npm i --save @jellyfin/sdk@unstable - VERSION=$(jq -r '.dependencies["@jellyfin/sdk"]' package.json) - echo "JF_SDK_VERSION=${VERSION}" >> $GITHUB_ENV - - - name: Open a pull request - uses: peter-evans/create-pull-request@8867c4aba1b742c39f8d0ba35429c2dfa4b6cb20 # v7.0.1 - with: - token: ${{ secrets.JF_BOT_TOKEN }} - commit-message: Update @jellyfin/sdk to ${{env.JF_SDK_VERSION}} - committer: jellyfin-bot - author: jellyfin-bot - branch: update-jf-sdk - delete-branch: true - title: Update @jellyfin/sdk to ${{env.JF_SDK_VERSION}} - body: | - **Changes** - Updates to the latest unstable @jellyfin/sdk build - labels: | - dependencies - npm From 3827fe177f81924b8caac3ca2d7e15c97092ab9a Mon Sep 17 00:00:00 2001 From: Matheo Date: Wed, 9 Oct 2024 21:17:32 +0000 Subject: [PATCH 061/120] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 3805109a91..cad8a6a4ec 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -47,7 +47,7 @@ "BoxRear": "Dos de boîtier", "Browse": "Parcourir", "MessageBrowsePluginCatalog": "Explorer notre catalogue pour voir les extensions disponibles.", - "BurnSubtitlesHelp": "Déterminer si le serveur doit incruster les sous-titres lors du transcodage de la vidéo. Les performances seront grandement améliorées sans incrustation. Sélectionner 'Auto' pour incruster les formats graphiques (VobSub, PGS, SUB, IDX, etc.) ainsi que certains sous-titres ASS ou SSA.", + "BurnSubtitlesHelp": "Déterminer si le serveur doit incruster les sous-titres. Les performances seront grandement améliorées sans incrustation. Sélectionner 'Auto' pour incruster les formats graphiques (VobSub, PGS, SUB, IDX, etc.) ainsi que certains sous-titres ASS ou SSA.", "ButtonAddMediaLibrary": "Ajouter une médiathèque", "ButtonAddScheduledTaskTrigger": "Ajouter un déclencheur", "ButtonAddServer": "Ajouter un serveur", @@ -1967,5 +1967,6 @@ "AllowTonemappingSoftwareHelp": "Le tone-mapping peut transformer la plage dynamique d'une vidéo de HDR à SDR tout en conservant les détails et les couleurs de l'image, qui sont des informations très importantes pour représenter la scène originale. Fonctionne uniquement avec les vidéos 10 bits HDR10, HLG et DoVi.", "LabelTrickplayKeyFrameOnlyExtraction": "Générer uniquement des images à partir des images clés", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extraire uniquement les images clés pour un traitement beaucoup plus rapide avec un minutage moins précis. Si le décodeur matériel configuré ne prend pas en charge ce mode, il utilisera le décodeur logiciel à la place.", - "AllowFmp4TranscodingContainerHelp": "Autoriser le conteneur de transcodage fMP4 pour ce tuner afin d'activer les contenus HEVC et HDR. Tous les tuners ne sont pas compatibles avec ce conteneur. Désactivez ceci si vous rencontrez des problèmes de lecture." + "AllowFmp4TranscodingContainerHelp": "Autoriser le conteneur de transcodage fMP4 pour ce tuner afin d'activer les contenus HEVC et HDR. Tous les tuners ne sont pas compatibles avec ce conteneur. Désactivez ceci si vous rencontrez des problèmes de lecture.", + "LabelScreensaverTimeHelp": "La durée en secondes d'inactivité requise pour démarrer l'économiseur d'écran." } From dc89c2de6b32a54ffe19224b12430d593002a198 Mon Sep 17 00:00:00 2001 From: Kityn Date: Wed, 9 Oct 2024 21:22:51 +0000 Subject: [PATCH 062/120] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 1face327a4..8c5dadeabe 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -51,7 +51,7 @@ "BoxRear": "Pudełko (tył)", "Browse": "Przeglądaj", "MessageBrowsePluginCatalog": "Przejrzyj nasz katalog wtyczek żeby zobaczyć dostępne wtyczki.", - "BurnSubtitlesHelp": "Określ czy serwer powinien wypalać napisy podczas konwersji wideo. Unikanie wypalania napisów znacząco poprawia wydajność. Wybierz Automatycznie, w celu wypalania zarówno napisów w formatach graficznych (VobSub, PGS, SUB, IDX, itd.), jak i pewnych napisów ASS lub SSA.", + "BurnSubtitlesHelp": "Określ, czy serwer powinien wypalać napisy. Unikanie wypalania napisów znacząco poprawia wydajność. Wybierz Automatycznie w celu wypalania napisów w formatach graficznych (VobSub, PGS, SUB, IDX itp.) oraz niektórych napisów ASS lub SSA.", "ButtonAddMediaLibrary": "Dodaj media do biblioteki", "ButtonAddScheduledTaskTrigger": "Dodaj wyzwalacz", "ButtonAddServer": "Dodaj serwer", @@ -1969,5 +1969,7 @@ "MessageSplitVersionsError": "Wystąpił błąd podczas podziału wersji", "DateModified": "Data modyfikacji", "LabelScreensaverTime": "Czas wygaszacza ekranu", - "LabelScreensaverTimeHelp": "Ilość czasu bezczynności w sekundach, potrzebna do uruchomienia wygaszacza ekranu." + "LabelScreensaverTimeHelp": "Ilość czasu bezczynności w sekundach, potrzebna do uruchomienia wygaszacza ekranu.", + "AlwaysBurnInSubtitleWhenTranscoding": "Zawsze wypalaj napisy podczas transkodowania", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Wypal wszystkie napisy, gdy zostanie wyzwolone transkodowanie. Zapewnia to synchronizację napisów po transkodowaniu kosztem zmniejszonej prędkości transkodowania." } From 6caa21fe3079c5abb21e0f38dedc937c02e47765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Thu, 10 Oct 2024 06:47:33 +0000 Subject: [PATCH 063/120] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index d1d81cb6e6..1cd8234a80 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1023,7 +1023,7 @@ "Banner": "Výřez plakátu", "Blacklist": "Zakázat vše kromě výjimek", "Browse": "Procházet", - "BurnSubtitlesHelp": "Zda má server při překódování videa vypálit titulky do obrazu. Tato funkce má velký negativní vliv na výkon. Chcete-li vypálit grafické formáty titulků (VobSub, PGS, SUB, IDX, atd.) a některé titulky ASS nebo SSA, vyberte možnost Automaticky.", + "BurnSubtitlesHelp": "Zda má server vypálit titulky do obrazu. Tato funkce má velký negativní vliv na výkon. Chcete-li vypálit grafické formáty titulků (VobSub, PGS, SUB, IDX, atd.) a některé titulky ASS nebo SSA, vyberte možnost Automaticky.", "ButtonInfo": "Info", "ButtonOk": "Ok", "ButtonScanAllLibraries": "Skenovat všechny knihovny", @@ -1967,5 +1967,9 @@ "RenderPgsSubtitle": "Experimentální rendrování titulků ve formátu PGS", "RenderPgsSubtitleHelp": "Zda má klient zobrazit titulky ve formátu PGS místo jejich vypálení do obrazu. Můžete se tak vyhnout překódování na serveru výměnou za horší výkon klienta.", "UseCustomTagDelimiters": "Použít vlastní oddělovač značek", - "UseCustomTagDelimitersHelp": "Rozdělit značky pro umělce a žánry pomocí vlastních znaků." + "UseCustomTagDelimitersHelp": "Rozdělit značky pro umělce a žánry pomocí vlastních znaků.", + "LabelScreensaverTime": "Prodleva spořiče obrazovky", + "LabelScreensaverTimeHelp": "Po jak dlouhé neaktivitě (v sekundách) se má spustit spořič obrazovky.", + "AlwaysBurnInSubtitleWhenTranscoding": "Vždy vypálit titulky do obrazu při překódování", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Vypálit všechny titulky do obrazu při překódování. To zaručí, že budou titulky po překódování synchronizovány, ale překódování bude pomalejší." } From 1e1bf3a1bf861137603548f56f7c36b843f85020 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Thu, 10 Oct 2024 07:45:49 +0000 Subject: [PATCH 064/120] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 9a3c1cd564..eb7a5d6ecf 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -984,7 +984,7 @@ "CancelSeries": "Ukončiť seriál", "ButtonSplit": "Rozdeliť", "ButtonAddImage": "Pridať obrázok", - "BurnSubtitlesHelp": "Určuje, či má server pri prekódovaní videa vypáliť titulky do obrazu. Vynechanie tejto možnosti výrazne zvýši výkon. Vyberte možnosť Automaticky, pokiaľ chcete vypáliť do obrazu titulky v grafickom formáte (VobSub, PGS, SUB, IDX, atd.) a niektoré ASS alebo SSA titulky.", + "BurnSubtitlesHelp": "Určuje, či má server vypáliť titulky do videa. Vynechanie tejto možnosti výrazne zvýši výkon. Vyberte možnosť Automaticky, pokiaľ chcete vypáliť do obrazu titulky v grafickom formáte (VobSub, PGS, SUB, IDX, atd.) a niektoré ASS alebo SSA titulky.", "MessageBrowsePluginCatalog": "Prehliadnite si náš katalóg dostupných zásuvných modulov.", "Browse": "Prechádzať", "Blacklist": "Blacklist", @@ -1967,5 +1967,9 @@ "PluginUninstallError": "Pri odinštalovaní zásuvného modulu došlo k chybe.", "PreferNonstandardArtistsTag": "Preferovať tag ARTISTS, ak je k dispozícii", "RenderPgsSubtitle": "Experimentálne vykresľovanie titulkov formátu PGS", - "VideoCodecTagNotSupported": "Tag video kodeku nie je podporovaný" + "VideoCodecTagNotSupported": "Tag video kodeku nie je podporovaný", + "LabelScreensaverTimeHelp": "Čas v sekundách nečinnosti potrebný na spustenie šetriča obrazovky.", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Vpálenie všetkých titulkov pri prekódovaní. Tým sa zabezpečí synchronizácia titulkov po prekódovaní za cenu zníženia rýchlosti prekódovania.", + "AlwaysBurnInSubtitleWhenTranscoding": "Pri prekódovaní vždy vpáliť titulky do videa", + "LabelScreensaverTime": "Čas šetriča obrazovky" } From 4740cd156ff5d9567c39025a8a3f9d0d6829b4d4 Mon Sep 17 00:00:00 2001 From: BromTeque Date: Thu, 10 Oct 2024 10:43:55 +0000 Subject: [PATCH 065/120] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index 987f622dfe..d6773533d3 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -971,7 +971,7 @@ "AllLanguages": "Alle språk", "AllComplexFormats": "Alle avanserte formater (ASS, SSA, VobSub, PGS, SUB, IDX, …)", "AccessRestrictedTryAgainLater": "Tilgang er for øyeblikket begrenset. Vennligst prøv igjen senere.", - "BurnSubtitlesHelp": "Angir om serveren skal brenne inn undertekster imens videoer konverteres. Ytelsen på serveren vil forbedres dersom tekstingen ikke brennes inn. Velg Automatisk for å brenne inn bildebaserte formater (VobSub, PGS, SUB, IDX, osv.) og enkelte ASS eller SSA-undertekster.", + "BurnSubtitlesHelp": "Angir om tjeneren skal brenne inn undertekster. Ytelsen på serveren vil forbedres dersom tekstingen ikke brennes inn. Velg Automatisk for å brenne inn bildebaserte formater (VobSub, PGS, SUB, IDX, osv.) og enkelte ASS eller SSA-undertekster.", "General": "Generelt", "ChangingMetadataImageSettingsNewContent": "Endringer gjort i innstillinger for metadata eller omslagsbilder vil kun gjelde nytt innhold i biblioteket ditt. For å endre eksisterende innhold, må du oppdatere dets metadata manuelt.", "DefaultSubtitlesHelp": "Undertekster lastes inn basert på flaggene \"standard\" og \"tvungen\" i videoens integrerte metadata. Språkpreferanser tas høyde for dersom flere valg er tilgjengelig.", @@ -1777,7 +1777,7 @@ "BackdropScreensaver": "Skjermsparingsbakgrunn", "ForeignPartsOnly": "Kun tvungne/fremmede deler", "SearchResultsEmpty": "Sorry! Ingen resultater funnet for \"{0}\"", - "SelectAudioNormalizationHelp": "Sporjustering - justerer volumet for hvert spor så de spiller av med samme volum. Albumsjustering - justerer volumet på alle sporene i et album, og beholder albumets dynamiske rekkevidde.", + "SelectAudioNormalizationHelp": "Sporjustering - justerer volumet for hvert spor så de spiller av med samme volum. Albumsjustering - justerer volumet på alle sporene i et album, og beholder albumets dynamiske rekkevidde. Bytte mellom \"Av\" og andre alternativer krever at du starter den gjeldende avspillingen på nytt.", "LabelAlbumGain": "Albumjustering", "LabelSelectAudioNormalization": "Lydnormalisering", "LabelTrackGain": "Sporjustering", @@ -1962,5 +1962,9 @@ "DateModified": "Data modifisert", "MessageCancelSeriesTimerError": "Det oppstod en feil under avbryting av serietidtakeren", "MessageCancelTimerError": "Det oppstod en feil under avbryting av tidtakeren", - "MessageSplitVersionsError": "Det oppsto en feil under oppdeling av versjoner" + "MessageSplitVersionsError": "Det oppsto en feil under oppdeling av versjoner", + "LabelScreensaverTime": "Tid for skjermsparer", + "LabelScreensaverTimeHelp": "Hvor lang tid i sekunder med inaktivitet som kreves for å starte skjermspareren.", + "AlwaysBurnInSubtitleWhenTranscoding": "Alltid brenn inn undertekst ved omkoding", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Brenn in all undertekst når omkoding aktiveres. Dette sikrer synkronisering av undertekst etter transkoding på bekostning av redusert transkodingshastighet." } From 5ffc9c7618119af955059e497b5d20f53b6ac03f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 9 Oct 2024 16:53:39 -0400 Subject: [PATCH 066/120] Update drawer label for metadata manager --- .../components/drawer/sections/ServerDrawerSection.tsx | 2 +- src/controllers/dashboard/metadataimages.html | 2 +- src/controllers/user/menu/index.html | 2 +- src/scripts/libraryMenu.js | 2 +- src/strings/en-us.json | 1 - 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/apps/dashboard/components/drawer/sections/ServerDrawerSection.tsx b/src/apps/dashboard/components/drawer/sections/ServerDrawerSection.tsx index 062b453b37..9d0970096f 100644 --- a/src/apps/dashboard/components/drawer/sections/ServerDrawerSection.tsx +++ b/src/apps/dashboard/components/drawer/sections/ServerDrawerSection.tsx @@ -91,7 +91,7 @@ const ServerDrawerSection = () => { - + diff --git a/src/controllers/dashboard/metadataimages.html b/src/controllers/dashboard/metadataimages.html index 0d7d349ecd..a79d59fc63 100644 --- a/src/controllers/dashboard/metadataimages.html +++ b/src/controllers/dashboard/metadataimages.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/user/menu/index.html b/src/controllers/user/menu/index.html index 8fe6326fc2..a6b0a2d045 100644 --- a/src/controllers/user/menu/index.html +++ b/src/controllers/user/menu/index.html @@ -89,7 +89,7 @@
-
${Metadata}
+
${MetadataManager}
diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js index c9e9934495..ed44aa05cd 100644 --- a/src/scripts/libraryMenu.js +++ b/src/scripts/libraryMenu.js @@ -333,7 +333,7 @@ function refreshLibraryInfoInDrawer(user) { html += globalize.translate('HeaderAdmin'); html += ''; html += `${globalize.translate('TabDashboard')}`; - html += `${globalize.translate('Metadata')}`; + html += `${globalize.translate('MetadataManager')}`; html += '
'; } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 88f0125fbc..7e1309ba93 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1147,7 +1147,6 @@ "MessageUnableToConnectToServer": "We're unable to connect to the selected server right now. Please ensure it is running and try again.", "MessageUnauthorizedUser": "You are not authorized to access the server at this time. Please contact your server administrator for more information.", "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders.", - "Metadata": "Metadata", "MetadataManager": "Metadata Manager", "MetadataSettingChangeHelp": "Changing metadata settings will affect new content added going forward. To refresh existing content, open the detail screen and click the 'Refresh' button, or do bulk refreshes using the 'Metadata Manager'.", "MillisecondsUnit": "ms", From a5fb893fd8cddb9396effd9145599a171b02ecff Mon Sep 17 00:00:00 2001 From: ilias-la Date: Thu, 10 Oct 2024 12:43:21 +0000 Subject: [PATCH 067/120] Translated using Weblate (Greek) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/ --- src/strings/el.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/el.json b/src/strings/el.json index 77690fc1c8..f8c4961f0c 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -1761,5 +1761,6 @@ "PreferEmbeddedExtrasTitlesOverFileNames": "Προτιμήστε τους ενσωματωμένους τίτλους από τα ονόματα αρχείων για πρόσθετα", "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Τα πρόσθετα έχουν συχνά το ίδιο ενσωματωμένο όνομα με τον γονέα, ελέγξτε αυτό για να χρησιμοποιήσετε ενσωματωμένους τίτλους για αυτά ούτως ή άλλως.", "LabelSegmentKeepSecondsHelp": "Χρονικό διάστημα σε δευτερόλεπτα, για το οποίο τα τμήματα θα διατηρούνται έπειτα από την λήψη τους από τον χρήστη. Λειτουργεί μόνο αν η ανίχνευση τμημάτων είναι ενεργοποιημένη.", - "AllowSubtitleManagement": "Επίτρεψε στον χρήστη να επεξεργάζεται υποτίτλους" + "AllowSubtitleManagement": "Επίτρεψε στον χρήστη να επεξεργάζεται υποτίτλους", + "AllowContentWithTagsHelp": "Μόνο εμφάνιση πολυμέσων με τουλάχιστον μία από τις καθορισμένες ετικέτες." } From 2235d162e7a418e6a1747ae1e2588cd55f51b4cb Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 10 Oct 2024 10:59:00 -0400 Subject: [PATCH 068/120] Fix padding issues in the metadata manager --- src/apps/dashboard/AppOverrides.scss | 6 +++++- src/controllers/edititemmetadata.html | 2 +- src/styles/metadataeditor.scss | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/apps/dashboard/AppOverrides.scss b/src/apps/dashboard/AppOverrides.scss index c001150fc5..1918bbe50d 100644 --- a/src/apps/dashboard/AppOverrides.scss +++ b/src/apps/dashboard/AppOverrides.scss @@ -9,7 +9,7 @@ $drawer-width: 240px; // Fix dashboard pages layout to work with drawer .dashboardDocument { - .mainAnimatedPage { + .mainAnimatedPage:not(.metadataEditorPage) { @media all and (min-width: $mui-bp-md) { left: $drawer-width; } @@ -31,4 +31,8 @@ $drawer-width: 240px; padding-top: 3.25rem; } } + + .metadataEditorPage { + padding-top: 3.25rem !important; + } } diff --git a/src/controllers/edititemmetadata.html b/src/controllers/edititemmetadata.html index 2fe57813dd..133651b6d0 100644 --- a/src/controllers/edititemmetadata.html +++ b/src/controllers/edititemmetadata.html @@ -11,7 +11,7 @@
-
+
diff --git a/src/styles/metadataeditor.scss b/src/styles/metadataeditor.scss index 49103275f8..51dfc84be2 100644 --- a/src/styles/metadataeditor.scss +++ b/src/styles/metadataeditor.scss @@ -56,7 +56,7 @@ @media all and (min-width: 50em) { .editPageSidebar { position: fixed; - top: 5.2em; + top: 3.25rem; bottom: 0; width: 30%; display: block; From 176ebec6e221b73c24b68343b195bb227322552e Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Thu, 10 Oct 2024 15:46:18 +0000 Subject: [PATCH 069/120] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index ba2e3e4d54..b04b60b850 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -94,7 +94,7 @@ "Box": "Box", "BoxRear": "Box (rear)", "Browse": "Browse", - "BurnSubtitlesHelp": "Determine if the server should burn in subtitles while transcoding videos. Avoiding this will greatly improve performance. Select Auto to burn image based formats (VobSub, PGS, SUB, IDX, etc.) and certain ASS or SSA subtitles.", + "BurnSubtitlesHelp": "Determine if the server should burn in subtitles. Avoiding this will greatly improve performance. Select Auto to burn image-based formats (VobSub, PGS, SUB, IDX, etc.) and certain ASS or SSA subtitles.", "ButtonAddMediaLibrary": "Add Media Library", "ButtonAddScheduledTaskTrigger": "Add Trigger", "ButtonAddServer": "Add Server", @@ -1967,5 +1967,9 @@ "DateModified": "Date modified", "MessageCancelSeriesTimerError": "An error occurred while cancelling the series timer", "MessageCancelTimerError": "An error occurred while cancelling the timer", - "MessageSplitVersionsError": "An error occurred while splitting versions" + "MessageSplitVersionsError": "An error occurred while splitting versions", + "LabelScreensaverTime": "Screensaver Time", + "AlwaysBurnInSubtitleWhenTranscoding": "Always burn in subtitle when transcoding", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Burn in all subtitles when transcoding is triggered. This ensures subtitle synchronisation after transcoding at the cost of reduced transcoding speed.", + "LabelScreensaverTimeHelp": "The amount of time in seconds of inactivity required to start the screensaver." } From 230925e159466f3253b10d018ce28302c891584e Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 10 Oct 2024 23:36:32 +0300 Subject: [PATCH 070/120] Only connect to ServerConnections once (#6150) * Only connect to ServerConnections once * Fix initial login after wizard completion * Fix login when refreshing login or select server page --- src/components/ConnectionRequired.tsx | 27 +++++++++++++++------------ src/components/ServerConnections.js | 1 + src/index.jsx | 3 +++ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/components/ConnectionRequired.tsx b/src/components/ConnectionRequired.tsx index 960ead7d76..41b96cb360 100644 --- a/src/components/ConnectionRequired.tsx +++ b/src/components/ConnectionRequired.tsx @@ -149,19 +149,22 @@ const ConnectionRequired: FunctionComponent = ({ useEffect(() => { // Check connection status on initial page load - ServerConnections.connect() - .then(firstConnection => { - console.debug('[ConnectionRequired] connection state', firstConnection?.State); + const apiClient = ServerConnections.currentApiClient(); + const firstConnection = ServerConnections.firstConnection; + console.debug('[ConnectionRequired] connection state', firstConnection?.State); + ServerConnections.firstConnection = null; - if (firstConnection && firstConnection.State !== ConnectionState.SignedIn) { - return handleIncompleteWizard(firstConnection); - } else { - return validateUserAccess(); - } - }) - .catch(err => { - console.error('[ConnectionRequired] failed to connect to server', err); - }); + if (firstConnection && firstConnection.State !== ConnectionState.SignedIn && !apiClient?.isLoggedIn()) { + handleIncompleteWizard(firstConnection) + .catch(err => { + console.error('[ConnectionRequired] could not start wizard', err); + }); + } else { + validateUserAccess() + .catch(err => { + console.error('[ConnectionRequired] could not validate user access', err); + }); + } }, [handleIncompleteWizard, validateUserAccess]); if (isLoading) { diff --git a/src/components/ServerConnections.js b/src/components/ServerConnections.js index 93aff18584..be2ac43877 100644 --- a/src/components/ServerConnections.js +++ b/src/components/ServerConnections.js @@ -33,6 +33,7 @@ class ServerConnections extends ConnectionManager { constructor() { super(...arguments); this.localApiClient = null; + this.firstConnection = null; // Set the apiclient minimum version to match the SDK this._minServerVersion = MINIMUM_VERSION; diff --git a/src/index.jsx b/src/index.jsx index dac6f72e8b..cbbc633ce6 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -110,6 +110,9 @@ build: ${__JF_BUILD_VERSION__}`); Events.on(apiClient, 'requestfail', appRouter.onRequestFail); }); + // Connect to server + ServerConnections.firstConnection = await ServerConnections.connect(); + // Render the app await renderApp(); From 67283befbed53a3ba622b4e3d823276869bae0ec Mon Sep 17 00:00:00 2001 From: Manuel Weber Date: Thu, 10 Oct 2024 19:06:02 +0000 Subject: [PATCH 071/120] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 651b7d6c66..446e664f82 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -44,7 +44,7 @@ "BoxRear": "Box (Rückseite)", "Browse": "Durchsuchen", "MessageBrowsePluginCatalog": "Durchsuche unseren Katalog, um alle verfügbaren Plugins anzuzeigen.", - "BurnSubtitlesHelp": "Legt fest, ob der Server die Untertitel während der Videotranskodierung einbrennen soll. Deaktivieren verbessert die Serverperformance immens. Wähle Auto, um bildbasierte Formate (z.B. VobSub, PGS, SUB, IDX, etc.) sowie bestimmte ASS- oder SSA-Untertitel einbrennen zu lassen.", + "BurnSubtitlesHelp": "Legt fest, ob der Server die Untertitel einbrennen soll. Deaktivieren verbessert die Serverperformance immens. Wähle Auto, um bildbasierte Formate (z.B. VobSub, PGS, SUB, IDX, etc.) sowie bestimmte ASS- oder SSA-Untertitel einbrennen zu lassen.", "ButtonAddMediaLibrary": "Medienbibliothek hinzufügen", "ButtonAddScheduledTaskTrigger": "Auslöser hinzufügen", "ButtonAddServer": "Server hinzufügen", @@ -1963,5 +1963,7 @@ "UseCustomTagDelimitersHelp": "Trennen Sie Künstler-/Genre-Tags mit benutzerdefinierten Zeichen.", "LabelCustomTagDelimiters": "Benutzerdefinierte Tag-Begrenzung", "LabelDelimiterWhitelist": "Trennzeichen Whitelist", - "UseCustomTagDelimiters": "Benutzerdefinierte Tag-Begrenzung verwenden" + "UseCustomTagDelimiters": "Benutzerdefinierte Tag-Begrenzung verwenden", + "DateModified": "Datum verändert", + "AlwaysBurnInSubtitleWhenTranscoding": "Beim Transkodieren immer Untertitel einbrennen" } From 9536a3721338952aa6365d6b6ebff686454bf07b Mon Sep 17 00:00:00 2001 From: Scott McKenzie Date: Fri, 11 Oct 2024 07:42:51 +1100 Subject: [PATCH 072/120] Add examples to LabelPublishedServerUriHelp string (#6163) --- src/strings/en-us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 7e1309ba93..7fd84c390f 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -839,7 +839,7 @@ "LabelPublicHttpsPort": "Public HTTPS port number", "LabelPublicHttpsPortHelp": "The public port number that should be mapped to the local HTTPS port.", "LabelPublishedServerUri": "Published Server URIs", - "LabelPublishedServerUriHelp": "Override the URI used by Jellyfin, based on the interface, or client IP address.", + "LabelPublishedServerUriHelp": "Override the URI used by Jellyfin, based on the interface, or client IP address. For example: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", "LabelQuickConnectCode": "Quick Connect code", "LabelReasonForTranscoding": "Reason for transcoding", "LabelRecord": "Record", From a6d95020d9d2f520c7b1b5b4358d37ac4e86a444 Mon Sep 17 00:00:00 2001 From: Evan Jarrett Date: Sat, 31 Aug 2024 13:16:19 -0500 Subject: [PATCH 073/120] add ability to select QSV device in the UI --- src/controllers/dashboard/encodingsettings.html | 5 +++++ src/controllers/dashboard/encodingsettings.js | 6 ++++++ src/strings/en-us.json | 2 ++ 3 files changed, 13 insertions(+) diff --git a/src/controllers/dashboard/encodingsettings.html b/src/controllers/dashboard/encodingsettings.html index d23602e503..9082831487 100644 --- a/src/controllers/dashboard/encodingsettings.html +++ b/src/controllers/dashboard/encodingsettings.html @@ -30,6 +30,11 @@
${LabelVaapiDeviceHelp}
+
+ +
${LabelQsvDeviceHelp}
+
+

${LabelEnableHardwareDecodingFor}

diff --git a/src/controllers/dashboard/encodingsettings.js b/src/controllers/dashboard/encodingsettings.js index 03f5455b65..a52ada96e8 100644 --- a/src/controllers/dashboard/encodingsettings.js +++ b/src/controllers/dashboard/encodingsettings.js @@ -31,6 +31,7 @@ function loadPage(page, config, systemInfo) { page.querySelector('#txtFallbackFontPath').value = config.FallbackFontPath || ''; page.querySelector('#chkEnableFallbackFont').checked = config.EnableFallbackFont; $('#txtVaapiDevice', page).val(config.VaapiDevice || ''); + page.querySelector('#txtQsvDevice').value = config.QsvDevice || ''; page.querySelector('#chkTonemapping').checked = config.EnableTonemapping; page.querySelector('#chkVppTonemapping').checked = config.EnableVppTonemapping; page.querySelector('#chkVideoToolboxTonemapping').checked = config.EnableVideoToolboxTonemapping; @@ -93,6 +94,7 @@ function onSubmit() { config.EncodingThreadCount = $('#selectThreadCount', form).val(); config.HardwareAccelerationType = $('#selectVideoDecoder', form).val(); config.VaapiDevice = $('#txtVaapiDevice', form).val(); + config.QsvDevice = form.querySelector('#txtQsvDevice').value; config.EnableTonemapping = form.querySelector('#chkTonemapping').checked; config.EnableVppTonemapping = form.querySelector('#chkVppTonemapping').checked; config.EnableVideoToolboxTonemapping = form.querySelector('#chkVideoToolboxTonemapping').checked; @@ -235,8 +237,12 @@ $(document).on('pageinit', '#encodingSettingsPage', function () { if (this.value == 'qsv') { page.querySelector('.fldSysNativeHwDecoder').classList.remove('hide'); + page.querySelector('.fldQsvDevice').classList.remove('hide'); + page.querySelector('#txtQsvDevice').setAttribute('required', 'required'); } else { page.querySelector('.fldSysNativeHwDecoder').classList.add('hide'); + page.querySelector('.fldQsvDevice').classList.add('hide'); + page.querySelector('#txtQsvDevice').removeAttribute('required'); } if (this.value == 'nvenc') { diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 7fd84c390f..e46a82b8bd 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -840,6 +840,8 @@ "LabelPublicHttpsPortHelp": "The public port number that should be mapped to the local HTTPS port.", "LabelPublishedServerUri": "Published Server URIs", "LabelPublishedServerUriHelp": "Override the URI used by Jellyfin, based on the interface, or client IP address. For example: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", + "LabelQsvDevice": "QSV Device", + "LabelQsvDeviceHelp": "This is the render node that is used for hardware acceleration.", "LabelQuickConnectCode": "Quick Connect code", "LabelReasonForTranscoding": "Reason for transcoding", "LabelRecord": "Record", From a452d6302d785a2e2d294d9ec2674bfc4a0bf6a9 Mon Sep 17 00:00:00 2001 From: Evan Jarrett Date: Sun, 1 Sep 2024 10:39:59 -0500 Subject: [PATCH 074/120] update with a more detailed help message --- src/strings/en-us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index e46a82b8bd..be05bed917 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -841,7 +841,7 @@ "LabelPublishedServerUri": "Published Server URIs", "LabelPublishedServerUriHelp": "Override the URI used by Jellyfin, based on the interface, or client IP address. For example: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", "LabelQsvDevice": "QSV Device", - "LabelQsvDeviceHelp": "This is the render node that is used for hardware acceleration.", + "LabelQsvDeviceHelp": "Specify the device for Intel QSV on a multi-GPU system. On Linux, this is the render node, e.g., /dev/dri/renderD128. On Windows, this is the device index starting from 0. Leave blank unless you know what you are doing.", "LabelQuickConnectCode": "Quick Connect code", "LabelReasonForTranscoding": "Reason for transcoding", "LabelRecord": "Record", From f7f44acee5d4ad856a80bbcddf6fe2452c92a37c Mon Sep 17 00:00:00 2001 From: trawzified Date: Thu, 10 Oct 2024 21:12:33 +0000 Subject: [PATCH 075/120] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 984e897dda..4cbd064d9a 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1459,7 +1459,7 @@ "LabelUDPPortRange": "UDP-communicatiebereik", "LabelSSDPTracingFilterHelp": "Optioneel IP-adres waarop het geregistreerde SSDP-verkeer wordt gefilterd.", "LabelSSDPTracingFilter": "SSDP-filter", - "LabelPublishedServerUriHelp": "Overschrijf de URI die door Jellyfin wordt gebruikt, op basis van de interface of het IP-adres van de client.", + "LabelPublishedServerUriHelp": "Overschrijf de URI die door Jellyfin wordt gebruikt, op basis van de interface of het IP-adres van de client. Bijvoorbeeld: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, of all=https://jellyfin.example.com", "LabelPublishedServerUri": "Gepubliceerde server-URI's", "LabelIsForced": "Geforceerd", "LabelHDHomerunPortRangeHelp": "Beperkt het UDP-poortbereik van HDHomeRun tot deze waarde. (Standaard is 1024 - 65535).", @@ -1895,7 +1895,7 @@ "LabelSelectPreferredTranscodeVideoAudioCodec": "Gewenste geluidscodec bij afspelen video", "SelectPreferredTranscodeVideoAudioCodecHelp": "Selecteer de gewenste geluidscodec om naartoe te transcoderen bij video-inhoud. Als de voorkeurscodec niet wordt ondersteund, gebruikt de server de beste codec die wel beschikbaar is.", "Alternate": "Alternatief", - "AlternateDVD": "Alternatief dvd", + "AlternateDVD": "Alternatieve dvd", "Regional": "Regionaal", "LabelSelectPreferredTranscodeVideoCodec": "Gewenste beeldcodec voor transcoderen", "SelectPreferredTranscodeVideoCodecHelp": "Selecteer de gewenste beeldcodec om naartoe te transcoderen. Als de voorkeurscodec niet wordt ondersteund, gebruikt de server de beste codec die wel beschikbaar is.", From 3f8738990d2701568477d1b6a3853eac206f7eed Mon Sep 17 00:00:00 2001 From: Kityn Date: Thu, 10 Oct 2024 21:13:05 +0000 Subject: [PATCH 076/120] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 8c5dadeabe..2f04f49053 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1422,7 +1422,7 @@ "QuickConnectAuthorizeFail": "Nieznany kod szybkiego łączenia", "QuickConnect": "Szybkie łączenie", "LabelQuickConnectCode": "Kod szybkiego łączenia", - "LabelPublishedServerUriHelp": "Nadpisz URI używane przez Jellyfin bazując na interfejsie lub adresie IP klienta.", + "LabelPublishedServerUriHelp": "Zastąp URI używany przez Jellyfin na podstawie interfejsu lub adresu IP klienta. Na przykład: internal=http://jellyfin.example.com, external=https://jellyfin.example.comm lub all=https://jellyfin.example.com", "LabelPublishedServerUri": "Publiczne URI serwera", "LabelMinAudiobookResumeHelp": "Tytuły są uważane za nieodtworzone jeśli zostały zatrzymane przed tym czasem.", "LabelMinAudiobookResume": "Minimalne wznowienie audiobooka w minutach", From 1f4cd6576323a6092930087cefb2904bdf7112df Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 11 Oct 2024 00:50:35 +0000 Subject: [PATCH 077/120] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 4cbd064d9a..123c26643a 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1459,7 +1459,7 @@ "LabelUDPPortRange": "UDP-communicatiebereik", "LabelSSDPTracingFilterHelp": "Optioneel IP-adres waarop het geregistreerde SSDP-verkeer wordt gefilterd.", "LabelSSDPTracingFilter": "SSDP-filter", - "LabelPublishedServerUriHelp": "Overschrijf de URI die door Jellyfin wordt gebruikt, op basis van de interface of het IP-adres van de client. Bijvoorbeeld: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, of all=https://jellyfin.example.com", + "LabelPublishedServerUriHelp": "Overschrijf de URI die door Jellyfin wordt gebruikt, op basis van de interface of het IP-adres van de cliënt. Bijvoorbeeld: internal=http://jellyfin.example.com, external=https://jellyfin.example.com of all=https://jellyfin.example.com", "LabelPublishedServerUri": "Gepubliceerde server-URI's", "LabelIsForced": "Geforceerd", "LabelHDHomerunPortRangeHelp": "Beperkt het UDP-poortbereik van HDHomeRun tot deze waarde. (Standaard is 1024 - 65535).", From c190b1a1df0ad2755ad7114e66ce74529eff9212 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Fri, 11 Oct 2024 01:42:42 +0000 Subject: [PATCH 078/120] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 9cf587c2fb..7aed2210d1 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1467,7 +1467,7 @@ "LabelUDPPortRangeHelp": "进行UDP连接时,限制 Jellyfin 使用此端口范围。(默认值为 1024 - 65535)。
注意:某些功能需要固定端口,这些端口可能不在此范围内。", "LabelUDPPortRange": "UDP 通信范围", "LabelSSDPTracingFilterHelp": "筛选记录的 SSDP 流量所依据的可选 IP 地址。", - "LabelPublishedServerUriHelp": "根据接口或客户端 IP 地址覆盖 Jellyfin 使用的 URI。", + "LabelPublishedServerUriHelp": "根据接口或客户端 IP 地址覆盖 Jellyfin 使用的 URI。例如:internal=http://jellyfin.example.com、external=https://jellyfin.example.com 或 all=https://jellyfin.example.com", "LabelIsForced": "强制的", "LabelHDHomerunPortRangeHelp": "将 HD Homerun 的 UDP 端口范围限制为该值。(默认值为 1024 - 65535)。", "LabelHDHomerunPortRange": "HDHomeRun 端口范围", From 3ff6283c0914ca32a46923bccba6f11219819ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 11 Oct 2024 05:26:27 +0000 Subject: [PATCH 079/120] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 1cd8234a80..eb29d6cb89 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1462,7 +1462,7 @@ "LabelUDPPortRange": "Rozsah pro komunikaci UDP", "LabelSSDPTracingFilterHelp": "Nepovinná IP adresa, pomocí které se má filtrovat zaznamenaná komunikace SSDP.", "LabelSSDPTracingFilter": "Filtr SSDP", - "LabelPublishedServerUriHelp": "Přepíše URI používanou serverem Jellyfin v závislosti na rozhraní nebo IP adrese klienta.", + "LabelPublishedServerUriHelp": "Přepíše URI používanou serverem Jellyfin v závislosti na rozhraní nebo IP adrese klienta. Například: internal=http://jellyfin.example.com, external=https://jellyfin.example.com nebo all=https://jellyfin.example.com", "LabelPublishedServerUri": "Veřejné URI serveru", "LabelIsForced": "Vynucené", "LabelHDHomerunPortRangeHelp": "Omezí rozsah UDP portů HDHomeRun na tuto hodnotu. (Výchozí hodnota je 1024-65535).", From 8def27a0f055b5fd3759bc7a97d3d88d40ef3c5e Mon Sep 17 00:00:00 2001 From: l00d3r Date: Fri, 11 Oct 2024 07:23:53 +0000 Subject: [PATCH 080/120] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index 99be5853b6..8da766c76d 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -592,7 +592,7 @@ "ButtonAddMediaLibrary": "Lisa meediakogu", "ButtonAddImage": "Lisa pilt", "ButtonActivate": "Aktiveeri", - "BurnSubtitlesHelp": "Määrab, kas server peaks videote transkoodimisel subtiitrid sisse põlema. Selle vältimine parandab jõudlust oluliselt. Pildipõhiste vormingute (VobSub, PGS, SUB, IDX jne.) ja teatud ASS- või SSA -subtiitrite põletamiseks vali 'automaatne'.", + "BurnSubtitlesHelp": "Määrab, kas server peaks subtiitrid sisse põletama. Selle vältimine parandab oluliselt jõudlust. Pildipõhiste vormingute (VobSub, PGS, SUB, IDX jne.) ja teatud ASS- või SSA -subtiitrite põletamiseks vali 'automaatne'.", "Browse": "Sirvi", "BoxSet": "Karbikomplekt", "BoxRear": "Karp (taga)", @@ -806,7 +806,7 @@ "LabelRecord": "Salvesta", "LabelReasonForTranscoding": "Transkoodimise põhjus", "LabelQuickConnectCode": "Kiirühendumise kood", - "LabelPublishedServerUriHelp": "Alistage Jellyfini kasutatav URI liidese või kliendi IP aadressi alusel.", + "LabelPublishedServerUriHelp": "Jellyfin'i poolt kasutatava URI muutmine liidesest või kliendi IP-aadressist lähtuvalt. Näiteks: sisemine=http://jellyfin.example.com, väline=https://jellyfin.example.com või kõik=https://jellyfin.example.com", "LabelPublishedServerUri": "Avaldatud serveri URId", "LabelPublicHttpsPortHelp": "Avaliku pordi number, mis liidetakse kohaliku HTTPS pordiga.", "LabelPublicHttpsPort": "Avaliku HTTPS pordi number", @@ -1661,7 +1661,7 @@ "EnableRewatchingNextUp": "Luba uuesti vaatamine Järgmises", "IntelLowPowerEncHelp": "Madala võimsusega kodeering võib hoida tarbetut CPU-GPU sünkroonimist. Linuxis tuleb need keelata, kui i915 HuC püsivara pole konfigureeritud.", "BackdropScreensaver": "Tausta ekraanisäästja", - "SelectAudioNormalizationHelp": "Raja võimendus – reguleerib iga loo helitugevust nii, et neid esitataks sama valjusega. Albumi võimendus – reguleerib ainult albumi kõigi lugude helitugevust, säilitades albumi dünaamilise ulatuse.", + "SelectAudioNormalizationHelp": "Raja võimendus – reguleerib iga loo helitugevust nii, et neid esitataks sama valjususega. Albumi võimendus – reguleerib ainult albumi kõigi lugude helitugevust, säilitades albumi dünaamilise ulatuse. Muutes valikuid tuleb jooksev taasesitus uuesti käivitada.", "EnableRewatchingNextUpHelp": "Luba jaotistes „Järgmine” juba vaadatud jagude kuvamine.", "PreferSystemNativeHwDecoder": "Eelistage OS-i DXVA või VA-API riistvaradekoodereid", "AllowCollectionManagement": "Luba sellel kasutajal kogusid hallata", @@ -1951,5 +1951,9 @@ "MessageSplitVersionsError": "Versioonideks jagamisel tekkis viga", "PreferNonstandardArtistsTagHelp": "Kasuta ARTIST sildi asemel ebastandartset ARTISTS silti kui see saadaval on.", "UseCustomTagDelimiters": "Kasuta kohandatud siltide eraldajat", - "UseCustomTagDelimitersHelp": "Kasuta siltideks jagamisel kohandatud tähemärke." + "UseCustomTagDelimitersHelp": "Kasuta siltideks jagamisel kohandatud tähemärke.", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Põletage kõik subtiitrid sisse, kui transkodeerimine käivitub. See tagab subtiitrite sünkroonis olemise peale transkodeerimist, kuid teeb selle aeglasemaks.", + "AlwaysBurnInSubtitleWhenTranscoding": "Transkodeerimisel põleta alati subtiitrid sisse", + "LabelScreensaverTime": "Ekraanisäästja aeg", + "LabelScreensaverTimeHelp": "Mitteaktiivsuse aeg sekundites mille järel käivitatakse ekraanisäästja." } From c698153a6545c3b711d97568b61984efea5fc80a Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Fri, 11 Oct 2024 08:38:54 +0000 Subject: [PATCH 081/120] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index eb7a5d6ecf..9e32e97ccb 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1428,7 +1428,7 @@ "LabelSSDPTracingFilterHelp": "Voliteľná IP adresa, pomocou ktorej sa má filtrovať logovaná SSDP komunikácia.", "LabelSSDPTracingFilter": "SSDP filter", "LabelQuickConnectCode": "Kód pre Rýchle pripojenie", - "LabelPublishedServerUriHelp": "Prepíšte URI požadovaným serverom Jellyfin v závislosti na rozhraní alebo IP adrese klienta.", + "LabelPublishedServerUriHelp": "Prepíšte URI požadovaným serverom Jellyfin v závislosti na rozhraní alebo IP adrese klienta. Napríklad: internal=http://jellyfin.example.com, external=https://jellyfin.example.com alebo all=https://jellyfin.example.com", "LabelPublishedServerUri": "Verejné URI serveru", "LabelOpenclDeviceHelp": "Zariadenie OpenCL použité pre mapovanie tónov. Naľavo od bodky je číslo platformy, napravo je číslo zariadenia na tejto platforme. Predvolená hodnota je 0.0. Je vyžadovaný súbor aplikácie FFmpeg obsahujúci metódu hardvérovej akcelerácie OpenCL.", "LabelOpenclDevice": "Zariadenie OpenCL", From a26cdbba7a9ff848935d049d2dc9f0e2bda2c045 Mon Sep 17 00:00:00 2001 From: millallo Date: Fri, 11 Oct 2024 12:06:58 +0000 Subject: [PATCH 082/120] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index 15562745c0..e304e94d4f 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -42,7 +42,7 @@ "BoxRear": "Box (retro)", "Browse": "Esplora", "MessageBrowsePluginCatalog": "Sfoglia il catalogo dei Plugins.", - "BurnSubtitlesHelp": "Determina se il server deve imprimere i sottotitoli quando i video vengono convertiti. Evitare ciò migliorerà di molto le prestazioni. Selezionare Auto per imprimere formati basati sull'immagine (VobSub, PGS, SUB, IDX, ecc.) e alcuni sottotitoli ASS o SSA.", + "BurnSubtitlesHelp": "Determina se il server deve imprimere i sottotitoli. Evitare ciò migliorerà di molto le prestazioni. Selezionare Auto per imprimere formati basati sull'immagine (VobSub, PGS, SUB, IDX, ecc.) e alcuni sottotitoli ASS o SSA.", "ButtonAddMediaLibrary": "Aggiungi raccolta multimediale", "ButtonAddScheduledTaskTrigger": "Aggiungi operazione", "ButtonAddServer": "Aggiungi server", @@ -1424,7 +1424,7 @@ "YoutubePlaybackError": "Il video richiesto non può essere riprodotto.", "YoutubeBadRequest": "Richiesta non valida.", "PluginFromRepo": "{0} dal repository {1}", - "LabelPublishedServerUriHelp": "Sovrascrivi l'URI utilizzata da Jellyfin basandosi sull'interfaccia o sull'indirizzo IP del client.", + "LabelPublishedServerUriHelp": "Sovrascrivi l'URI utilizzata da Jellyfin basandosi sull'interfaccia o sull'indirizzo IP del client, ad esempio: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, oppure all=https://jellyfin.example.com", "LabelMaxMuxingQueueSizeHelp": "Massimo numero di pacchetti che possono essere bufferizzati prima che tutti gli stream vengano inizializzati. Prova ad incrementare il numero se si nota nei messaggi di errore di FFmpeg il messaggio \"Too many packets buffered for output stream\". Il valore raccomandato è 2048.", "LabelEnableIP6Help": "Abilita la funzionalità IPv6.", "LabelEnableIP6": "Abilita IPv6", @@ -1946,5 +1946,7 @@ "ReplaceTrickplayImages": "Sostituisci le immagini trickplay", "FallbackMaxStreamingBitrateHelp": "Il bitrate massimo dello streaming viene utilizzato quando ffprobe non è in grado di determinare il bitrate sorgente. Ciò aiuta a impedire che i client richiedano un bitrate di transcodifica troppo alto che potrebbe causare il fallimento del player e il sovraccarico dell'encoder.", "LabelFallbackMaxStreamingBitrate": "Bitrate massimo di ripiego (Mbps)", - "DateModified": "Data di modifica" + "DateModified": "Data di modifica", + "LabelScreensaverTimeHelp": "Tempo di inattività in secondi per l'avvio dello screensaver.", + "LabelLyricDownloaders": "Scaricatori di testi" } From 603296ef7bdb87d6926b691488523a8728e9fb4f Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Fri, 11 Oct 2024 15:11:21 +0000 Subject: [PATCH 083/120] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index b04b60b850..21659dcb72 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1455,7 +1455,7 @@ "LabelHDHomerunPortRange": "HDHomeRun port range", "LabelHDHomerunPortRangeHelp": "Restricts the HDHomeRun UDP port range to this value. (Default is 1024 - 65535).", "LabelPublishedServerUri": "Published Server URIs", - "LabelPublishedServerUriHelp": "Override the URI used by Jellyfin, based on the interface, or client IP address.", + "LabelPublishedServerUriHelp": "Override the URI used by Jellyfin, based on the interface, or client IP address. For example: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", "HeaderDebugging": "Debugging and Tracing", "LabelEnableSSDPTracing": "Enable SSDP Tracing", "LabelEnableSSDPTracingHelp": "Enable details SSDP network tracing to be logged.
WARNING: This will cause serious performance degradation.", From 125e27563d25f1a24dcb46cc3f5dc168170dbcb7 Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Fri, 11 Oct 2024 16:39:48 +0000 Subject: [PATCH 084/120] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/he.json b/src/strings/he.json index 5e49c03e6f..03b002de0c 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1303,5 +1303,6 @@ "AndOtherArtists": "{0} ו-{1} אומנים נוספים.", "AllowTonemappingSoftwareHelp": "מיפוי טונים יכול להמיר שת הטווח הדינמי של וידיאו מ-HDR ל-SDR תוך כדי שמירה על איכות וצבע התמונות, שהם חשובים להצגה. כרגע עובד רק עם סרטונים בפורמט 10bit HDR10, HLG, ו-DoVi.", "EditLyrics": "עריכת מילות השיר", - "EnableDts": "הפעלת DTS (DCA)" + "EnableDts": "הפעלת DTS (DCA)", + "AlwaysBurnInSubtitleWhenTranscoding": "צרוב כתוביות תמיד בעת המרת קידוד" } From cc09a88a2a590a7acc2abec0115fad9765cd0073 Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Fri, 11 Oct 2024 16:45:41 +0000 Subject: [PATCH 085/120] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index 03b002de0c..eaada58dfd 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -596,7 +596,7 @@ "ChannelAccessHelp": "בחר את הערוצים לשיתוף עם משתמש זה. מנהלים יוכלו לערוך את כל הערוצים בעזרת מנהל המטא-דאטה.", "ButtonResetEasyPassword": "אתחל קוד פין פשוט", "ButtonLibraryAccess": "הרשאות גישה לספרייה", - "BurnSubtitlesHelp": "מחליט אם על השרת לצרוב כתוביות בזמן קידוד וידאו. הימנעות מכך תשפר מאוד את הביצועים. בחר \"אוטומטי\" לצריבת כתוביות על בסיס פורמט תמונה (VobSub, PGS, SUB, IDX, וכו..) וכתוביות ASS או SSA מסוימות.", + "BurnSubtitlesHelp": "מחליט אם על השרת לצרוב כתוביות. הימנעות מכך תשפר מאוד את הביצועים. בחר \"אוטומטי\" לצריבת כתוביות על בסיס פורמט תמונה (VobSub, PGS, SUB, IDX, וכו..) וכתוביות ASS או SSA מסוימות.", "Artist": "אמן", "AllowedRemoteAddressesHelp": "רשימת IP \\ מיסוך רשת המופרדת בפסיקים עבור רשתות שיורשו להתחבר מרחוק. במידה ותישאר ריקה, כל הכתובות יורשו להתחבר.", "Album": "אלבום", @@ -1304,5 +1304,44 @@ "AllowTonemappingSoftwareHelp": "מיפוי טונים יכול להמיר שת הטווח הדינמי של וידיאו מ-HDR ל-SDR תוך כדי שמירה על איכות וצבע התמונות, שהם חשובים להצגה. כרגע עובד רק עם סרטונים בפורמט 10bit HDR10, HLG, ו-DoVi.", "EditLyrics": "עריכת מילות השיר", "EnableDts": "הפעלת DTS (DCA)", - "AlwaysBurnInSubtitleWhenTranscoding": "צרוב כתוביות תמיד בעת המרת קידוד" + "AlwaysBurnInSubtitleWhenTranscoding": "צרוב כתוביות תמיד בעת המרת קידוד", + "EnableDtsHelp": "יש להפעיל רק אם מכשירך תומך ב-DTS או מחובר למקלט שמע תואם, אחרת תיגרם שגיאת ניגון.", + "EnableHi10pHelp": "הפעל כדי להימנע מהמרת קידוד וידיאו מסוג H.264 10-bit. יש לבטל אפשרות זו אם הוידיאו מציג פריימים ריקים.", + "ErrorDeletingLyrics": "אירעה שגיאה במחיקת המילים מהשרת. נא לבדוק שיש לג'ליפין הרשאות כתיבה לתיקיית המדיה ולנסות שוב.", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "צרוב את כל הכתוביות בזמן המרת קידוד. זה מבטיח שהכתוביות יהיו מסונכרנות אך מאט את מהירות ההמרה.", + "EnableTrueHd": "הפעלת TrueHD", + "EnableTrueHdHelp": "יש להפעיל רק אם מכשירך תומך ב-TrueHD או מחובר למקלט שמע תואם, אחרת תהיה שגיאת ניגון.", + "FallbackMaxStreamingBitrateHelp": "קצב סיביות הסטרימינג המקסימלי משמש כחלופה כאשר ffprobe לא מסוגל לקבוע את קצב סיביות המקור. זה עוזר למנוע מלקוחות מלבקש קידוד לקצב סיביות גבוה מדי, מה שיכול לגרום לנגן להיכשל ולהעמיס על המקודד.", + "HeaderAudioAdvanced": "שמע מתקדם", + "HeaderDeleteLyrics": "מחיקת מילים לשיר", + "HeaderLyricDownloads": "הורדת מילים לשיר", + "HeaderNextItem": "{0} הבא", + "HeaderNextItemPlayingInValue": "{0} הבא ינגן בעוד {1}", + "HeaderNoLyrics": "לא נמצאו מילים לשיר", + "HeaderPreviewLyrics": "תצוגה מקדימה למילות השיר", + "HeaderUploadLyrics": "העלאת מילים לשיר", + "HeaderVideoAdvanced": "וידיאו מתקדם", + "Illustrator": "מאייר", + "LabelAllowFmp4TranscodingContainer": "אפשר שינוי קידוד fMP4", + "LabelAlwaysRemuxFlacAudioFiles": "המר קבצי שמע FLAC תמיד", + "LabelAlwaysRemuxMp3AudioFiles": "המר קבצי שמע MP3 תמיד", + "LabelAllowStreamSharing": "אפשר שידור משותף", + "LabelAudioTagSettings": "הגדרות תגיות שמע", + "LabelSelectPreferredTranscodeVideoAudioCodec": "קידוד שמע מועדף בניגון וידיאו", + "LabelCustomTagDelimiters": "מפריד תגים מותאם", + "LabelCustomTagDelimitersHelp": "תווים שישמשו כמפרידים בין תגים.", + "LabelDelimiterWhitelist": "מפרידים מותרים", + "LabelDelimiterWhitelistHelp": "פריטים שיסוננו החוצה אחרי פיצול התגים. אחד בכל שורה.", + "LabelDisableVbrAudioEncoding": "ביטול קידוד שמע VBR", + "LabelDuration": "משך", + "LabelDropLyricsHere": "בטל את המילים כאן, או לחץ כדי לדפדף.", + "LabelEnablePlugin": "הפעלת התוסף", + "LabelFallbackMaxStreamingBitrate": "קצב ביטים מקסימלי לגיבוי (Mbps)", + "LabelInstalled": "מותקן", + "LabelIsSynced": "מסונכרן", + "LabelLineup": "הרכב", + "LabelLyricDownloaders": "תוכנות הורדת מילים לשירים", + "LabelMaxMuxingQueueSizeHelp": "מספר החבילות המקסימלי שניתן לאגור בזמן המתנה שכל ההזרמות יאותחלו. ניתן להגדיל זאת אם התקלת בשגיאת \"יותר מדי חבילות נאגרו לזרם הפלט\" בלוגים של FFmpeg. הערך המומלץ הוא 2048.", + "Inker": "דית", + "HeaderAddLyrics": "הוספת מילים לשיר" } From 59505fa305f67e2e35617d8948cd342651454922 Mon Sep 17 00:00:00 2001 From: r00tl34k Date: Sat, 12 Oct 2024 02:05:41 +0000 Subject: [PATCH 086/120] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index c7e7d595f6..c7090a0313 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -374,7 +374,7 @@ "LabelAllowedRemoteAddresses": "Filtro de dirección IP remota", "LabelAllowedRemoteAddressesMode": "Modo de filtro de dirección IP remota", "LabelAppName": "Nombre de la aplicación", - "LabelAppNameExample": "Un nombre leible por humanos para identificar llaves de API. Esta opcion no afectara funcionalidad. Ejemplo: Sickbeard, Sonarr", + "LabelAppNameExample": "Un nombre legible para identificar las claves API. Esta configuración no afectará la funcionalidad.", "LabelArtists": "Artistas", "LabelArtistsHelp": "Separar múltiples artistas utilizando punto y coma.", "LabelAudioLanguagePreference": "Idioma de audio preferido", @@ -1060,7 +1060,7 @@ "Audio": "Audio", "Auto": "Automático", "Banner": "Pancarta", - "BurnSubtitlesHelp": "Determina si el servidor debe grabar los subtítulos en el vídeo al transcodificar. Desactivar esta opción puede mejorar el rendimiento. Seleccione 'Auto' para grabar formatos basados en imágenes (VobSub, PGS, SUB, IDX, etc.) y ciertos subtítulos ASS o SSA.", + "BurnSubtitlesHelp": "Determina si el servidor debe incrustar los subtítulos. Evitarlo mejorará considerablemente el rendimiento. Selecciona Auto para incrustar formatos basados en imágenes (VobSub, PGS, SUB, IDX, etc.) y ciertos subtítulos ASS o SSA.", "ButtonInfo": "Información", "ChangingMetadataImageSettingsNewContent": "Los cambios a la configuración de descarga de metadatos e imágenes sólo se aplicará al nuevo contenido que se añada a la biblioteca. Para aplicar los cambios a los elementos existentes necesitarás actualizar los metadatos manualmente.", "ColorPrimaries": "Colores primarios", @@ -1069,7 +1069,7 @@ "CommunityRating": "Puntuación de la comunidad", "ContinueWatching": "Seguir viendo", "CriticRating": "Puntuación de la crítica", - "DateAdded": "Añadido el", + "DateAdded": "Fecha de incorporación", "DatePlayed": "Reproducido el", "Descending": "Descendiente", "DirectStreamHelp1": "La transmisión de video es compatible con el dispositivo, pero tiene un formato de audio incompatible (DTS, Dolby TrueHD, etc.) o un número de canales de audio. La transmisión de video se volverá a empaquetar sin pérdidas sobre la marcha antes de enviarse al dispositivo. Solo se transcodificará la transmisión de audio.", @@ -1472,7 +1472,7 @@ "LabelUDPPortRange": "Intervalo de comunicación UDP", "LabelSSDPTracingFilterHelp": "Dirección IP opcional sobre la cual filtrar el registro de tráfico SSDP.", "LabelSSDPTracingFilter": "Filtro SSDP", - "LabelPublishedServerUriHelp": "Anula la URI usada por Jellyfin en función a la interfaz o la dirección IP del cliente.", + "LabelPublishedServerUriHelp": "Anula la URI usada por Jellyfin, basada en la interfaz o en la dirección IP del cliente. Por ejemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, o all=https://jellyfin.example.com", "LabelPublishedServerUri": "URI del servidor publicadas", "LabelIsForced": "Forzados", "LabelEnableIP6Help": "Activa la funcionalidad IPv6.", @@ -1778,7 +1778,7 @@ "ForeignPartsOnly": "Partes Forzadas/Foráneas solamente", "LabelIsHearingImpaired": "Para personas con discapacidad auditiva (SDH)", "SearchResultsEmpty": "Perdón! No se han encontrado resultados para \"{0}\"", - "SelectAudioNormalizationHelp": "Ganancia de pista - ajusta el volumen de cada pista para que suenen al mismo volumen. Ganancia de álbum - ajusta el volumen de todas las pistas de un álbum, manteniendo el rango dinámico del álbum.", + "SelectAudioNormalizationHelp": "Ganancia de pista: ajusta el volumen de cada pista para que se reproduzcan con la misma intensidad. Ganancia de álbum: ajusta el volumen de todas las pistas en un álbum, manteniendo el rango dinámico del álbum. Cambiar entre 'Desactivado' y otras opciones requiere reiniciar la reproducción actual.", "LabelAlbumGain": "Ganancia de Álbum", "LabelSelectAudioNormalization": "Normalización de audio", "LabelTrackGain": "Ganancia de pista", @@ -1835,7 +1835,7 @@ "ErrorDeletingLyrics": "Ha ocurrido un error al borrar las letras del servidor. Por favor asegúrate que Jellyfin tiene permisos de escritura para la carpeta de medios e inténtalo otra vez.", "HeaderDeleteLyrics": "Borrar letras", "Lyrics": "Letras", - "LabelTrickplayAccelEncodingHelp": "Actualmente solo disponible en QSV, VAAPI y VideoToolbox, esta opción no tiene ningún efecto en otros métodos de aceleración por hardware.", + "LabelTrickplayAccelEncodingHelp": "Actualmente disponible solo en QSV, VA-API, VideoToolbox y RKMPP. Esta opción no tiene efecto en otros métodos de aceleración de hardware.", "LabelProcessPriorityHelp": "Configurar esto más bajo o alto determinará cómo la CPU priorizará el proceso de generación de ffmpeg para trickplay en relación con otros procesos. Si notas bajadas de rendimiento mientras las imágenes de trickplay se generan pero no quieres parar su generación por completo, intenta reducir tanto esto como el número de hilos.", "EncodingFormatHelp": "Selecciona la codificación de vídeo a la que Jellyfin debe transcodificar. Jellyfin usará codificación por software cuando la aceleración por hardware para el formato seleccionado no esté disponible. La codificación H264 siempre estará habilitada.", "NonBlockingScan": "No bloqueante - encola la generación, después devuelve", @@ -1918,7 +1918,7 @@ "LabelInstalled": "Instalado", "Regional": "Regional", "SelectPreferredTranscodeVideoCodecHelp": "Selecciona el codec de video preferido al cual transcodificar. Si el codec seleccionado no está soportado el servidor utilizará el siguiente mejor codec disponible.", - "AllowTonemappingSoftwareHelp": "El mapeo de tonos puede transformar el rango dinámico de un video de HDR a SDR manteniendo los detalles y colores de la imagen, los cuales son una información muy importante para representar la imagen original. Actualmente solo funciona con videos 10bit HDR10 y HLG.", + "AllowTonemappingSoftwareHelp": "El mapeo de tonos puede transformar el rango dinámico de un video de HDR a SDR, manteniendo los detalles de la imagen y los colores, los cuales son información muy importante para representar la escena original. Actualmente, solo funciona con videos HDR10 de 10 bits, HLG y DoVi.", "HeaderPreviewLyrics": "Previsualizar letras", "HeaderUploadLyrics": "Subir letras", "LabelDuration": "Duración", @@ -1942,5 +1942,34 @@ "LyricDownloadersHelp": "Habilite y clasifique sus descargadores de subtítulos preferidos en orden de prioridad.", "DisableVbrAudioEncodingHelp": "Evitar que el servidor codifique audio con VBR para este cliente.", "EnableHi10p": "Habilitar perfil H.264 High 10", - "EnableHi10pHelp": "Habilite esta opción para evitar la transcodificación de videos H.264 de 10 bits. Desactive esta opción si el video muestra fotogramas en blanco." + "EnableHi10pHelp": "Habilite esta opción para evitar la transcodificación de videos H.264 de 10 bits. Desactive esta opción si el video muestra fotogramas en blanco.", + "LabelSaveTrickplayLocally": "Guardar imágenes trickplay junto a los medios", + "LabelSaveTrickplayLocallyHelp": "Al guardar imágenes trickplay en las carpetas de medios, estarán junto a tu contenido para facilitar la migración y el acceso.", + "MessageCancelSeriesTimerError": "Ocurrió un error al cancelar el temporizador de la serie", + "RenderPgsSubtitleHelp": "Determina si el cliente debe renderizar los subtítulos PGS en lugar de usar subtítulos incrustados. Esto puede evitar la transcodificación del lado del servidor a cambio del rendimiento de renderización del lado del cliente.", + "LabelAlwaysRemuxFlacAudioFiles": "Siempre remuxar archivos de audio FLAC", + "LabelAlwaysRemuxMp3AudioFiles": "Siempre remuxar archivos de audio MP3", + "LabelScreensaverTime": "Tiempo del salvapantallas", + "LabelScreensaverTimeHelp": "La cantidad de tiempo en segundos de inactividad necesaria para que se inicie el salvapantallas.", + "MessageCancelTimerError": "Ocurrió un error al cancelar el temporizador", + "RenderPgsSubtitle": "Renderizado experimental de subtítulos PGS", + "PreferNonstandardArtistsTag": "Preferir la etiqueta ARTISTS si está disponible", + "PreferNonstandardArtistsTagHelp": "Usar la etiqueta no estándar ARTISTS en lugar de la etiqueta ARTIST cuando esté disponible.", + "ReplaceTrickplayImages": "Reemplazar imágenes trickplay existentes", + "AlwaysBurnInSubtitleWhenTranscoding": "Siempre incrustar subtítulos durante la transcodificación", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incrustar todos los subtítulos cuando se activa la transcodificación. Esto garantiza la sincronización de los subtítulos, aunque puede reducir la velocidad de transcodificación.", + "LabelAudioTagSettings": "Configuración de Etiquetas de Audio", + "DateModified": "Fecha de modificación", + "FallbackMaxStreamingBitrateHelp": "El bitrate máximo de streaming se utiliza como alternativa cuando ffprobe no puede determinar el bitrate del flujo de origen. Esto ayuda a prevenir que los clientes soliciten un bitrate de transcodificación excesivamente alto, lo que podría causar fallos en el reproductor y sobrecargar el codificador.", + "HeaderAudioAdvanced": "Configuración Avanzada de Audio", + "LabelAllowFmp4TranscodingContainer": "Permitir contenedor de transcodificación fMP4", + "LabelCustomTagDelimiters": "Delimitador de Etiqueta Personalizada", + "LabelCustomTagDelimitersHelp": "Caracteres considerados como delimitadores para separar etiquetas.", + "LabelDelimiterWhitelist": "Lista Blanca de Delimitadores", + "LabelDelimiterWhitelistHelp": "Elementos excluidos de la división de etiquetas. Un elemento por línea.", + "LabelFallbackMaxStreamingBitrate": "Bitrate máximo de transmisión de respaldo (Mbps)", + "MessageSplitVersionsError": "Ocurrió un error al dividir las versiones", + "UseCustomTagDelimiters": "Usar delimitador de etiqueta personalizado", + "UseCustomTagDelimitersHelp": "Separar etiquetas de artista/género con caracteres personalizados.", + "VideoCodecTagNotSupported": "La etiqueta del códec de video no es compatible" } From ce0c8da0e6a7856267a335e787fe444616945985 Mon Sep 17 00:00:00 2001 From: BryanHuas Date: Sat, 12 Oct 2024 14:39:52 +0000 Subject: [PATCH 087/120] Translated using Weblate (Spanish (Mexico)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/ --- src/strings/es-mx.json | 79 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 5 deletions(-) diff --git a/src/strings/es-mx.json b/src/strings/es-mx.json index a6628bbbaa..ce71e3be1a 100644 --- a/src/strings/es-mx.json +++ b/src/strings/es-mx.json @@ -48,7 +48,7 @@ "BoxRear": "Caja (parte trasera)", "Browse": "Explorar", "MessageBrowsePluginCatalog": "Explora nuestro catálogo de complementos para ver los complementos disponibles.", - "BurnSubtitlesHelp": "Determina si el servidor debe quemar subtítulos mientras transcodifica videos. Evitar esto mejorará enormemente el rendimiento. Seleccione Auto para grabar formatos basados en imágenes (VobSub, PGS, SUB, IDX, etc.) y ciertos subtítulos ASS o SSA.", + "BurnSubtitlesHelp": "Determine si el servidor debe grabar los subtítulos. Evitar esto mejorará enormemente el rendimiento. Seleccione Auto para grabar formatos basados en imágenes (VobSub, PGS, SUB, IDX, etc.) y ciertos subtítulos ASS o SSA.", "ButtonAddMediaLibrary": "Agregar biblioteca de medios", "ButtonAddScheduledTaskTrigger": "Agregar activador", "ButtonAddServer": "Agregar servidor", @@ -1432,7 +1432,7 @@ "LabelUDPPortRange": "Rango de Comunicación UDP", "LabelSSDPTracingFilterHelp": "Dirección IP opcional que se utilizará como filtro para el registro del tráfico SSDP.", "LabelSSDPTracingFilter": "Filtro SSDP", - "LabelPublishedServerUriHelp": "Omite la URL utilizada por Jellyfin, basado en la interfaz o dirección IP del cliente.", + "LabelPublishedServerUriHelp": "Anule el URI utilizado por Jellyfin, según la interfaz o la dirección IP del cliente. Por ejemplo: interno=http://jellyfin.example.com, externo=https://jellyfin.example.com o todos=https://jellyfin.example.com", "LabelPublishedServerUri": "URLs publicadas del servidor", "LabelIsForced": "Forzado", "LabelHDHomerunPortRangeHelp": "Restringir el rango de puertos UDP para HDHomerun a este valor. (El valor por defecto es 1024 - 65535).", @@ -1821,7 +1821,7 @@ "LimitSupportedVideoResolutionHelp": "Utilice la 'Resolución de transcodificación de vídeo máxima permitida' como resolución de vídeo máxima admitida.", "LabelTrickplayAccel": "Habilitar la decodificación por hardware", "LabelTrickplayAccelEncoding": "Habilite la codificación MJPEG acelerada por hardware", - "LabelTrickplayAccelEncodingHelp": "Actualmente solo está disponible en QSV, VAAPI y VideoToolbox; esta opción no tiene ningún efecto en otros métodos de aceleración de hardware.", + "LabelTrickplayAccelEncodingHelp": "Actualmente solo está disponible en QSV, VA-API, VideoToolbox y RKMPP; esta opción no tiene ningún efecto en otros métodos de aceleración de hardware.", "PriorityHigh": "Alta", "PriorityBelowNormal": "Debajo de lo normal", "PriorityIdle": "Inactiva", @@ -1835,7 +1835,7 @@ "ChannelResolutionSDPAL": "Resolución SD (PAL)", "ChannelResolutionHD": "HD", "ChannelResolutionFullHD": "Full HD", - "SelectAudioNormalizationHelp": "Ganancia de pista: ajusta el volumen de cada pista para que se reproduzcan con el mismo volumen. Ganancia de álbum: ajusta el volumen de todas las pistas de un álbum únicamente, manteniendo el rango dinámico del álbum.", + "SelectAudioNormalizationHelp": "Ganancia de pista: ajusta el volumen de cada pista para que se reproduzcan con el mismo volumen. Ganancia de álbum: ajusta el volumen de todas las pistas de un álbum únicamente, manteniendo el rango dinámico del álbum. Para cambiar entre \"Desactivado\" y otras opciones es necesario reiniciar la reproducción actual.", "ConfirmDeleteSeries": "Al eliminar esta serie, se eliminarán TODOS los {0} episodios tanto del sistema de archivos como de su biblioteca multimedia. ¿Seguro que desea continuar?", "DeleteEntireSeries": "Eliminar {0} episodios", "DeleteSeries": "Eliminar serie", @@ -1896,5 +1896,74 @@ "HeaderAddLyrics": "Añadir letra", "LabelIsSynced": "Está sincronizado", "LabelDuration": "Duración", - "Lyric": "Lírica" + "Lyric": "Lírica", + "AllowFmp4TranscodingContainerHelp": "Permita que el contenedor de transcodificación fMP4 para este sintonizador habilite contenidos HEVC y HDR. No todos los sintonizadores son compatibles con este contenedor. Desactívelo si tiene problemas de reproducción.", + "AllowStreamSharingHelp": "Permita que Jellyfin duplique la transmisión mpegts del sintonizador y comparta esta transmisión duplicada con sus clientes. Esto es útil cuando el sintonizador tiene un límite de recuento total de transmisiones, pero también puede causar problemas de reproducción.", + "LibraryInvalidItemIdError": "La biblioteca está en un estado no válido y no se puede editar. Posiblemente esté encontrando un error: la ruta en la base de datos no es la ruta correcta en el sistema de archivos.", + "PreferNonstandardArtistsTagHelp": "Utilice la etiqueta ARTISTAS no estándar en lugar de la etiqueta ARTISTA cuando esté disponible.", + "MediaInfoRotation": "Rotación", + "Regional": "Región", + "HeaderAudioAdvanced": "Audio avanzado", + "LabelScreensaverTime": "Tiempo del salvapantallas", + "LabelScreensaverTimeHelp": "La cantidad de tiempo en segundos de inactividad necesaria para iniciar el protector de pantalla.", + "LabelSelectPreferredTranscodeVideoCodec": "Códec de vídeo de transcodificación preferido", + "MoveToBottom": "Mover hacia abajo", + "LabelTrickplayKeyFrameOnlyExtraction": "Generar imágenes únicamente a partir de fotogramas clave", + "VideoCodecTagNotSupported": "La etiqueta de códec de vídeo no es compatible", + "AndOtherArtists": "{0} y {1} otros artistas.", + "AlwaysRemuxFlacAudioFilesHelp": "Si tiene archivos que su navegador rechaza reproducir o en los que calcula incorrectamente las marcas de tiempo, habilítelo como solución alternativa.", + "AlwaysRemuxMp3AudioFilesHelp": "Si tiene archivos cuyas marcas de tiempo su navegador calcula de manera incorrecta, habilítelo como solución alternativa.", + "PluginDisableError": "Se produjo un error al deshabilitar el plugin.", + "PreviewLyrics": "Vista previa de la letra", + "Alternate": "Alternar", + "AlternateDVD": "DVD alternativo", + "AllowTonemappingSoftwareHelp": "El mapeo de tonos puede transformar el rango dinámico de un video de HDR a SDR manteniendo los detalles y los colores de la imagen, que son información muy importante para representar la escena original. Actualmente solo funciona con vídeos HDR10, HLG y DoVi de 10 bits.", + "Colorist": "colorista", + "AlwaysBurnInSubtitleWhenTranscoding": "Grabe siempre los subtítulos al transcodificar", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Grabe todos los subtítulos cuando se active la transcodificación. Esto garantiza la sincronización de los subtítulos después de la transcodificación a costa de una velocidad de transcodificación reducida.", + "DateModified": "Fecha de modificación", + "DisableVbrAudioEncodingHelp": "Evite que el servidor codifique audio con VBR para este cliente.", + "EnableHi10p": "Habilitar perfil H.264 alto 10", + "EnableHi10pHelp": "Habilite esta opción para evitar la transcodificación de vídeos H.264 de 10 bits. Desactive esta opción si el vídeo muestra fotogramas en blanco.", + "LabelCustomTagDelimiters": "Delimitador de etiquetas personalizado", + "LabelCustomTagDelimitersHelp": "Los caracteres se tratarán como delimitadores para separar etiquetas.", + "LabelDelimiterWhitelist": "Lista blanca de delimitadores", + "LabelDelimiterWhitelistHelp": "Artículos que se excluirán de la división de etiquetas. Un artículo por línea.", + "LabelDisableVbrAudioEncoding": "Deshabilitar la codificación de audio VBR", + "LabelEnablePlugin": "Activar Plugin", + "LabelFallbackMaxStreamingBitrate": "Velocidad de bits de transmisión máxima alternativa (Mbps)", + "LabelNoChangelog": "No se proporcionó ningún registro de cambios para esta versión.", + "LabelNotInstalled": "No instalado", + "MoveToTop": "Mover hacia arriba", + "FallbackMaxStreamingBitrateHelp": "La tasa de bits de transmisión máxima se utiliza como alternativa cuando ffprobe no puede determinar la tasa de bits de la transmisión de origen. Esto ayuda a evitar que los clientes soliciten una tasa de bits de transcodificación excesivamente alta, lo que podría provocar que el reproductor falle y sobrecargue el codificador.", + "HeaderPreviewLyrics": "Vista previa de la letra", + "LabelAllowFmp4TranscodingContainer": "Permitir contenedor de transcodificación fMP4", + "LabelAlwaysRemuxFlacAudioFiles": "Remux siempre archivos de audio FLAC", + "LabelAlwaysRemuxMp3AudioFiles": "Remux siempre archivos de audio MP3", + "LabelAllowStreamSharing": "Permitir compartir transmisiones", + "LabelAudioTagSettings": "Configuración de etiquetas de audio", + "LabelDropLyricsHere": "Suelta la letra aquí o haz clic para explorar.", + "LabelInstalled": "Instalado", + "LabelLyricDownloaders": "Descargadores de letras", + "LabelRepository": "Repositorio", + "LabelSaveTrickplayLocally": "Guarde imágenes de trickplay junto a los medios", + "LabelSaveTrickplayLocallyHelp": "Guardar imágenes de trucos en carpetas de medios las colocará junto a sus medios para facilitar la migración y el acceso.", + "LyricDownloadersHelp": "Habilite y clasifique sus descargadores de subtítulos preferidos en orden de prioridad.", + "MessageCancelSeriesTimerError": "Se produjo un error al cancelar el temporizador de la serie", + "MessageCancelTimerError": "Se produjo un error al cancelar el temporizador", + "MessageSplitVersionsError": "Se produjo un error al dividir las versiones", + "Penciller": "dibujante", + "PluginEnableError": "Se produjo un error al habilitar el plugin.", + "PluginLoadConfigError": "Se produjo un error al obtener las páginas de configuración del plugin.", + "PluginLoadRepoError": "Se produjo un error al obtener los detalles del plugin del repositorio.", + "PluginUninstallError": "Se produjo un error al desinstalar el plugin.", + "PreferNonstandardArtistsTag": "Prefiere la etiqueta ARTISTAS si está disponible", + "RenderPgsSubtitle": "Representación experimental de subtítulos PGS", + "RenderPgsSubtitleHelp": "Determine si el cliente debe representar subtítulos PGS en lugar de utilizar subtítulos grabados. Esto puede evitar la transcodificación del lado del servidor a cambio del rendimiento de renderizado del lado del cliente.", + "ReplaceTrickplayImages": "Reemplazar imágenes de trickplay existentes", + "SelectPreferredTranscodeVideoCodecHelp": "Seleccione el códec de vídeo preferido para transcodificar. Si el códec preferido no es compatible, el servidor utilizará el siguiente mejor códec disponible.", + "UseCustomTagDelimiters": "Usar delimitador de etiquetas personalizado", + "UseCustomTagDelimitersHelp": "Divida etiquetas de artista/género con caracteres personalizados.", + "Trickplay": "truco", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extraiga fotogramas clave solo para un procesamiento significativamente más rápido con una sincronización menos precisa. Si el decodificador de hardware configurado no admite este modo, utilizará el decodificador de software en su lugar." } From 5fb494491248c2b87425e6bbaac118fdd2e93ad6 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sat, 12 Oct 2024 15:30:57 +0000 Subject: [PATCH 088/120] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 7dffb27c75..a600597fed 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -109,7 +109,7 @@ "ButtonAddScheduledTaskTrigger": "Thêm kích hoạt", "ButtonAddMediaLibrary": "Thêm Thư Viện Phương Tiện", "ButtonAddImage": "Thêm hình ảnh", - "BurnSubtitlesHelp": "Xác định xem máy chủ có nên ghi phụ đề khi chuyển mã video hay không. Tránh việc này sẽ cải thiện đáng kể hiệu suất. Chọn Tự động để ghi các định dạng dựa trên hình ảnh (VobSub, PGS, SUB, IDX, v.v.) và phụ đề ASS hoặc SSA nhất định.", + "BurnSubtitlesHelp": "Xác định xem máy chủ có nên ghi phụ đề hay không. Tránh việc này sẽ cải thiện đáng kể hiệu suất. Chọn Tự động để ghi các định dạng dựa trên hình ảnh (VobSub, PGS, SUB, IDX, v.v.) và phụ đề ASS hoặc SSA nhất định.", "Browse": "Duyệt", "BoxRear": "Hộp (mặt sau)", "Books": "Sách", @@ -1484,7 +1484,7 @@ "LabelUDPPortRange": "Phạm Vi Giao Tiếp UDP", "LabelSSDPTracingFilterHelp": "Địa chỉ IP tùy chọn để lọc lưu lượng SSDP đã ghi nhật ký.", "LabelSSDPTracingFilter": "Bộ Lọc SSDP", - "LabelPublishedServerUriHelp": "Ghi đè URI được Jellyfin dùng, dựa trên giao diện hoặc địa chỉ IP của máy khách.", + "LabelPublishedServerUriHelp": "Ghi đè URI được Jellyfin dùng, dựa trên giao diện hoặc địa chỉ IP của máy khách. Ví dụ: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, hoặc all=https://jellyfin.example.com", "LabelPublishedServerUri": "URI Máy Chủ Đã Công Bố", "LabelHDHomerunPortRangeHelp": "Giới hạn phạm vi cổng HDHomeRun UDP ở giá trị này. (Mặc định là 1024 - 65535).", "LabelHDHomerunPortRange": "Phạm vi cổng HDHomeRun", @@ -1964,5 +1964,9 @@ "DateModified": "Ngày sửa đổi", "MessageCancelSeriesTimerError": "Đã xảy ra lỗi khi hủy bộ hẹn giờ chuỗi", "MessageCancelTimerError": "Đã xảy ra lỗi khi hủy bộ hẹn giờ", - "MessageSplitVersionsError": "Đã xảy ra lỗi khi chia nhỏ các phiên bản" + "MessageSplitVersionsError": "Đã xảy ra lỗi khi chia nhỏ các phiên bản", + "AlwaysBurnInSubtitleWhenTranscoding": "Luôn ghi phụ đề khi chuyển mã", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Ghi tất cả phụ đề khi chuyển mã được kích hoạt. Điều này đảm bảo đồng bộ hóa phụ đề sau khi chuyển mã nhưng phải trả giá bằng việc giảm tốc độ chuyển mã.", + "LabelScreensaverTime": "Thời Gian Bảo Vệ Màn Hình", + "LabelScreensaverTimeHelp": "Lượng thời gian tính bằng giây không hoạt động cần thiết để khởi động trình bảo vệ màn hình." } From b6b398282cd070f9c456ee4b7b10c38544cfed2b Mon Sep 17 00:00:00 2001 From: Justin Date: Sat, 12 Oct 2024 23:22:13 +0000 Subject: [PATCH 089/120] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 446e664f82..19885260b7 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1463,7 +1463,7 @@ "HeaderAddUpdateSubtitle": "Untertitel hinzufügen/aktualisieren", "LabelSSDPTracingFilterHelp": "Optionale IP-Adresse zum Filtern des protokollierten SSDP-Verkehrs.", "LabelSSDPTracingFilter": "SSDP-Filter", - "LabelPublishedServerUriHelp": "Überschreibt die von Jellyfin genutzte URI auf Basis des Interfaces oder der IP-Adresse des Clients.", + "LabelPublishedServerUriHelp": "Überschreibt die von Jellyfin verwendeten URI, basierend auf der Schnittstelle oder der Client-IP-Adresse. Zum Beispiel: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, oder all=https://jellyfin.example.com", "LabelPublishedServerUri": "Veröffentlichte Server-URIs", "LabelEnableSSDPTracingHelp": "Aktiviere detaillierte SSDP-Netzwerkverfolgungslogs.
WARNUNG: Dies wird erhebliche Leistungseinbußen verursachen.", "LabelEnableSSDPTracing": "SSDP-Verfolgung aktivieren", @@ -1779,7 +1779,7 @@ "LabelBackdropScreensaverIntervalHelp": "Die Zeit in Sekunden zwischen dem Wechsel verschiedener Hintergrundbilder im Bildschirmschoner.", "SearchResultsEmpty": "Entschuldigung! Es konnten keine Ergebnisse für „{0}“ gefunden werden", "LabelTrackGain": "Titel Gain", - "SelectAudioNormalizationHelp": "Track Gain - passt die Lautstärke der einzelnen Tracks an, sodass sie mit der gleichen Lautstärke wiedergegeben werden. Albumverstärkung - passt die Lautstärke aller Titel eines Albums an, wobei der Dynamikbereich des Albums erhalten bleibt.", + "SelectAudioNormalizationHelp": "Track Gain - passt die Lautstärke der einzelnen Tracks an, so dass sie mit der gleichen Lautstärke wiedergegeben werden. Albumverstärkung - passt nur die Lautstärke aller Titel eines Albums an, wobei der Dynamikbereich des Albums erhalten bleibt. Um zwischen „Aus“ und anderen Optionen zu wechseln, muss die aktuelle Wiedergabe neu gestartet werden.", "LabelAlbumGain": "Albumlautstärke", "LabelSelectAudioNormalization": "Audio Normalisierung", "HeaderAllRecordings": "Alle Aufnahmen", @@ -1956,14 +1956,20 @@ "LabelSaveTrickplayLocallyHelp": "Wenn Sie Trickplay-Bilder in Medienordnern speichern, werden sie bei Ihren Medien abgelegt und ermöglichen so eine einfache Migration und den Zugriff.", "RenderPgsSubtitle": "Experimentelles PGS-Untertitel-Rendering", "LabelAudioTagSettings": "Audio-Tag Einstellungen", - "LabelCustomTagDelimitersHelp": "Zeichen die zur Trennung von Tags verwendet werden sollen.", - "LabelDelimiterWhitelistHelp": "Artikel, die vom Tag-Splitting ausgeschlossen werden sollen. Ein Artikel pro Zeile.", - "PreferNonstandardArtistsTag": "Bevorzuge KÜNSTLER-Tag, falls vorhanden", - "PreferNonstandardArtistsTagHelp": "Verwenden Sie den nicht standardisierten ARTISTS-Tag anstelle des ARTIST-Tags, sofern verfügbar.", - "UseCustomTagDelimitersHelp": "Trennen Sie Künstler-/Genre-Tags mit benutzerdefinierten Zeichen.", + "LabelCustomTagDelimitersHelp": "Zeichen, die als Begrenzungszeichen zur Trennung von Tags zu behandeln sind.", + "LabelDelimiterWhitelistHelp": "Positionen, die vom Tag-Splitting ausgeschlossen werden sollen. Eine Position pro Zeile.", + "PreferNonstandardArtistsTag": "Bevorzuge den ARTISTS-Tag, falls vorhanden", + "PreferNonstandardArtistsTagHelp": "Verwende das nicht standardisierte ARTISTS-Tag anstelle des ARTIST-Tags, sofern verfügbar.", + "UseCustomTagDelimitersHelp": "Splitte Künstler-/Genre-Tags mit benutzerdefinierten Zeichen.", "LabelCustomTagDelimiters": "Benutzerdefinierte Tag-Begrenzung", "LabelDelimiterWhitelist": "Trennzeichen Whitelist", "UseCustomTagDelimiters": "Benutzerdefinierte Tag-Begrenzung verwenden", - "DateModified": "Datum verändert", - "AlwaysBurnInSubtitleWhenTranscoding": "Beim Transkodieren immer Untertitel einbrennen" + "DateModified": "Datum geändert", + "AlwaysBurnInSubtitleWhenTranscoding": "Beim Transkodieren immer Untertitel einbrennen", + "MessageSplitVersionsError": "Beim Splitten von Versionen ist ein Fehler aufgetreten", + "LabelScreensaverTime": "Bildschirmschoner-Zeit", + "MessageCancelSeriesTimerError": "Beim Abbrechen des Serien-Timers ist ein Fehler aufgetreten", + "MessageCancelTimerError": "Beim Abbrechen des Timers ist ein Fehler aufgetreten", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Brenne alle Untertitel ein, wenn die Transcodierung ausgelöst wird. Dies gewährleistet die Synchronisierung der Untertitel nach der Transcodierung auf Kosten einer geringeren Transcodierungsgeschwindigkeit.", + "LabelScreensaverTimeHelp": "Die Zeitspanne in Sekunden der Inaktivität, die zum Starten des Bildschirmschoners erforderlich ist." } From f6585414b2f736ccd0ac5731140fce4390243546 Mon Sep 17 00:00:00 2001 From: Andrew Siegman Date: Sat, 12 Oct 2024 23:54:34 +0000 Subject: [PATCH 090/120] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index cad8a6a4ec..4094132059 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1486,7 +1486,7 @@ "LabelHDHomerunPortRangeHelp": "Restreint la plage de ports UDP pour HDHomeRun à cette valeur. (La plage par défaut est 1024 - 65535).", "LabelHDHomerunPortRange": "Plage de ports HDHomeRun", "PreferFmp4HlsContainerHelp": "Préférer l'utilisation de fMP4 comme conteneur pour HLS rendant ainsi possible la lecture directe des flux HEVC et AV1 sur les appareils compatibles.", - "LabelPublishedServerUriHelp": "Remplacer l'URI utilisée par Jellyfin selon l'interface ou l'adresse IP du client.", + "LabelPublishedServerUriHelp": "Remplacer l'URI utilisée par Jellyfin selon l'interface ou l'adresse IP du client. Par exemple: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", "LabelPublishedServerUri": "URIs du serveur publiées", "LabelSyncPlayHaltPlayback": "Arrêter la lecture locale", "SyncPlayGroupDefaultTitle": "Groupe de {0}", @@ -1968,5 +1968,8 @@ "LabelTrickplayKeyFrameOnlyExtraction": "Générer uniquement des images à partir des images clés", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extraire uniquement les images clés pour un traitement beaucoup plus rapide avec un minutage moins précis. Si le décodeur matériel configuré ne prend pas en charge ce mode, il utilisera le décodeur logiciel à la place.", "AllowFmp4TranscodingContainerHelp": "Autoriser le conteneur de transcodage fMP4 pour ce tuner afin d'activer les contenus HEVC et HDR. Tous les tuners ne sont pas compatibles avec ce conteneur. Désactivez ceci si vous rencontrez des problèmes de lecture.", - "LabelScreensaverTimeHelp": "La durée en secondes d'inactivité requise pour démarrer l'économiseur d'écran." + "LabelScreensaverTimeHelp": "La durée en secondes d'inactivité requise pour démarrer l'économiseur d'écran.", + "AlwaysBurnInSubtitleWhenTranscoding": "Toujours incruster les sous-titres lors du transcodage", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incruster tous les sous-titres lorsque le transcodage se déclenche. Cela garantit la synchronisation des sous-titres après le transcodage au prix d'une vitesse de transcodage réduite.", + "LabelScreensaverTime": "Délai de l'économiseur d'écran" } From a118fa0f63eb9f49fe9e35254d4c48094be80d75 Mon Sep 17 00:00:00 2001 From: Andrew Siegman Date: Sun, 13 Oct 2024 00:05:06 +0000 Subject: [PATCH 091/120] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index 20a80cfa43..9f64fd4790 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -1709,5 +1709,7 @@ "RemuxHelp2": "Remultiplexer utilise une très faible puissance de calcul sans aucune perte de qualité du média.", "LabelPlaybackInfo": "Informations de lecture", "LabelAudioInfo": "Informations audio", - "LabelTranscodingInfo": "Informations de transcodage" + "LabelTranscodingInfo": "Informations de transcodage", + "AlwaysBurnInSubtitleWhenTranscoding": "Toujours incruster les sous-titres lors du transcodage", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incruster tous les sous-titres lorsque le transcodage se déclenche. Cela garantit la synchronisation des sous-titres après le transcodage, au prix d'une vitesse de transcodage réduite." } From 9942fb78562323a4c65ce6342dbfa9dae8e7f11d Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 13 Oct 2024 01:29:36 -0400 Subject: [PATCH 092/120] Apply suggestions from code review Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/apps/stable/features/playback/utils/mediaSegments.ts | 4 ++-- src/strings/en-us.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/apps/stable/features/playback/utils/mediaSegments.ts b/src/apps/stable/features/playback/utils/mediaSegments.ts index fd2c45e4b7..9ea8e1bdf7 100644 --- a/src/apps/stable/features/playback/utils/mediaSegments.ts +++ b/src/apps/stable/features/playback/utils/mediaSegments.ts @@ -4,7 +4,7 @@ const isBeforeSegment = (segment: MediaSegmentDto, time: number, direction: numb if (direction === -1) { return ( typeof segment.EndTicks !== 'undefined' - && segment.EndTicks < time + && segment.EndTicks <= time ); } return ( @@ -15,7 +15,7 @@ const isBeforeSegment = (segment: MediaSegmentDto, time: number, direction: numb const isInSegment = (segment: MediaSegmentDto, time: number) => ( typeof segment.StartTicks !== 'undefined' - && segment.StartTicks < time + && segment.StartTicks <= time && (typeof segment.EndTicks === 'undefined' || segment.EndTicks > time) ); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index c378a4a559..10e5948c57 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1070,10 +1070,10 @@ "MediaSegmentAction.None": "None", "MediaSegmentAction.Skip": "Skip", "MediaSegmentType.Commercial": "Commercial", + "MediaSegmentType.Intro": "Intro", + "MediaSegmentType.Outro": "Outro", "MediaSegmentType.Preview": "Preview", "MediaSegmentType.Recap": "Recap", - "MediaSegmentType.Outro": "Outro", - "MediaSegmentType.Intro": "Intro", "Menu": "Menu", "MenuOpen": "Open Menu", "MenuClose": "Close Menu", From 9e431c57c1211b5a95ce14998bf3fbd6b7bb87ab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 07:12:36 +0000 Subject: [PATCH 093/120] Update dependency @jellyfin/sdk to v0.0.0-unstable.202410130501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 20e2ac0db0..f18f0d02bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202410090502", + "@jellyfin/sdk": "0.0.0-unstable.202410130501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", @@ -5062,9 +5062,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202410090502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410090502.tgz", - "integrity": "sha512-aJO3XOZ5CQ1rTCLmNqhQRlSB6dXg05HpH2PBW6ICO7ftf8AsyYQXAKN/vpn9un0dEsOB1Y+F7wMrj4UKTbpKlA==", + "version": "0.0.0-unstable.202410130501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410130501.tgz", + "integrity": "sha512-+JUq2p0kvZVfBSg3TSoLfSwrPaMX6d0GY/6XbTXfJ9h6p80mmCCnZXR5cyRTFhfZSxDuvZ36R/i1p5kiukXFMw==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -29283,9 +29283,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202410090502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410090502.tgz", - "integrity": "sha512-aJO3XOZ5CQ1rTCLmNqhQRlSB6dXg05HpH2PBW6ICO7ftf8AsyYQXAKN/vpn9un0dEsOB1Y+F7wMrj4UKTbpKlA==", + "version": "0.0.0-unstable.202410130501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410130501.tgz", + "integrity": "sha512-+JUq2p0kvZVfBSg3TSoLfSwrPaMX6d0GY/6XbTXfJ9h6p80mmCCnZXR5cyRTFhfZSxDuvZ36R/i1p5kiukXFMw==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index 084d79f95e..78ee9eeb94 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202410090502", + "@jellyfin/sdk": "0.0.0-unstable.202410130501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", From aef9482824f22efd0e69c72f3ad8112657abd8cc Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 13 Oct 2024 03:42:45 -0400 Subject: [PATCH 094/120] Prevent skipping when seeking back to segment --- .../playback/utils/mediaSegmentManager.ts | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts index 68e65dd7ab..7957ff2334 100644 --- a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts +++ b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts @@ -18,7 +18,9 @@ import { MediaSegmentAction } from '../constants/mediaSegmentAction'; class MediaSegmentManager extends PlaybackSubscriber { private hasSegments = false; - private lastIndex = 0; + private isLastSegmentIgnored = false; + private lastSegmentIndex = 0; + private lastTime = -1; private mediaSegmentTypeActions: Record, MediaSegmentAction> | undefined; private mediaSegments: MediaSegmentDto[] = []; @@ -43,17 +45,24 @@ class MediaSegmentManager extends PlaybackSubscriber { const action = this.mediaSegmentTypeActions[mediaSegment.Type]; if (action === MediaSegmentAction.Skip) { - // Perform skip - if (mediaSegment.EndTicks) { + // Ignore segment if playback progress has passed the segment's start time + if (mediaSegment.StartTicks !== undefined && this.lastTime > mediaSegment.StartTicks) { + console.info('[MediaSegmentManager] ignoring skipping segment that has been seeked back into', mediaSegment); + this.isLastSegmentIgnored = true; + return; + } else if (mediaSegment.EndTicks) { + // If there is an end time, seek to it // Do not skip if duration < 1s to avoid slow stream changes if (mediaSegment.StartTicks && mediaSegment.EndTicks - mediaSegment.StartTicks < TICKS_PER_SECOND) { console.info('[MediaSegmentManager] ignoring skipping segment with duration <1s', mediaSegment); + this.isLastSegmentIgnored = true; return; } console.debug('[MediaSegmentManager] skipping to %s ms', mediaSegment.EndTicks / TICKS_PER_MILLISECOND); this.playbackManager.seek(mediaSegment.EndTicks, this.player); } else { + // If there is no end time, skip to the next track console.debug('[MediaSegmentManager] skipping to next item in queue'); this.playbackManager.nextTrack(this.player); } @@ -61,7 +70,9 @@ class MediaSegmentManager extends PlaybackSubscriber { } onPlayerPlaybackStart(_e: Event, state: PlayerState) { - this.lastIndex = 0; + this.isLastSegmentIgnored = false; + this.lastSegmentIndex = 0; + this.lastTime = -1; this.hasSegments = !!state.MediaSource?.HasSegments; const itemId = state.MediaSource?.Id; @@ -96,16 +107,23 @@ class MediaSegmentManager extends PlaybackSubscriber { onPlayerTimeUpdate() { if (this.hasSegments && this.mediaSegments.length) { const time = this.playbackManager.currentTime(this.player) * TICKS_PER_MILLISECOND; - const currentSegmentDetails = findCurrentSegment(this.mediaSegments, time, this.lastIndex); - if (currentSegmentDetails) { + const currentSegmentDetails = findCurrentSegment(this.mediaSegments, time, this.lastSegmentIndex); + if ( + // The current time falls within a segment + currentSegmentDetails + // and the last segment is not ignored or the segment index has changed + && (!this.isLastSegmentIgnored || this.lastSegmentIndex !== currentSegmentDetails.index) + ) { console.debug( '[MediaSegmentManager] found %s segment at %s ms', currentSegmentDetails.segment.Type, time / TICKS_PER_MILLISECOND, currentSegmentDetails); + this.isLastSegmentIgnored = false; this.performAction(currentSegmentDetails.segment); - this.lastIndex = currentSegmentDetails.index; + this.lastSegmentIndex = currentSegmentDetails.index; } + this.lastTime = time; } } } From 7e4921f1dc59c33be4af99e4e585eb6061dfaec8 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 13 Oct 2024 10:24:08 +0200 Subject: [PATCH 095/120] Fix blurry pdf player rendering for all viewport sizes (#6182) --- src/plugins/pdfPlayer/plugin.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/plugins/pdfPlayer/plugin.js b/src/plugins/pdfPlayer/plugin.js index 7b7e3fa4b8..de30a73bfd 100644 --- a/src/plugins/pdfPlayer/plugin.js +++ b/src/plugins/pdfPlayer/plugin.js @@ -290,22 +290,16 @@ export class PdfPlayer { } renderPage(canvas, number) { + const devicePixelRatio = window.devicePixelRatio || 1; this.book.getPage(number).then(page => { - const width = dom.getWindowSize().innerWidth; - const height = dom.getWindowSize().innerHeight; - const scale = Math.ceil(window.devicePixelRatio || 1); + const original = page.getViewport({ scale: 1 }); + const scale = Math.max((window.screen.height / original.height), (window.screen.width / original.width)) * devicePixelRatio; const viewport = page.getViewport({ scale }); - const context = canvas.getContext('2d'); + canvas.width = viewport.width; canvas.height = viewport.height; - if (width < height) { - canvas.style.width = '100%'; - canvas.style.height = 'auto'; - } else { - canvas.style.height = '100%'; - canvas.style.width = 'auto'; - } + const context = canvas.getContext('2d'); const renderContext = { canvasContext: context, From 5713b38b98884a887ceb9d7ec178b18d4741a1a8 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Sun, 13 Oct 2024 08:24:12 +0000 Subject: [PATCH 096/120] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 123c26643a..86527f11f7 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1970,5 +1970,7 @@ "LabelScreensaverTimeHelp": "Het aantal seconden inactiviteit waarna de schermbeveiliging gestart wordt.", "LabelScreensaverTime": "Wachttijd schermbeveiliging", "AlwaysBurnInSubtitleWhenTranscoding": "Ondertiteling altijd inbranden bij transcoderen", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Alle ondertiteling inbranden wanneer er getranscodeerd wordt. Dit verzekert dat ondertiteling gelijkloopt, maar verlaagt de transcodeersnelheid." + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Alle ondertiteling inbranden wanneer er getranscodeerd wordt. Dit verzekert dat ondertiteling gelijkloopt, maar verlaagt de transcodeersnelheid.", + "LabelQsvDevice": "QSV-apparaat", + "LabelQsvDeviceHelp": "Op een systeem met meerdere GPU's is dit het apparaat dat gebruikt moet worden voor Intel QSV. Op Linux is dit de render-node, bijvoorbeeld /dev/dri/renderD128. Op Windows is dit de apparaatindex startend bij 0. Laat dit leeg tenzij je weet wat je doet." } From 05a78ef92b0a980896ce52abf918008f5ea69d2b Mon Sep 17 00:00:00 2001 From: Kityn Date: Sun, 13 Oct 2024 08:33:36 +0000 Subject: [PATCH 097/120] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 2f04f49053..6061f39a19 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1971,5 +1971,7 @@ "LabelScreensaverTime": "Czas wygaszacza ekranu", "LabelScreensaverTimeHelp": "Ilość czasu bezczynności w sekundach, potrzebna do uruchomienia wygaszacza ekranu.", "AlwaysBurnInSubtitleWhenTranscoding": "Zawsze wypalaj napisy podczas transkodowania", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Wypal wszystkie napisy, gdy zostanie wyzwolone transkodowanie. Zapewnia to synchronizację napisów po transkodowaniu kosztem zmniejszonej prędkości transkodowania." + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Wypal wszystkie napisy, gdy zostanie wyzwolone transkodowanie. Zapewnia to synchronizację napisów po transkodowaniu kosztem zmniejszonej prędkości transkodowania.", + "LabelQsvDevice": "Urządzenie QSV", + "LabelQsvDeviceHelp": "Określ urządzenie dla Intel QSV w systemie z wieloma GPU. W systemie Linux jest to węzeł renderowania, np. /dev/dri/renderD128. W systemie Windows jest to indeks urządzenia zaczynający się od 0. Pozostaw puste, chyba że wiesz, co robisz." } From 164986dbcf7fff01d48df80631004b2d094932cb Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Sun, 13 Oct 2024 12:34:59 +0000 Subject: [PATCH 098/120] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 7aed2210d1..95683d4523 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1971,5 +1971,7 @@ "AlwaysBurnInSubtitleWhenTranscoding": "转码时总是烧录字幕", "AlwaysBurnInSubtitleWhenTranscodingHelp": "当转码触发时烧录所有字幕。 这样可以保证转码后的字幕同步,但转码速度会降低。", "LabelScreensaverTime": "屏幕保护时间", - "LabelScreensaverTimeHelp": "启动屏幕保护程序所需的无活动时间(以秒为单位)。" + "LabelScreensaverTimeHelp": "启动屏幕保护程序所需的无活动时间(以秒为单位)。", + "LabelQsvDeviceHelp": "为多 GPU 系统上的 Intel QSV 指定设备。在 Linux 上,这是渲染节点,例如 /dev/dri/renderD128。在 Windows 上,这是从 0 开始的设备序号。除非您知道自己在做什么,否则请留空。", + "LabelQsvDevice": "QSV 设备" } From faddb0d3ff06e599c741bc7a546813f46b7b3175 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 16:04:51 +0000 Subject: [PATCH 099/120] Update CI dependencies --- .github/workflows/__codeql.yml | 8 ++++---- .github/workflows/__deploy.yml | 2 +- .github/workflows/__package.yml | 6 +++--- .github/workflows/__quality_checks.yml | 6 +++--- .github/workflows/pull_request.yml | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index 320a5b4b81..e8de9337de 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -20,21 +20,21 @@ jobs: steps: - name: Checkout repository ⬇️ - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: ${{ inputs.commit }} show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/init@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/autobuild@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/analyze@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: category: '/language:${{matrix.language}}' diff --git a/.github/workflows/__deploy.yml b/.github/workflows/__deploy.yml index bcdd2bd875..b9f5105e90 100644 --- a/.github/workflows/__deploy.yml +++ b/.github/workflows/__deploy.yml @@ -35,7 +35,7 @@ jobs: path: dist - name: Publish to Cloudflare Pages 📃 - uses: cloudflare/wrangler-action@f84a562284fc78278ff9052435d9526f9c718361 # v3.7.0 + uses: cloudflare/wrangler-action@9681c2997648301493e78cacbfb790a9f19c833f # v3.9.0 id: cf with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/.github/workflows/__package.yml b/.github/workflows/__package.yml index e0e9a2a3ba..c5e4d3aaa2 100644 --- a/.github/workflows/__package.yml +++ b/.github/workflows/__package.yml @@ -14,12 +14,12 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: ${{ inputs.commit || github.sha }} - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: npm @@ -39,7 +39,7 @@ jobs: mv dist/config.tmp.json dist/config.json - name: Upload artifact - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: frontend path: dist diff --git a/.github/workflows/__quality_checks.yml b/.github/workflows/__quality_checks.yml index 546d7a954e..bd8c273c57 100644 --- a/.github/workflows/__quality_checks.yml +++ b/.github/workflows/__quality_checks.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: ${{ inputs.commit }} show-progress: false @@ -42,13 +42,13 @@ jobs: steps: - name: Checkout ⬇️ - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: ${{ inputs.commit }} show-progress: false - name: Setup node environment ⚙️ - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: npm diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 07f1f467b5..684250ff8e 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -80,12 +80,12 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: ${{ github.event.pull_request.head.sha }} - name: Setup node environment - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: npm From 7f59551d51c118af84a819736667308dfaf4c667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Fern=C3=A1ndez?= Date: Sun, 13 Oct 2024 18:22:22 +0200 Subject: [PATCH 100/120] Fix incorrect commit input --- .github/workflows/pull_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 07f1f467b5..cb2023a142 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -43,7 +43,7 @@ jobs: uses: ./.github/workflows/__quality_checks.yml permissions: {} with: - commit: ${{ github.event.pull_request.head.ref }} + commit: ${{ github.event.pull_request.head.sha }} codeql: name: GitHub CodeQL 🔬 From 363171b56d0a0127c4b37fc1524c3673bc339c5f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 23 Sep 2024 14:42:08 -0400 Subject: [PATCH 101/120] Add playlist editing --- .../components/buttons/MoreCommandsButton.tsx | 16 ++-- src/components/itemContextMenu.js | 36 +++++++-- src/components/itemHelper.js | 27 ++++++- .../playlisteditor/playlisteditor.ts | 76 +++++++++++++++++-- src/controllers/itemDetails/index.js | 12 +-- src/strings/en-us.json | 3 + 6 files changed, 143 insertions(+), 27 deletions(-) diff --git a/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx b/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx index e767712364..b9c979f9f8 100644 --- a/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx +++ b/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx @@ -1,4 +1,4 @@ -import React, { FC, useCallback, useMemo } from 'react'; +import React, { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { IconButton } from '@mui/material'; import MoreVertIcon from '@mui/icons-material/MoreVert'; import { useQueryClient } from '@tanstack/react-query'; @@ -113,6 +113,7 @@ const MoreCommandsButton: FC = ({ itemId: selectedItemId || itemId || '' }); const parentId = item?.SeasonId || item?.SeriesId || item?.ParentId; + const [ hasCommands, setHasCommands ] = useState(false); const playlistItem = useMemo(() => { let PlaylistItemId: string | null = null; @@ -198,10 +199,15 @@ const MoreCommandsButton: FC = ({ [defaultMenuOptions, item, itemId, items, parentId, queryClient, queryKey] ); - if ( - item - && itemContextMenu.getCommands(defaultMenuOptions).length - ) { + useEffect(() => { + const getCommands = async () => { + const commands = await itemContextMenu.getCommands(defaultMenuOptions); + setHasCommands(commands.length > 0); + }; + void getCommands(); + }, [ defaultMenuOptions ]); + + if (item && hasCommands) { return ( { + const playlistEditor = new PlaylistEditor(); + playlistEditor.show({ + id: itemId, + serverId + }).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); + }); + break; case 'editimages': import('./imageeditor/imageeditor').then((imageEditor) => { imageEditor.show({ @@ -712,19 +732,19 @@ function refresh(apiClient, item) { }); } -export function show(options) { - const commands = getCommands(options); +export async function show(options) { + const commands = await getCommands(options); if (!commands.length) { - return Promise.reject(); + throw new Error('No item commands present'); } - return actionsheet.show({ + const id = await actionsheet.show({ items: commands, positionTo: options.positionTo, resolveOnClick: ['share'] - }).then(function (id) { - return executeCommand(options.item, id, options); }); + + return executeCommand(options.item, id, options); } export default { diff --git a/src/components/itemHelper.js b/src/components/itemHelper.js index 260c80b32c..2a93c36e75 100644 --- a/src/components/itemHelper.js +++ b/src/components/itemHelper.js @@ -1,10 +1,14 @@ -import { appHost } from './apphost'; -import globalize from 'lib/globalize'; import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; import { LocationType } from '@jellyfin/sdk/lib/generated-client/models/location-type'; import { RecordingStatus } from '@jellyfin/sdk/lib/generated-client/models/recording-status'; import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; +import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; + +import { appHost } from './apphost'; +import globalize from 'lib/globalize'; +import ServerConnections from './ServerConnections'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; export function getDisplayName(item, options = {}) { if (!item) { @@ -159,6 +163,25 @@ export function canEditImages (user, item) { return itemType !== 'Timer' && itemType !== 'SeriesTimer' && canEdit(user, item) && !isLocalItem(item); } +export async function canEditPlaylist(user, item) { + const apiClient = ServerConnections.getApiClient(item.ServerId); + const api = toApi(apiClient); + + try { + const { data: permissions } = await getPlaylistsApi(api) + .getPlaylistUser({ + userId: user.Id, + playlistId: item.Id + }); + + return !!permissions.CanEdit; + } catch (err) { + console.error('Failed to get playlist permissions', err); + } + + return false; +} + export function canEditSubtitles (user, item) { if (item.MediaType !== MediaType.Video) { return false; diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index 620a8a7c85..1321903e33 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -2,6 +2,7 @@ import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-ite import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by'; import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api'; import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; +import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api'; import escapeHtml from 'escape-html'; import toast from 'components/toast/toast'; @@ -28,11 +29,13 @@ import 'material-design-icons-iconfont'; import '../formdialog.scss'; interface DialogElement extends HTMLDivElement { + playlistId?: string submitted?: boolean } interface PlaylistEditorOptions { items: string[], + id?: string, serverId: string, enableAddToPlayQueue?: boolean, defaultValue?: string @@ -56,6 +59,13 @@ function onSubmit(this: HTMLElement, e: Event) { toast(globalize.translate('PlaylistError.AddFailed')); }) .finally(loading.hide); + } else if (panel.playlistId) { + updatePlaylist(panel) + .catch(err => { + console.error('[PlaylistEditor] Failed to update to playlist %s', panel.playlistId, err); + toast(globalize.translate('PlaylistError.UpdateFailed')); + }) + .finally(loading.hide); } else { createPlaylist(panel) .catch(err => { @@ -99,6 +109,26 @@ function redirectToPlaylist(id: string | undefined) { appRouter.showItem(id, currentServerId); } +function updatePlaylist(dlg: DialogElement) { + const apiClient = ServerConnections.getApiClient(currentServerId); + const api = toApi(apiClient); + + if (!dlg.playlistId) return Promise.reject(new Error('Missing playlist ID')); + + return getPlaylistsApi(api) + .updatePlaylist({ + playlistId: dlg.playlistId, + updatePlaylistDto: { + Name: dlg.querySelector('#txtNewPlaylistName')?.value, + IsPublic: dlg.querySelector('#chkPlaylistPublic')?.checked + } + }) + .then(() => { + dlg.submitted = true; + dialogHelper.close(dlg); + }); +} + function addToPlaylist(dlg: DialogElement, id: string) { const apiClient = ServerConnections.getApiClient(currentServerId); const api = toApi(apiClient); @@ -210,7 +240,7 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl }); } -function getEditorHtml(items: string[]) { +function getEditorHtml(items: string[], options: PlaylistEditorOptions) { let html = ''; html += '
'; @@ -232,7 +262,7 @@ function getEditorHtml(items: string[]) { html += `
@@ -244,7 +274,7 @@ function getEditorHtml(items: string[]) { html += '
'; html += '
'; - html += ``; + html += ``; html += '
'; html += ''; @@ -281,6 +311,34 @@ function initEditor(content: DialogElement, options: PlaylistEditorOptions, item console.error('[PlaylistEditor] failed to populate playlists', err); }) .finally(loading.hide); + } else if (options.id) { + content.querySelector('.fldSelectPlaylist')?.classList.add('hide'); + const panel = dom.parentWithClass(content, 'dialog') as DialogElement | null; + if (!panel) { + console.error('[PlaylistEditor] could not find dialog element'); + return; + } + + const apiClient = ServerConnections.getApiClient(currentServerId); + const api = toApi(apiClient); + Promise.all([ + getUserLibraryApi(api) + .getItem({ itemId: options.id }), + getPlaylistsApi(api) + .getPlaylist({ playlistId: options.id }) + ]) + .then(([ { data: playlistItem }, { data: playlist } ]) => { + panel.playlistId = options.id; + + const nameField = panel.querySelector('#txtNewPlaylistName'); + if (nameField) nameField.value = playlistItem.Name || ''; + + const publicField = panel.querySelector('#chkPlaylistPublic'); + if (publicField) publicField.checked = !!playlist.OpenAccess; + }) + .catch(err => { + console.error('[playlistEditor] failed to get playlist details', err); + }); } else { content.querySelector('.fldSelectPlaylist')?.classList.add('hide'); @@ -325,17 +383,21 @@ export class PlaylistEditor { dlg.classList.add('formDialog'); let html = ''; - const title = globalize.translate('HeaderAddToPlaylist'); - html += '
'; html += ``; html += '

'; - html += title; + if (items.length) { + html += globalize.translate('HeaderAddToPlaylist'); + } else if (options.id) { + html += globalize.translate('HeaderEditPlaylist'); + } else { + html += globalize.translate('HeaderNewPlaylist'); + } html += '

'; html += '
'; - html += getEditorHtml(items); + html += getEditorHtml(items, options); dlg.innerHTML = html; diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index 937c6a61ad..ef2ce9279e 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -582,11 +582,13 @@ function reloadFromItem(instance, page, params, item, user) { page.querySelector('.btnSplitVersions').classList.add('hide'); } - if (itemContextMenu.getCommands(getContextMenuOptions(item, user)).length) { - hideAll(page, 'btnMoreCommands', true); - } else { - hideAll(page, 'btnMoreCommands'); - } + itemContextMenu.getCommands(getContextMenuOptions(item, user)).then(commands => { + if (commands.length) { + hideAll(page, 'btnMoreCommands', true); + } else { + hideAll(page, 'btnMoreCommands'); + } + }); const itemBirthday = page.querySelector('#itemBirthday'); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index be05bed917..0fdbf12ed0 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -411,6 +411,7 @@ "HeaderDummyChapter": "Chapter Images", "HeaderDVR": "DVR", "HeaderEditImages": "Edit Images", + "HeaderEditPlaylist": "Edit Playlist", "HeaderEnabledFields": "Enabled Fields", "HeaderEnabledFieldsHelp": "Uncheck a field to lock it and prevent its data from being changed.", "HeaderEpisodesStatus": "Episodes Status", @@ -456,6 +457,7 @@ "HeaderNetworking": "IP Protocols", "HeaderNewApiKey": "New API Key", "HeaderNewDevices": "New Devices", + "HeaderNewPlaylist": "New Playlist", "HeaderNewRepository": "New Repository", "HeaderNextItem": "Next {0}", "HeaderNextItemPlayingInValue": "Next {0} Playing in {1}", @@ -1326,6 +1328,7 @@ "PlayFromBeginning": "Play from beginning", "PlaylistError.AddFailed": "Error adding to playlist", "PlaylistError.CreateFailed": "Error creating playlist", + "PlaylistError.UpdateFailed": "Error updating playlist", "PlaylistPublic": "Allow public access", "PlaylistPublicDescription": "Allow this playlist to be viewed by any logged in user.", "Playlists": "Playlists", From a37388b2e384b64ade20d24f72e2a34837f7e363 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 13 Oct 2024 12:00:10 -0400 Subject: [PATCH 102/120] Prevent blank playlist names --- .../playlisteditor/playlisteditor.ts | 11 ++++++++-- src/utils/string.test.ts | 20 ++++++++++++++++++- src/utils/string.ts | 9 +++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index 1321903e33..75b004cdd5 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -11,6 +11,7 @@ import globalize from 'lib/globalize'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; import { PluginType } from 'types/plugin'; import { toApi } from 'utils/jellyfin-apiclient/compat'; +import { isBlank } from 'utils/string'; import dialogHelper from '../dialogHelper/dialogHelper'; import loading from '../loading/loading'; @@ -86,12 +87,15 @@ function createPlaylist(dlg: DialogElement) { const apiClient = ServerConnections.getApiClient(currentServerId); const api = toApi(apiClient); + const name = dlg.querySelector('#txtNewPlaylistName')?.value; + if (isBlank(name)) return Promise.reject(new Error('Playlist name should not be blank')); + const itemIds = dlg.querySelector('.fldSelectedItemIds')?.value || undefined; return getPlaylistsApi(api) .createPlaylist({ createPlaylistDto: { - Name: dlg.querySelector('#txtNewPlaylistName')?.value, + Name: name, IsPublic: dlg.querySelector('#chkPlaylistPublic')?.checked, Ids: itemIds?.split(','), UserId: apiClient.getCurrentUserId() @@ -115,11 +119,14 @@ function updatePlaylist(dlg: DialogElement) { if (!dlg.playlistId) return Promise.reject(new Error('Missing playlist ID')); + const name = dlg.querySelector('#txtNewPlaylistName')?.value; + if (isBlank(name)) return Promise.reject(new Error('Playlist name should not be blank')); + return getPlaylistsApi(api) .updatePlaylist({ playlistId: dlg.playlistId, updatePlaylistDto: { - Name: dlg.querySelector('#txtNewPlaylistName')?.value, + Name: name, IsPublic: dlg.querySelector('#chkPlaylistPublic')?.checked } }) diff --git a/src/utils/string.test.ts b/src/utils/string.test.ts index ba1c686ede..8274e29273 100644 --- a/src/utils/string.test.ts +++ b/src/utils/string.test.ts @@ -1,6 +1,24 @@ import { describe, expect, it } from 'vitest'; -import { toBoolean, toFloat } from './string'; +import { isBlank, toBoolean, toFloat } from './string'; + +describe('isBlank', () => { + it('Should return true if the string is blank', () => { + let check = isBlank(undefined); + expect(check).toBe(true); + check = isBlank(null); + expect(check).toBe(true); + check = isBlank(''); + expect(check).toBe(true); + check = isBlank(' \t\t '); + expect(check).toBe(true); + }); + + it('Should return false if the string is not blank', () => { + const check = isBlank('not an empty string'); + expect(check).toBe(false); + }); +}); describe('toBoolean', () => { it('Should return the boolean represented by the string', () => { diff --git a/src/utils/string.ts b/src/utils/string.ts index fff42b95a6..b3a858e6f5 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -1,3 +1,12 @@ +/** + * Checks if a string is empty or contains only whitespace. + * @param {string} value The string to test. + * @returns {boolean} True if the string is blank. + */ +export function isBlank(value: string | undefined | null) { + return !value?.trim().length; +} + /** * Gets the value of a string as boolean. * @param {string} name The value as a string. From af20470b4a9bf2e6cb662c3f2cf95034e3ea2d39 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Sun, 13 Oct 2024 14:51:33 +0000 Subject: [PATCH 103/120] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 9e32e97ccb..ecb7326f9f 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1971,5 +1971,7 @@ "LabelScreensaverTimeHelp": "Čas v sekundách nečinnosti potrebný na spustenie šetriča obrazovky.", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Vpálenie všetkých titulkov pri prekódovaní. Tým sa zabezpečí synchronizácia titulkov po prekódovaní za cenu zníženia rýchlosti prekódovania.", "AlwaysBurnInSubtitleWhenTranscoding": "Pri prekódovaní vždy vpáliť titulky do videa", - "LabelScreensaverTime": "Čas šetriča obrazovky" + "LabelScreensaverTime": "Čas šetriča obrazovky", + "LabelQsvDevice": "QSV zariadenie", + "LabelQsvDeviceHelp": "Špecifikujte zariadenie pre Intel QSV v systéme s viacerými grafickými procesormi. V Linuxe je to renderovací uzol, napr. /dev/dri/renderD128. Vo Windowse je to index zariadenia začínajúci od 0. Nechajte prázdne, ak neviete, čo robíte." } From 855e8a4aec1c6273a30a86497b215456d46ab284 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 16:59:34 +0000 Subject: [PATCH 104/120] Update dependency postcss-preset-env to v10.0.6 --- package-lock.json | 104 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/package-lock.json b/package-lock.json index 20e2ac0db0..e176a3c4d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -108,7 +108,7 @@ "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.0.5", + "postcss-preset-env": "10.0.6", "postcss-scss": "4.0.9", "sass": "1.79.4", "sass-loader": "16.0.2", @@ -17130,9 +17130,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.1.tgz", - "integrity": "sha512-vfBliYVgEEJUFXCRPQ7jYt1wlD322u+/5GT0tZqMVYFInkpDHfjhU3nk2quTRW4uFc/umOOqLlxvrEOZRvloMw==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.3.tgz", + "integrity": "sha512-h52R7j0/QZP7NgnpsUaqx6wdssplK4U+ZuErvic2StgvXt3v5sPopFH86yjLvqz3jBrj/8Hkvr7Gio1LLRFP0g==", "dev": true, "funding": [ { @@ -17146,10 +17146,10 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.1", - "@csstools/css-parser-algorithms": "^3.0.1", - "@csstools/css-tokenizer": "^3.0.1", - "@csstools/media-query-list-parser": "^3.0.1" + "@csstools/cascade-layer-name-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^3.0.2", + "@csstools/css-tokenizer": "^3.0.2", + "@csstools/media-query-list-parser": "^4.0.0" }, "engines": { "node": ">=18" @@ -17159,9 +17159,9 @@ } }, "node_modules/postcss-custom-media/node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.1.tgz", - "integrity": "sha512-G9ZYN5+yr/E6xYSiy1BwOEFP5p88ZtWo8sL4NztKBkRRAwRkzVGa70M+D+fYHugMID5jkLeNt5X9jYd5EaVuyg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.2.tgz", + "integrity": "sha512-rRWNJ8n16okpQT+8RWEbPfSl8D9WVoDZGBfHkjYnMYWcC20RiMpu/iGeKqUl1hR+SQIKg6p/QJap5rZJaHtVOg==", "dev": true, "funding": [ { @@ -17178,14 +17178,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.1", - "@csstools/css-tokenizer": "^3.0.1" + "@csstools/css-parser-algorithms": "^3.0.2", + "@csstools/css-tokenizer": "^3.0.2" } }, "node_modules/postcss-custom-media/node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.1.tgz", - "integrity": "sha512-lSquqZCHxDfuTg/Sk2hiS0mcSFCEBuj49JfzPHJogDBT0mGCyY5A1AQzBWngitrp7i1/HAZpIgzF/VjhOEIJIg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.2.tgz", + "integrity": "sha512-6tC/MnlEvs5suR4Ahef4YlBccJDHZuxGsAlxXmybWjZ5jPxlzLSMlRZ9mVHSRvlD+CmtE7+hJ+UQbfXrws/rUQ==", "dev": true, "funding": [ { @@ -17202,13 +17202,13 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.1" + "@csstools/css-tokenizer": "^3.0.2" } }, "node_modules/postcss-custom-media/node_modules/@csstools/css-tokenizer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.1.tgz", - "integrity": "sha512-UBqaiu7kU0lfvaP982/o3khfXccVlHPWp0/vwwiIgDF0GmqqqxoiXC/6FCjlS9u92f7CoEz6nXKQnrn1kIAkOw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.2.tgz", + "integrity": "sha512-IuTRcD53WHsXPCZ6W7ubfGqReTJ9Ra0yRRFmXYP/Re8hFYYfoIYIK4080X5luslVLWimhIeFq0hj09urVMQzTw==", "dev": true, "funding": [ { @@ -17226,9 +17226,9 @@ } }, "node_modules/postcss-custom-media/node_modules/@csstools/media-query-list-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", - "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.0.tgz", + "integrity": "sha512-nUfbCGeqCju55Po8ujRNQ8DjuKYth5UcsDj5HsVzSfqnaFdpOwYCUAhRJ2grfwrXhb9+KuRXHQ6JHzaI0Qhu8Q==", "dev": true, "funding": [ { @@ -17245,8 +17245,8 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.1", - "@csstools/css-tokenizer": "^3.0.1" + "@csstools/css-parser-algorithms": "^3.0.2", + "@csstools/css-tokenizer": "^3.0.2" } }, "node_modules/postcss-custom-properties": { @@ -18685,9 +18685,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.5.tgz", - "integrity": "sha512-ipPOgr3RY0utgJDbNoCX2dxKoQ4e4WO1pC21QhDlxCAX8+qC8O2Ezkzb54fd+8XtZ1UveA5gLjBsVo6dJDoWIg==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.6.tgz", + "integrity": "sha512-qixfM2wbvKJhUjJELLB8lV2UCsyrMdSXqiXHiNKMgAbNturstc80j/8MsthJeOpxYEekrCrFzcaoOJm8JRSdBg==", "dev": true, "funding": [ { @@ -18742,7 +18742,7 @@ "postcss-color-functional-notation": "^7.0.2", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.1", + "postcss-custom-media": "^11.0.2", "postcss-custom-properties": "^14.0.1", "postcss-custom-selectors": "^8.0.1", "postcss-dir-pseudo-class": "^9.0.0", @@ -37796,41 +37796,41 @@ } }, "postcss-custom-media": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.1.tgz", - "integrity": "sha512-vfBliYVgEEJUFXCRPQ7jYt1wlD322u+/5GT0tZqMVYFInkpDHfjhU3nk2quTRW4uFc/umOOqLlxvrEOZRvloMw==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.3.tgz", + "integrity": "sha512-h52R7j0/QZP7NgnpsUaqx6wdssplK4U+ZuErvic2StgvXt3v5sPopFH86yjLvqz3jBrj/8Hkvr7Gio1LLRFP0g==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^2.0.1", - "@csstools/css-parser-algorithms": "^3.0.1", - "@csstools/css-tokenizer": "^3.0.1", - "@csstools/media-query-list-parser": "^3.0.1" + "@csstools/cascade-layer-name-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^3.0.2", + "@csstools/css-tokenizer": "^3.0.2", + "@csstools/media-query-list-parser": "^4.0.0" }, "dependencies": { "@csstools/cascade-layer-name-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.1.tgz", - "integrity": "sha512-G9ZYN5+yr/E6xYSiy1BwOEFP5p88ZtWo8sL4NztKBkRRAwRkzVGa70M+D+fYHugMID5jkLeNt5X9jYd5EaVuyg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.2.tgz", + "integrity": "sha512-rRWNJ8n16okpQT+8RWEbPfSl8D9WVoDZGBfHkjYnMYWcC20RiMpu/iGeKqUl1hR+SQIKg6p/QJap5rZJaHtVOg==", "dev": true, "requires": {} }, "@csstools/css-parser-algorithms": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.1.tgz", - "integrity": "sha512-lSquqZCHxDfuTg/Sk2hiS0mcSFCEBuj49JfzPHJogDBT0mGCyY5A1AQzBWngitrp7i1/HAZpIgzF/VjhOEIJIg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.2.tgz", + "integrity": "sha512-6tC/MnlEvs5suR4Ahef4YlBccJDHZuxGsAlxXmybWjZ5jPxlzLSMlRZ9mVHSRvlD+CmtE7+hJ+UQbfXrws/rUQ==", "dev": true, "requires": {} }, "@csstools/css-tokenizer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.1.tgz", - "integrity": "sha512-UBqaiu7kU0lfvaP982/o3khfXccVlHPWp0/vwwiIgDF0GmqqqxoiXC/6FCjlS9u92f7CoEz6nXKQnrn1kIAkOw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.2.tgz", + "integrity": "sha512-IuTRcD53WHsXPCZ6W7ubfGqReTJ9Ra0yRRFmXYP/Re8hFYYfoIYIK4080X5luslVLWimhIeFq0hj09urVMQzTw==", "dev": true }, "@csstools/media-query-list-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", - "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.0.tgz", + "integrity": "sha512-nUfbCGeqCju55Po8ujRNQ8DjuKYth5UcsDj5HsVzSfqnaFdpOwYCUAhRJ2grfwrXhb9+KuRXHQ6JHzaI0Qhu8Q==", "dev": true, "requires": {} } @@ -38610,9 +38610,9 @@ } }, "postcss-preset-env": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.5.tgz", - "integrity": "sha512-ipPOgr3RY0utgJDbNoCX2dxKoQ4e4WO1pC21QhDlxCAX8+qC8O2Ezkzb54fd+8XtZ1UveA5gLjBsVo6dJDoWIg==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.6.tgz", + "integrity": "sha512-qixfM2wbvKJhUjJELLB8lV2UCsyrMdSXqiXHiNKMgAbNturstc80j/8MsthJeOpxYEekrCrFzcaoOJm8JRSdBg==", "dev": true, "requires": { "@csstools/postcss-cascade-layers": "^5.0.0", @@ -38656,7 +38656,7 @@ "postcss-color-functional-notation": "^7.0.2", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.1", + "postcss-custom-media": "^11.0.2", "postcss-custom-properties": "^14.0.1", "postcss-custom-selectors": "^8.0.1", "postcss-dir-pseudo-class": "^9.0.0", diff --git a/package.json b/package.json index d0b85febde..24bbdb0f31 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.0.5", + "postcss-preset-env": "10.0.6", "postcss-scss": "4.0.9", "sass": "1.79.4", "sass-loader": "16.0.2", From a06a837339f6cee514691d4af399769e6218186e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 17:01:19 +0000 Subject: [PATCH 105/120] Update Linters --- package-lock.json | 180 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 93 insertions(+), 91 deletions(-) diff --git a/package-lock.json b/package-lock.json index f18f0d02bd..b26ca7f2a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,7 +71,7 @@ "@babel/preset-env": "7.25.7", "@babel/preset-react": "7.25.7", "@eslint-community/eslint-plugin-eslint-comments": "4.4.0", - "@stylistic/eslint-plugin": "2.8.0", + "@stylistic/eslint-plugin": "2.9.0", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", "@types/loadable__component": "5.13.9", @@ -95,7 +95,7 @@ "es-check": "7.2.1", "eslint": "8.57.1", "eslint-plugin-compat": "4.2.0", - "eslint-plugin-import": "2.30.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.0", "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "4.6.2", @@ -5899,15 +5899,15 @@ } }, "node_modules/@stylistic/eslint-plugin": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.8.0.tgz", - "integrity": "sha512-Ufvk7hP+bf+pD35R/QfunF793XlSRIC7USr3/EdgduK9j13i2JjmsM0LUz3/foS+jDYp2fzyWZA9N44CPur0Ow==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.9.0.tgz", + "integrity": "sha512-OrDyFAYjBT61122MIY1a3SfEgy3YCMgt2vL4eoPmvTwDBwyQhAXurxNQznlRD/jESNfYWfID8Ej+31LljvF7Xg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.4.0", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.1.0", + "@typescript-eslint/utils": "^8.8.0", + "eslint-visitor-keys": "^4.1.0", + "espree": "^10.2.0", "estraverse": "^5.3.0", "picomatch": "^4.0.2" }, @@ -5919,14 +5919,14 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", - "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", + "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0" + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5937,9 +5937,9 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", - "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", + "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", "dev": true, "license": "MIT", "engines": { @@ -5951,14 +5951,14 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", - "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", + "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5980,16 +5980,16 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", - "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", + "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0" + "@typescript-eslint/scope-manager": "8.8.1", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/typescript-estree": "8.8.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6003,13 +6003,13 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", - "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", + "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/types": "8.8.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -6057,9 +6057,9 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6070,15 +6070,15 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" + "eslint-visitor-keys": "^4.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10791,9 +10791,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz", - "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -10915,9 +10915,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -10929,7 +10929,7 @@ "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", + "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", @@ -10938,13 +10938,14 @@ "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -29736,42 +29737,42 @@ "dev": true }, "@stylistic/eslint-plugin": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.8.0.tgz", - "integrity": "sha512-Ufvk7hP+bf+pD35R/QfunF793XlSRIC7USr3/EdgduK9j13i2JjmsM0LUz3/foS+jDYp2fzyWZA9N44CPur0Ow==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.9.0.tgz", + "integrity": "sha512-OrDyFAYjBT61122MIY1a3SfEgy3YCMgt2vL4eoPmvTwDBwyQhAXurxNQznlRD/jESNfYWfID8Ej+31LljvF7Xg==", "dev": true, "requires": { - "@typescript-eslint/utils": "^8.4.0", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.1.0", + "@typescript-eslint/utils": "^8.8.0", + "eslint-visitor-keys": "^4.1.0", + "espree": "^10.2.0", "estraverse": "^5.3.0", "picomatch": "^4.0.2" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", - "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", + "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", "dev": true, "requires": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0" + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1" } }, "@typescript-eslint/types": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", - "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", + "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", - "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", + "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", "dev": true, "requires": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -29781,24 +29782,24 @@ } }, "@typescript-eslint/utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", - "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", + "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0" + "@typescript-eslint/scope-manager": "8.8.1", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/typescript-estree": "8.8.1" } }, "@typescript-eslint/visitor-keys": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", - "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", + "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", "dev": true, "requires": { - "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/types": "8.8.1", "eslint-visitor-keys": "^3.4.3" }, "dependencies": { @@ -29826,20 +29827,20 @@ } }, "eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true }, "espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", "dev": true, "requires": { "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" + "eslint-visitor-keys": "^4.1.0" } }, "estraverse": { @@ -33452,9 +33453,9 @@ } }, "eslint-module-utils": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz", - "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "requires": { "debug": "^3.2.7" @@ -33535,9 +33536,9 @@ } }, "eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "requires": { "@rtsao/scc": "^1.1.0", @@ -33548,7 +33549,7 @@ "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", + "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", @@ -33557,6 +33558,7 @@ "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "dependencies": { diff --git a/package.json b/package.json index 5915201b9a..dce8fdf845 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@babel/preset-env": "7.25.7", "@babel/preset-react": "7.25.7", "@eslint-community/eslint-plugin-eslint-comments": "4.4.0", - "@stylistic/eslint-plugin": "2.8.0", + "@stylistic/eslint-plugin": "2.9.0", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", "@types/loadable__component": "5.13.9", @@ -34,7 +34,7 @@ "es-check": "7.2.1", "eslint": "8.57.1", "eslint-plugin-compat": "4.2.0", - "eslint-plugin-import": "2.30.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.0", "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "4.6.2", From 97040a83247e3aaa61ab87f6b064670df3a618d9 Mon Sep 17 00:00:00 2001 From: NOV Date: Sun, 13 Oct 2024 19:58:37 +0000 Subject: [PATCH 106/120] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 4094132059..ec2549d635 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1486,7 +1486,7 @@ "LabelHDHomerunPortRangeHelp": "Restreint la plage de ports UDP pour HDHomeRun à cette valeur. (La plage par défaut est 1024 - 65535).", "LabelHDHomerunPortRange": "Plage de ports HDHomeRun", "PreferFmp4HlsContainerHelp": "Préférer l'utilisation de fMP4 comme conteneur pour HLS rendant ainsi possible la lecture directe des flux HEVC et AV1 sur les appareils compatibles.", - "LabelPublishedServerUriHelp": "Remplacer l'URI utilisée par Jellyfin selon l'interface ou l'adresse IP du client. Par exemple: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", + "LabelPublishedServerUriHelp": "Remplacer l'URI utilisée par Jellyfin selon l'interface ou l'adresse IP du client. Par exemple : internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", "LabelPublishedServerUri": "URIs du serveur publiées", "LabelSyncPlayHaltPlayback": "Arrêter la lecture locale", "SyncPlayGroupDefaultTitle": "Groupe de {0}", @@ -1769,7 +1769,7 @@ "ListView": "Vue en liste", "GridView": "Vue en grille", "BackdropScreensaver": "Écran de veille Diaporama", - "LogoScreensaver": "Écran de veille Logo", + "LogoScreensaver": "Logo de l'écran de veille", "UnknownError": "Une erreur inconnue s’est produite.", "MachineTranslated": "Traduction automatique", "AiTranslated": "Traduction par IA", @@ -1971,5 +1971,7 @@ "LabelScreensaverTimeHelp": "La durée en secondes d'inactivité requise pour démarrer l'économiseur d'écran.", "AlwaysBurnInSubtitleWhenTranscoding": "Toujours incruster les sous-titres lors du transcodage", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incruster tous les sous-titres lorsque le transcodage se déclenche. Cela garantit la synchronisation des sous-titres après le transcodage au prix d'une vitesse de transcodage réduite.", - "LabelScreensaverTime": "Délai de l'économiseur d'écran" + "LabelScreensaverTime": "Délai de l'économiseur d'écran", + "LabelQsvDevice": "Appareil QSV", + "LabelQsvDeviceHelp": "Spécifiez l'appareil pour Intel QSV sur un système multi-GPU. Sous Linux, il s'agit du nœud de rendu, par exemple, /dev/dri/renderD128. Sous Windows, il s'agit de l'indice de l'appareil commençant à 0. Laissez vide à moins que vous ne sachiez ce que vous faites." } From 941f0e72a406c07368e8d4640b954273340b0f68 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Sun, 13 Oct 2024 20:10:50 +0000 Subject: [PATCH 107/120] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 6061f39a19..1c76768b89 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1115,7 +1115,7 @@ "Trailers": "Zwiastuny", "Transcoding": "Transkodowanie", "Tuesday": "Wtorek", - "TvLibraryHelp": "Zapoznaj się z instrukcją{1} nazewnictwa seriali {0}.", + "TvLibraryHelp": "Zapoznaj się z {0}instrukcją nazewnictwa seriali{1}.", "Uniform": "Jednolity", "UninstallPluginConfirmation": "Czy na pewno chcesz usunąć {0}?", "HeaderUninstallPlugin": "Usuń wtyczkę", From 3ad0fb02e407d4c6075e9bbff358146db5717b6c Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 13 Oct 2024 16:40:57 -0400 Subject: [PATCH 108/120] Move validation checks earlier --- src/components/playlisteditor/playlisteditor.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index 75b004cdd5..3db83914e1 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -84,12 +84,12 @@ function onSubmit(this: HTMLElement, e: Event) { } function createPlaylist(dlg: DialogElement) { - const apiClient = ServerConnections.getApiClient(currentServerId); - const api = toApi(apiClient); - const name = dlg.querySelector('#txtNewPlaylistName')?.value; if (isBlank(name)) return Promise.reject(new Error('Playlist name should not be blank')); + const apiClient = ServerConnections.getApiClient(currentServerId); + const api = toApi(apiClient); + const itemIds = dlg.querySelector('.fldSelectedItemIds')?.value || undefined; return getPlaylistsApi(api) @@ -114,14 +114,14 @@ function redirectToPlaylist(id: string | undefined) { } function updatePlaylist(dlg: DialogElement) { - const apiClient = ServerConnections.getApiClient(currentServerId); - const api = toApi(apiClient); - if (!dlg.playlistId) return Promise.reject(new Error('Missing playlist ID')); const name = dlg.querySelector('#txtNewPlaylistName')?.value; if (isBlank(name)) return Promise.reject(new Error('Playlist name should not be blank')); + const apiClient = ServerConnections.getApiClient(currentServerId); + const api = toApi(apiClient); + return getPlaylistsApi(api) .updatePlaylist({ playlistId: dlg.playlistId, From 653b6070000747103ec9e083939d15c556f0594b Mon Sep 17 00:00:00 2001 From: NOV Date: Sun, 13 Oct 2024 20:49:37 +0000 Subject: [PATCH 109/120] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index ec2549d635..5b30d89e6a 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1973,5 +1973,6 @@ "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incruster tous les sous-titres lorsque le transcodage se déclenche. Cela garantit la synchronisation des sous-titres après le transcodage au prix d'une vitesse de transcodage réduite.", "LabelScreensaverTime": "Délai de l'économiseur d'écran", "LabelQsvDevice": "Appareil QSV", - "LabelQsvDeviceHelp": "Spécifiez l'appareil pour Intel QSV sur un système multi-GPU. Sous Linux, il s'agit du nœud de rendu, par exemple, /dev/dri/renderD128. Sous Windows, il s'agit de l'indice de l'appareil commençant à 0. Laissez vide à moins que vous ne sachiez ce que vous faites." + "LabelQsvDeviceHelp": "Spécifiez l'appareil pour Intel QSV sur un système multi-GPU. Sous Linux, il s'agit du nœud de rendu, par exemple, /dev/dri/renderD128. Sous Windows, il s'agit de l'indice de l'appareil commençant à 0. Laissez vide à moins que vous ne sachiez ce que vous faites.", + "HeaderMediaSegmentActions": "Actions sur les segments du média" } From f30a449ed624b99278e5167ff8a9f444d0b21167 Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Sun, 13 Oct 2024 20:44:19 +0000 Subject: [PATCH 110/120] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/strings/he.json b/src/strings/he.json index eaada58dfd..d45bc79ed9 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1343,5 +1343,15 @@ "LabelLyricDownloaders": "תוכנות הורדת מילים לשירים", "LabelMaxMuxingQueueSizeHelp": "מספר החבילות המקסימלי שניתן לאגור בזמן המתנה שכל ההזרמות יאותחלו. ניתן להגדיל זאת אם התקלת בשגיאת \"יותר מדי חבילות נאגרו לזרם הפלט\" בלוגים של FFmpeg. הערך המומלץ הוא 2048.", "Inker": "דית", - "HeaderAddLyrics": "הוספת מילים לשיר" + "HeaderAddLyrics": "הוספת מילים לשיר", + "LabelMetadataDownloadersHelp": "הפעל ודרג את תוכנות הורדת המטא-דאטה לפי סדר עדיפות. תוכנות הורדת בעדיפות נמוכה יהיו בשימוש כדי למלא מידע חסר.", + "LabelMetadataPathHelp": "הגדרת מקום מוגדר אישית להורדת תמונות ומטה-דאטה.", + "LabelMetadataReadersHelp": "ניתן לדרג את מקורות המטה-דאטה המועדפים עליך לפי סדר העדפה. הקובץ הקיים הראשון ייקרא.", + "LabelMetadataSaversHelp": "בחירת פורמט הקובץ שישמש לשמירת המטה-דאטה.", + "LabelMinAudiobookResume": "מינימום דקות בספר-שמע כדי לאפשר המשך", + "LabelMinAudiobookResumeHelp": "כותרים נחשבים כלא-מנוגנים לפני זמן זה.", + "LabelNoChangelog": "לא סופק תיעוד שינויים לשחרור זה.", + "LabelNotInstalled": "לא מותקן", + "HeaderMediaSegmentActions": "פעולות על מקטע מדיה", + "LabelMediaSegmentsType": "{0} מקטעים" } From a2f1024a5851741c3ac22f6c4c5dc02c16062e2a Mon Sep 17 00:00:00 2001 From: NOV Date: Sun, 13 Oct 2024 22:01:17 +0000 Subject: [PATCH 111/120] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 5b30d89e6a..60a284234d 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -769,16 +769,16 @@ "MediaInfoTimestamp": "Horodatage", "MediaIsBeingConverted": "Le média est converti en un format compatible avec l'appareil qui lit le média.", "MessageAlreadyInstalled": "Cette version est déjà installée.", - "MessageAreYouSureDeleteSubtitles": "Voulez-vous vraiment supprimer ce fichier de sous-titres ?", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Voulez-vous vraiment supprimer ce dossier multimédia ?", - "MessageConfirmDeleteGuideProvider": "Voulez-vous vraiment supprimer ce fournisseur de guide d'information ?", - "MessageConfirmDeleteTunerDevice": "Voulez-vous vraiment supprimer cet appareil ?", + "MessageAreYouSureDeleteSubtitles": "Voulez-vous vraiment supprimer ce fichier de sous-titres ?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Voulez-vous vraiment supprimer ce dossier multimédia ?", + "MessageConfirmDeleteGuideProvider": "Voulez-vous vraiment supprimer ce fournisseur de guide d'information ?", + "MessageConfirmDeleteTunerDevice": "Voulez-vous vraiment supprimer cet appareil ?", "MessageConfirmProfileDeletion": "Voulez-vous vraiment supprimer ce profil ?", - "MessageConfirmRecordingCancellation": "Annuler l'enregistrement ?", - "MessageConfirmRemoveMediaLocation": "Voulez-vous vraiment supprimer cet emplacement ?", - "MessageConfirmRestart": "Voulez-vous vraiment redémarrer Jellyfin ?", - "MessageConfirmRevokeApiKey": "Voulez-vous vraiment révoquer cette clé API ? La connexion de l'application à ce serveur sera brutalement interrompue.", - "MessageConfirmShutdown": "Voulez-vous vraiment éteindre le serveur ?", + "MessageConfirmRecordingCancellation": "Annuler l'enregistrement ?", + "MessageConfirmRemoveMediaLocation": "Voulez-vous vraiment supprimer cet emplacement ?", + "MessageConfirmRestart": "Voulez-vous vraiment redémarrer Jellyfin ?", + "MessageConfirmRevokeApiKey": "Voulez-vous vraiment révoquer cette clé API ? La connexion de l'application à ce serveur sera brutalement interrompue.", + "MessageConfirmShutdown": "Voulez-vous vraiment éteindre le serveur ?", "MessageContactAdminToResetPassword": "Veuillez contacter votre administrateur système pour réinitialiser votre mot de passe.", "MessageCreateAccountAt": "Créer un compte sur {0}", "MessageDeleteTaskTrigger": "Voulez-vous vraiment supprimer ce déclencheur de tâche ?", @@ -1238,7 +1238,7 @@ "SelectAdminUsername": "Veuillez choisir un nom d'utilisateur pour le compte administrateur.", "HeaderNavigation": "Navigation", "OptionForceRemoteSourceTranscoding": "Forcer le transcodage pour les sources de média externes telles que la TV en direct", - "MessageConfirmAppExit": "Voulez-vous quitter ?", + "MessageConfirmAppExit": "Voulez-vous quitter ?", "LabelVideoResolution": "Résolution vidéo", "LabelStreamType": "Type de flux", "LabelPlayerDimensions": "Dimension du lecteur", @@ -1974,5 +1974,16 @@ "LabelScreensaverTime": "Délai de l'économiseur d'écran", "LabelQsvDevice": "Appareil QSV", "LabelQsvDeviceHelp": "Spécifiez l'appareil pour Intel QSV sur un système multi-GPU. Sous Linux, il s'agit du nœud de rendu, par exemple, /dev/dri/renderD128. Sous Windows, il s'agit de l'indice de l'appareil commençant à 0. Laissez vide à moins que vous ne sachiez ce que vous faites.", - "HeaderMediaSegmentActions": "Actions sur les segments du média" + "HeaderMediaSegmentActions": "Actions sur les segments du média", + "HeaderEditPlaylist": "Modifier la liste de lecture", + "HeaderNewPlaylist": "Nouvelle liste de lecture", + "LabelMediaSegmentsType": "Segments {0}", + "MediaSegmentAction.None": "Aucun", + "MediaSegmentAction.Skip": "Passer", + "MediaSegmentType.Outro": "Générique de fin", + "MediaSegmentType.Commercial": "Commercial", + "MediaSegmentType.Preview": "Prévisualisation", + "MediaSegmentType.Recap": "Récapitulatif", + "MediaSegmentType.Intro": "Générique de début", + "PlaylistError.UpdateFailed": "Erreur lors de la mise à jour de la liste de lecture" } From 82d963bd849c2b10ab44c5f8db8a2af9ad17e382 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Sun, 13 Oct 2024 22:25:21 +0000 Subject: [PATCH 112/120] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index ecb7326f9f..d0cf0f11af 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1973,5 +1973,17 @@ "AlwaysBurnInSubtitleWhenTranscoding": "Pri prekódovaní vždy vpáliť titulky do videa", "LabelScreensaverTime": "Čas šetriča obrazovky", "LabelQsvDevice": "QSV zariadenie", - "LabelQsvDeviceHelp": "Špecifikujte zariadenie pre Intel QSV v systéme s viacerými grafickými procesormi. V Linuxe je to renderovací uzol, napr. /dev/dri/renderD128. Vo Windowse je to index zariadenia začínajúci od 0. Nechajte prázdne, ak neviete, čo robíte." + "LabelQsvDeviceHelp": "Špecifikujte zariadenie pre Intel QSV v systéme s viacerými grafickými procesormi. V Linuxe je to renderovací uzol, napr. /dev/dri/renderD128. Vo Windowse je to index zariadenia začínajúci od 0. Nechajte prázdne, ak neviete, čo robíte.", + "HeaderMediaSegmentActions": "Akcie segmentu médií", + "LabelMediaSegmentsType": "{0} segmenty", + "MediaSegmentAction.None": "Žiadne", + "MediaSegmentAction.Skip": "Preskočiť", + "MediaSegmentType.Commercial": "Komerčné", + "MediaSegmentType.Intro": "Úvod", + "MediaSegmentType.Outro": "Záverečné titulky", + "MediaSegmentType.Preview": "Ukážka", + "MediaSegmentType.Recap": "Rekapitulácia", + "PlaylistError.UpdateFailed": "Chyba pri aktualizácii playlistu", + "HeaderEditPlaylist": "Upraviť playlist", + "HeaderNewPlaylist": "Nový playlist" } From 25cc8fdba835aae14d7d6554b211ec8b70eff165 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Mon, 14 Oct 2024 04:24:27 +0000 Subject: [PATCH 113/120] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 86527f11f7..fa4749b51f 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1972,5 +1972,17 @@ "AlwaysBurnInSubtitleWhenTranscoding": "Ondertiteling altijd inbranden bij transcoderen", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Alle ondertiteling inbranden wanneer er getranscodeerd wordt. Dit verzekert dat ondertiteling gelijkloopt, maar verlaagt de transcodeersnelheid.", "LabelQsvDevice": "QSV-apparaat", - "LabelQsvDeviceHelp": "Op een systeem met meerdere GPU's is dit het apparaat dat gebruikt moet worden voor Intel QSV. Op Linux is dit de render-node, bijvoorbeeld /dev/dri/renderD128. Op Windows is dit de apparaatindex startend bij 0. Laat dit leeg tenzij je weet wat je doet." + "LabelQsvDeviceHelp": "Op een systeem met meerdere GPU's is dit het apparaat dat gebruikt moet worden voor Intel QSV. Op Linux is dit de render-node, bijvoorbeeld /dev/dri/renderD128. Op Windows is dit de apparaatindex startend bij 0. Laat dit leeg tenzij je weet wat je doet.", + "HeaderEditPlaylist": "Afspeellijst bewerken", + "HeaderNewPlaylist": "Nieuwe afspeellijst", + "LabelMediaSegmentsType": "{0} segmenten", + "MediaSegmentAction.None": "Geen", + "MediaSegmentAction.Skip": "Overslaan", + "MediaSegmentType.Commercial": "Reclame", + "MediaSegmentType.Intro": "Intro", + "MediaSegmentType.Outro": "Outro", + "MediaSegmentType.Preview": "Voorvertoning", + "MediaSegmentType.Recap": "Terugblik", + "PlaylistError.UpdateFailed": "Fout bij bijwerken afspeellijst", + "HeaderMediaSegmentActions": "Acties voor mediasegmenten" } From bbc5bf5a2d7f8482493022f7c08d74dc977cf793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Mon, 14 Oct 2024 06:51:37 +0000 Subject: [PATCH 114/120] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index eb29d6cb89..0e790aa257 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -4,7 +4,7 @@ "Add": "Přidat", "AddToCollection": "Přidat do kolekce", "AddToPlayQueue": "Přidat do fronty k přehrání", - "AddToPlaylist": "Přidat do playlistu", + "AddToPlaylist": "Přidat do seznamu skladeb", "AddedOnValue": "Přidáno {0}", "AdditionalNotificationServices": "Pro instalaci dalších oznamovacích služeb si prohlédněte katalog zásuvných modulů.", "Albums": "Alba", @@ -181,7 +181,7 @@ "HeaderActiveRecordings": "Aktivní nahrávání", "HeaderActivity": "Aktivita", "HeaderAddToCollection": "Přidat do Kolekce", - "HeaderAddToPlaylist": "Přidat do playlistu", + "HeaderAddToPlaylist": "Přidat do seznamu skladeb", "HeaderAddUpdateImage": "Přidat/aktualizovat obrázek", "HeaderAdditionalParts": "Další součásti", "HeaderAdmin": "Správa", @@ -876,7 +876,7 @@ "ReleaseDate": "Datum vydání", "RememberMe": "Zapamatuj si mě", "RemoveFromCollection": "Odebrat z kolekce", - "RemoveFromPlaylist": "Odebrat z playlistu", + "RemoveFromPlaylist": "Odebrat ze seznam skladeb", "Repeat": "Opakovat", "RepeatAll": "Opakovat vše", "RepeatEpisodes": "Opakovaní epizod", @@ -1103,7 +1103,7 @@ "LabelMetadata": "Metadata", "LabelOptionalNetworkPathHelp": "Pokud je tato složka sdílena ve vaší síti, zadání cesty ke sdílené složce umožní klientům na jiných zařízeních přímý přístup k souborům s médii. Například {0} nebo {1}.", "LabelPersonRole": "Úloha", - "LabelPlaylist": "Playlist", + "LabelPlaylist": "Seznam skladeb", "LabelReasonForTranscoding": "Důvod pro překódování", "LabelRemoteClientBitrateLimitHelp": "Volitelný limit datového toku pro všechna síťová zařízení. To je užitečné, aby se zabránilo požadavkům na vyšší přenosovou rychlost než zvládne vaše připojení k internetu. To může mít za následek zvýšení zátěže procesoru, aby bylo možné převádět videa za běhu na nižší datový tok.", "LabelServerHost": "Host", @@ -1275,7 +1275,7 @@ "UnsupportedPlayback": "Jellyfin nedokáže dešifrovat obsah chráněný Správou digitálních práv (DRM), ale pokusí se zobrazit veškerý obsah, včetně toho chráněného. Některé soubory se nemusí vůbec zobrazit kvůli šifrování nebo jiným nepodporovaným funkcím, např.: interaktivním názvům.", "Filter": "Filtr", "New": "Nový", - "ButtonTogglePlaylist": "Playlist", + "ButtonTogglePlaylist": "Seznam skladeb", "LabelStable": "Stabilní", "LabelChromecastVersion": "Verze Google Cast", "ApiKeysCaption": "Seznam povolených klíčů k API", @@ -1971,5 +1971,19 @@ "LabelScreensaverTime": "Prodleva spořiče obrazovky", "LabelScreensaverTimeHelp": "Po jak dlouhé neaktivitě (v sekundách) se má spustit spořič obrazovky.", "AlwaysBurnInSubtitleWhenTranscoding": "Vždy vypálit titulky do obrazu při překódování", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Vypálit všechny titulky do obrazu při překódování. To zaručí, že budou titulky po překódování synchronizovány, ale překódování bude pomalejší." + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Vypálit všechny titulky do obrazu při překódování. To zaručí, že budou titulky po překódování synchronizovány, ale překódování bude pomalejší.", + "LabelQsvDevice": "Zařízení QSV", + "LabelQsvDeviceHelp": "Určuje zařízení pro Intel QSV na systémech s více grafickými kartami. Na Linuxu se jedná o rendrovací uzel, např. /dev/dri/renderD128. Na Windows se jedná o index zařízení, který začíná od 0. Pokud nevíte, k čemu tato možnost je, doporučujeme nic nevyplňovat.", + "HeaderEditPlaylist": "Upravit seznam skladeb", + "HeaderNewPlaylist": "Nový seznam skladeb", + "MediaSegmentAction.None": "Žádné", + "MediaSegmentAction.Skip": "Přeskočit", + "MediaSegmentType.Commercial": "Komerční", + "MediaSegmentType.Intro": "Úvod", + "MediaSegmentType.Outro": "Závěrečné titulky", + "MediaSegmentType.Preview": "Ukázka", + "MediaSegmentType.Recap": "Rekapitulace", + "PlaylistError.UpdateFailed": "Aktualizace seznamu skladeb se nezdařila", + "HeaderMediaSegmentActions": "Akce segmentu médií", + "LabelMediaSegmentsType": "{0} segmentů" } From 5de953347c3e3c97a3f708250cc074d3ea446194 Mon Sep 17 00:00:00 2001 From: Kityn Date: Mon, 14 Oct 2024 06:17:39 +0000 Subject: [PATCH 115/120] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 1c76768b89..97ad43343d 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1973,5 +1973,17 @@ "AlwaysBurnInSubtitleWhenTranscoding": "Zawsze wypalaj napisy podczas transkodowania", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Wypal wszystkie napisy, gdy zostanie wyzwolone transkodowanie. Zapewnia to synchronizację napisów po transkodowaniu kosztem zmniejszonej prędkości transkodowania.", "LabelQsvDevice": "Urządzenie QSV", - "LabelQsvDeviceHelp": "Określ urządzenie dla Intel QSV w systemie z wieloma GPU. W systemie Linux jest to węzeł renderowania, np. /dev/dri/renderD128. W systemie Windows jest to indeks urządzenia zaczynający się od 0. Pozostaw puste, chyba że wiesz, co robisz." + "LabelQsvDeviceHelp": "Określ urządzenie dla Intel QSV w systemie z wieloma GPU. W systemie Linux jest to węzeł renderowania, np. /dev/dri/renderD128. W systemie Windows jest to indeks urządzenia zaczynający się od 0. Pozostaw puste, chyba że wiesz, co robisz.", + "HeaderEditPlaylist": "Edytuj listę odtwarzania", + "HeaderNewPlaylist": "Nowa lista odtwarzania", + "LabelMediaSegmentsType": "Segmenty: {0}", + "MediaSegmentAction.None": "Brak", + "MediaSegmentAction.Skip": "Pomiń", + "MediaSegmentType.Commercial": "Reklama", + "MediaSegmentType.Intro": "Wstęp", + "MediaSegmentType.Outro": "Zakończenie", + "PlaylistError.UpdateFailed": "Błąd podczas aktualizacji listy odtwarzania", + "MediaSegmentType.Preview": "Zapowiedź", + "MediaSegmentType.Recap": "Podsumowanie", + "HeaderMediaSegmentActions": "Działania segmentu mediów" } From c4d0c428fb9e2c461c44751de105788d7558e940 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Mon, 14 Oct 2024 07:29:08 +0000 Subject: [PATCH 116/120] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 95683d4523..9c0ea37dea 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1973,5 +1973,17 @@ "LabelScreensaverTime": "屏幕保护时间", "LabelScreensaverTimeHelp": "启动屏幕保护程序所需的无活动时间(以秒为单位)。", "LabelQsvDeviceHelp": "为多 GPU 系统上的 Intel QSV 指定设备。在 Linux 上,这是渲染节点,例如 /dev/dri/renderD128。在 Windows 上,这是从 0 开始的设备序号。除非您知道自己在做什么,否则请留空。", - "LabelQsvDevice": "QSV 设备" + "LabelQsvDevice": "QSV 设备", + "HeaderEditPlaylist": "编辑播放列表", + "LabelMediaSegmentsType": "{0} 片段", + "HeaderMediaSegmentActions": "媒体片段操作", + "MediaSegmentAction.None": "无", + "MediaSegmentAction.Skip": "跳过", + "MediaSegmentType.Commercial": "广告", + "MediaSegmentType.Intro": "片头", + "MediaSegmentType.Outro": "片尾", + "MediaSegmentType.Preview": "预告", + "MediaSegmentType.Recap": "回顾", + "HeaderNewPlaylist": "新建播放列表", + "PlaylistError.UpdateFailed": "更新播放列表时出错" } From 14fbd12f7dd73cc8a5b12c0793152102947ac88a Mon Sep 17 00:00:00 2001 From: nyanmisaka Date: Mon, 14 Oct 2024 17:33:01 +0800 Subject: [PATCH 117/120] Fix incorrect 'required' attribute in txtQsvDevice fixes a0b944b Signed-off-by: nyanmisaka --- src/controllers/dashboard/encodingsettings.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/controllers/dashboard/encodingsettings.js b/src/controllers/dashboard/encodingsettings.js index a52ada96e8..6552c90fb0 100644 --- a/src/controllers/dashboard/encodingsettings.js +++ b/src/controllers/dashboard/encodingsettings.js @@ -238,11 +238,9 @@ $(document).on('pageinit', '#encodingSettingsPage', function () { if (this.value == 'qsv') { page.querySelector('.fldSysNativeHwDecoder').classList.remove('hide'); page.querySelector('.fldQsvDevice').classList.remove('hide'); - page.querySelector('#txtQsvDevice').setAttribute('required', 'required'); } else { page.querySelector('.fldSysNativeHwDecoder').classList.add('hide'); page.querySelector('.fldQsvDevice').classList.add('hide'); - page.querySelector('#txtQsvDevice').removeAttribute('required'); } if (this.value == 'nvenc') { From 39ec804a5ae787ad47161ab6ddd9150b93a8751c Mon Sep 17 00:00:00 2001 From: Anders Date: Mon, 14 Oct 2024 08:38:39 +0000 Subject: [PATCH 118/120] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/da.json b/src/strings/da.json index c7a5878978..3a4509130c 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1928,5 +1928,8 @@ "HeaderAddLyrics": "Tilføj sangtekst", "LabelNoChangelog": "Ingen ændringer fortaget for denne udgivelse.", "LabelSelectPreferredTranscodeVideoCodec": "Fforetrukne video codec til omkodning", - "PluginLoadConfigError": "Der opstod en fejl imens vi hentede konfigurationssiderne til pluginet." + "PluginLoadConfigError": "Der opstod en fejl imens vi hentede konfigurationssiderne til pluginet.", + "AllowFmp4TranscodingContainerHelp": "Tillad fMP4-transkodningscontainer for denne tuner for at aktivere HEVC og HDR-indhold. Ikke alle tunere er kompatible med denne container. Deaktiver dette, hvis du oplever afspilningsproblemer.", + "AllowStreamSharingHelp": "Tillad Jellyfin at kopiere mpegts-streamen fra tuner og dele denne kopierede stream til dens klienter. Dette er brugbart når tunerens totale stream-antal er begrænset, men kan også skabe afspilningsproblemer.", + "AlwaysBurnInSubtitleWhenTranscoding": "Brænd altid undertekster ind under transkodning" } From 3165736e3e101144b846ae9a2140d595e01beb8a Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Mon, 14 Oct 2024 09:54:06 +0000 Subject: [PATCH 119/120] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 9c0ea37dea..f8b7c37617 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1756,11 +1756,11 @@ "LogLevel.Critical": "严重", "LogLevel.None": "无", "LabelThrottleDelaySecondsHelp": "当转码进度快于客户端下载进度的距离大于这个时间(以秒为单位),暂停转码以限制转码速度。必须足够长,以便客户端能够保持有效的缓冲时长。仅在启用了限制转码速度功能时生效。", - "AllowSegmentDeletion": "删除片段", - "AllowSegmentDeletionHelp": "自动删除已经被客户端下载过的旧视频片段。这样可以避免在磁盘上存储整个转码文件。如果出现播放问题,请关闭此选项。", + "AllowSegmentDeletion": "删除分段", + "AllowSegmentDeletionHelp": "自动删除已经被客户端下载过的旧视频分段。这样可以避免在磁盘上存储整个转码文件。如果出现播放问题,请关闭此选项。", "LabelThrottleDelaySeconds": "限制转码速度阈值", - "LabelSegmentKeepSeconds": "缓存片段时长", - "LabelSegmentKeepSecondsHelp": "已经被客户端下载过的视频片段应该在服务器上保留的时间(以秒为单位)。仅在启用片段删除时生效。", + "LabelSegmentKeepSeconds": "缓存分段时长", + "LabelSegmentKeepSecondsHelp": "已经被客户端下载过的视频分段应该在服务器上保留的时间(以秒为单位)。仅在启用分段删除时生效。", "HeaderEpisodesStatus": "剧集状态", "LabelBackdropScreensaverInterval": "屏幕保护程序间隔", "LabelBackdropScreensaverIntervalHelp": "不同屏幕保护切换的时间间隔秒数。", @@ -1975,8 +1975,8 @@ "LabelQsvDeviceHelp": "为多 GPU 系统上的 Intel QSV 指定设备。在 Linux 上,这是渲染节点,例如 /dev/dri/renderD128。在 Windows 上,这是从 0 开始的设备序号。除非您知道自己在做什么,否则请留空。", "LabelQsvDevice": "QSV 设备", "HeaderEditPlaylist": "编辑播放列表", - "LabelMediaSegmentsType": "{0} 片段", - "HeaderMediaSegmentActions": "媒体片段操作", + "LabelMediaSegmentsType": "{0}分段", + "HeaderMediaSegmentActions": "媒体分段操作", "MediaSegmentAction.None": "无", "MediaSegmentAction.Skip": "跳过", "MediaSegmentType.Commercial": "广告", From 81d50e73e56d575ae2b14d3a27134c065fb07817 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Mon, 14 Oct 2024 12:39:35 +0000 Subject: [PATCH 120/120] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index f8b7c37617..770e936095 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -307,7 +307,7 @@ "HeaderPlaybackError": "播放错误", "HeaderPleaseSignIn": "请登录", "HeaderPluginInstallation": "插件安装", - "HeaderPreferredMetadataLanguage": "首选元数据语言", + "HeaderPreferredMetadataLanguage": "首选的元数据语言", "HeaderProfileInformation": "配置信息", "HeaderProfileServerSettingsHelp": "这些参数将控制服务器如何将自己呈现给客户端。", "HeaderRecentlyPlayed": "最近播放", @@ -353,7 +353,7 @@ "HeaderTranscodingProfileHelp": "添加转码配置文件标明哪些媒体格式需要转码处理。", "HeaderTunerDevices": "调谐器设备", "HeaderTuners": "调谐器", - "HeaderTypeImageFetchers": "图片获取程序 ({0})", + "HeaderTypeImageFetchers": "图片获取器 ({0})", "HeaderTypeText": "输入文本", "HeaderUpcomingOnTV": "即将在电视上播放", "HeaderUploadImage": "上传图片", @@ -401,7 +401,7 @@ "LabelAppNameExample": "用于识别 API 密钥的可读名称。此设置不影响功能。", "LabelArtists": "艺术家", "LabelArtistsHelp": "将多个艺术家用分号分隔。", - "LabelAudioLanguagePreference": "首选音频语言", + "LabelAudioLanguagePreference": "首选的音频语言", "LabelAutomaticallyAddToCollection": "自动添加到合集", "LabelAutomaticallyAddToCollectionHelp": "至少有2个电影属于相同的合集时,它们将会自动添加到合集中.", "LabelAutomaticallyRefreshInternetMetadataEvery": "自动从互联网获取元数据并刷新", @@ -507,7 +507,7 @@ "LabelIconMaxHeight": "图标最大高度", "LabelIconMaxWidth": "图标最大宽度", "LabelIdentificationFieldHelp": "不区分大小写的字符串或正则表达式。", - "LabelImageFetchersHelp": "启用你首选的图片获取程序的优先级排序。", + "LabelImageFetchersHelp": "启用您首选的图片获取器并按优先级对其进行排序。", "LabelImageType": "图片类型", "LabelImportOnlyFavoriteChannels": "限制标记频道为我的最爱", "LabelInNetworkSignInWithEasyPassword": "启用简单PIN码登录家庭网络", @@ -547,7 +547,7 @@ "LabelMessageText": "消息文本", "LabelMessageTitle": "消息标题", "LabelMetadata": "元数据", - "LabelMetadataDownloadLanguage": "首选下载语言", + "LabelMetadataDownloadLanguage": "首选的下载语言", "LabelMetadataDownloadersHelp": "启用媒体资料下载器的优先级排序,低优先级的下载器只会用来填补缺少的信息。", "LabelMetadataPath": "元数据路径", "LabelMetadataPathHelp": "为下载的图像和元数据指定自定义路径。", @@ -601,7 +601,7 @@ "LabelPostProcessor": "后处理应用程序", "LabelPostProcessorArguments": "后处理程序命令行参数", "LabelPostProcessorArgumentsHelp": "使用 {path} 作为录制文件的路径。", - "LabelPreferredDisplayLanguage": "首选显示语言", + "LabelPreferredDisplayLanguage": "首选的显示语言", "LabelPreferredSubtitleLanguage": "字幕语言偏好", "LabelProfileAudioCodecs": "音频编解码器", "LabelProfileCodecs": "编解码器", @@ -1022,7 +1022,7 @@ "Studios": "工作室", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "这些设置也会被应用于任何通过此设备发起的 Google Cast 播放。", "SubtitleAppearanceSettingsDisclaimer": "以下设置不适用于上述图形字幕或嵌入其自身样式的 ASS/SSA 字幕。", - "SubtitleDownloadersHelp": "按优先顺序启用并排列您的首选字幕下载程序。", + "SubtitleDownloadersHelp": "启用并按优先级顺序排列您首选的字幕下载器。", "Subtitles": "字幕", "Suggestions": "建议", "Sunday": "星期天", @@ -1566,7 +1566,7 @@ "LabelSyncPlaySettingsSyncCorrection": "同步校正", "LabelSyncPlaySettingsExtraTimeOffsetHelp": "使用选定的设备手动调整时间偏移(以毫秒为单位)以进行时间同步。 小心调整。", "LabelSyncPlaySettingsExtraTimeOffset": "额外时间偏移", - "LabelSyncPlaySettingsDescription": "更改SyncPlay首选项", + "LabelSyncPlaySettingsDescription": "更改 SyncPlay 首选项", "HeaderSyncPlayTimeSyncSettings": "时间同步", "HeaderSyncPlayPlaybackSettings": "回放", "HeaderSyncPlaySettings": "SyncPlay设置", @@ -1893,13 +1893,13 @@ "Translator": "译者", "LibraryScanFanoutConcurrency": "并行媒体库扫描任务限制", "LibraryScanFanoutConcurrencyHelp": "媒体库扫描期间并行任务的最大数量。将其设置为 0 将根据您的系统核心数量选择限制。警告:将此数字设置得太高可能会导致网络文件系统出现问题; 如果您遇到问题,请降低此数字。", - "LabelSelectPreferredTranscodeVideoAudioCodec": "视频播放中首选的转码音频编解码器", - "SelectPreferredTranscodeVideoAudioCodecHelp": "选择视频内容转码到的首选音频编解码器。如果首选编解码器不受支持,服务器将使用下一个最佳可用编解码器。", + "LabelSelectPreferredTranscodeVideoAudioCodec": "转码播放视频时首选的音频编码", + "SelectPreferredTranscodeVideoAudioCodecHelp": "选择转码播放视频时首选的音频编码方式。如果首选的音频编码不被支持,服务器将使用下一个最佳的音频编码。", "Regional": "区域", "AlternateDVD": "替换DVD", "Alternate": "替换", - "LabelSelectPreferredTranscodeVideoCodec": "首选转码视频编解码器", - "SelectPreferredTranscodeVideoCodecHelp": "选择要转码到的首选视频编解码器。如果不支持首选编解码器,服务器将使用下一个最佳可用编解码器。", + "LabelSelectPreferredTranscodeVideoCodec": "转码播放视频时首选的视频编码", + "SelectPreferredTranscodeVideoCodecHelp": "选择转码播放时首选的视频编码方式。如果首选的视频编码不被支持,服务器将使用下一个最佳的视频编码。", "HeaderNextItem": "下 {0} 页", "LabelEnablePlugin": "启用插件", "LabelInstalled": "已安装", @@ -1961,7 +1961,7 @@ "LabelDelimiterWhitelist": "分隔符白名单", "UseCustomTagDelimiters": "使用自定义标签分隔符", "LabelDelimiterWhitelistHelp": "从标签分隔中排除的项目。每行一项。", - "PreferNonstandardArtistsTag": "可用时首选的艺术家标签", + "PreferNonstandardArtistsTag": "可用时首选 ARTISTS 标签", "PreferNonstandardArtistsTagHelp": "如果可用,使用非标准的艺术家标签代替艺术家标签。", "UseCustomTagDelimitersHelp": "使用自定义字符分割\"艺术家/类型\"标签。", "MessageCancelSeriesTimerError": "取消节目计时器时发生错误",