From 8327a8fe95df7a8ec3b67463b6db1ccf905645e9 Mon Sep 17 00:00:00 2001 From: Alain CAO Date: Tue, 26 Nov 2024 01:19:28 +0000 Subject: [PATCH 001/235] Fix trickplay/chapter when play from list/shuffle --- src/controllers/list.js | 4 ++-- src/controllers/movies/movies.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/controllers/list.js b/src/controllers/list.js index 74f2c6bfa0..97dc60f1f1 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -255,7 +255,7 @@ function getItems(instance, params, item, sortBy, startIndex, limit) { if (params.type === 'nextup') { return apiClient.getNextUpEpisodes(modifyQueryWithFilters(instance, { Limit: limit, - Fields: 'PrimaryImageAspectRatio,DateCreated,MediaSourceCount', + Fields: 'PrimaryImageAspectRatio,DateCreated,MediaSourceCount,Chapters,Trickplay', UserId: apiClient.getCurrentUserId(), ImageTypeLimit: 1, EnableImageTypes: 'Primary,Backdrop,Thumb', @@ -278,7 +278,7 @@ function getItems(instance, params, item, sortBy, startIndex, limit) { return apiClient[method](apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, { StartIndex: startIndex, Limit: limit, - Fields: 'PrimaryImageAspectRatio,SortName', + Fields: 'PrimaryImageAspectRatio,SortName,Chapters,Trickplay', ImageTypeLimit: 1, IncludeItemTypes: params.type === 'MusicArtist' || params.type === 'Person' ? null : params.type, Recursive: true, diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index a8eabfce2b..80d3f1d375 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -277,7 +277,7 @@ export default function (view, params, tabContent, options) { SortOrder: 'Ascending', IncludeItemTypes: 'Movie', Recursive: true, - Fields: 'PrimaryImageAspectRatio,MediaSourceCount', + Fields: 'PrimaryImageAspectRatio,MediaSourceCount,Chapters,Trickplay', ImageTypeLimit: 1, EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', StartIndex: 0, From fe22de4f8905386f89242a936d6c449b051d9a30 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 14 Jan 2025 13:42:17 -0500 Subject: [PATCH 002/235] Refactor item text lines --- .../features/playback/utils/itemText.test.ts | 102 ++++++++++++++++++ .../features/playback/utils/itemText.ts | 44 ++++++++ .../playback/utils/mediaSessionSubscriber.ts | 8 +- src/components/nowPlayingBar/nowPlayingBar.js | 22 ++-- src/components/playback/nowplayinghelper.js | 78 -------------- src/components/remotecontrol/remotecontrol.js | 16 ++- 6 files changed, 167 insertions(+), 103 deletions(-) create mode 100644 src/apps/stable/features/playback/utils/itemText.test.ts create mode 100644 src/apps/stable/features/playback/utils/itemText.ts delete mode 100644 src/components/playback/nowplayinghelper.js diff --git a/src/apps/stable/features/playback/utils/itemText.test.ts b/src/apps/stable/features/playback/utils/itemText.test.ts new file mode 100644 index 0000000000..53c8d707ed --- /dev/null +++ b/src/apps/stable/features/playback/utils/itemText.test.ts @@ -0,0 +1,102 @@ +import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; +import { describe, expect, it } from 'vitest'; + +import type { ItemDto } from 'types/base/models/item-dto'; + +import { getItemTextLines } from './itemText'; + +describe('getItemTextLines', () => { + it('Should return undefined if item is invalid', () => { + let lines = getItemTextLines({}); + expect(lines).toBeUndefined(); + lines = getItemTextLines(null); + expect(lines).toBeUndefined(); + lines = getItemTextLines(undefined); + expect(lines).toBeUndefined(); + }); + + it('Should return the name and index number', () => { + const item: ItemDto = { + Name: 'Item Name' + }; + let lines = getItemTextLines(item); + expect(lines).toBeDefined(); + expect(lines).toHaveLength(1); + expect(lines?.[0]).toBe(item.Name); + + item.MediaType = MediaType.Video; + item.IndexNumber = 5; + lines = getItemTextLines(item); + expect(lines).toBeDefined(); + expect(lines).toHaveLength(1); + expect(lines?.[0]).toBe(`${item.IndexNumber} - ${item.Name}`); + + item.ParentIndexNumber = 2; + lines = getItemTextLines(item); + expect(lines).toBeDefined(); + expect(lines).toHaveLength(1); + expect(lines?.[0]).toBe(`${item.ParentIndexNumber}.${item.IndexNumber} - ${item.Name}`); + }); + + it('Should add artist names', () => { + let item: ItemDto = { + Name: 'Item Name', + ArtistItems: [ + { Name: 'Artist 1' }, + { Name: 'Artist 2' } + ] + }; + let lines = getItemTextLines(item); + expect(lines).toBeDefined(); + expect(lines).toHaveLength(2); + expect(lines?.[0]).toBe(item.Name); + expect(lines?.[1]).toBe('Artist 1, Artist 2'); + + item = { + Name: 'Item Name', + Artists: [ + 'Artist 1', + 'Artist 2' + ] + }; + lines = getItemTextLines(item); + expect(lines).toBeDefined(); + expect(lines).toHaveLength(2); + expect(lines?.[0]).toBe(item.Name); + expect(lines?.[1]).toBe('Artist 1, Artist 2'); + }); + + it('Should add album or series name', () => { + let item: ItemDto = { + Name: 'Item Name', + SeriesName: 'Series' + }; + let lines = getItemTextLines(item); + expect(lines).toBeDefined(); + expect(lines).toHaveLength(2); + expect(lines?.[0]).toBe(item.SeriesName); + expect(lines?.[1]).toBe(item.Name); + + item = { + Name: 'Item Name', + Album: 'Album' + }; + lines = getItemTextLines(item); + expect(lines).toBeDefined(); + expect(lines).toHaveLength(2); + expect(lines?.[0]).toBe(item.Album); + expect(lines?.[1]).toBe(item.Name); + }); + + it('Should add production year', () => { + const item = { + Name: 'Item Name', + ProductionYear: 2025 + }; + const lines = getItemTextLines(item); + expect(lines).toBeDefined(); + expect(lines).toHaveLength(2); + expect(lines?.[0]).toBe(item.Name); + expect(lines?.[1]).toBe(String(item.ProductionYear)); + }); +}); diff --git a/src/apps/stable/features/playback/utils/itemText.ts b/src/apps/stable/features/playback/utils/itemText.ts new file mode 100644 index 0000000000..ae8dc837f7 --- /dev/null +++ b/src/apps/stable/features/playback/utils/itemText.ts @@ -0,0 +1,44 @@ +import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; + +import type { ItemDto } from 'types/base/models/item-dto'; + +/** + * Gets lines of text used to describe an item for display. + * @param nowPlayingItem The item to describe + * @param isYearIncluded Should the production year be included + * @returns The list of strings describing the item for display + */ +export function getItemTextLines( + nowPlayingItem: ItemDto | null | undefined, + isYearIncluded = true +) { + let line1 = nowPlayingItem?.Name; + if (nowPlayingItem?.MediaType === MediaType.Video) { + if (nowPlayingItem.IndexNumber != null) { + line1 = nowPlayingItem.IndexNumber + ' - ' + line1; + } + if (nowPlayingItem.ParentIndexNumber != null) { + line1 = nowPlayingItem.ParentIndexNumber + '.' + line1; + } + } + + let line2: string | null | undefined; + if (nowPlayingItem?.ArtistItems?.length) { + line2 = nowPlayingItem.ArtistItems.map(a => a.Name).join(', '); + } else if (nowPlayingItem?.Artists?.length) { + line2 = nowPlayingItem.Artists.join(', '); + } else if (nowPlayingItem?.SeriesName || nowPlayingItem?.Album) { + line2 = line1; + line1 = nowPlayingItem.SeriesName || nowPlayingItem.Album; + } else if (nowPlayingItem?.ProductionYear && isYearIncluded) { + line2 = String(nowPlayingItem.ProductionYear); + } + + if (!line1) return; + + const lines = [ line1 ]; + + if (line2) lines.push(line2); + + return lines; +} diff --git a/src/apps/stable/features/playback/utils/mediaSessionSubscriber.ts b/src/apps/stable/features/playback/utils/mediaSessionSubscriber.ts index d5287e065c..911635bbf4 100644 --- a/src/apps/stable/features/playback/utils/mediaSessionSubscriber.ts +++ b/src/apps/stable/features/playback/utils/mediaSessionSubscriber.ts @@ -1,8 +1,8 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; import { getImageUrl } from 'apps/stable/features/playback/utils/image'; +import { getItemTextLines } from 'apps/stable/features/playback/utils/itemText'; import { PlaybackSubscriber } from 'apps/stable/features/playback/utils/playbackSubscriber'; -import { getNowPlayingNames } from 'components/playback/nowplayinghelper'; import type { PlaybackManager } from 'components/playback/playbackmanager'; import { MILLISECONDS_PER_SECOND, TICKS_PER_MILLISECOND } from 'constants/time'; import browser from 'scripts/browser'; @@ -110,11 +110,11 @@ class MediaSessionSubscriber extends PlaybackSubscriber { } const album = item.Album || undefined; - const [ line1, line2 ] = getNowPlayingNames(item, false) || []; + const [ line1, line2 ] = getItemTextLines(item, false) || []; // The artist will be the second line if present or the first line otherwise - const artist = (line2 || line1)?.text; + const artist = line2 || line1; // The title will be the first line if there are two lines - const title = (line2 && line1)?.text; + const title = line2 && line1; if (hasNavigatorSession) { if ( diff --git a/src/components/nowPlayingBar/nowPlayingBar.js b/src/components/nowPlayingBar/nowPlayingBar.js index 3e205651b2..c16b167d0d 100644 --- a/src/components/nowPlayingBar/nowPlayingBar.js +++ b/src/components/nowPlayingBar/nowPlayingBar.js @@ -1,11 +1,13 @@ +import { getImageUrl } from 'apps/stable/features/playback/utils/image'; +import { getItemTextLines } from 'apps/stable/features/playback/utils/itemText'; import { appRouter, isLyricsPage } from 'components/router/appRouter'; + import datetime from '../../scripts/datetime'; import Events from '../../utils/events.ts'; import browser from '../../scripts/browser'; import imageLoader from '../images/imageLoader'; import layoutManager from '../layoutManager'; import { playbackManager } from '../playback/playbackmanager'; -import nowPlayingHelper from '../playback/nowplayinghelper'; import { appHost } from '../apphost'; import dom from '../../scripts/dom'; import globalize from 'lib/globalize'; @@ -17,7 +19,6 @@ import appFooter from '../appFooter/appFooter'; import itemShortcuts from '../shortcuts'; import './nowPlayingBar.scss'; import '../../elements/emby-slider/emby-slider'; -import { getImageUrl } from 'apps/stable/features/playback/utils/image'; let currentPlayer; let currentPlayerSupportedCommands = []; @@ -474,24 +475,21 @@ function setLyricButtonActiveStatus() { function updateNowPlayingInfo(state) { const nowPlayingItem = state.NowPlayingItem; - const textLines = nowPlayingItem ? nowPlayingHelper.getNowPlayingNames(nowPlayingItem) : []; + const textLines = nowPlayingItem ? getItemTextLines(nowPlayingItem) : undefined; nowPlayingTextElement.innerHTML = ''; if (textLines) { const itemText = document.createElement('div'); const secondaryText = document.createElement('div'); secondaryText.classList.add('nowPlayingBarSecondaryText'); - if (textLines.length > 1) { - textLines[1].secondary = true; - if (textLines[1].text) { - const text = document.createElement('a'); - text.innerText = textLines[1].text; - secondaryText.appendChild(text); - } + if (textLines.length > 1 && textLines[1]) { + const text = document.createElement('a'); + text.innerText = textLines[1]; + secondaryText.appendChild(text); } - if (textLines[0].text) { + if (textLines[0]) { const text = document.createElement('a'); - text.innerText = textLines[0].text; + text.innerText = textLines[0]; itemText.appendChild(text); } nowPlayingTextElement.appendChild(itemText); diff --git a/src/components/playback/nowplayinghelper.js b/src/components/playback/nowplayinghelper.js deleted file mode 100644 index 7c5dccaf35..0000000000 --- a/src/components/playback/nowplayinghelper.js +++ /dev/null @@ -1,78 +0,0 @@ -export function getNowPlayingNames(nowPlayingItem, includeNonNameInfo) { - let topItem = nowPlayingItem; - let bottomItem = null; - let topText = nowPlayingItem.Name; - - if (nowPlayingItem.AlbumId && nowPlayingItem.MediaType === 'Audio') { - topItem = { - Id: nowPlayingItem.AlbumId, - Name: nowPlayingItem.Album, - Type: 'MusicAlbum', - IsFolder: true - }; - } - - if (nowPlayingItem.MediaType === 'Video') { - if (nowPlayingItem.IndexNumber != null) { - topText = nowPlayingItem.IndexNumber + ' - ' + topText; - } - if (nowPlayingItem.ParentIndexNumber != null) { - topText = nowPlayingItem.ParentIndexNumber + '.' + topText; - } - } - - let bottomText = ''; - - if (nowPlayingItem.ArtistItems?.length) { - bottomItem = { - Id: nowPlayingItem.ArtistItems[0].Id, - Name: nowPlayingItem.ArtistItems[0].Name, - Type: 'MusicArtist', - IsFolder: true - }; - - bottomText = nowPlayingItem.ArtistItems.map(function (a) { - return a.Name; - }).join(', '); - } else if (nowPlayingItem.Artists?.length) { - bottomText = nowPlayingItem.Artists.join(', '); - } else if (nowPlayingItem.SeriesName || nowPlayingItem.Album) { - bottomText = topText; - topText = nowPlayingItem.SeriesName || nowPlayingItem.Album; - - bottomItem = topItem; - - if (nowPlayingItem.SeriesId) { - topItem = { - Id: nowPlayingItem.SeriesId, - Name: nowPlayingItem.SeriesName, - Type: 'Series', - IsFolder: true - }; - } else { - topItem = null; - } - } else if (nowPlayingItem.ProductionYear && includeNonNameInfo !== false) { - bottomText = nowPlayingItem.ProductionYear; - } - - const list = []; - - list.push({ - text: topText, - item: topItem - }); - - if (bottomText) { - list.push({ - text: bottomText, - item: bottomItem - }); - } - - return list; -} - -export default { - getNowPlayingNames: getNowPlayingNames -}; diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 8702da65a6..b4344b5f1f 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -1,10 +1,13 @@ import escapeHtml from 'escape-html'; + +import { getImageUrl } from 'apps/stable/features/playback/utils/image'; +import { getItemTextLines } from 'apps/stable/features/playback/utils/itemText'; + import datetime from '../../scripts/datetime'; import { clearBackdrop, setBackdrops } from '../backdrop/backdrop'; import listView from '../listview/listview'; import imageLoader from '../images/imageLoader'; import { playbackManager } from '../playback/playbackmanager'; -import nowPlayingHelper from '../playback/nowplayinghelper'; import Events from '../../utils/events.ts'; import { appHost } from '../apphost'; import globalize from '../../lib/globalize'; @@ -22,7 +25,6 @@ import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import { appRouter } from '../router/appRouter'; import { getDefaultBackgroundClass } from '../cardbuilder/cardBuilderUtils'; -import { getImageUrl } from 'apps/stable/features/playback/utils/image'; let showMuteButton = true; let showVolumeSlider = true; @@ -86,15 +88,11 @@ function showSubtitleMenu(context, player, button) { }); } -function getNowPlayingNameHtml(nowPlayingItem, includeNonNameInfo) { - return nowPlayingHelper.getNowPlayingNames(nowPlayingItem, includeNonNameInfo).map(function (i) { - return escapeHtml(i.text); - }).join('
'); -} - function updateNowPlayingInfo(context, state, serverId) { const item = state.NowPlayingItem; - const displayName = item ? getNowPlayingNameHtml(item).replace('
', ' - ') : ''; + const displayName = item ? + getItemTextLines(item).map(escapeHtml).join(' - ') : + ''; if (item) { const nowPlayingServerId = (item.ServerId || serverId); if (item.Type == 'AudioBook' || item.Type == 'Audio' || item.MediaStreams[0].Type == 'Audio') { From ea18af4bdd172b158ceaa999b5802f52ab83c166 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 23 Jan 2025 17:24:58 -0500 Subject: [PATCH 003/235] Move dashboard controllers to app dir --- .../dashboard/controllers}/dashboard.html | 0 .../dashboard/controllers}/dashboard.js | 52 +++++++------- .../dashboard/controllers}/dashboard.scss | 0 .../controllers}/devices/device.html | 0 .../dashboard/controllers}/devices/device.js | 12 ++-- .../controllers}/devices/devices.html | 0 .../dashboard/controllers}/devices/devices.js | 27 ++++---- .../controllers}/encodingsettings.html | 0 .../controllers}/encodingsettings.js | 14 ++-- .../dashboard/controllers}/general.html | 0 .../dashboard/controllers}/general.js | 22 +++--- .../dashboard/controllers}/library.html | 0 .../dashboard/controllers}/library.js | 33 ++++----- .../controllers}/librarydisplay.html | 0 .../dashboard/controllers}/librarydisplay.js | 8 +-- .../controllers/livetvguideprovider.html | 0 .../controllers/livetvguideprovider.js | 14 ++-- .../controllers/livetvsettings.html | 0 .../dashboard}/controllers/livetvsettings.js | 19 +++--- .../dashboard}/controllers/livetvstatus.html | 0 .../dashboard}/controllers/livetvstatus.js | 37 +++++----- .../dashboard}/controllers/livetvtuner.html | 0 .../dashboard}/controllers/livetvtuner.js | 22 +++--- .../dashboard/controllers}/metadataImages.js | 8 +-- .../controllers}/metadataimages.html | 0 .../dashboard/controllers}/metadatanfo.html | 0 .../dashboard/controllers}/metadatanfo.js | 9 +-- .../dashboard/controllers}/networking.html | 0 .../dashboard/controllers}/networking.js | 14 ++-- .../dashboard/controllers}/playback.html | 0 .../dashboard/controllers}/playback.js | 5 +- .../controllers}/plugins/available/index.html | 0 .../controllers}/plugins/available/index.js | 0 .../controllers}/plugins/installed/index.html | 0 .../controllers}/plugins/installed/index.js | 18 ++--- .../plugins/repositories/index.html | 0 .../plugins/repositories/index.js | 18 ++--- .../scheduledtasks/scheduledtask.html | 0 .../scheduledtasks/scheduledtask.js | 20 +++--- .../scheduledtasks/scheduledtasks.html | 0 .../scheduledtasks/scheduledtasks.js | 17 ++--- .../dashboard/controllers}/streaming.html | 0 .../dashboard/controllers}/streaming.js | 5 +- src/apps/dashboard/routes/_legacyRoutes.ts | 68 +++++++++---------- .../viewManager/ViewManagerPage.tsx | 26 +++++-- 45 files changed, 246 insertions(+), 222 deletions(-) rename src/{controllers/dashboard => apps/dashboard/controllers}/dashboard.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/dashboard.js (95%) rename src/{controllers/dashboard => apps/dashboard/controllers}/dashboard.scss (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/devices/device.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/devices/device.js (81%) rename src/{controllers/dashboard => apps/dashboard/controllers}/devices/devices.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/devices/devices.js (88%) rename src/{controllers/dashboard => apps/dashboard/controllers}/encodingsettings.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/encodingsettings.js (97%) rename src/{controllers/dashboard => apps/dashboard/controllers}/general.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/general.js (86%) rename src/{controllers/dashboard => apps/dashboard/controllers}/library.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/library.js (91%) rename src/{controllers/dashboard => apps/dashboard/controllers}/librarydisplay.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/librarydisplay.js (92%) rename src/{ => apps/dashboard}/controllers/livetvguideprovider.html (100%) rename src/{ => apps/dashboard}/controllers/livetvguideprovider.js (61%) rename src/{ => apps/dashboard}/controllers/livetvsettings.html (100%) rename src/{ => apps/dashboard}/controllers/livetvsettings.js (88%) rename src/{ => apps/dashboard}/controllers/livetvstatus.html (100%) rename src/{ => apps/dashboard}/controllers/livetvstatus.js (90%) rename src/{ => apps/dashboard}/controllers/livetvtuner.html (100%) rename src/{ => apps/dashboard}/controllers/livetvtuner.js (93%) rename src/{controllers/dashboard => apps/dashboard/controllers}/metadataImages.js (94%) rename src/{controllers/dashboard => apps/dashboard/controllers}/metadataimages.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/metadatanfo.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/metadatanfo.js (92%) rename src/{controllers/dashboard => apps/dashboard/controllers}/networking.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/networking.js (95%) rename src/{controllers/dashboard => apps/dashboard/controllers}/playback.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/playback.js (93%) rename src/{controllers/dashboard => apps/dashboard/controllers}/plugins/available/index.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/plugins/available/index.js (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/plugins/installed/index.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/plugins/installed/index.js (93%) rename src/{controllers/dashboard => apps/dashboard/controllers}/plugins/repositories/index.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/plugins/repositories/index.js (92%) rename src/{controllers/dashboard => apps/dashboard/controllers}/scheduledtasks/scheduledtask.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/scheduledtasks/scheduledtask.js (94%) rename src/{controllers/dashboard => apps/dashboard/controllers}/scheduledtasks/scheduledtasks.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/scheduledtasks/scheduledtasks.js (94%) rename src/{controllers/dashboard => apps/dashboard/controllers}/streaming.html (100%) rename src/{controllers/dashboard => apps/dashboard/controllers}/streaming.js (90%) diff --git a/src/controllers/dashboard/dashboard.html b/src/apps/dashboard/controllers/dashboard.html similarity index 100% rename from src/controllers/dashboard/dashboard.html rename to src/apps/dashboard/controllers/dashboard.html diff --git a/src/controllers/dashboard/dashboard.js b/src/apps/dashboard/controllers/dashboard.js similarity index 95% rename from src/controllers/dashboard/dashboard.js rename to src/apps/dashboard/controllers/dashboard.js index 17eda6c552..1ffa88be60 100644 --- a/src/controllers/dashboard/dashboard.js +++ b/src/apps/dashboard/controllers/dashboard.js @@ -1,36 +1,36 @@ import escapeHtml from 'escape-html'; -import datetime from '../../scripts/datetime'; -import Events from '../../utils/events.ts'; -import itemHelper from '../../components/itemHelper'; -import serverNotifications from '../../scripts/serverNotifications'; -import dom from '../../scripts/dom'; -import globalize from '../../lib/globalize'; +import datetime from 'scripts/datetime'; +import Events from 'utils/events.ts'; +import itemHelper from 'components/itemHelper'; +import serverNotifications from 'scripts/serverNotifications'; +import dom from 'scripts/dom'; +import globalize from 'lib/globalize'; import { formatDistanceToNow } from 'date-fns'; -import { getLocaleWithSuffix } from '../../utils/dateFnsLocale.ts'; -import loading from '../../components/loading/loading'; -import playMethodHelper from '../../components/playback/playmethodhelper'; -import cardBuilder from '../../components/cardbuilder/cardBuilder'; -import imageLoader from '../../components/images/imageLoader'; -import ActivityLog from '../../components/activitylog'; -import imageHelper from '../../utils/image'; -import indicators from '../../components/indicators/indicators'; -import taskButton from '../../scripts/taskbutton'; -import Dashboard from '../../utils/dashboard'; -import ServerConnections from '../../components/ServerConnections'; -import alert from '../../components/alert'; -import confirm from '../../components/confirm/confirm'; -import { getDefaultBackgroundClass } from '../../components/cardbuilder/cardBuilderUtils'; +import { getLocaleWithSuffix } from 'utils/dateFnsLocale.ts'; +import loading from 'components/loading/loading'; +import playMethodHelper from 'components/playback/playmethodhelper'; +import cardBuilder from 'components/cardbuilder/cardBuilder'; +import imageLoader from 'components/images/imageLoader'; +import ActivityLog from 'components/activitylog'; +import imageHelper from 'utils/image'; +import indicators from 'components/indicators/indicators'; +import taskButton from 'scripts/taskbutton'; +import Dashboard from 'utils/dashboard'; +import ServerConnections from 'components/ServerConnections'; +import alert from 'components/alert'; +import confirm from 'components/confirm/confirm'; +import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; import { getSystemInfoQuery } from 'hooks/useSystemInfo'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; -import '../../elements/emby-button/emby-button'; -import '../../elements/emby-itemscontainer/emby-itemscontainer'; +import 'elements/emby-button/emby-button'; +import 'elements/emby-itemscontainer/emby-itemscontainer'; -import '../../components/listview/listview.scss'; -import '../../styles/flexstyles.scss'; +import 'components/listview/listview.scss'; +import 'styles/flexstyles.scss'; import './dashboard.scss'; function showPlaybackInfo(btn, session) { @@ -72,7 +72,7 @@ function showPlaybackInfo(btn, session) { } function showSendMessageForm(btn, session) { - import('../../components/prompt/prompt').then(({ default: prompt }) => { + import('components/prompt/prompt').then(({ default: prompt }) => { prompt({ title: globalize.translate('HeaderSendMessage'), label: globalize.translate('LabelMessageText'), @@ -89,7 +89,7 @@ function showSendMessageForm(btn, session) { } function showOptionsMenu(btn, session) { - import('../../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { + import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => { const menuItems = []; if (session.ServerId && session.DeviceId !== ServerConnections.deviceId()) { diff --git a/src/controllers/dashboard/dashboard.scss b/src/apps/dashboard/controllers/dashboard.scss similarity index 100% rename from src/controllers/dashboard/dashboard.scss rename to src/apps/dashboard/controllers/dashboard.scss diff --git a/src/controllers/dashboard/devices/device.html b/src/apps/dashboard/controllers/devices/device.html similarity index 100% rename from src/controllers/dashboard/devices/device.html rename to src/apps/dashboard/controllers/devices/device.html diff --git a/src/controllers/dashboard/devices/device.js b/src/apps/dashboard/controllers/devices/device.js similarity index 81% rename from src/controllers/dashboard/devices/device.js rename to src/apps/dashboard/controllers/devices/device.js index 120b478163..3b84b133e7 100644 --- a/src/controllers/dashboard/devices/device.js +++ b/src/apps/dashboard/controllers/devices/device.js @@ -1,9 +1,9 @@ -import loading from '../../../components/loading/loading'; -import dom from '../../../scripts/dom'; -import '../../../elements/emby-input/emby-input'; -import '../../../elements/emby-button/emby-button'; -import Dashboard from '../../../utils/dashboard'; -import { getParameterByName } from '../../../utils/url.ts'; +import loading from 'components/loading/loading'; +import dom from 'scripts/dom'; +import 'elements/emby-input/emby-input'; +import 'elements/emby-button/emby-button'; +import Dashboard from 'utils/dashboard'; +import { getParameterByName } from 'utils/url.ts'; function load(page, device, deviceOptions) { page.querySelector('#txtCustomName', page).value = deviceOptions?.CustomName || ''; diff --git a/src/controllers/dashboard/devices/devices.html b/src/apps/dashboard/controllers/devices/devices.html similarity index 100% rename from src/controllers/dashboard/devices/devices.html rename to src/apps/dashboard/controllers/devices/devices.html diff --git a/src/controllers/dashboard/devices/devices.js b/src/apps/dashboard/controllers/devices/devices.js similarity index 88% rename from src/controllers/dashboard/devices/devices.js rename to src/apps/dashboard/controllers/devices/devices.js index ab11884709..01dd1f1732 100644 --- a/src/controllers/dashboard/devices/devices.js +++ b/src/apps/dashboard/controllers/devices/devices.js @@ -1,16 +1,17 @@ -import escapeHtml from 'escape-html'; -import loading from '../../../components/loading/loading'; -import dom from '../../../scripts/dom'; -import globalize from '../../../lib/globalize'; -import imageHelper from '../../../utils/image'; import { formatDistanceToNow } from 'date-fns'; -import { getLocaleWithSuffix } from '../../../utils/dateFnsLocale.ts'; -import '../../../elements/emby-button/emby-button'; -import '../../../elements/emby-itemscontainer/emby-itemscontainer'; -import '../../../components/cardbuilder/card.scss'; -import Dashboard from '../../../utils/dashboard'; -import confirm from '../../../components/confirm/confirm'; -import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; +import escapeHtml from 'escape-html'; + +import loading from 'components/loading/loading'; +import dom from 'scripts/dom'; +import globalize from 'lib/globalize'; +import imageHelper from 'utils/image'; +import { getLocaleWithSuffix } from 'utils/dateFnsLocale.ts'; +import 'elements/emby-button/emby-button'; +import 'elements/emby-itemscontainer/emby-itemscontainer'; +import 'components/cardbuilder/card.scss'; +import Dashboard from 'utils/dashboard'; +import confirm from 'components/confirm/confirm'; +import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; // Local cache of loaded let deviceIds = []; @@ -66,7 +67,7 @@ function showDeviceMenu(view, btn, deviceId) { }); } - import('../../../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { + import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => { actionsheet.show({ items: menuItems, positionTo: btn, diff --git a/src/controllers/dashboard/encodingsettings.html b/src/apps/dashboard/controllers/encodingsettings.html similarity index 100% rename from src/controllers/dashboard/encodingsettings.html rename to src/apps/dashboard/controllers/encodingsettings.html diff --git a/src/controllers/dashboard/encodingsettings.js b/src/apps/dashboard/controllers/encodingsettings.js similarity index 97% rename from src/controllers/dashboard/encodingsettings.js rename to src/apps/dashboard/controllers/encodingsettings.js index 964529507b..6ae4fdbb28 100644 --- a/src/controllers/dashboard/encodingsettings.js +++ b/src/apps/dashboard/controllers/encodingsettings.js @@ -1,9 +1,9 @@ import 'jquery'; -import loading from '../../components/loading/loading'; -import globalize from '../../lib/globalize'; -import dom from '../../scripts/dom'; -import Dashboard from '../../utils/dashboard'; -import alert from '../../components/alert'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import dom from 'scripts/dom'; +import Dashboard from 'utils/dashboard'; +import alert from 'components/alert'; function loadPage(page, config, systemInfo) { Array.prototype.forEach.call(page.querySelectorAll('.chkDecodeCodec'), function (c) { @@ -263,7 +263,7 @@ $(document).on('pageinit', '#encodingSettingsPage', function () { setDecodingCodecsVisible(page, this.value); }); $('#btnSelectTranscodingTempPath', page).on('click.selectDirectory', function () { - import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ callback: function (path) { @@ -280,7 +280,7 @@ $(document).on('pageinit', '#encodingSettingsPage', function () { }); }); $('#btnSelectFallbackFontPath', page).on('click.selectDirectory', function () { - import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ includeDirectories: true, diff --git a/src/controllers/dashboard/general.html b/src/apps/dashboard/controllers/general.html similarity index 100% rename from src/controllers/dashboard/general.html rename to src/apps/dashboard/controllers/general.html diff --git a/src/controllers/dashboard/general.js b/src/apps/dashboard/controllers/general.js similarity index 86% rename from src/controllers/dashboard/general.js rename to src/apps/dashboard/controllers/general.js index a6e0a36fa9..0a2fc98f82 100644 --- a/src/controllers/dashboard/general.js +++ b/src/apps/dashboard/controllers/general.js @@ -1,14 +1,14 @@ import 'jquery'; -import loading from '../../components/loading/loading'; -import globalize from '../../lib/globalize'; -import '../../elements/emby-checkbox/emby-checkbox'; -import '../../elements/emby-textarea/emby-textarea'; -import '../../elements/emby-input/emby-input'; -import '../../elements/emby-select/emby-select'; -import '../../elements/emby-button/emby-button'; -import Dashboard from '../../utils/dashboard'; -import alert from '../../components/alert'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import 'elements/emby-checkbox/emby-checkbox'; +import 'elements/emby-textarea/emby-textarea'; +import 'elements/emby-input/emby-input'; +import 'elements/emby-select/emby-select'; +import 'elements/emby-button/emby-button'; +import Dashboard from 'utils/dashboard'; +import alert from 'components/alert'; function loadPage(page, config, languageOptions, systemInfo) { page.querySelector('#txtServerName').value = systemInfo.ServerName; @@ -53,7 +53,7 @@ function onSubmit() { export default function (view) { $('#btnSelectCachePath', view).on('click.selectDirectory', function () { - import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ callback: function (path) { @@ -70,7 +70,7 @@ export default function (view) { }); }); $('#btnSelectMetadataPath', view).on('click.selectDirectory', function () { - import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ path: view.querySelector('#txtMetadataPath').value, diff --git a/src/controllers/dashboard/library.html b/src/apps/dashboard/controllers/library.html similarity index 100% rename from src/controllers/dashboard/library.html rename to src/apps/dashboard/controllers/library.html diff --git a/src/controllers/dashboard/library.js b/src/apps/dashboard/controllers/library.js similarity index 91% rename from src/controllers/dashboard/library.js rename to src/apps/dashboard/controllers/library.js index 89f385a91f..86d7a1b4cd 100644 --- a/src/controllers/dashboard/library.js +++ b/src/apps/dashboard/controllers/library.js @@ -1,17 +1,18 @@ import escapeHtml from 'escape-html'; -import taskButton from '../../scripts/taskbutton'; -import loading from '../../components/loading/loading'; -import globalize from '../../lib/globalize'; -import dom from '../../scripts/dom'; -import imageHelper from '../../utils/image'; -import '../../components/cardbuilder/card.scss'; -import '../../elements/emby-itemrefreshindicator/emby-itemrefreshindicator'; -import Dashboard, { pageClassOn, pageIdOn } from '../../utils/dashboard'; -import confirm from '../../components/confirm/confirm'; -import { getDefaultBackgroundClass } from '../../components/cardbuilder/cardBuilderUtils'; + +import taskButton from 'scripts/taskbutton'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import dom from 'scripts/dom'; +import imageHelper from 'utils/image'; +import 'components/cardbuilder/card.scss'; +import 'elements/emby-itemrefreshindicator/emby-itemrefreshindicator'; +import Dashboard, { pageClassOn, pageIdOn } from 'utils/dashboard'; +import confirm from 'components/confirm/confirm'; +import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; function addVirtualFolder(page) { - import('../../components/mediaLibraryCreator/mediaLibraryCreator').then(({ default: MediaLibraryCreator }) => { + import('components/mediaLibraryCreator/mediaLibraryCreator').then(({ default: MediaLibraryCreator }) => { new MediaLibraryCreator({ collectionTypeOptions: getCollectionTypeOptions().filter(function (f) { return !f.hidden; @@ -26,7 +27,7 @@ function addVirtualFolder(page) { } function editVirtualFolder(page, virtualFolder) { - import('../../components/mediaLibraryEditor/mediaLibraryEditor').then(({ default: MediaLibraryEditor }) => { + import('components/mediaLibraryEditor/mediaLibraryEditor').then(({ default: MediaLibraryEditor }) => { new MediaLibraryEditor({ refresh: shouldRefreshLibraryAfterChanges(page), library: virtualFolder @@ -60,7 +61,7 @@ function deleteVirtualFolder(page, virtualFolder) { } function refreshVirtualFolder(page, virtualFolder) { - import('../../components/refreshdialog/refreshdialog').then(({ default: RefreshDialog }) => { + import('components/refreshdialog/refreshdialog').then(({ default: RefreshDialog }) => { new RefreshDialog({ itemIds: [virtualFolder.ItemId], serverId: ApiClient.serverId(), @@ -70,7 +71,7 @@ function refreshVirtualFolder(page, virtualFolder) { } function renameVirtualFolder(page, virtualFolder) { - import('../../components/prompt/prompt').then(({ default: prompt }) => { + import('components/prompt/prompt').then(({ default: prompt }) => { prompt({ label: globalize.translate('LabelNewName'), description: globalize.translate('MessageRenameMediaFolder'), @@ -117,7 +118,7 @@ function showCardMenu(page, elem, virtualFolders) { icon: 'delete' }); - import('../../components/actionSheet/actionSheet').then((actionsheet) => { + import('components/actionSheet/actionSheet').then((actionsheet) => { actionsheet.show({ items: menuItems, positionTo: elem, @@ -206,7 +207,7 @@ function reloadVirtualFolders(page, virtualFolders) { } function editImages(page, virtualFolder) { - import('../../components/imageeditor/imageeditor').then((imageEditor) => { + import('components/imageeditor/imageeditor').then((imageEditor) => { imageEditor.show({ itemId: virtualFolder.ItemId, serverId: ApiClient.serverId() diff --git a/src/controllers/dashboard/librarydisplay.html b/src/apps/dashboard/controllers/librarydisplay.html similarity index 100% rename from src/controllers/dashboard/librarydisplay.html rename to src/apps/dashboard/controllers/librarydisplay.html diff --git a/src/controllers/dashboard/librarydisplay.js b/src/apps/dashboard/controllers/librarydisplay.js similarity index 92% rename from src/controllers/dashboard/librarydisplay.js rename to src/apps/dashboard/controllers/librarydisplay.js index 236f1515c6..74be51e762 100644 --- a/src/controllers/dashboard/librarydisplay.js +++ b/src/apps/dashboard/controllers/librarydisplay.js @@ -1,7 +1,7 @@ -import loading from '../../components/loading/loading'; -import '../../elements/emby-checkbox/emby-checkbox'; -import '../../elements/emby-button/emby-button'; -import Dashboard from '../../utils/dashboard'; +import loading from 'components/loading/loading'; +import 'elements/emby-checkbox/emby-checkbox'; +import 'elements/emby-button/emby-button'; +import Dashboard from 'utils/dashboard'; export default function(view) { function loadData() { diff --git a/src/controllers/livetvguideprovider.html b/src/apps/dashboard/controllers/livetvguideprovider.html similarity index 100% rename from src/controllers/livetvguideprovider.html rename to src/apps/dashboard/controllers/livetvguideprovider.html diff --git a/src/controllers/livetvguideprovider.js b/src/apps/dashboard/controllers/livetvguideprovider.js similarity index 61% rename from src/controllers/livetvguideprovider.js rename to src/apps/dashboard/controllers/livetvguideprovider.js index 28d60ec05c..2bb08f07c3 100644 --- a/src/controllers/livetvguideprovider.js +++ b/src/apps/dashboard/controllers/livetvguideprovider.js @@ -1,15 +1,15 @@ -import loading from '../components/loading/loading'; -import globalize from '../lib/globalize'; -import Dashboard, { pageIdOn } from '../utils/dashboard'; -import { getParameterByName } from '../utils/url.ts'; -import Events from '../utils/events.ts'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import Dashboard, { pageIdOn } from 'utils/dashboard'; +import { getParameterByName } from 'utils/url'; +import Events from 'utils/events'; function onListingsSubmitted() { Dashboard.navigate('dashboard/livetv'); } function init(page, type, providerId) { - import(`../components/tvproviders/${type}`).then(({ default: ProviderFactory }) => { + import(`components/tvproviders/${type}`).then(({ default: ProviderFactory }) => { const instance = new ProviderFactory(page, providerId, {}); Events.on(instance, 'submitted', onListingsSubmitted); instance.init(); @@ -17,7 +17,7 @@ function init(page, type, providerId) { } function loadTemplate(page, type, providerId) { - import(`../components/tvproviders/${type}.template.html`).then(({ default: html }) => { + import(`components/tvproviders/${type}.template.html`).then(({ default: html }) => { page.querySelector('.providerTemplate').innerHTML = globalize.translateHtml(html); init(page, type, providerId); }); diff --git a/src/controllers/livetvsettings.html b/src/apps/dashboard/controllers/livetvsettings.html similarity index 100% rename from src/controllers/livetvsettings.html rename to src/apps/dashboard/controllers/livetvsettings.html diff --git a/src/controllers/livetvsettings.js b/src/apps/dashboard/controllers/livetvsettings.js similarity index 88% rename from src/controllers/livetvsettings.js rename to src/apps/dashboard/controllers/livetvsettings.js index e46d2f4dde..0fd30ee5bb 100644 --- a/src/controllers/livetvsettings.js +++ b/src/apps/dashboard/controllers/livetvsettings.js @@ -1,9 +1,10 @@ import 'jquery'; -import loading from '../components/loading/loading'; -import globalize from '../lib/globalize'; -import '../elements/emby-button/emby-button'; -import Dashboard from '../utils/dashboard'; -import alert from '../components/alert'; + +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import 'elements/emby-button/emby-button'; +import Dashboard from 'utils/dashboard'; +import alert from 'components/alert'; function loadPage(page, config) { page.querySelector('.liveTvSettingsForm').classList.remove('hide'); @@ -64,7 +65,7 @@ $(document).on('pageinit', '#liveTvSettingsPage', function () { const page = this; $('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit); $('#btnSelectRecordingPath', page).on('click.selectDirectory', function () { - import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ callback: function (path) { @@ -79,7 +80,7 @@ $(document).on('pageinit', '#liveTvSettingsPage', function () { }); }); $('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () { - import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ callback: function (path) { @@ -94,7 +95,7 @@ $(document).on('pageinit', '#liveTvSettingsPage', function () { }); }); $('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () { - import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ callback: function (path) { @@ -109,7 +110,7 @@ $(document).on('pageinit', '#liveTvSettingsPage', function () { }); }); $('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () { - import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ includeFiles: true, diff --git a/src/controllers/livetvstatus.html b/src/apps/dashboard/controllers/livetvstatus.html similarity index 100% rename from src/controllers/livetvstatus.html rename to src/apps/dashboard/controllers/livetvstatus.html diff --git a/src/controllers/livetvstatus.js b/src/apps/dashboard/controllers/livetvstatus.js similarity index 90% rename from src/controllers/livetvstatus.js rename to src/apps/dashboard/controllers/livetvstatus.js index fa3671b471..8220a3018c 100644 --- a/src/controllers/livetvstatus.js +++ b/src/apps/dashboard/controllers/livetvstatus.js @@ -1,19 +1,20 @@ import 'jquery'; -import globalize from '../lib/globalize'; -import taskButton from '../scripts/taskbutton'; -import dom from '../scripts/dom'; -import layoutManager from '../components/layoutManager'; -import loading from '../components/loading/loading'; -import browser from '../scripts/browser'; -import '../components/listview/listview.scss'; -import '../styles/flexstyles.scss'; -import '../elements/emby-itemscontainer/emby-itemscontainer'; -import '../components/cardbuilder/card.scss'; + +import globalize from 'lib/globalize'; +import taskButton from 'scripts/taskbutton'; +import dom from 'scripts/dom'; +import layoutManager from 'components/layoutManager'; +import loading from 'components/loading/loading'; +import browser from 'scripts/browser'; +import 'components/listview/listview.scss'; +import 'styles/flexstyles.scss'; +import 'elements/emby-itemscontainer/emby-itemscontainer'; +import 'components/cardbuilder/card.scss'; import 'material-design-icons-iconfont'; -import '../elements/emby-button/emby-button'; -import Dashboard from '../utils/dashboard'; -import confirm from '../components/confirm/confirm'; -import { getDefaultBackgroundClass } from '../components/cardbuilder/cardBuilderUtils'; +import 'elements/emby-button/emby-button'; +import Dashboard from 'utils/dashboard'; +import confirm from 'components/confirm/confirm'; +import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; const enableFocusTransform = !browser.slow && !browser.edge; @@ -153,7 +154,7 @@ function showProviderOptions(page, providerId, button) { id: 'map' }); - import('../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { + import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => { actionsheet.show({ items: items, positionTo: button @@ -171,7 +172,7 @@ function showProviderOptions(page, providerId, button) { } function mapChannels(page, providerId) { - import('../components/channelMapper/channelMapper').then(({ default: ChannelMapper }) => { + import('components/channelMapper/channelMapper').then(({ default: ChannelMapper }) => { new ChannelMapper({ serverId: ApiClient.serverInfo().Id, providerId: providerId @@ -243,7 +244,7 @@ function addProvider(button) { id: 'xmltv' }); - import('../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { + import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => { actionsheet.show({ items: menuItems, positionTo: button, @@ -269,7 +270,7 @@ function showDeviceMenu(button, tunerDeviceId) { id: 'edit' }); - import('../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { + import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => { actionsheet.show({ items: items, positionTo: button diff --git a/src/controllers/livetvtuner.html b/src/apps/dashboard/controllers/livetvtuner.html similarity index 100% rename from src/controllers/livetvtuner.html rename to src/apps/dashboard/controllers/livetvtuner.html diff --git a/src/controllers/livetvtuner.js b/src/apps/dashboard/controllers/livetvtuner.js similarity index 93% rename from src/controllers/livetvtuner.js rename to src/apps/dashboard/controllers/livetvtuner.js index bdb270ac5a..b9140b17eb 100644 --- a/src/controllers/livetvtuner.js +++ b/src/apps/dashboard/controllers/livetvtuner.js @@ -1,12 +1,12 @@ -import globalize from '../lib/globalize'; -import loading from '../components/loading/loading'; -import dom from '../scripts/dom'; -import '../elements/emby-input/emby-input'; -import '../elements/emby-button/emby-button'; -import '../elements/emby-checkbox/emby-checkbox'; -import '../elements/emby-select/emby-select'; -import Dashboard from '../utils/dashboard'; -import { getParameterByName } from '../utils/url.ts'; +import globalize from 'lib/globalize'; +import loading from 'components/loading/loading'; +import dom from 'scripts/dom'; +import 'elements/emby-input/emby-input'; +import 'elements/emby-button/emby-button'; +import 'elements/emby-checkbox/emby-checkbox'; +import 'elements/emby-select/emby-select'; +import Dashboard from 'utils/dashboard'; +import { getParameterByName } from 'utils/url'; function isM3uVariant(type) { return ['nextpvr'].indexOf(type || '') !== -1; @@ -112,7 +112,7 @@ function submitForm(page) { } function getDetectedDevice() { - return import('../components/tunerPicker').then(({ default: TunerPicker }) => { + return import('components/tunerPicker').then(({ default: TunerPicker }) => { return new TunerPicker().show({ serverId: ApiClient.serverId() }); @@ -235,7 +235,7 @@ export default function (view, params) { }); }); view.querySelector('.btnSelectPath').addEventListener('click', function () { - import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ includeFiles: true, diff --git a/src/controllers/dashboard/metadataImages.js b/src/apps/dashboard/controllers/metadataImages.js similarity index 94% rename from src/controllers/dashboard/metadataImages.js rename to src/apps/dashboard/controllers/metadataImages.js index 0230cd6568..5df096a6f1 100644 --- a/src/controllers/dashboard/metadataImages.js +++ b/src/apps/dashboard/controllers/metadataImages.js @@ -2,11 +2,11 @@ import { ImageResolution } from '@jellyfin/sdk/lib/generated-client/models/image import 'jquery'; -import loading from '../../components/loading/loading'; -import globalize from '../../lib/globalize'; -import Dashboard from '../../utils/dashboard'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import Dashboard from 'utils/dashboard'; -import '../../components/listview/listview.scss'; +import 'components/listview/listview.scss'; function populateImageResolutionOptions(select) { let html = ''; diff --git a/src/controllers/dashboard/metadataimages.html b/src/apps/dashboard/controllers/metadataimages.html similarity index 100% rename from src/controllers/dashboard/metadataimages.html rename to src/apps/dashboard/controllers/metadataimages.html diff --git a/src/controllers/dashboard/metadatanfo.html b/src/apps/dashboard/controllers/metadatanfo.html similarity index 100% rename from src/controllers/dashboard/metadatanfo.html rename to src/apps/dashboard/controllers/metadatanfo.html diff --git a/src/controllers/dashboard/metadatanfo.js b/src/apps/dashboard/controllers/metadatanfo.js similarity index 92% rename from src/controllers/dashboard/metadatanfo.js rename to src/apps/dashboard/controllers/metadatanfo.js index 6d8c62a642..51b7eee36b 100644 --- a/src/controllers/dashboard/metadatanfo.js +++ b/src/apps/dashboard/controllers/metadatanfo.js @@ -1,9 +1,10 @@ import escapeHtml from 'escape-html'; import 'jquery'; -import loading from '../../components/loading/loading'; -import globalize from '../../lib/globalize'; -import Dashboard from '../../utils/dashboard'; -import alert from '../../components/alert'; + +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import Dashboard from 'utils/dashboard'; +import alert from 'components/alert'; function loadPage(page, config, users) { let html = ''; diff --git a/src/controllers/dashboard/networking.html b/src/apps/dashboard/controllers/networking.html similarity index 100% rename from src/controllers/dashboard/networking.html rename to src/apps/dashboard/controllers/networking.html diff --git a/src/controllers/dashboard/networking.js b/src/apps/dashboard/controllers/networking.js similarity index 95% rename from src/controllers/dashboard/networking.js rename to src/apps/dashboard/controllers/networking.js index 25bfe8d4ea..04c206dd76 100644 --- a/src/controllers/dashboard/networking.js +++ b/src/apps/dashboard/controllers/networking.js @@ -1,9 +1,9 @@ -import loading from '../../components/loading/loading'; -import globalize from '../../lib/globalize'; -import '../../elements/emby-checkbox/emby-checkbox'; -import '../../elements/emby-select/emby-select'; -import Dashboard from '../../utils/dashboard'; -import alert from '../../components/alert'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import 'elements/emby-checkbox/emby-checkbox'; +import 'elements/emby-select/emby-select'; +import Dashboard from 'utils/dashboard'; +import alert from 'components/alert'; function onSubmit(e) { const form = this; @@ -159,7 +159,7 @@ export default function (view) { } }); view.querySelector('#btnSelectCertPath').addEventListener('click', function () { - import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { + import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { const picker = new DirectoryBrowser(); picker.show({ includeFiles: true, diff --git a/src/controllers/dashboard/playback.html b/src/apps/dashboard/controllers/playback.html similarity index 100% rename from src/controllers/dashboard/playback.html rename to src/apps/dashboard/controllers/playback.html diff --git a/src/controllers/dashboard/playback.js b/src/apps/dashboard/controllers/playback.js similarity index 93% rename from src/controllers/dashboard/playback.js rename to src/apps/dashboard/controllers/playback.js index 86787f2968..a21eb80c95 100644 --- a/src/controllers/dashboard/playback.js +++ b/src/apps/dashboard/controllers/playback.js @@ -1,6 +1,7 @@ import 'jquery'; -import loading from '../../components/loading/loading'; -import Dashboard from '../../utils/dashboard'; + +import loading from 'components/loading/loading'; +import Dashboard from 'utils/dashboard'; function loadPage(page, config) { page.querySelector('#txtMinResumePct').value = config.MinResumePct; diff --git a/src/controllers/dashboard/plugins/available/index.html b/src/apps/dashboard/controllers/plugins/available/index.html similarity index 100% rename from src/controllers/dashboard/plugins/available/index.html rename to src/apps/dashboard/controllers/plugins/available/index.html diff --git a/src/controllers/dashboard/plugins/available/index.js b/src/apps/dashboard/controllers/plugins/available/index.js similarity index 100% rename from src/controllers/dashboard/plugins/available/index.js rename to src/apps/dashboard/controllers/plugins/available/index.js diff --git a/src/controllers/dashboard/plugins/installed/index.html b/src/apps/dashboard/controllers/plugins/installed/index.html similarity index 100% rename from src/controllers/dashboard/plugins/installed/index.html rename to src/apps/dashboard/controllers/plugins/installed/index.html diff --git a/src/controllers/dashboard/plugins/installed/index.js b/src/apps/dashboard/controllers/plugins/installed/index.js similarity index 93% rename from src/controllers/dashboard/plugins/installed/index.js rename to src/apps/dashboard/controllers/plugins/installed/index.js index cf64bf565d..b3971ecf1c 100644 --- a/src/controllers/dashboard/plugins/installed/index.js +++ b/src/apps/dashboard/controllers/plugins/installed/index.js @@ -1,11 +1,11 @@ -import loading from '../../../../components/loading/loading'; -import dom from '../../../../scripts/dom'; -import globalize from '../../../../lib/globalize'; -import '../../../../components/cardbuilder/card.scss'; -import '../../../../elements/emby-button/emby-button'; -import Dashboard, { pageIdOn } from '../../../../utils/dashboard'; -import confirm from '../../../../components/confirm/confirm'; -import { getDefaultBackgroundClass } from '../../../../components/cardbuilder/cardBuilderUtils'; +import loading from 'components/loading/loading'; +import dom from 'scripts/dom'; +import globalize from 'lib/globalize'; +import 'components/cardbuilder/card.scss'; +import 'elements/emby-button/emby-button'; +import Dashboard, { pageIdOn } from 'utils/dashboard'; +import confirm from 'components/confirm/confirm'; +import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; function deletePlugin(page, uniqueid, version, name) { const msg = globalize.translate('UninstallPluginConfirmation', name); @@ -187,7 +187,7 @@ function showPluginMenu(page, elem) { }); } - import('../../../../components/actionSheet/actionSheet').then((actionsheet) => { + import('components/actionSheet/actionSheet').then((actionsheet) => { actionsheet.show({ items: menuItems, positionTo: elem, diff --git a/src/controllers/dashboard/plugins/repositories/index.html b/src/apps/dashboard/controllers/plugins/repositories/index.html similarity index 100% rename from src/controllers/dashboard/plugins/repositories/index.html rename to src/apps/dashboard/controllers/plugins/repositories/index.html diff --git a/src/controllers/dashboard/plugins/repositories/index.js b/src/apps/dashboard/controllers/plugins/repositories/index.js similarity index 92% rename from src/controllers/dashboard/plugins/repositories/index.js rename to src/apps/dashboard/controllers/plugins/repositories/index.js index d7d9247e96..8eb0265f72 100644 --- a/src/controllers/dashboard/plugins/repositories/index.js +++ b/src/apps/dashboard/controllers/plugins/repositories/index.js @@ -1,14 +1,14 @@ -import loading from '../../../../components/loading/loading'; -import globalize from '../../../../lib/globalize'; -import dialogHelper from '../../../../components/dialogHelper/dialogHelper'; -import confirm from '../../../../components/confirm/confirm'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import dialogHelper from 'components/dialogHelper/dialogHelper'; +import confirm from 'components/confirm/confirm'; -import '../../../../elements/emby-button/emby-button'; -import '../../../../elements/emby-checkbox/emby-checkbox'; -import '../../../../elements/emby-select/emby-select'; +import 'elements/emby-button/emby-button'; +import 'elements/emby-checkbox/emby-checkbox'; +import 'elements/emby-select/emby-select'; -import '../../../../components/formdialog.scss'; -import '../../../../components/listview/listview.scss'; +import 'components/formdialog.scss'; +import 'components/listview/listview.scss'; let repositories = []; diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtask.html b/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.html similarity index 100% rename from src/controllers/dashboard/scheduledtasks/scheduledtask.html rename to src/apps/dashboard/controllers/scheduledtasks/scheduledtask.html diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtask.js b/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.js similarity index 94% rename from src/controllers/dashboard/scheduledtasks/scheduledtask.js rename to src/apps/dashboard/controllers/scheduledtasks/scheduledtask.js index 5ad8e3123c..7d46af171a 100644 --- a/src/controllers/dashboard/scheduledtasks/scheduledtask.js +++ b/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.js @@ -1,12 +1,12 @@ -import loading from '../../../components/loading/loading'; -import datetime from '../../../scripts/datetime'; -import dom from '../../../scripts/dom'; -import globalize from '../../../lib/globalize'; -import '../../../elements/emby-input/emby-input'; -import '../../../elements/emby-button/emby-button'; -import '../../../elements/emby-select/emby-select'; -import confirm from '../../../components/confirm/confirm'; -import { getParameterByName } from '../../../utils/url.ts'; +import loading from 'components/loading/loading'; +import datetime from 'scripts/datetime'; +import dom from 'scripts/dom'; +import globalize from 'lib/globalize'; +import 'elements/emby-input/emby-input'; +import 'elements/emby-button/emby-button'; +import 'elements/emby-select/emby-select'; +import confirm from 'components/confirm/confirm'; +import { getParameterByName } from 'utils/url.ts'; function fillTimeOfDay(select) { const options = []; @@ -35,7 +35,7 @@ const ScheduledTaskPage = { view.querySelector('.taskName').innerHTML = task.Name; view.querySelector('#pTaskDescription').innerHTML = task.Description; - import('../../../components/listview/listview.scss').then(() => { + import('components/listview/listview.scss').then(() => { ScheduledTaskPage.loadTaskTriggers(view, task); }); diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtasks.html b/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.html similarity index 100% rename from src/controllers/dashboard/scheduledtasks/scheduledtasks.html rename to src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.html diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtasks.js b/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.js similarity index 94% rename from src/controllers/dashboard/scheduledtasks/scheduledtasks.js rename to src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.js index 3b96d8c3a1..114c97f40f 100644 --- a/src/controllers/dashboard/scheduledtasks/scheduledtasks.js +++ b/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.js @@ -1,14 +1,15 @@ -import 'jquery'; -import loading from '../../../components/loading/loading'; -import globalize from '../../../lib/globalize'; -import serverNotifications from '../../../scripts/serverNotifications'; import { formatDistance, formatDistanceToNow } from 'date-fns'; -import { getLocale, getLocaleWithSuffix } from '../../../utils/dateFnsLocale.ts'; -import Events from '../../../utils/events.ts'; +import 'jquery'; -import '../../../components/listview/listview.scss'; -import '../../../elements/emby-button/emby-button'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; import dom from 'scripts/dom'; +import serverNotifications from 'scripts/serverNotifications'; +import { getLocale, getLocaleWithSuffix } from 'utils/dateFnsLocale.ts'; +import Events from 'utils/events.ts'; + +import 'components/listview/listview.scss'; +import 'elements/emby-button/emby-button'; function reloadList(page) { ApiClient.getScheduledTasks({ diff --git a/src/controllers/dashboard/streaming.html b/src/apps/dashboard/controllers/streaming.html similarity index 100% rename from src/controllers/dashboard/streaming.html rename to src/apps/dashboard/controllers/streaming.html diff --git a/src/controllers/dashboard/streaming.js b/src/apps/dashboard/controllers/streaming.js similarity index 90% rename from src/controllers/dashboard/streaming.js rename to src/apps/dashboard/controllers/streaming.js index 9dab432cba..3f87c292d6 100644 --- a/src/controllers/dashboard/streaming.js +++ b/src/apps/dashboard/controllers/streaming.js @@ -1,6 +1,7 @@ import 'jquery'; -import loading from '../../components/loading/loading'; -import Dashboard from '../../utils/dashboard'; + +import loading from 'components/loading/loading'; +import Dashboard from 'utils/dashboard'; function loadPage(page, config) { page.querySelector('#txtRemoteClientBitrateLimit').value = config.RemoteClientBitrateLimit / 1e6 || ''; diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index 56e19ccc11..c2d9359ee2 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -6,92 +6,92 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ path: '/dashboard', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/dashboard', - view: 'dashboard/dashboard.html' + controller: 'dashboard', + view: 'dashboard.html' } }, { path: 'settings', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/general', - view: 'dashboard/general.html' + controller: 'general', + view: 'general.html' } }, { path: 'networking', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/networking', - view: 'dashboard/networking.html' + controller: 'networking', + view: 'networking.html' } }, { path: 'devices', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/devices/devices', - view: 'dashboard/devices/devices.html' + controller: 'devices/devices', + view: 'devices/devices.html' } }, { path: 'devices/edit', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/devices/device', - view: 'dashboard/devices/device.html' + controller: 'devices/device', + view: 'devices/device.html' } }, { path: 'libraries', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/library', - view: 'dashboard/library.html' + controller: 'library', + view: 'library.html' } }, { path: 'libraries/display', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/librarydisplay', - view: 'dashboard/librarydisplay.html' + controller: 'librarydisplay', + view: 'librarydisplay.html' } }, { path: 'playback/transcoding', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/encodingsettings', - view: 'dashboard/encodingsettings.html' + controller: 'encodingsettings', + view: 'encodingsettings.html' } }, { path: 'libraries/metadata', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/metadataImages', - view: 'dashboard/metadataimages.html' + controller: 'metadataImages', + view: 'metadataimages.html' } }, { path: 'libraries/nfo', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/metadatanfo', - view: 'dashboard/metadatanfo.html' + controller: 'metadatanfo', + view: 'metadatanfo.html' } }, { path: 'playback/resume', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/playback', - view: 'dashboard/playback.html' + controller: 'playback', + view: 'playback.html' } }, { path: 'plugins/catalog', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/plugins/available/index', - view: 'dashboard/plugins/available/index.html' + controller: 'plugins/available/index', + view: 'plugins/available/index.html' } }, { path: 'plugins/repositories', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/plugins/repositories/index', - view: 'dashboard/plugins/repositories/index.html' + controller: 'plugins/repositories/index', + view: 'plugins/repositories/index.html' } }, { path: 'livetv/guide', @@ -125,29 +125,29 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ path: 'plugins', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/plugins/installed/index', - view: 'dashboard/plugins/installed/index.html' + controller: 'plugins/installed/index', + view: 'plugins/installed/index.html' } }, { path: 'tasks/edit', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/scheduledtasks/scheduledtask', - view: 'dashboard/scheduledtasks/scheduledtask.html' + controller: 'scheduledtasks/scheduledtask', + view: 'scheduledtasks/scheduledtask.html' } }, { path: 'tasks', pageProps: { appType: AppType.Dashboard, - controller: 'dashboard/scheduledtasks/scheduledtasks', - view: 'dashboard/scheduledtasks/scheduledtasks.html' + controller: 'scheduledtasks/scheduledtasks', + view: 'scheduledtasks/scheduledtasks.html' } }, { path: 'playback/streaming', pageProps: { appType: AppType.Dashboard, - view: 'dashboard/streaming.html', - controller: 'dashboard/streaming' + view: 'streaming.html', + controller: 'streaming' } } ]; diff --git a/src/components/viewManager/ViewManagerPage.tsx b/src/components/viewManager/ViewManagerPage.tsx index 3f6d258d98..1aea49ba64 100644 --- a/src/components/viewManager/ViewManagerPage.tsx +++ b/src/components/viewManager/ViewManagerPage.tsx @@ -33,17 +33,33 @@ interface ViewOptions { } } +const importController = ( + appType: AppType, + controller: string, + view: string +) => { + if (appType === AppType.Dashboard) { + return Promise.all([ + import(/* webpackChunkName: "[request]" */ `../../apps/dashboard/controllers/${controller}`), + import(/* webpackChunkName: "[request]" */ `../../apps/dashboard/controllers/${view}`) + .then(html => globalize.translateHtml(html)) + ]); + } + + return Promise.all([ + import(/* webpackChunkName: "[request]" */ `../../controllers/${controller}`), + import(/* webpackChunkName: "[request]" */ `../../controllers/${view}`) + .then(html => globalize.translateHtml(html)) + ]); +}; + const loadView = async ( appType: AppType, controller: string, view: string, viewOptions: ViewOptions ) => { - const [ controllerFactory, viewHtml ] = await Promise.all([ - import(/* webpackChunkName: "[request]" */ `../../controllers/${controller}`), - import(/* webpackChunkName: "[request]" */ `../../controllers/${view}`) - .then(html => globalize.translateHtml(html)) - ]); + const [ controllerFactory, viewHtml ] = await importController(appType, controller, view); viewManager.loadView({ ...viewOptions, From 5a7a859b01a781433ba7167cc74ecb1671867610 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sat, 25 Jan 2025 03:16:48 -0500 Subject: [PATCH 004/235] Fix toolbar safe are in experimental layout --- src/apps/experimental/routes/video/index.tsx | 1 + src/components/toolbar/AppToolbar.tsx | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/apps/experimental/routes/video/index.tsx b/src/apps/experimental/routes/video/index.tsx index f9322352d5..b3ded898a8 100644 --- a/src/apps/experimental/routes/video/index.tsx +++ b/src/apps/experimental/routes/video/index.tsx @@ -46,6 +46,7 @@ const VideoPage: FC = () => { diff --git a/src/components/toolbar/AppToolbar.tsx b/src/components/toolbar/AppToolbar.tsx index c06355a2db..4c34aaf3c1 100644 --- a/src/components/toolbar/AppToolbar.tsx +++ b/src/components/toolbar/AppToolbar.tsx @@ -17,6 +17,7 @@ interface AppToolbarProps { isDrawerAvailable: boolean isDrawerOpen: boolean onDrawerButtonClick?: (event: React.MouseEvent) => void, + isFullscreen?: boolean, isUserMenuAvailable?: boolean } @@ -33,6 +34,7 @@ const AppToolbar: FC> = ({ isDrawerAvailable, isDrawerOpen, onDrawerButtonClick = () => { /* no-op */ }, + isFullscreen = false, isUserMenuAvailable = true }) => { const { user } = useApi(); @@ -40,6 +42,9 @@ const AppToolbar: FC> = ({ const isBackButtonAvailable = appRouter.canGoBack(); + // Only use the left safe area padding when the drawer is not pinned or in a fullscreen view + const useSafeAreaLeft = isDrawerAvailable || isFullscreen; + return ( > = ({ flexWrap: { xs: 'wrap', lg: 'nowrap' + }, + ...(useSafeAreaLeft && { + pl: { + xs: 'max(16px, env(safe-area-inset-left))', + sm: 'max(24px, env(safe-area-inset-left))' + } + }), + pr: { + xs: 'max(16px, env(safe-area-inset-left))', + sm: 'max(24px, env(safe-area-inset-left))' } }} > From a5e36b3d41198b8938c9ddaf7c42840fa30d3a4b Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 27 Jan 2025 16:59:06 -0500 Subject: [PATCH 005/235] Add photo albums and photos to favorites section --- src/controllers/favorites.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/controllers/favorites.js b/src/controllers/favorites.js index 9e9cd0f26e..89d0569a98 100644 --- a/src/controllers/favorites.js +++ b/src/controllers/favorites.js @@ -135,6 +135,22 @@ function getSections() { overlayPlayButton: true, overlayText: false, centerText: true + }, { + name: 'HeaderPhotoAlbums', + types: 'PhotoAlbum', + shape: getBackdropShape(enableScrollX()), + showTitle: true, + overlayPlayButton: true, + overlayText: false, + centerText: true + }, { + name: 'Photos', + types: 'Photo', + shape: getBackdropShape(enableScrollX()), + showTitle: true, + overlayPlayButton: true, + overlayText: false, + centerText: true }]; } From e83f45e75c01e92d30b6a161d9b7cdc702fe2c10 Mon Sep 17 00:00:00 2001 From: gnattu Date: Tue, 4 Feb 2025 16:31:22 +0800 Subject: [PATCH 006/235] Don't allow library name with leading or trailing space --- .../mediaLibraryCreator/mediaLibraryCreator.js | 12 ++++++++++++ src/strings/en-us.json | 1 + 2 files changed, 13 insertions(+) diff --git a/src/components/mediaLibraryCreator/mediaLibraryCreator.js b/src/components/mediaLibraryCreator/mediaLibraryCreator.js index cb2a85dbbf..50eabad2a1 100644 --- a/src/components/mediaLibraryCreator/mediaLibraryCreator.js +++ b/src/components/mediaLibraryCreator/mediaLibraryCreator.js @@ -45,6 +45,18 @@ function onAddLibrary(e) { const name = dlg.querySelector('#txtValue').value; let type = dlg.querySelector('#selectCollectionType').value; + if (name.length == 0 || name.trim().length !== name.length) { + alert({ + text: globalize.translate('LibraryNameInvalid'), + type: 'error' + }); + + isCreating = false; + loading.hide(); + + return false; + } + if (type == 'mixed') { type = null; } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 9c69f90285..cedcb4ae54 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1012,6 +1012,7 @@ "LeaveBlankToNotSetAPassword": "You can leave this field blank to set no password.", "Letterer": "Letterer", "LibraryAccessHelp": "Select the libraries to share with this user. Administrators will be able to edit all folders using the metadata manager.", + "LibraryNameInvalid": "Library name cannot be empty or have leading/trailing spaces.", "LibraryScanFanoutConcurrency": "Parallel library scan tasks limit", "LibraryScanFanoutConcurrencyHelp": "Maximum number of parallel tasks during library scans. Setting this to 0 will choose a limit based on your systems core count. WARNING: Setting this number too high may cause issues with network file systems; if you encounter problems lower this number.", "LibraryInvalidItemIdError": "The library is in an invalid state and cannot be edited. You are possibly encountering a bug: the path in the database is not the correct path on the filesystem.", From d8f84bc06504fedc200bbc342b369b9f51b142a7 Mon Sep 17 00:00:00 2001 From: Loris Laera Date: Sun, 9 Feb 2025 11:25:03 -0500 Subject: [PATCH 007/235] Added translation using Weblate (Luxembourgish) --- src/strings/lb.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/strings/lb.json diff --git a/src/strings/lb.json b/src/strings/lb.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/src/strings/lb.json @@ -0,0 +1 @@ +{} From e6c05fa6b6cac7448974c3a4fb3041b76336a009 Mon Sep 17 00:00:00 2001 From: Loris Laera Date: Sun, 9 Feb 2025 17:19:53 +0000 Subject: [PATCH 008/235] Translated using Weblate (Luxembourgish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lb/ --- src/strings/lb.json | 1809 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1808 insertions(+), 1 deletion(-) diff --git a/src/strings/lb.json b/src/strings/lb.json index 0967ef424b..bbb8d629f2 100644 --- a/src/strings/lb.json +++ b/src/strings/lb.json @@ -1 +1,1808 @@ -{} +{ + "Absolute": "Absolut", + "Add": "Derbäisetzen", + "LabelThrottleDelaySeconds": "Drosselen no (Sekonnen)", + "AlwaysPlaySubtitles": "Sous-titres ëmmer weisen", + "CancelRecording": "Opnam ofbriechen", + "DeleteAll": "All läschen", + "EnableDisplayMirroring": "Afleeën duplizéieren aktivéieren", + "Episodes": "Episoden", + "Extras": "Zousätzlech", + "FastForward": "Spulen", + "HDPrograms": "HD Programmer", + "LabelArtists": "Kënschtler", + "LabelEpisodeNumber": "Episode Nummer", + "LabelKeepUpTo": "Erhalen bis zu", + "LabelMetadataPath": "Metadate Chemin", + "LabelNotInstalled": "Net installéiert", + "LabelOriginalAspectRatio": "Original Aspect Ratio", + "LabelPath": "Chemin", + "LabelPublicHttpsPortHelp": "Hëllef zum öffentlichen HTTPS-Port", + "LabelQuickConnectCode": "QuickConnect-Code", + "LabelServerHost": "Server Host", + "LabelSyncPlayTimeSyncDevice": "SyncPlay: Zäitsync-Gerät", + "LabelType": "Typ", + "LabelWebVersion": "Web Versioun", + "LabelYear": "Joer", + "LeaveBlankToNotSetAPassword": "Loosst eidel, wann Dir keen Passwuert asetze wëllt", + "Menu": "Menü", + "MessageBrowsePluginCatalog": "Plugincatalog kucken", + "MessagePleaseWait": "Waart wannechgelift...", + "Name": "Numm", + "Normal": "Normal", + "OptionBluray": "Blu-ray", + "OptionDisplayFolderView": "Ordner Vue affichéieren", + "OptionDvd": "DVD", + "OptionHasThemeVideo": "Huet en Theme-Video", + "OptionParentalRating": "Elterenbewäertung", + "PlaybackError.SERVER_ERROR": "Server-Feeler", + "Production": "Produktioun", + "Remixer": "Remixer", + "Season": "Staffel", + "Tags": "Tags", + "LabelIsHearingImpaired": "Ass für Gehéiersbeeinträchtegt", + "NonBlockingScan": "Non-blocking Scan", + "LabelWidthResolutions": "Breet/Opléisung(en)", + "LabelQscale": "Qualitéitsskala (Qscale)", + "LabelTrickplayThreads": "Trickplay Threads", + "Actor": "Schauspiller", + "AddToCollection": "Zur Kollektioun derbäisetzen", + "AddToFavorites": "Zu Favoritten derbäisetzen", + "AddToPlaylist": "Zur Playlëscht derbäisetzen", + "AddToPlayQueue": "An d'Wiedergabelëscht derbäisetzen", + "AirDate": "Sendedatum", + "AirPlay": "AirPlay", + "AddedOnValue": "Derbäigesat den {0}", + "AgeValue": "{0} Joer aal", + "Aired": "Ausgestraalt", + "Album": "Album", + "AlbumArtist": "Album-Kënschtler", + "Albums": "Alben", + "Alerts": "Alèrten", + "All": "All", + "AllChannels": "All Kanäl", + "AllComplexFormats": "All komplex Formater", + "AllEpisodes": "All Episoden", + "AllLanguages": "All Sproochen", + "AllLibraries": "All Bibliothéiken", + "AllowCollectionManagement": "Erlaabt d'Verwaltung vu Kollektiounen", + "AllowSubtitleManagement": "Erlaabt d'Verwaltung vu Sous-titres", + "AllowFfmpegThrottling": "Erlaabt Ffmpeg-Throttling", + "AllowFmp4TranscodingContainerHelp": "Erlaabt den fMP4 Transkodéierungscontainer fir dësen Tuner, fir HEVC an HDR Inhalter z’aktivéieren. Net all Tuner si mat dësem Container kompatibel. Deaktivéiert dëst, wann Dir Problemer beim Ofspillen hutt.", + "AllowSegmentDeletion": "Erlaabt d'Läschen vu Segmenter", + "Alternate": "Alternativ", + "AlternateDVD": "Alternativ-DVD", + "AlwaysBurnInSubtitleWhenTranscoding": "Sous-titres ëmmer verbrennen beim Transkodéieren", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Brennt all Ënnertitelen an, wann Transkodéierung ausgeléist gëtt. Dëst garantéiert d’Ënnertitelsynchroniséierung no der Transkodéierung, op Käschte vun enger reduzéierter Transkodéierungsgeschwindegkeet.", + "AllowMediaConversion": "Erlaabt Mediakonversioun", + "AllowMediaConversionHelp": "Hëllef zum Erlaaben vun der Mediakonversioun", + "LabelSegmentKeepSeconds": "Zäit fir Segmenter ze behalen", + "LabelSegmentKeepSecondsHelp": "Zäit an Sekonnen, fir déi Segmenter behaale solle ginn, nodeems se vum Client erofgeluede goufen. Funktionéiert nëmmen, wann d’Segment-Läsche aktivéiert ass.", + "AllowOnTheFlySubtitleExtraction": "Erlaabt d'On-the-Fly-Extraktioun vu Sous-titres", + "AllowRemoteAccess": "Erlaabt Fernzugang", + "AllowRemoteAccessHelp": "Hëllef zum Erlaaben vum Fernzugang", + "AlwaysPlaySubtitlesHelp": "Ënnertitelen, déi der Sproochpräferenz entspriechen, ginn gelueden, onofhängeg vun der Audio-Sprooch.", + "AlwaysRemuxFlacAudioFilesHelp": "Wann Dir Dateien hutt, déi Äre Browser net ofspille kann oder wou d’Zäite falsch berechent ginn, aktivéiert dëst als Ëmwee.", + "Anime": "Anime", + "AnyLanguage": "Irgendeng Sprooch", + "AndOtherArtists": "{0} an {1} aner Kënschtler.", + "Anytime": "Zu all Moment", + "Arranger": "Arrangeur", + "Artist": "Kënschtler", + "Artists": "Kënschtler", + "AroundTime": "Ronderëm {0}", + "Art": "Clearart", + "Ascending": "Opsteigend", + "AsManyAsPossible": "Sou vill wéi méiglech", + "AspectRatio": "Aspect Ratio", + "Audio": "Audio", + "Author": "Auteur", + "Authorize": "Autoriséieren", + "Auto": "Automatesch", + "AutoSubtitleStylingHelp": "Dësen Modus wiesselt automatesch tëscht dem natierlechen an dem personaliséierte Stil vun den Ënnertitelen, baséiert op Ärem Gerät-Typ.", + "Backdrop": "Hannergrondbild", + "Backdrops": "Hannergrënn", + "BackdropScreensaver": "Hannergrond-Écranshützer", + "Banner": "Banner", + "Blacklist": "Schwaarz Lëscht", + "Books": "Bicher", + "Box": "Këscht", + "BirthLocation": "Gebuertsplaz", + "BirthPlaceValue": "Gebuertsplaz: {0}", + "BlockContentWithTagsHelp": "Verstoppt Medien mat op mannst engem vun de spezifizéierten Tags.", + "BoxRear": "Këscht Hannen", + "Browse": "Durchsichen", + "ButtonActivate": "Aktivéieren", + "ButtonAddImage": "Bild derbäisetzen", + "ButtonAddMediaLibrary": "Medienbibliothéik derbäisetzen", + "ButtonAddScheduledTaskTrigger": "Asaz-Zäitplang derbäisetzen", + "ButtonAddServer": "Server derbäisetzen", + "ButtonAddUser": "Benotzer derbäisetzen", + "ButtonAudioTracks": "Audio-Spuren", + "ButtonBack": "Zréck", + "ButtonArrowRight": "Riets", + "ButtonBackspace": "Zréckspace", + "ButtonCancel": "Ofbriechen", + "ButtonClose": "Zoumaachen", + "ButtonEditUser": "Benotzer änneren", + "ButtonChangeServer": "Server änneren", + "ButtonFullscreen": "Vollbild", + "ButtonGotIt": "Verstanen", + "ButtonInfo": "Info", + "ButtonLibraryAccess": "Bibliothéik-Zougang", + "ButtonManualLogin": "Manuell Umellen", + "ButtonMore": "Méi", + "ButtonOk": "OK", + "ButtonParentalControl": "Elteren-Kontroll", + "ButtonPause": "Paus", + "ButtonPlayer": "Spiller", + "ButtonRefreshGuideData": "Guide-Donnéeën aktualiséieren", + "ButtonRemove": "Ewechhuelen", + "ButtonRename": "Renomméieren", + "ButtonResume": "Weiterspillen", + "ButtonRevoke": "Révoquéieren", + "ButtonPreviousTrack": "Vireg Spur", + "ButtonScanAllLibraries": "All Bibliothéiken durchscannen", + "ButtonSelectDirectory": "Dossier auswielen", + "ButtonSelectView": "Vue auswielen", + "ButtonSend": "Senden", + "ButtonShutdown": "Ausschalten", + "ButtonSignIn": "Umellen", + "ButtonSpace": "Space", + "ButtonSplit": "Deelen", + "ButtonSubmit": "Schécken", + "ButtonSyncPlay": "SyncPlay", + "ButtonExitApp": "Applikatioun zoumaachen", + "ButtonStart": "Start", + "ButtonStop": "Stop", + "ButtonTrailer": "Bande-Annonce", + "ButtonUninstall": "Deinstalléieren", + "ButtonUseQuickConnect": "QuickConnect benotzen", + "ButtonWebsite": "Websäit", + "Bwdif": "Bob Weaver De-Interlacing Filter (BWDIF)", + "CancelSeries": "Série ofbriechen", + "Casual": "Casual", + "Categories": "Kategorien", + "ChannelResolutionSD": "SD-Opléisung", + "ChannelResolutionSDPAL": "SD (PAL)", + "ChannelAccessHelp": "Wielt d’Kanäl, déi mat dësem Benotzer gedeelt solle ginn. Administrateuren kënnen all Kanäl mam Metadata-Manager änneren.", + "ChannelResolutionHD": "HD-Opléisung", + "ChannelResolutionFullHD": "Full-HD-Opléisung", + "ChannelResolutionUHD4K": "UHD/4K-Opléisung", + "ChannelNumber": "Kanalnummer", + "Channels": "Kanäl", + "ClientSettings": "Client-Astellungen", + "Collections": "Kollektiounen", + "Colorist": "Kolorist", + "ColorPrimaries": "Haaptfaarwen", + "ColorSpace": "Faarweraum", + "CommunityRating": "Communautéitsbewäertung", + "ColorTransfer": "Faarftransfer", + "Composer": "Komponist", + "Conductor": "Dirigent", + "ConfirmDeleteImage": "Sidd Dir sécher, datt Dir d'Bild läsche wëllt?", + "ConfirmDeleteLyrics": "Wann Dir dës Liddertexter läscht, ginn se souwuel aus dem Dateisystem wéi och aus denger Mediebibliothéik geläscht. Sidd Dir sécher, datt Dir wëllt weiderfueren?", + "ConfirmDeletion": "Läschung bestätegen", + "Connect": "Verbannen", + "Console": "Konsole", + "ContinueWatching": "Weider kucken", + "Continuing": "Weidergehend", + "Copied": "Kopéiert", + "Copy": "Kopéieren", + "CopyStreamURL": "Stream-URL kopéieren", + "CoverArtist": "Cover-Kënschtler", + "CriticRating": "Kritikerbewäertung", + "Creator": "Schëpfer", + "Cursive": "Kursiv", + "Custom": "Personaliséiert", + "Data": "Donnéeën", + "DateModified": "Datum geännert", + "DatePlayed": "Datum gespillt", + "DailyAt": "Dagdeeglech um {0}", + "DateAdded": "Datum dobäigesat", + "Default": "Standard", + "DefaultSubtitlesHelp": "Ënnertitelen ginn op Basis vun de Standard- an forcéierte Markéierunge vun den agebettener Metadata gelueden. Sproochpräferenzen ginn berücksichtegt, wann et verschidde Optiounen gëtt.", + "Delete": "Läschen", + "DeleteEntireSeries": "{0} Episoden läschen", + "DeleteDeviceConfirmation": "Sidd Dir sécher, datt Dir dëst Gerät wëllt läschen? Et wäert erëm erschéngen, wann e Benotzer sech déi nächst Kéier domat umellt.", + "DeleteImage": "Bild läschen", + "DeleteMedia": "Medien läschen", + "DeleteSeries": "Série läschen", + "DeleteEpisode": "Episode läschen", + "DeleteImageConfirmation": "Sidd Dir sécher, datt Dir dëst Bild wëllt läschen?", + "DeleteLyrics": "Liddertexter läschen", + "DeleteUser": "Benotzer läschen", + "DeleteUserConfirmation": "Sidd Dir sécher, datt Dir de Benotzer läsche wëllt?", + "Depressed": "Depressiv", + "Descending": "Ofsteigend", + "Desktop": "Desktop", + "DetectingDevices": "Geräter erkennen", + "Digital": "Digital", + "Director": "Regisseur", + "Directors": "Regisseuren", + "DirectPlaying": "Direkt ofspillen", + "DirectPlayHelp": "D’Quell-Datei ass komplett kompatibel mat dësem Client an d’Sessioun kritt d’Datei ouni Ännerungen.", + "DirectStreamHelp2": "D’Kraaftverbrauch beim direkte Streaming hänkt normalerweis vum Audio-Profil of. Nëmmen de Video-Stream ass verlousungsfräi.", + "DirectStreaming": "Direkte Streaming", + "EnablePlugin": "Aktivéieren", + "DisableCustomCss": "Server-baséierten personaliséierte CSS-Code deaktivéieren", + "Disc": "Disc", + "Disconnect": "Trennen", + "Display": "Display", + "DisplayInMyMedia": "Um Startbildschierm", + "DisplayInOtherHomeScreenSections": "An anere Rubriken um Startécran weisen", + "DisplayMissingEpisodesWithinSeasons": "Fehlend Episoden an de Staffelen weisen", + "DisplayMissingEpisodesWithinSeasonsHelp": "Hëllef zum Weisen vu fehlenden Episoden an de Staffelen", + "DisplayModeHelp": "Hëllef zum Afleeëmoudus", + "DlnaMovedMessage": "DLNA-Einstellungen sinn transferéiert ginn", + "DoNotRecord": "Net ophuelen", + "Down": "Rof", + "Download": "Eroflueden", + "DownloadAll": "Alles eroflueden", + "DownloadsValue": "Erofluede Wäert", + "DrmChannelsNotImported": "DRM-Kanäl goufen net importéiert", + "DropShadow": "Schiet zousetzen", + "Edit": "Änneren", + "Editor": "Editeur", + "EditImages": "Biller änneren", + "EditLyrics": "Texter änneren", + "EditMetadata": "Metadaten änneren", + "EditSubtitles": "Sous-titres änneren", + "EnableAutoCast": "AutoCast aktivéieren", + "EnableBackdropsHelp": "Hëllef zum Aktivéiere vu Hannergrënn", + "EnableBlurHash": "BlurHash aktivéieren", + "EnableBlurHashHelp": "Hëllef zum Aktivéiere vu BlurHash", + "EnableCinemaMode": "Kino Modus aktivéieren", + "EnableColorCodedBackgrounds": "Faarwkodéiert Hannergrënn aktivéieren", + "EnableDecodingColorDepth10Hevc": "Decodéiere vu 10-Bit HEVC aktivéieren", + "EnableDecodingColorDepth10Vp9": "Decodéiere vu 10-Bit VP9 aktivéieren", + "EnableDetailsBanner": "Detailbanner aktivéieren", + "EnableDetailsBannerHelp": "Hëllef zum Detailbanner aktivéieren", + "EnableDts": "DTS aktivéieren", + "EnableDtsHelp": "Hëllef zum DTS aktivéieren", + "EnableExternalVideoPlayers": "Extern Videoplayeren aktivéieren", + "EnableExternalVideoPlayersHelp": "Hëllef zum Aktivéiere vun externen Videoplayeren", + "EnableFasterAnimations": "Schnell Animatiounen aktivéieren", + "EnableFasterAnimationsHelp": "Hëllef zu schnelle Animatiounen aktivéieren", + "EnableHardwareEncoding": "Hardware Codéierung aktivéieren", + "EnableHi10p": "Hi10p aktivéieren", + "EnableHi10pHelp": "Hëllef zum Hi10p aktivéieren", + "EnableLibrary": "Bibliothéik aktivéieren", + "EnableLibraryHelp": "Hëllef zum Bibliothéik aktivéieren", + "EnableNextVideoInfoOverlay": "Info Iwwerlagerung beim nächsten Video aktivéieren", + "EnableNextVideoInfoOverlayHelp": "Hëllef zur Info Iwwerlagerung beim nächsten Video", + "EnablePhotos": "Fotoen aktivéieren", + "EnablePhotosHelp": "Hëllef zum Aktivéiere vu Fotoen", + "EnableCardLayout": "Kaarte Layout aktivéieren", + "EnableRewatchingNextUp": "Erëm kucken am Next Up aktivéieren", + "EnableRewatchingNextUpHelp": "Hëllef zum Erëm kucken am Next Up aktivéieren", + "EnableQuickConnect": "QuickConnect aktivéieren", + "EnableSmoothScroll": "Geschmeidegt Scrollen aktivéieren", + "EnableStreamLooping": "Stroum Looping aktivéieren", + "EnableStreamLoopingHelp": "Hëllef zum Stroum Looping aktivéieren", + "EnableThemeSongsHelp": "Hëllef zum Aktivéiere vu Themesongs", + "EnableThemeVideosHelp": "Hëllef zum Aktivéiere vu Themevideos", + "EnableTonemapping": "Tonemapping aktivéieren", + "EnableTrueHd": "TrueHD aktivéieren", + "EnableTrueHdHelp": "Hëllef zum Aktivéiere vu TrueHD", + "EncoderPresetHelp": "Hëllef zur Kodéier-Preset", + "Ended": "Beendegt", + "EndsAtValue": "Endet um", + "Engineer": "Toningenieur", + "Episode": "Episode", + "ErrorAddingListingsToSchedulesDirect": "Feeler beim Derbäisetzen vu Lëschtungen op Schedules Direct", + "ErrorAddingMediaPathToVirtualFolder": "Feeler beim Derbäisetze vum Medie-Pfad an e virtuelle Dossier", + "ErrorAddingTunerDevice": "Feeler beim Derbäisetze vum Tuner-Gerät", + "ErrorAddingXmlTvFile": "Feeler beim Derbäisetze vum XMLTV Fichier", + "ErrorDefault": "Allgemeine Feeler", + "ErrorDeletingItem": "Feeler beim Läsche vum Element", + "ErrorDeletingLyrics": "Feeler beim Läsche vun den Texter", + "ErrorGettingTvLineups": "Feeler beim Erfaassen vum TV-Lineup", + "ErrorPlayerNotFound": "Feeler: Player net fonnt", + "ErrorPleaseSelectLineup": "Feeler: Wielt wannechgelift e Lineup", + "ErrorSavingTvProvider": "Feeler beim Späichere vum TV-Provider", + "ErrorStartHourGreaterThanEnd": "Feeler: Startstonn ass méi héich wéi d'Endstonn", + "EveryHour": "All Stonn", + "EveryNDays": "All N Deeg", + "EveryXHours": "All X Stonnen", + "EveryXMinutes": "All X Minutten", + "ExitFullscreen": "Vollbild verlassen", + "Experimental": "Experimentell", + "ExtractChapterImagesHelp": "Hëllef zum Extrahéieren vu Kapitel-Biller", + "ExtraLarge": "Extra Grouss", + "FallbackMaxStreamingBitrateHelp": "Hëllef zum Fallback-Max Stream Bitrate", + "Favorite": "Favorit", + "Favorites": "Favoritten", + "Features": "Funktionalitéiten", + "FetchingData": "Donnéeën erfaassen", + "FFmpegSavePathNotFound": "FFmpeg Späicherpfad net fonnt", + "File": "Datei", + "FileNotFound": "Datei net fonnt", + "FileReadCancelled": "Datei Liesung ofgebrach", + "FileReadError": "Feeler beim Liese vun der Datei", + "Filter": "Filter", + "Filters": "Filteren", + "Folders": "Dossieren", + "FormatValue": "Format Wäert", + "Framerate": "Biller pro Sekonn", + "Friday": "Freideg", + "Fullscreen": "Vollbild", + "General": "Allgemein", + "Genre": "Genre", + "Genres": "Generen", + "GoHome": "Zréck an d'Menü", + "GoogleCastUnsupported": "Google Cast gëtt net ënnerstëtzt", + "GridView": "Gitter Vue", + "GroupBySeries": "No Série gruppéieren", + "GroupVersions": "Versiounen gruppéieren", + "GuestStar": "Gaast Stär", + "Guide": "Leedfaden", + "GuideProviderLogin": "Umellen beim Guide Provider", + "GuideProviderSelectListings": "Guide Provider: Lëschtungen auswielen", + "H264CrfHelp": "Hëllef zum H.264 CRF Wäert", + "HardwareAccelerationWarning": "Warnung: Hardware Beschleunegung", + "HeaderAccessSchedule": "Zougangs Zäitschema", + "HeaderAccessScheduleHelp": "Hëllef zum Zougangs Zäitschema", + "HeaderActiveDevices": "Aktiv Geräter", + "HeaderActiveRecordings": "Aktiv Opnamen", + "HeaderActivity": "Aktivitéit", + "HeaderAdditionalParts": "Zousätzlech Deeler", + "HeaderAddLyrics": "Texter derbäisetzen", + "HeaderAddToCollection": "Zur Kollektioun derbäisetzen", + "HeaderAddToPlaylist": "Zur Playlëscht derbäisetzen", + "HeaderAddUpdateImage": "Bild derbäisetzen / aktualiséieren", + "HeaderAddUpdateSubtitle": "Sous-titre derbäisetzen / aktualiséieren", + "HeaderAddUser": "Benotzer derbäisetzen", + "HeaderAdmin": "Admin", + "HeaderAlbumArtists": "Album Kënschtler", + "HeaderAlert": "Alarm", + "HeaderAllRecordings": "All Opnamen", + "HeaderAllowMediaDeletionFrom": "Mediadeletion erlaaben aus", + "HeaderApiKey": "API Schlëssel", + "HeaderApiKeys": "API Schlësselen", + "HeaderApiKeysHelp": "Hëllef zu API Schlësselen", + "HeaderApp": "App", + "HeaderAppearsOn": "Erschéint op", + "HeaderAudioBooks": "Audiobicher", + "HeaderAudioAdvanced": "Erweidert Audio", + "HeaderAudioSettings": "Audio Astellungen", + "HeaderAutoDiscovery": "Automatesch Erkennung", + "HeaderBlockItemsWithNoRating": "Elementer blockéieren ouni Bewäertung", + "HeaderBranding": "Branding", + "HeaderCancelRecording": "Opnam ofbriechen", + "HeaderCancelSeries": "Série opbriechen", + "HeaderCastAndCrew": "Schauspiller a Crew", + "HeaderChannelAccess": "Kanal Zougang", + "HeaderChapterImages": "Kapitel-Biller", + "HeaderConfigureRemoteAccess": "Fernzugang konfiguréieren", + "HeaderConfirmPluginInstallation": "Plugin Installatioun bestätegen", + "HeaderConfirmRepositoryInstallation": "Repository Installatioun bestätegen", + "HeaderConfirmRevokeApiKey": "API Schlëssel révoquéieren bestätegen", + "HeaderConnectionFailure": "Verbindungsfehler", + "HeaderConnectToServer": "Mam Server verbannen", + "HeaderContinueListening": "Weider lauschteren", + "HeaderContinueWatching": "Weider kucken", + "HeaderContinueReading": "Weider liesen", + "HeaderDateIssued": "Ausgabedatum", + "HeaderDefaultRecordingSettings": "Standard Opnam Astellungen", + "HeaderDeleteDevice": "Gerät läschen", + "HeaderDeleteDevices": "Geräter läschen", + "HeaderDeleteItem": "Element läschen", + "HeaderDeleteSeries": "Série läschen", + "HeaderDeleteItems": "Elementer läschen", + "HeaderDeleteLyrics": "Songtexte läschen", + "HeaderDeleteProvider": "Provider läschen", + "HeaderDeleteTaskTrigger": "Aufgabetrigger läschen", + "HeaderDetectMyDevices": "Meng Geräter erkennen", + "HeaderDeveloperInfo": "Entwéckler-Informatiounen", + "HeaderDeviceAccess": "Gerät-Zougang", + "HeaderDevices": "Geräter", + "HeaderDownloadSync": "Erofluede & Sync", + "HeaderDummyChapter": "Dummy-Kapitel", + "HeaderDVR": "DVR", + "HeaderEditImages": "Biller änneren", + "HeaderEditPlaylist": "Playlëscht änneren", + "HeaderEnabledFields": "Aktivéiert Felder", + "HeaderEnabledFieldsHelp": "Hëllef zu aktivéierte Felder", + "HeaderEpisodesStatus": "Episoden-Status", + "HeaderError": "Feeler", + "HeaderExternalIds": "Extern IDs", + "HeaderFeatureAccess": "Feature-Zougang", + "HeaderFetcherSettings": "Fetcher-Astellungen", + "HeaderFetchImages": "Biller eroflueden", + "HeaderForKids": "Für Kanner", + "HeaderFrequentlyPlayed": "Oft gespillt", + "HeaderGuestCast": "Gäschtebesetzung", + "HeaderGuideProviders": "Guide Providers", + "HeaderHttpsSettings": "HTTPS-Astellungen", + "HeaderIdentifyItemHelp": "Hëllef zur Identifikatioun vum Element", + "HeaderImageOptions": "Bildoptiounen", + "HeaderInstall": "Installéieren", + "HeaderInstantMix": "Instant Mix", + "HeaderKeepRecording": "Opnam erhalen", + "HeaderKeepSeries": "Série erhalen", + "HeaderKodiMetadataHelp": "Hëllef zu Kodi-Metadaten", + "HeaderLatestEpisodes": "Lescht Episoden", + "HeaderLatestMedia": "Lescht Medien", + "HeaderLatestMovies": "Lescht Filmer", + "HeaderLatestMusic": "Lescht Musek", + "HeaderLatestRecordings": "Lescht Opnamen", + "HeaderLibraries": "Bibliothéiken", + "HeaderLibraryAccess": "Bibliothéik-Zougang", + "HeaderLibraryFolders": "Bibliothéik-Dossieren", + "HeaderLibraryOrder": "Reiefolleg vun der Bibliothéik", + "HeaderLibrarySettings": "Bibliothéik-Astellungen", + "HeaderLiveTvTunerSetup": "Live-TV-Tuner-Konfiguratioun", + "HeaderLoginFailure": "Umellung gescheitert", + "HeaderLyricDownloads": "Songtexte eroflueden", + "HeaderMedia": "Medien", + "HeaderMediaFolders": "Medien-Dossieren", + "HeaderMediaSegmentActions": "Medien-Segment-Aktiounen", + "HeaderMetadataSettings": "Metadaten-Astellungen", + "HeaderMoreLikeThis": "Méi wéi dëst", + "HeaderMusicQuality": "Musek-Qualitéit", + "HeaderMyMedia": "Meng Medien", + "HeaderMyMediaSmall": "Meng Medien (Kleng)", + "HeaderNavigation": "Navigatioun", + "HeaderNetworking": "Netzwerk-Astellungen", + "HeaderNewApiKey": "Neien API-Schlëssel", + "HeaderNewDevices": "Nei Geräter", + "HeaderNewPlaylist": "Nei Playlëscht", + "HeaderNewRepository": "Neie Repository", + "HeaderNextEpisode": "Nächst Episode", + "HeaderNextEpisodePlayingInValue": "Nächst Episode leeft an {0}", + "HeaderNextVideo": "Nächst Video", + "HeaderNextVideoPlayingInValue": "Nächst Video leeft an {0}", + "HeaderNoLyrics": "Keng Songtexte", + "HeaderOnNow": "Elo am Gaang", + "HeaderOtherItems": "Aner Elementer", + "HeaderParentalRatings": "Elterenbewäertungen", + "HeaderPassword": "Passwuert", + "HeaderPasswordReset": "Passwuert zerécksetzen", + "HeaderPaths": "Chemin", + "HeaderPerformance": "Leeschtung", + "HeaderPhotoAlbums": "Foto-Alben", + "HeaderPlayAll": "Alles spillen", + "HeaderPlayback": "Wiedergabe", + "HeaderPlaybackError": "Wiedergabe-Feeler", + "HeaderPlayOn": "Spill op", + "HeaderPleaseSignIn": "Mellt Iech w.e.g. un", + "HeaderPortRanges": "Port-Beräicher", + "HeaderPreferredMetadataLanguage": "Léiwe Metadaten-Sprooch", + "HeaderPreviewLyrics": "Songtexte-Virschau", + "HeaderRecentlyPlayed": "Rezent gespillt", + "HeaderRecordingMetadataSaving": "Opnam Metadaten späicheren", + "HeaderRecordingOptions": "Opnam-Optiounen", + "HeaderRecordingPostProcessing": "Opnam-Nachbeaarbechtung", + "HeaderRemoteAccessSettings": "Fernzugang-Astellungen", + "HeaderRemoteControl": "Fjäresteierung", + "HeaderRemoveMediaFolder": "Medien-Dossier ewechhuelen", + "HeaderRemoveMediaLocation": "Medien-Location ewechhuelen", + "HeaderRevisionHistory": "Revisiounshistorik", + "HeaderRunningTasks": "Aktiv Aufgaben", + "HeaderScenes": "Scènen", + "HeaderSeasons": "Staffelen", + "HeaderSecondsValue": "Sekonnen", + "HeaderSelectCertificatePath": "Zertifika-Chemin auswielen", + "HeaderSelectMetadataPath": "Metadate-Chemin auswielen", + "HeaderSelectMetadataPathHelp": "Hëllef zum Metadate-Chemin auswielen", + "HeaderSelectPath": "Chemin auswielen", + "HeaderSelectServerCachePath": "Server-Cache-Chemin auswielen", + "HeaderSelectServerCachePathHelp": "Hëllef zum Server-Cache-Chemin auswielen", + "HeaderSelectTranscodingPath": "Transcoding-Chemin auswielen", + "HeaderSelectTranscodingPathHelp": "Hëllef zum Transcoding-Chemin auswielen", + "HeaderSendMessage": "Noriicht schécken", + "HeaderSeriesOptions": "Série-Optiounen", + "HeaderSeriesStatus": "Série-Status", + "HeaderServerAddressSettings": "Server-Adresse-Astellungen", + "HeaderSetupLibrary": "Bibliothéik ariichten", + "HeaderSortBy": "Zortéieren no", + "HeaderSortOrder": "Zortéieruerdnung", + "HeaderSpecialEpisodeInfo": "Spezial-Episode-Informatiounen", + "HeaderStartNow": "Elo ufänken", + "HeaderStatus": "Status", + "HeaderStopRecording": "Opnam anhalen", + "HeaderSubtitleAppearance": "Sous-titre-Erscheinung", + "HeaderSubtitleDownloads": "Sous-titre eroflueden", + "HeaderSyncPlayEnabled": "SyncPlay aktivéiert", + "HeaderSyncPlaySelectGroup": "SyncPlay: Grupp auswielen", + "HeaderSyncPlaySettings": "SyncPlay-Astellungen", + "HeaderSyncPlayPlaybackSettings": "SyncPlay-Wiedergabe-Astellungen", + "HeaderSyncPlayTimeSyncSettings": "SyncPlay-Zäitsync-Astellungen", + "HeaderTaskTriggers": "Aufgabe-Ausléiser", + "HeaderThisUserIsCurrentlyDisabled": "Dëse Benotzer ass aktuell deaktivéiert", + "HeaderTracks": "Stécker", + "HeaderTunerDevices": "Tuner-Geräter", + "HeaderTuners": "Tuner", + "HeaderTypeImageFetchers": "Bildfetcher no Typ", + "HeaderTypeText": "Typ: Text", + "HeaderUninstallPlugin": "Plugin deinstalléieren", + "HeaderUpcomingOnTV": "Gleedeg am TV", + "HeaderUploadImage": "Bild eroplueden", + "HeaderUploadLyrics": "Songtexte eroplueden", + "HeaderUploadSubtitle": "Sous-titre eroplueden", + "HeaderUser": "Benotzer", + "HeaderUsers": "Benotzer", + "HeaderVideoAdvanced": "Erweidert Video", + "HeaderVideoQuality": "Video-Qualitéit", + "HeaderVideos": "Videoen", + "HeaderVideoType": "Video-Typ", + "HeaderVideoTypes": "Video-Typen", + "HeaderYears": "Joer", + "Help": "Hëllef", + "Hide": "Verstoppen", + "HideWatchedContentFromLatestMedia": "Gekuckten Inhalt aus de neiste Medien verstoppen", + "Home": "Accueil", + "HomeVideosPhotos": "Heem-Videoen & -Fotoen", + "Horizontal": "Horizontal", + "HttpsRequiresCert": "HTTPS erfuerdert e Zertifika", + "Identify": "Identifizéieren", + "IgnoreDts": "DTS ignoréieren", + "IgnoreDtsHelp": "Hëllef zum DTS ignoréieren", + "Illustrator": "Illustrateur", + "Image": "Bild", + "Images": "Biller", + "ImportFavoriteChannelsHelp": "Hëllef zum Importéiere vu Favoritte-Kanäl", + "Inker": "Inker", + "InstallingPackage": "Package gëtt installéiert", + "InstantMix": "Instant Mix", + "ItemCount": "Item-Zuel", + "ItemDetails": "Item-Detailer", + "Items": "Elementer", + "Kids": "Kanner", + "KnownProxiesHelp": "Hëllef zu bekannte Proxien", + "Label3DFormat": "3D-Format", + "LabelAbortedByServerShutdown": "Ofgebrach duerch Server-Ausschalten", + "LabelAccessDay": "Zougangsdag", + "LabelAccessEnd": "Zougang endet", + "LabelAccessStart": "Zougang start", + "LabelAirDays": "Sendungsdeeg", + "LabelAirsAfterSeason": "Gesend nodeems d'Staffel ofgeschloss ass", + "LabelAirsBeforeEpisode": "Gesend ier d'Episode ufänkt", + "LabelAirsBeforeSeason": "Gesend ier d'Staffel ufänkt", + "LabelAirTime": "Sendezäit", + "LabelAlbum": "Album", + "LabelAlbumArtists": "Album-Kënschtler", + "LabelAlbumGain": "Album-Gain", + "LabelAllowContentWithTags": "Inhalt mat Tag erlaaben", + "LabelAllowedRemoteAddresses": "Erlaabt Fjäert-Adressen", + "LabelAllowedRemoteAddressesMode": "Modus vun erlaabten Fjäert-Adressen", + "LabelAllowFmp4TranscodingContainer": "fMP4-Transcoding-Container erlaaben", + "LabelAllowHWTranscoding": "Hardware-Transkodéierung erlaaben", + "LabelAlwaysRemuxFlacAudioFiles": "FLAC-Audiodateien ëmmer remuxen", + "LabelAlwaysRemuxMp3AudioFiles": "MP3-Audiodateien ëmmer remuxen", + "LabelAllowStreamSharing": "Stroumdeelung erlaaben", + "LabelAppName": "App-Numm", + "LabelAppNameExample": "Beispill: 'MyJellyfinApp'", + "LabelArtistsHelp": "Hëllef zu Kënschtler-Daten", + "LabelAudioBitDepth": "Audio-Bit-Tiefe", + "LabelAudioBitrate": "Audio-Bitrate", + "LabelAudioChannels": "Audio-Kanäl", + "LabelAudioCodec": "Audio-Codec", + "LabelAudioLanguagePreference": "Léiwe Audio-Sprooch", + "LabelAudioTagSettings": "Audio-Tag-Astellungen", + "LabelSelectAudioNormalization": "Audio-Normalisatioun auswielen", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Léiwe Transcode-Video/Audio-Codec auswielen", + "LabelAudioSampleRate": "Audio Sampleraate", + "LabelAuthProvider": "Authentifikatiouns Provider", + "LabelAutomaticallyAddToCollection": "Automatesch an d'Kollektioun derbäisetzen", + "LabelAutomaticallyAddToCollectionHelp": "Hëllef zum Automateschen Derbäisetzen an d'Kollektioun", + "LabelAutomaticallyRefreshInternetMetadataEvery": "Automatesch Internet Metadaten aktualiséieren all", + "LabelAutomaticDiscovery": "Automatesch Entdeckung", + "LabelAutomaticDiscoveryHelp": "Hëllef zur Automatescher Entdeckung", + "LabelBaseUrl": "Basis URL", + "LabelBaseUrlHelp": "Hëllef zur Basis URL", + "LabelBackdropScreensaverInterval": "Intervall vum Hannergrond Screensaver", + "LabelBackdropScreensaverIntervalHelp": "Hëllef zum Intervall vum Hannergrond Screensaver", + "LabelBindToLocalNetworkAddress": "Op lokal Netzwierk-Addresse bänneren", + "LabelBindToLocalNetworkAddressHelp": "Hëllef zum Bänneren op lokal Netzwierk-Addresse", + "LabelBirthDate": "Gebuertsdatum", + "LabelBirthYear": "Gebuertsjocrang", + "LabelBitrate": "Bitrate", + "LabelBlastMessageInterval": "Intervall vum Blast-Messagen", + "LabelBlastMessageIntervalHelp": "Hëllef zum Intervall vum Blast-Messagen", + "LabelBlockContentWithTags": "Inhalter blockéieren mat Markéierunge", + "LabelBuildVersion": "Build Versioun", + "LabelBurnSubtitles": "Sous-titres verbrennen", + "LabelCache": "Cache", + "LabelCachePath": "Cache Chemin", + "LabelCachePathHelp": "Hëllef zum Cache Chemin", + "LabelCancelled": "Ofgesot", + "LabelCertificatePassword": "Zertifika Passwuert", + "LabelCertificatePasswordHelp": "Hëllef zum Zertifika Passwuert", + "LabelChannels": "Kanäl", + "LabelChromecastVersion": "Chromecast Versioun", + "LabelCollection": "Kollektioun", + "LabelColorPrimaries": "Haaptfaarwen (Color Primaries)", + "LabelColorSpace": "Faarweraum (Color Space)", + "LabelColorTransfer": "Faarwübertragung (Color Transfer)", + "LabelCommunityRating": "Communautéitsbewäertung", + "LabelContentType": "Inhalts-Typ", + "LabelCorruptedFrames": "Beschiedegt Biller (Frames)", + "LabelCountry": "Land", + "LabelCreateHttpPortMap": "HTTP Port Mapping erstellen", + "LabelCreateHttpPortMapHelp": "Hëllef zum Erstelle vum HTTP Port Mapping", + "LabelCriticRating": "Kritikerbewäertung", + "LabelCurrentPassword": "Aktuellt Passwuert", + "LabelCurrentStatus": "Aktuellen Status", + "LabelCustomCertificatePath": "Benotzerdefinéiert Zertifika Chemin", + "LabelCustomCertificatePathHelp": "Hëllef zum Benotzerdefinéiertem Zertifika Chemin", + "LabelCustomCss": "Benotzerdefinéiert CSS", + "LabelCustomCssHelp": "Hëllef zur Benotzerdefinéierter CSS", + "LabelCustomDeviceDisplayNameHelp": "Hëllef zum Benotzerdefinéierten Annoncenumm vum Gerät", + "LabelCustomRating": "Benotzerdefinéiert Bewäertung", + "LabelCustomTagDelimiters": "Benotzerdefinéiert Tag-Delimiters", + "LabelCustomTagDelimitersHelp": "Hëllef zu Benotzerdefinéierte Tag-Delimiters", + "LabelDashboardTheme": "Dashboard Thema", + "LabelDate": "Datum", + "LabelDateAdded": "Datum derbäigesat", + "LabelDateAddedBehavior": "Verhale vum Datum derbäigesat", + "LabelDateAddedBehaviorHelp": "Hëllef zum Verhale vum Datum derbäigesat", + "LabelDateTimeLocale": "Datums- a Zäitzone-Format", + "LabelDay": "Dag", + "LabelDeathDate": "Doudesdatum", + "LabelDefaultScreen": "Standard Écran", + "LabelDeinterlaceMethod": "Deinterlace Methode", + "LabelDelimiterWhitelist": "Whitelist vu Delimiters", + "LabelDelimiterWhitelistHelp": "Hëllef zur Whitelist vu Delimiters", + "LabelDeveloper": "Entwéckler", + "LabelDisableCustomCss": "Benotzerdefinéiert CSS deaktivéieren", + "LabelDisableVbrAudioEncoding": "VBR-Audio Codéierung deaktivéieren", + "LabelDiscNumber": "Disksnummer", + "LabelDisplayLanguage": "Affichagesprooch", + "LabelDisplayLanguageHelp": "Hëllef zur Affichagesprooch", + "LabelDisplayMode": "Afleeëmoudus", + "LabelDisplayName": "Annoncenumm", + "LabelDisplayOrder": "Afleeë-Reiefolleg", + "LabelDisplaySpecialsWithinSeasons": "Specials an de Staffelen affichéieren", + "LabelDownloadLanguages": "Sprooche eroflueden", + "LabelDownMixAudioScale": "Downmix Audio Skala", + "LabelDownMixAudioScaleHelp": "Hëllef zur Downmix Audio Skala", + "LabelStereoDownmixAlgorithm": "Stereo Downmix Algorithmus", + "LabelDuration": "Dauer", + "LabelDropImageHere": "Zitt d'Bild heihinner", + "LabelDropLyricsHere": "Zitt d'Texter heihinner", + "LabelDroppedFrames": "Biller (Frames) verworf", + "LabelDropShadow": "Schiet zousetzen", + "LabelDropSubtitleHere": "Zitt d'Sous-titre heihinner", + "LabelDummyChapterDuration": "Dauer vum Dummy-Kapitel", + "LabelDummyChapterDurationHelp": "Hëllef zur Dauer vum Dummy-Kapitel", + "LabelChapterImageResolution": "Kapitelbild Opléisung", + "LabelChapterImageResolutionHelp": "Hëllef zur Kapitelbild Opléisung", + "LabelDynamicExternalId": "Dynamischen Externen ID", + "LabelEnableAudioVbr": "Audio VBR aktivéieren", + "LabelEnableAudioVbrHelp": "Hëllef zum Aktivéiere vu Audio VBR", + "LabelEnableHardwareDecodingFor": "Hardware-Decodéierung aktivéieren für", + "LabelEnableHttps": "HTTPS aktivéieren", + "LabelEnableHttpsHelp": "Hëllef zum Aktivéiere von HTTPS", + "LabelEnableIP4": "IPv4 aktivéieren", + "LabelEnableIP4Help": "Hëllef zum Aktivéiere von IPv4", + "LabelEnableIP6": "IPv6 aktivéieren", + "LabelEnableIP6Help": "Hëllef zum Aktivéiere von IPv6", + "LabelEnableLUFSScan": "LUFS-Scan aktivéieren", + "LabelEnableLUFSScanHelp": "Hëllef zum Aktivéiere vu LUFS-Scan", + "LabelEnablePlugin": "Plugin aktivéieren", + "LabelEnableRealtimeMonitor": "Echtzäit-Iwwerwaachung aktivéieren", + "LabelEnableRealtimeMonitorHelp": "Hëllef zur Echtzäit-Iwwerwaachung", + "LabelEncoderPreset": "Kodéier-Preset", + "LabelEndDate": "Enddatum", + "LabelEvent": "Evenement", + "LabelEveryXMinutes": "All X Minutten", + "LabelExtractChaptersDuringLibraryScan": "Kapitelen extrahéieren während Bibliothéik-Scan", + "LabelExtractChaptersDuringLibraryScanHelp": "Hëllef zum Extrahéieren vu Kapitelen während Bibliothéik-Scan", + "LabelFailed": "Gescheitert", + "LabelFallbackMaxStreamingBitrate": "Fallback Maximum Streaming-Bitrate", + "LabelffmpegPath": "FFmpeg Chemin", + "LabelffmpegPathHelp": "Hëllef zum FFmpeg Chemin", + "LabelFileOrUrl": "Datei oder URL", + "LabelFinish": "Fäerdeg", + "LabelFolder": "Dossier", + "LabelFont": "Schrëft", + "LabelForgotPasswordUsernameHelp": "Hëllef zum Passwuertvergiesse (Benotzernumm)", + "LabelFormat": "Format", + "LabelFriendlyName": "Benotzerfrëndlechen Numm", + "LabelGroupMoviesIntoCollections": "Filmer an Kollektiounen gruppéieren", + "LabelGroupMoviesIntoCollectionsHelp": "Hëllef zum Gruppéieren vu Filmer an Kollektiounen", + "LabelH264Crf": "H.264 CRF", + "LabelH265Crf": "H.265 CRF", + "LabelHardwareAccelerationType": "Typ vu Hardware-Beschleunegung", + "LabelHardwareAccelerationTypeHelp": "Hëllef zum Typ vu Hardware-Beschleunegung", + "LabelHardwareEncoding": "Hardware-Codéierung", + "LabelHomeNetworkQuality": "Qualitéit vum Heem-Netzwierk", + "LabelHomeScreenSectionValue": "Rubrik um Heem-Écran", + "LabelHttpsPort": "HTTPS Port", + "LabelHttpsPortHelp": "Hëllef zum HTTPS Port", + "LabelImageFetchersHelp": "Hëllef zu Bild-Fetchers", + "LabelImageType": "Bildtyp", + "LabelImportOnlyFavoriteChannels": "Just Favorittekänäle importéieren", + "LabelInstalled": "Installéiert", + "LabelInternetQuality": "Internet-Qualitéit", + "LabelIsForced": "Ass erzwongen", + "LabelIsSynced": "Ass gesynct", + "LabelKidsCategories": "Kanner-Kategorien", + "LabelKnownProxies": "Bekannte Proxien", + "LabelKodiMetadataDateFormat": "Kodi Metadaten Datumsformat", + "LabelKodiMetadataDateFormatHelp": "Hëllef zum Kodi Metadaten Datumsformat", + "LabelKodiMetadataEnableExtraThumbs": "Zousätzlech Miniaturen aktivéieren", + "LabelKodiMetadataEnableExtraThumbsHelp": "Hëllef zur Aktivéierung vu zousätzleche Miniaturen", + "LabelKodiMetadataEnablePathSubstitution": "Path Substitution aktivéieren", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Hëllef zur Kodi Path Substitution", + "LabelKodiMetadataSaveImagePaths": "Bildcheminen späicheren", + "LabelKodiMetadataSaveImagePathsHelp": "Hëllef zum Späichere vu Bildcheminen", + "LabelKodiMetadataUser": "Kodi Metadaten-Benotzer", + "LabelKodiMetadataUserHelp": "Hëllef zum Kodi Metadaten-Benotzer", + "LabelLanguage": "Sprooch", + "LabelLanNetworks": "LAN-Netzwierker", + "LabelLevel": "Niveau", + "LabelLibraryPageSize": "Gréisst pro Bibliothéik-Säit", + "LabelLibraryPageSizeHelp": "Hëllef zur Gréisst pro Bibliothéik-Säit", + "LabelMaxDaysForNextUp": "Max Deeg für Next Up", + "LabelMaxDaysForNextUpHelp": "Hëllef zum Max Deeg für Next Up", + "LabelMaxVideoResolution": "Maximal Video-Opléisung", + "LabelMediaDetails": "Mediadetailer", + "LabelMediaSegmentProviders": "Medien-Segment-Provideren", + "LabelMediaSegmentsType": "Typ vu Medie-Segmenter", + "LabelLineup": "Lineup", + "LabelLocalCustomCss": "Lokal Benotzerdefinéiert CSS", + "LabelLocalHttpServerPortNumber": "Portnummer vum lokale HTTP-Server", + "LabelLocalHttpServerPortNumberHelp": "Hëllef zur lokaler HTTP-Portnummer", + "LabelLockItemToPreventChanges": "Element spären, ëm Ännerunge ze verhënneren", + "LabelLoginDisclaimer": "Login Disclaimer", + "LabelLoginDisclaimerHelp": "Hëllef zum Login Disclaimer", + "LabelLogs": "Log-Dateien", + "LabelLyricDownloaders": "Lyric Downloaders", + "LabelMaxAudiobookResume": "Max Audiobook Resume", + "LabelMaxAudiobookResumeHelp": "Hëllef zum Max Audiobook Resume", + "LabelMaxBackdropsPerItem": "Max Backdrops pro Element", + "LabelMaxChromecastBitrate": "Max Chromecast Bitrate", + "LabelMaxMuxingQueueSize": "Max Muxing Queue Gréisst", + "LabelMaxMuxingQueueSizeHelp": "Hëllef zur Max Muxing Queue Gréisst", + "LabelMaxParentalRating": "Max Elterenbewäertung", + "LabelMaxResumePercentage": "Max Resume Prozentsaatz", + "LabelMaxResumePercentageHelp": "Hëllef zum Max Resume Prozentsaatz", + "LabelMessageText": "Noriichtentext", + "LabelMessageTitle": "Noriichtentitel", + "LabelMetadata": "Metadaten", + "LabelMetadataDownloadersHelp": "Hëllef zu Metadaten Downloaders", + "LabelMetadataDownloadLanguage": "Metadaten Download-Sprooch", + "LabelMetadataPathHelp": "Hëllef zum Metadate Chemin", + "LabelMetadataReaders": "Metadaten Lesers", + "LabelMetadataReadersHelp": "Hëllef zu Metadaten Lesers", + "LabelMetadataSavers": "Metadaten Späicherer", + "LabelMetadataSaversHelp": "Hëllef zu Metadaten Späicherer", + "LabelMinAudiobookResume": "Min Audiobook Resume", + "LabelMinAudiobookResumeHelp": "Hëllef zum Min Audiobook Resume", + "LabelMinBackdropDownloadWidth": "Minimal Download-Breet vum Hannergrond", + "LabelMinResumeDuration": "Minimal Dauer zum Weiderkucken (Resume)", + "LabelMinResumeDurationHelp": "Hëllef zur minimaler Resume-Dauer", + "LabelMinResumePercentage": "Minimal Resume Prozentsaatz", + "LabelMinResumePercentageHelp": "Hëllef zum minimalen Resume Prozentsaatz", + "LabelMovieCategories": "Film-Kategorien", + "LabelMoviePrefix": "Film-Präfix", + "LabelMoviePrefixHelp": "Hëllef zum Film-Präfix", + "LabelMovieRecordingPath": "Film Opnam-Chemin", + "LabelName": "Numm", + "LabelNewName": "Neien Numm", + "LabelNewPassword": "Neit Passwuert", + "LabelNewPasswordConfirm": "Neit Passwuert bestätegen", + "LabelNewsCategories": "Noriichten-Kategorien", + "LabelNoChangelog": "Keng Ännerungs-Log verfügbar", + "LabelNumber": "Nummer", + "LabelNumberOfGuideDays": "Zuel vu Guide-Deeg", + "LabelNumberOfGuideDaysHelp": "Hëllef zur Zuel vu Guide-Deeg", + "LabelOpenclDevice": "OpenCL-Gerät", + "LabelOpenclDeviceHelp": "Hëllef zum OpenCL-Gerät", + "LabelOptionalNetworkPath": "Optionalen Netzwierk-Chemin", + "LabelOptionalNetworkPathHelp": "Hëllef zum optionalen Netzwierk-Chemin", + "LabelOriginalName": "Original Numm", + "LabelOriginalTitle": "Original Titel", + "LabelOverview": "Iwwersiicht", + "LabelParallelImageEncodingLimit": "Limit vu paralleller Bildkodéierung", + "LabelParallelImageEncodingLimitHelp": "Hëllef zur Limit vu paralleller Bildkodéierung", + "LabelParentalRating": "Elterenbewäertung", + "LabelParentNumber": "Elterennummer", + "LabelPassword": "Passwuert", + "LabelPasswordConfirm": "Passwuert bestätegen", + "LabelPasswordRecoveryPinCode": "PIN-Code zur Passwuert-Wiederherstellung", + "LabelPasswordResetProvider": "Provider fürs Passwuert zerécksetzen", + "LabelPersonRole": "Persoun/Roll", + "LabelPersonRoleHelp": "Hëllef zur Persoun/Roll", + "LabelPlaceOfBirth": "Gebuertsort", + "LabelPlayDefaultAudioTrack": "Standard Audio-Streck spillen", + "LabelPlayer": "Player", + "LabelPlayerDimensions": "Player Dimensiounen", + "LabelPlaylist": "Playlëscht", + "LabelPlayMethod": "Wiedergabe-Methode", + "LabelPleaseRestart": "Start de Server w.e.g. erëm", + "LabelPostProcessor": "Post-Prozessor", + "LabelPostProcessorArguments": "Post-Prozessor-Argumenter", + "LabelPostProcessorArgumentsHelp": "Hëllef zu de Post-Prozessor-Argumenter", + "LabelPreferredDisplayLanguage": "Léiwe Affichagesprooch", + "LabelPreferredSubtitleLanguage": "Léiwe Sous-titre-Sprooch", + "LabelProfileContainer": "Profil-Container", + "LabelProtocol": "Protokoll", + "LabelPublicHttpPort": "Öffentleche HTTP-Port", + "LabelPublicHttpPortHelp": "Hëllef zum öffentlichen HTTP-Port", + "LabelPublicHttpsPort": "Öffentleche HTTPS-Port", + "LabelPublishedServerUri": "Publizéierten Server-URI", + "LabelPublishedServerUriHelp": "Hëllef zum Publizéierten Server-URI", + "LabelQsvDevice": "QSV-Gerät", + "LabelQsvDeviceHelp": "Hëllef zum QSV-Gerät", + "LabelReasonForTranscoding": "Grond fürs Transkodéieren", + "LabelRecord": "Ophuelen", + "LabelRecordingPath": "Opnam-Chemin", + "LabelRecordingPathHelp": "Hëllef zum Opnam-Chemin", + "LabelRefreshMode": "Aktualiséierungsmodus", + "LabelReleaseDate": "Verëffentlechungsdatum", + "LabelRemoteClientBitrateLimit": "Bitrate-Limit fürs fjaerteg Gerät", + "LabelRemoteClientBitrateLimitHelp": "Hëllef zum Bitrate-Limit fürs fjaerteg Gerät", + "LabelRepository": "Repository", + "LabelRepositoryName": "Repository Numm", + "LabelRepositoryNameHelp": "Hëllef zum Repository Numm", + "LabelRepositoryUrl": "Repository-URL", + "LabelRepositoryUrlHelp": "Hëllef zur Repository-URL", + "LabelRequireHttps": "HTTPS erfuerderen", + "LabelRequireHttpsHelp": "Hëllef zum HTTPS erfuerderen", + "LabelRuntimeMinutes": "Lafzäit (Minutten)", + "LabelSaveLocalMetadata": "Lokal Metadaten späicheren", + "LabelSaveLocalMetadataHelp": "Hëllef zum Späicheren vu lokale Metadaten", + "LabelSaveTrickplayLocally": "Trickplay lokal späicheren", + "LabelSaveTrickplayLocallyHelp": "Hëllef zum Trickplay lokal späicheren", + "LabelScheduledTaskLastRan": "Leschte Kéier ausgeführt:", + "LabelScreensaver": "Ecran-Schléifer", + "LabelScreensaverTime": "Zäit fürs Ecran-Schléifer", + "LabelScreensaverTimeHelp": "Hëllef zur Écransléifer-Zäit", + "LabelSeasonNumber": "Nummer von der Staffel", + "LabelSelectFolderGroups": "Dossier-Gruppen auswielen", + "LabelSelectFolderGroupsHelp": "Hëllef zu Dossier-Gruppen auswielen", + "LabelSelectVersionToInstall": "Versioun auswielen zum Installéieren", + "LabelSeriesRecordingPath": "Série-Opnam-Chemin", + "LabelServerHostHelp": "Hëllef zum Server Host", + "LabelServerName": "Server Numm", + "LabelServerNameHelp": "Hëllef zum Server Numm", + "LabelServerVersion": "Server Versioun", + "LabelSimultaneousConnectionLimit": "Limit vu gläichzäitege Verbindunge", + "LabelSize": "Gréisst", + "LabelSkipBackLength": "Skip-zréck Längt", + "LabelSkipForwardLength": "Skip-weiter Längt", + "LabelSkipIfAudioTrackPresent": "Skip, wann Audio-Streck präsent", + "LabelSkipIfAudioTrackPresentHelp": "Hëllef zum Skip, wann eng Audio-Streck präsent ass", + "LabelSkipIfGraphicalSubsPresent": "Skip, wann grafesch Sous-titres präsent sinn", + "LabelSkipIfGraphicalSubsPresentHelp": "Hëllef zum Skip, wann grafesch Sous-titres präsent sinn", + "LabelSlowResponseEnabled": "Langsam Äntwert aktivéiert", + "LabelSlowResponseTime": "Langsam Äntwert Zäitraum", + "LabelSortBy": "Zortéieren no", + "LabelSortName": "Zortéier-Numm", + "LabelSortOrder": "Zortéieruerdnung", + "LabelSortTitle": "Zortéier-Titel", + "LabelSource": "Quell", + "LabelSpecialSeasonsDisplayName": "Afleeë-Numm für Special-Seasons", + "LabelSportsCategories": "Sports-Kategorien", + "LabelStable": "Stabil", + "LabelStartWhenPossible": "Ufänken, wann et méiglech ass", + "LabelStatus": "Status", + "LabelStopping": "Am Anhale", + "LabelStopWhenPossible": "Anhalen, wann et méiglech ass", + "LabelStreamType": "Stroum-Typ", + "LabelSubtitleDownloaders": "Sous-titre Downloaders", + "LabelSubtitlePlaybackMode": "Sous-titre Wiedergabe-Modus", + "LabelSubtitleStyling": "Sous-titre-Styl", + "LabelSubtitleVerticalPosition": "Vertikal Positioun vum Sous-titre", + "LabelSyncPlayAccess": "SyncPlay Zougang", + "LabelSyncPlayAccessCreateAndJoinGroups": "Gruppen erstellen a joinen", + "LabelSyncPlayAccessJoinGroups": "Gruppen joinen", + "LabelSyncPlayAccessNone": "Keng Erlaabnis", + "LabelSyncPlayHaltPlayback": "SyncPlay: Wiedergabe stoppen", + "LabelSyncPlayHaltPlaybackDescription": "Erméiglecht et dem Host d'Wiedergabe komplett ze stoppen", + "LabelSyncPlayLeaveGroup": "SyncPlay: Grupp verlossen", + "LabelSyncPlayLeaveGroupDescription": "Erméiglecht et dem Benotzer d'Grupp ze verlossen", + "LabelSyncPlayNewGroup": "SyncPlay: Nei Grupp", + "LabelSyncPlayNewGroupDescription": "Erméiglecht et dem Benotzer eng nei Grupp ze kreéieren", + "LabelSyncPlayNoGroups": "Keng Gruppe verfügbar", + "LabelSyncPlayPlaybackDiff": "Wiedergabe-Differenz", + "LabelSyncPlayResumePlayback": "SyncPlay: Wiedergabe weiderféieren", + "LabelSyncPlayResumePlaybackDescription": "Erméiglecht dem Host d'Wiedergabe weiderzeféieren", + "LabelSyncPlaySyncMethod": "SyncPlay Sync-Methode", + "LabelSyncPlayTimeSyncOffset": "SyncPlay: Zäitsync-Offset", + "LabelSyncPlaySettingsDescription": "Allgemeng SyncPlay Astellungen", + "LabelSyncPlaySettingsExtraTimeOffset": "Zousätzlech Zäiteversaz", + "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Hëllef zum Zousätzleche Zäiteversaz", + "LabelSyncPlaySettingsSyncCorrection": "Sync-Korrektur", + "LabelSyncPlaySettingsSyncCorrectionHelp": "Hëllef zur Sync-Korrektur", + "LabelSyncPlaySettingsMinDelaySpeedToSync": "Min Delay/Speed zum Sync", + "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Hëllef zum Minimum Delay/Speed zum Sync", + "LabelSyncPlaySettingsMaxDelaySpeedToSync": "Max Delay/Speed zum Sync", + "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Hëllef zum Maximum Delay/Speed zum Sync", + "LabelSyncPlaySettingsSpeedToSyncDuration": "Dauer vu Speed/Delay zum Sync", + "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Hëllef zur Dauer vu Speed/Delay zum Sync", + "LabelSyncPlaySettingsMinDelaySkipToSync": "Minimum Delay-Skip zum Sync", + "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Hëllef zum Minimum Delay-Skip zum Sync", + "LabelSyncPlaySettingsSpeedToSync": "Vitesse zum Sync", + "LabelSyncPlaySettingsSpeedToSyncHelp": "Hëllef zur Vitesse zum Sync", + "LabelSyncPlaySettingsSkipToSync": "Skip zum Sync", + "LabelSyncPlaySettingsSkipToSyncHelp": "Hëllef zum Skip zum Sync", + "LabelSystem": "System", + "LabelTag": "Tag", + "LabelTagline": "Tagline", + "LabelTextBackgroundColor": "Hannergrondfaarf vum Text", + "LabelTextColor": "Textfaarf", + "LabelTextSize": "Gréisst vum Text", + "LabelTextWeight": "Textgewicht", + "Bold": "Fett", + "LabelTheme": "Thema", + "LabelTime": "Zäit", + "LabelTimeLimitHours": "Zäitableuf (Stonnen)", + "LabelTitle": "Titel", + "LabelTonemappingAlgorithm": "Tonemapping-Algorithmus", + "LabelTonemappingDesat": "Desaturatioun", + "LabelTonemappingDesatHelp": "Hëllef zur Desaturatioun", + "LabelTonemappingParam": "Tonemapping-Parameter", + "LabelTonemappingParamHelp": "Hëllef zum Tonemapping-Parameter", + "LabelTonemappingPeak": "Tonemapping-Peak", + "LabelTonemappingPeakHelp": "Hëllef zum Tonemapping-Peak", + "LabelTonemappingRange": "Tonemapping-Gamme", + "LabelTrackNumber": "Titelnummer", + "LabelTranscodePath": "Transcode-Chemin", + "LabelTranscodes": "Transcodes", + "LabelTranscodingFramerate": "Transcode-Biller pro Sekonn", + "LabelTranscodingProgress": "Transcoding-Fortschrëtt", + "LabelTranscodingTempPathHelp": "Hëllef zum temporäre Transcoding-Chemin", + "LabelTranscodingThreadCount": "Transcoding-Thread-Zuel", + "LabelTranscodingThreadCountHelp": "Hëllef zur Transcoding-Thread-Zuel", + "LabelTriggerType": "Ausléiser-Typ", + "LabelTunerIpAddress": "Tuner IP-Adress", + "LabelTunerType": "Tuner-Typ", + "LabelTVHomeScreen": "TV-Heem-Écran", + "LabelTypeMetadataDownloaders": "Typ Metadaten-Downloaders", + "LabelTypeText": "Typ: Text", + "LabelUnstable": "Instabil", + "LabelUser": "Benotzer", + "LabelUserAgent": "Benotzer-Agent", + "LabelUserLoginAttemptsBeforeLockout": "Loginversich innan de Benotzer gespärt gëtt", + "LabelUserMaxActiveSessions": "Max aktiv Sessiounen pro Benotzer", + "LabelUsername": "Benotzernumm", + "LabelUserRemoteClientBitrateLimitHelp": "Hëllef zum Fjäerteg Bitrate-Limit pro Benotzer", + "LabelVaapiDevice": "VAAPI-Gerät", + "LabelVaapiDeviceHelp": "Hëllef zum VAAPI-Gerät", + "LabelValue": "Wäert", + "LabelVersion": "Versioun", + "LabelVersionInstalled": "Installéiert Versioun", + "LabelVideoBitrate": "Video Bitrate", + "LabelVideoCodec": "Video-Codec", + "LabelVideoRange": "Video-Gamme", + "LabelVideoResolution": "Video-Opléisung", + "LabelSelectPreferredTranscodeVideoCodec": "Léiwe Transcode-Video-Codec auswielen", + "LabelWeb": "Web", + "LabelYoureDone": "Dir sidd fäerdeg", + "LabelZipCode": "Postleitzuel", + "LanNetworksHelp": "Hëllef zu LAN-Netzwierker", + "Large": "Grouss", + "Larger": "Méi Grouss", + "LastSeen": "Leschte Kéier gesinn", + "LatestFromLibrary": "Dat Neist aus der Bibliothéik", + "LearnHowYouCanContribute": "Léier, wéi s du konnt hëllefen", + "Letterer": "Letterer", + "LibraryAccessHelp": "Hëllef zum Zougang zu der Bibliothéik", + "LibraryScanFanoutConcurrency": "Konkurrenz beim Bibliothéik-Scan (Fanout)", + "LibraryScanFanoutConcurrencyHelp": "Hëllef zur Paralleliséierung (Fanout) beim Bibliothéik-Scan", + "LibraryInvalidItemIdError": "Ongülteg Item ID an der Bibliothéik", + "LimitSupportedVideoResolution": "Maximal erlaabt Video-Opléisung", + "LimitSupportedVideoResolutionHelp": "Hëllef zur limitéierter erlaabter Video-Opléisung", + "List": "Lëscht", + "ListView": "Lëscht Vue", + "ListPaging": "Lëscht Paginatioun", + "Live": "Live", + "LiveBroadcasts": "Live Emissiounen", + "LiveTV": "Live TV", + "Localization": "Lokalisatioun", + "LogLevel.Trace": "Spuer", + "LogLevel.Debug": "Debug", + "LogLevel.Information": "Informatiounen", + "LogLevel.Warning": "Warnung", + "LogLevel.Error": "Feeler", + "LogLevel.Critical": "Kriteschen", + "LogLevel.None": "Keng", + "Logo": "Logo", + "LogoScreensaver": "Logo Écran-Schléifer", + "Lyric": "Liddentext", + "Lyricist": "Texter", + "Lyrics": "Songtexte", + "LyricDownloadersHelp": "Hëllef zum Erofluede vu Songtexter", + "ManageLibrary": "Bibliothéik verwalten", + "ManageRecording": "Opnam verwalten", + "MapChannels": "Kanäl zourodnen", + "MarkPlayed": "Als gekuckt markieren", + "MarkUnplayed": "Als ongekuckt markieren", + "MaxParentalRatingHelp": "Hëllef zur maximaler Elterenbewäertung", + "MediaInfoAnamorphic": "Anamorphesch", + "MediaInfoAspectRatio": "Aspect Ratio", + "MediaInfoBitDepth": "Bit-Tiefe", + "MediaInfoBitrate": "Bitrate", + "MediaInfoChannels": "Kanäl", + "MediaInfoCodec": "Codec", + "MediaInfoCodecTag": "Codec Tag", + "MediaInfoColorPrimaries": "Color Primaries", + "MediaInfoColorSpace": "Color Space", + "MediaInfoColorTransfer": "Color Transfer", + "MediaInfoContainer": "Container", + "MediaInfoDefault": "Standard", + "MediaInfoExternal": "Extern", + "MediaInfoForced": "Erzwongen", + "MediaInfoFramerate": "Biller pro Sekonn", + "MediaInfoInterlaced": "Interlaced", + "MediaInfoLanguage": "Sprooch", + "MediaInfoLayout": "Layout", + "MediaInfoLevel": "Niveau (Level)", + "MediaInfoPath": "Chemin", + "MediaInfoPixelFormat": "Pixelformat", + "MediaInfoProfile": "Profil", + "MediaInfoRefFrames": "Ref. Biller (Frames)", + "MediaInfoResolution": "Opléisung", + "MediaInfoRotation": "Rotatioun", + "MediaInfoSampleRate": "Sampleraate", + "MediaInfoSize": "Gréisst", + "MediaInfoTimestamp": "Zäitemstempel", + "MediaInfoTitle": "Titel", + "MediaInfoVideoRange": "Video-Gamme", + "MediaIsBeingConverted": "Medien gëtt konvertéiert", + "MediaSegmentAction.None": "Näischt", + "MediaSegmentAction.AskToSkip": "Froen ob iwwersprangen", + "MediaSegmentAction.Skip": "Iwwersprangen", + "MediaSegmentProvidersHelp": "Hëllef zu Medien-Segment-Provideren", + "MediaSegmentSkipPrompt": "Soll dëst Segment iwwersprongen ginn?", + "MediaSegmentType.Commercial": "Reklamm", + "MediaSegmentType.Intro": "Intro", + "MediaSegmentType.Outro": "Outro", + "MediaSegmentType.Preview": "Prévisioun", + "MediaSegmentType.Recap": "Zesummefaassung", + "MenuOpen": "Menü opmaachen", + "MenuClose": "Menü zoumaachen", + "MessageAddRepository": "Wëllt Dir dëse Repository derbäisetzen?", + "MessageAreYouSureDeleteSubtitles": "Sidd Dir sécher, datt Dir dës Sous-titres läsche wëllt?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Sidd Dir sécher, datt Dir dëse Medie-Dossier ewechhuele wëllt?", + "MessageCancelSeriesTimerError": "Feeler beim Opbriechen vum Série-Timer", + "MessageCancelTimerError": "Feeler beim Opbriechen vum Timer", + "MessageChangeRecordingPath": "Opnam-Chemin änneren", + "MessageConfirmAppExit": "Sidd Dir sécher, datt Dir d'App beendegen wëllt?", + "MessageConfirmDeleteGuideProvider": "Sidd Dir sécher, datt Dir de Guide Provider läsche wëllt?", + "MessageConfirmDeleteTunerDevice": "Sidd Dir sécher, datt Dir d'Tuner-Gerät läsche wëllt?", + "MessageConfirmRecordingCancellation": "Sidd Dir sécher, datt Dir dës Opnam opbrieche wëllt?", + "MessageConfirmRemoveMediaLocation": "Sidd Dir sécher, datt Dir dës Medie-Location ewechhuele wëllt?", + "MessageConfirmRestart": "Sidd Dir sécher, datt Dir de Server neustarten wëllt?", + "MessageConfirmRevokeApiKey": "Sidd Dir sécher, datt Dir dësen API-Schlëssel révoquéieren wëllt?", + "MessageConfirmShutdown": "Sidd Dir sécher, datt Dir de Server ausschalten wëllt?", + "MessageContactAdminToResetPassword": "Kontaktéiert wannechgelift den Admin, wann Dir Äert Passwuert zerécksetze wëllt.", + "MessageCreateAccountAt": "Erstellt e Kont op {0}", + "MessageDeleteTaskTrigger": "Sidd Dir sécher, datt Dir dës Aufgabetrigger läsche wëllt?", + "MessageDirectoryPickerBSDInstruction": "Gitt de BSD-Dossierpfad an.", + "MessageDirectoryPickerLinuxInstruction": "Gitt de Linux-Dossierpfad an.", + "MessageDownloadQueued": "Erofluede as an d'Waardeschlaang gesat ginn", + "MessageEnablingOptionLongerScans": "Dës Optioun aktivéieren kann d'Lieszäit verlängeren.", + "MessageFileReadError": "Feeler beim Liese vun der Datei", + "MessageForgotPasswordFileCreated": "Eng Passwuert-Wiederherstellungdatei gouf erstallt.", + "MessageForgotPasswordInNetworkRequired": "Dir musst Iech am selwechte Netzwierk befannen, fürs Passwuert zeréckzusetzen.", + "MessageGetInstalledPluginsError": "Feeler beim Erfaassen vun installéierte Plugins", + "MessageImageFileTypeAllowed": "Erlaabt Bildtyp: {0}", + "MessageImageTypeNotSelected": "Keng Bildtyp ausgewielt.", + "MessageInvalidForgotPasswordPin": "De PIN ass ongëlteg.", + "MessageInvalidUser": "Ongëltegen Benotzer.", + "MessageItemsAdded": "Elementer derbäigesat", + "MessageItemSaved": "Element gespäichert", + "MessageLeaveEmptyToInherit": "Loosst eidel, wann Dir d'Adaptatioun verierwen wëllt", + "MessageNoItemsAvailable": "Keng Elementer verfügbar", + "MessageNoFavoritesAvailable": "Keng Favoritten verfügbar", + "MessageNoAvailablePlugins": "Keng verfügbar Plugins", + "MessageNoCollectionsAvailable": "Keng Kollektiounen verfügbar", + "MessageNoGenresAvailable": "Keng Generen verfügbar", + "MessageNoMovieSuggestionsAvailable": "Keng Filmproposen verfügbar", + "MessageNoNextUpItems": "Keng Next-Up Elementer verfügbar", + "MessageNoPluginConfiguration": "Keng Plugin-Konfiguratioun verfügbar", + "MessageNoPluginsInstalled": "Keng Plugins installéiert", + "MessageNoRepositories": "Keng Repositories verfügbar", + "MessageNoServersAvailable": "Keng Serveren verfügbar", + "MessageNothingHere": "Näischt hei", + "MessageNoTrailersFound": "Keng Trailers fonnt", + "MessagePasswordResetForUsers": "D'Passwierder goufen zeréckgesat", + "MessagePlayAccessRestricted": "Zougang zur Wiedergabe ass limitéiert", + "MessagePleaseEnsureInternetMetadata": "Gitt w.e.g. sécher, datt d'Internet-Metadaten aktiviert sinn", + "MessagePluginConfigurationRequiresLocalAccess": "D'Plugin-Konfiguratioun erfuerdert lokalen Zougang", + "MessagePluginInstallDisclaimer": "Duerch d'Installéiere vum Plugin akzeptéiert Dir d'Konditiounen vum Drëttanbieter", + "MessagePluginInstalled": "Plugin installéiert", + "MessagePluginInstallError": "Feeler beim Installéiere vum Plugin", + "MessageReenableUser": "Benotzer erëm aktivéieren", + "MessageRenameMediaFolder": "Medien-Dossier ëmbenennen", + "MessageRepositoryInstallDisclaimer": "Dir akzeptéiert d'Konditiounen vum Repository bei der Installatioun", + "MessageSent": "Noriicht geschéckt", + "MessageSplitVersionsError": "Feeler beim Deelen vu Versiounen", + "MessageSyncPlayCreateGroupDenied": "Erstellung vun der SyncPlay-Gruppe verweigert", + "MessageSyncPlayDisabled": "SyncPlay ass deaktivéiert", + "MessageSyncPlayEnabled": "SyncPlay ass aktivéiert", + "MessageSyncPlayErrorAccessingGroups": "Feeler beim Zougang zu SyncPlay-Gruppen", + "MessageSyncPlayErrorMedia": "SyncPlay-Feeler: Mediendatei", + "MessageSyncPlayErrorMissingSession": "SyncPlay-Feeler: Sessioun fehlt", + "MessageSyncPlayErrorNoActivePlayer": "SyncPlay-Feeler: Keng aktiv Wiedergabe", + "MessageSyncPlayGroupDoesNotExist": "SyncPlay-Grupp existéiert net méi", + "MessageSyncPlayGroupWait": "Waardet op d'Grupp", + "MessageSyncPlayIsDisabled": "SyncPlay ass deaktivéiert", + "MessageSyncPlayJoinGroupDenied": "Grupp beitreten verweigert", + "MessageSyncPlayLibraryAccessDenied": "Zougang zur SyncPlay-Bibliothéik verweigert", + "MessageSyncPlayNoGroupsAvailable": "Keng SyncPlay-Gruppen verfügbar", + "MessageSyncPlayPlaybackPermissionRequired": "Erlaabnis zur Wiedergabe ass erfuerdert", + "MessageSyncPlayUserJoined": "{0} ass der Grupp bäigetrueden", + "MessageSyncPlayUserLeft": "{0} huet d'Grupp verlossen", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Dës Location gëtt aus der Bibliothéik ewechgeholl:", + "MessageUnableToConnectToServer": "Kann net mam Server verbannen", + "MessageUnauthorizedUser": "Benotzer huet keng Autorisatioun", + "MessageUnsetContentHelp": "Hëllef zum Ausstellungen vun Inhaltstyp", + "MetadataManager": "Metadate-Manager", + "MetadataSettingChangeHelp": "Hëllef zu Ännerunge vu Metadate-Astellungen", + "MillisecondsUnit": "Millisekonnen", + "MinutesAfter": "Minutten nodeems", + "MinutesBefore": "Minutten ier", + "MixedMoviesShows": "Gemëscht Filmer & Serien", + "Mixer": "Mixer", + "Mobile": "Mobil", + "Monday": "Méindeg", + "MoreFromValue": "Méi vu {0}", + "MoreMediaInfo": "Méi Medieninfo", + "MoreUsersCanBeAddedLater": "Méi Benotzer kënne spéider derbäigesat ginn", + "MoveLeft": "Réckele lénks", + "MoveRight": "Réckele riets", + "MoveToBottom": "An d'Enn réckelen", + "MoveToTop": "Un Ufang réckelen", + "Movie": "Film", + "MovieLibraryHelp": "Hëllef zur Film-Bibliothéik", + "Movies": "Filmer", + "MoviesAndShows": "Filmer & Serien", + "MusicAlbum": "Museksalbum", + "MusicArtist": "Musekskënschtler", + "MusicLibraryHelp": "Hëllef zur Museks-Bibliothéik", + "MusicVideo": "Museksvideo", + "MusicVideos": "Museksvideoen", + "Mute": "Stommen", + "MySubtitles": "Meng Sous-titres", + "Native": "Natierlech", + "NativeSubtitleStylingHelp": "Hëllef zum natierleche Sous-titre-Styl", + "Never": "Niemols", + "New": "Nei", + "NewCollection": "Nei Kollektioun", + "NewCollectionHelp": "Hëllef zur neier Kollektioun", + "NewCollectionNameExample": "Beispill: \"MengLieblingsKollektioun\"", + "NewEpisodes": "Nei Episoden", + "NewEpisodesOnly": "Just nei Episoden", + "News": "Noriichten", + "Next": "Nächst", + "NextChapter": "Nächst Kapitel", + "NextTrack": "Nächst Titel", + "NextUp": "Next Up", + "No": "Neen", + "NoCreatedLibraries": "Keng erstallte Bibliothéiken", + "NoLyricsSearchResultsFound": "Keng Songtexter fonnt", + "None": "Keng", + "NoNewDevicesFound": "Keng nei Geräter fonnt", + "NoSubtitleSearchResultsFound": "Keng Sous-titres fonnt", + "NoSubtitlesHelp": "Keng Sous-titres – Hëllef an d'Astellungen kontrolléieren", + "NumLocationsValue": "Zuel vu Locations", + "Off": "Aus", + "OnApplicationStartup": "Beim Start vum Programm", + "OneChannel": "Een Kanal", + "OnlyForcedSubtitles": "Just erzwongen Sous-titres", + "OnlyForcedSubtitlesHelp": "Hëllef zu just erzwongen Sous-titres", + "OnlyImageFormats": "Just Bildformaten erlaabt", + "OnWakeFromSleep": "Beim Erwächen aus dem Sleep-Modus", + "Option3D": "3D-Optioun", + "OptionAllowAudioPlaybackTranscoding": "Erlaabt Audio Wiedergabe Transkodéierung", + "OptionAllowBrowsingLiveTv": "Erlaabt d'Duerchbliedere vu Live TV", + "OptionAllowContentDownload": "Erlaabt d'Erofluede vun Inhalter", + "OptionAllowContentDownloadHelp": "Hëllef zum Erlaaben d'Erofluede vun Inhalter", + "OptionAllowLinkSharing": "Erlaabt Link-Deelen", + "OptionAllowLinkSharingHelp": "Hëllef zum Deelen vu Links", + "OptionAllowManageLiveTv": "Erlaabt d'Verwaltung vu Live TV", + "OptionAllowMediaPlayback": "Erlaabt d'Media Wiedergabe", + "OptionAllowMediaPlaybackTranscodingHelp": "Hëllef zum Transkodéiere vu Media Wiedergabe", + "OptionAllowRemoteControlOthers": "Erlaabt fjaerteg Steierung vu anere Geräter", + "OptionAllowRemoteSharedDevices": "Erlaabt de Gebrauch vu remoto-partagéierte Geräter", + "OptionAllowRemoteSharedDevicesHelp": "Hëllef zum Gebrauch vu remoto-partagéierte Geräter", + "OptionAllowSyncTranscoding": "Erlaabt Sync-Transkodéierung", + "OptionAllowUserToManageServer": "Erlaabt dem Benotzer de Server ze verwalten", + "OptionAllowVideoPlaybackRemuxing": "Erlaabt Video Wiedergabe Remuxing", + "OptionAllowVideoPlaybackTranscoding": "Erlaabt Video Wiedergabe Transkodéierung", + "OptionAutomaticallyGroupSeries": "Sérien automatesch gruppéieren", + "OptionAutomaticallyGroupSeriesHelp": "Hëllef zum automatesche Gruppéiere vu Sérien", + "OptionCommunityRating": "Communautéitsbewäertung", + "OptionCriticRating": "Kritikerbewäertung", + "OptionDaily": "All Dag", + "OptionDateAdded": "Datum derbäigesat", + "OptionDateEpisodeAdded": "Datum derbäigesat (Episode)", + "OptionDateShowAdded": "Datum derbäigesat (Série/Show)", + "OptionDateAddedFileTime": "Datum derbäigesat uhand dem Datei-Zeitstempel", + "OptionDateAddedImportTime": "Datum derbäigesat uhand der Import-Zeit", + "OptionDatePlayed": "Datum gespillt", + "OptionDisableUser": "Benotzer deaktivéieren", + "OptionDisableUserHelp": "Hëllef zum Deaktivéiere vum Benotzer", + "OptionDisplayFolderViewHelp": "Hëllef zur Ordner Vue affichéieren", + "OptionEnableAccessFromAllDevices": "Zougang vu alle Geräter erlaaben", + "OptionEnableAccessToAllChannels": "Zougang zu alle Kanäl erlaaben", + "OptionEnableAccessToAllLibraries": "Zougang zu alle Bibliothéiken erlaaben", + "OptionEnableExternalContentInSuggestions": "Externe Inhalt an de Proposen erlaaben", + "OptionEnableExternalContentInSuggestionsHelp": "Hëllef zum Erlaaben vu externem Inhalt an de Proposen", + "OptionEnableForAllTuners": "Erlaaben für all Tuner", + "OptionEveryday": "All Dag", + "OptionExtractChapterImage": "Kapitel-Bild extrahéieren", + "OptionForceRemoteSourceTranscoding": "Erzwéng Remote-Quell-Transkodéierung", + "OptionHasThemeSong": "Huet en Theme-Song", + "OptionHideUser": "Benotzer verstoppen", + "OptionHideUserFromLoginHelp": "Hëllef zum Verstoppe vum Benotzer beim Loginécran", + "OptionIsHD": "Ass HD", + "OptionIsSD": "Ass SD", + "OptionLoginAttemptsBeforeLockout": "Versich ier d'Benotzerkont gespaart gëtt", + "OptionLoginAttemptsBeforeLockoutHelp": "Hëllef zu der Unzuel vu Versich ier gespaart gëtt", + "OptionMax": "Maximum", + "OptionMaxActiveSessions": "Max aktiv Sessiounen", + "OptionMaxActiveSessionsHelp": "Hëllef zum Max aktiv Sessiounen", + "OptionMissingEpisode": "Fehlend Episode", + "OptionNew": "Nei", + "OptionOnInterval": "All X Minutten/Stonnen", + "OptionPlayCount": "Spielzuel", + "OptionPremiereDate": "Première-Datum", + "OptionRandom": "Zoufälleg", + "OptionReleaseDate": "Verëffentlechungsdatum", + "OptionRequirePerfectSubtitleMatch": "Perfekt Sous-titre-Match erfuerdert", + "OptionRequirePerfectSubtitleMatchHelp": "Hëllef zum Perfekte Sous-titre-Match", + "OptionResumable": "Weiderguckbar", + "OptionSaveMetadataAsHidden": "Metadaten als verstoppt späicheren", + "OptionSaveMetadataAsHiddenHelp": "Hëllef zum Späicheren vu Metadaten als verstoppt", + "OptionSpecialEpisode": "Special Episode", + "OptionTrackName": "Titel-Numm", + "OptionTvdbRating": "TheTVDB-Bewäertung", + "OptionUnairedEpisode": "Net ausgestrahlte Episode", + "OptionWakeFromSleep": "Aus dem Sleep erwächen", + "OptionWeekdays": "Wochendeeg", + "OptionWeekends": "Weekend", + "OptionWeekly": "Wöchentlich", + "OriginalAirDate": "Original Ausstrahlungsdatum", + "OriginalAirDateValue": "Original Ausstrahlungsdatum: {0}", + "Other": "Anescht", + "OtherArtist": "Anere Kënschtler", + "Overview": "Iwwersiicht", + "PackageInstallCancelled": "Package-Installatioun anuléiert", + "PackageInstallCompleted": "Package-Installatioun ofgeschloss", + "PackageInstallFailed": "Package-Installatioun gescheitert", + "ParentalRating": "Elterenbewäertung", + "PasswordMatchError": "Passwierder sinn net identesch", + "PasswordRequiredForAdmin": "Ein Admin-Passwuert ass erfuerdert", + "PasswordResetComplete": "Passwuert erfolgreich zeréckgesat", + "PasswordResetConfirmation": "D'Passwuert gouf zeréckgesat", + "PasswordResetProviderHelp": "Hëllef zum Passwuert-Reset-Provider", + "PasswordMissingSaveError": "Passwuert fehlt, späicheren net méiglech", + "PasswordSaved": "Passwuert gespäichert", + "PathNotFound": "Chemin net fonnt", + "Penciller": "Zeener (Penciller)", + "People": "Leit", + "PerfectMatch": "Perfekte Match", + "Person": "Persoun", + "PersonRole": "Persoun/Roll", + "Photo": "Foto", + "Photos": "Fotoen", + "PictureInPicture": "Bild am Bild", + "PlaceFavoriteChannelsAtBeginning": "Favoritte-Kanäl am Ufank placéieren", + "Play": "Spillen", + "PlayAllFromHere": "Alles von hei spillen", + "PlaybackData": "Wiedergabe-Donnéeën", + "PlaybackError.ASS_RENDER_ERROR": "Feeler beim ASS-Renderen", + "PlaybackError.FATAL_HLS_ERROR": "Fatalen HLS-Feeler", + "PlaybackError.MEDIA_DECODE_ERROR": "Media-Dekodéierungsfeeler", + "PlaybackError.MEDIA_NOT_SUPPORTED": "Medien net unterstützt", + "PlaybackError.NETWORK_ERROR": "Netzwierkfeeler", + "PlaybackError.NO_MEDIA_ERROR": "Keng Mediendatei fonnt", + "PlaybackError.PLAYER_ERROR": "Wiedergabe-Feeler", + "PlaybackError.NotAllowed": "Net erlaabt", + "PlaybackError.RateLimitExceeded": "Rate-Limit iwwerschratt", + "PlaybackErrorNoCompatibleStream": "Keng kompatibel Stroum fonnt", + "PlaybackErrorPlaceHolder": "Feeler bei der Wiedergabe", + "PlaybackRate": "Wiedergabevitess", + "PlayCount": "Spillzuel", + "Played": "Gekuckt", + "PlayFromBeginning": "Vun Ufank u spillen", + "PlaylistError.AddFailed": "Fehler beim Derbäisetzen", + "PlaylistError.CreateFailed": "Fehler beim Erstellen", + "PlaylistError.UpdateFailed": "Fehler beim Aktualiséieren", + "PlaylistPublic": "Öffentlech Playlëscht", + "PlaylistPublicDescription": "Kann vu jidderengem agekuckt ginn", + "Playlists": "Playlëschten", + "PlayNext": "Nächst spillen", + "PlayNextEpisodeAutomatically": "Nächst Episode automatesch spillen", + "PleaseAddAtLeastOneFolder": "Füügt w.e.g. mindestens een Dossier derbäi", + "PleaseConfirmRepositoryInstallation": "Confirme d'Installatioun vum Repository", + "PleaseEnterNameOrId": "Gitt w.e.g. en Numm oder ID an", + "PleaseRestartServerName": "Start de {0} w.e.g. erëm", + "PleaseSelectTwoItems": "Wielt w.e.g. zwee Elementer aus", + "PluginDisableError": "Fehler beim Deaktivéiere vum Plugin", + "PluginEnableError": "Fehler beim Aktivéiere vum Plugin", + "PluginLoadConfigError": "Fehler beim Luede vun der Plugin-Konfiguratioun", + "PluginLoadRepoError": "Fehler beim Luede vum Repository", + "PluginUninstallError": "Fehler beim Deinstalléiere vum Plugin", + "Poster": "Affiche", + "PosterCard": "Affiche-Kaart", + "PreferEmbeddedEpisodeInfosOverFileNames": "Embeddéierten Episodeninfo anstatt Dateinumm bevorzugen", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Hëllef zum Bevorzugen vu embeddéierten Episodeninfo", + "PreferEmbeddedExtrasTitlesOverFileNames": "Embeddéierten Extras-Titel anstatt Dateinumm bevorzugen", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Hëllef zum Bevorzugen vu embeddéierten Extras-Titelen", + "PreferEmbeddedTitlesOverFileNames": "Embeddéierten Titel anstatt Dateinumm bevorzugen", + "PreferEmbeddedTitlesOverFileNamesHelp": "Hëllef zum Bevorzugen vum embeddéierten Titel", + "PreferNonstandardArtistsTag": "Net-Standard Kënschtler-Tag bevorzugen", + "PreferNonstandardArtistsTagHelp": "Hëllef zum Bevorzugen vu Net-Standard Kënschtler-Tags", + "AllowEmbeddedSubtitles": "Erlaabt embeddéierten Sous-titres", + "AllowEmbeddedSubtitlesAllowAllOption": "Alles erlaaben", + "AllowEmbeddedSubtitlesAllowNoneOption": "Näischt erlaaben", + "AllowEmbeddedSubtitlesAllowImageOption": "Grafesch Sous-titres erlaaben", + "AllowEmbeddedSubtitlesAllowTextOption": "Textuell Sous-titres erlaaben", + "Premiere": "Première", + "Premieres": "Premièren", + "Preview": "Prévisioun", + "PreviewLyrics": "Texter-Virschau", + "Previous": "Vireg", + "PreviousChapter": "Viregt Kapitel", + "PreviousTrack": "Viregt Titel", + "Primary": "Primär", + "Print": "Drécken", + "Producer": "Produzent", + "ProductionLocations": "Produktiounslokatioune", + "Profile": "Profil", + "Programs": "Programmer", + "Quality": "Qualitéit", + "QuickConnect": "QuickConnect", + "QuickConnectActivationSuccessful": "QuickConnect-Aktivéierung ass gelongen", + "QuickConnectAuthorizeCode": "QuickConnect-Autorisatiounscode", + "QuickConnectAuthorizeFail": "QuickConnect-Autorisatioun ass gescheitert", + "QuickConnectAuthorizeSuccess": "QuickConnect-Autorisatioun ass gelongen", + "QuickConnectDeactivated": "QuickConnect ass deaktivéiert", + "QuickConnectDescription": "Benotzt QuickConnect, ohne Portweiterleitungen ze konfiguréieren.", + "QuickConnectInvalidCode": "QuickConnect-Code ass ongëlteg", + "QuickConnectNotActive": "QuickConnect ass net aktiv", + "QuickConnectNotAvailable": "QuickConnect ass net verfügbar", + "Raised": "Héichgezunn", + "Rate": "Bewäerten", + "RecentlyWatched": "Rezent gekuckt", + "RecommendationBecauseYouLike": "Empfehlung well Dir {0} gären hutt", + "RecommendationBecauseYouWatched": "Empfehlung well Dir {0} gekuckt hutt", + "RecommendationDirectedBy": "Réaliséiert vum {0}", + "RecommendationStarring": "Mat {0} an der Haaptroll", + "Record": "Ophuelen", + "RecordingCancelled": "Opnam opgehale", + "Recordings": "Opnamen", + "RecordingScheduled": "Opnam geplangt", + "RecordSeries": "Série ophuelen", + "Refresh": "Aktualiséieren", + "RefreshDialogHelp": "Hëllef zum Aktualiséieren", + "RefreshMetadata": "Metadaten aktualiséieren", + "RefreshQueued": "Aktualiséierung an d'Waardeschlaang gesat", + "Regional": "Regiounen-bezunn", + "ReleaseDate": "Verëffentlechungsdatum", + "ReleaseGroup": "Verëffentleche Grupp", + "RememberAudioSelections": "Audio-Auswiel späicheren", + "RememberAudioSelectionsHelp": "Hëllef zum Späichere vun der Audio-Auswiel", + "RememberMe": "Angemellt bleiwen", + "RememberSubtitleSelections": "Sous-titre-Auswiel späicheren", + "RememberSubtitleSelectionsHelp": "Hëllef zum Späichere vun der Sous-titre-Auswiel", + "RemoveFromCollection": "Aus der Kollektioun ewechhuelen", + "RemoveFromPlaylist": "Aus der Playlëscht ewechhuelen", + "RenderPgsSubtitle": "PGS-Sous-titre renderer benotzen", + "RenderPgsSubtitleHelp": "Hëllef zum Renderen vu PGS-Sous-titres", + "Repeat": "Wiederhuelen", + "RepeatAll": "Alles wiederhuelen", + "RepeatEpisodes": "Episoden wiederhuelen", + "RepeatMode": "Wiederhuel-Modus", + "RepeatOne": "Een wiederhuelen", + "ReplaceAllMetadata": "All Metadaten ersetzen", + "ReplaceExistingImages": "Existéierend Biller ersetzen", + "ReplaceTrickplayImages": "Trickplay-Biller ersetzen", + "Reset": "Zerécksetzen", + "ResetPassword": "Passwuert zerécksetzen", + "ResolutionMatchSource": "Opléisung = Quell", + "Restart": "Neustarten", + "ResumeAt": "Weiderfueren bei {0}", + "Rewind": "Zréckspulen", + "Runtime": "Dauer", + "Saturday": "Samschdeg", + "Save": "Späicheren", + "SaveLyricsIntoMediaFolders": "Songtexter an d'Media-Dossieren späicheren", + "SaveLyricsIntoMediaFoldersHelp": "Hëllef zum Späicheren vu Songtexter an d'Media-Dossieren", + "SavePassword": "Passwuert späicheren", + "SaveRecordingNFO": "NFO-Datei für d'Opnam späicheren", + "SaveRecordingNFOHelp": "Hëllef zur NFO-Späicherung für d'Opnam", + "SaveRecordingImages": "Opnam-Biller späicheren", + "SaveRecordingImagesHelp": "Hëllef zum Späicheren vun Opnam-Biller", + "SaveSubtitlesIntoMediaFolders": "Sous-titres an d'Media-Dossieren späicheren", + "SaveSubtitlesIntoMediaFoldersHelp": "Hëllef zum Späicheren vu Sous-titres an d'Media-Dossieren", + "ScanForNewAndUpdatedFiles": "No neien & aktualiséierte Fichieren suchen", + "ScanLibrary": "Bibliothéik scannen", + "Schedule": "Planung", + "ScreenResolution": "Écran-Opléisung", + "Search": "Sichen", + "SearchForCollectionInternetMetadata": "No Kollektiouns-Internetmetadaten suchen", + "SearchForLyrics": "No Songtexter suchen", + "SearchForMissingMetadata": "No fehlende Metadaten suchen", + "SearchForSubtitles": "No Sous-titres suchen", + "SearchResults": "Sucherésultat", + "SearchResultsEmpty": "Keng Resultater", + "SecondarySubtitles": "Sekundär Sous-titres", + "SelectAdminUsername": "Wielt en Admin-Benotzernumm", + "SelectPreferredTranscodeVideoCodecHelp": "Hëllef zum Auswielen vum léiwe Transcode-Video-Codec", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Hëllef zum Auswielen vum léiwe Transcode-Video/Audio-Codec", + "SelectServer": "Server auswielen", + "SendMessage": "Noriicht schécken", + "Series": "Série", + "SeriesCancelled": "Série opgehale", + "SeriesDisplayOrderHelp": "Hëllef zur Afleeë-Reiefolleg vu Serienstaffelen a Episoden", + "SeriesRecordingScheduled": "Série-Opnam geplangt", + "SeriesSettings": "Série-Astellungen", + "SeriesYearToPresent": "{0} – Haut", + "ServerNameIsRestarting": "{0} gëtt restart", + "ServerNameIsShuttingDown": "{0} gëtt ausgemaach", + "ServerRestartNeededAfterPluginInstall": "En Neustart ass erfuerdert, nodeems e Plugin installéiert gouf", + "ServerUpdateNeeded": "De Server huet en Update noutwendeg", + "Settings": "Astellungen", + "SettingsSaved": "Astellungen gespäichert", + "SettingsWarning": "Warnung: Kontolléiert Astellungen", + "Share": "Deelen", + "ShowAdvancedSettings": "Erweidert Astellungen weisen", + "ShowIndicatorsFor": "Indicateuren weisen für", + "ShowLess": "Manner weisen", + "ShowMore": "Méi weisen", + "ShowParentImages": "Elteren-Biller weisen", + "Shows": "Shows", + "ShowTitle": "Showtitel", + "ShowYear": "Joer weisen", + "Shuffle": "Zoufälleg mëschen", + "SimultaneousConnectionLimitHelp": "Hëllef zur Limite vu gläichzäitege Verbindunge", + "SkipEpisodesAlreadyInMyLibrary": "Episoden iwwersprangen, déi ech scho besëtzen", + "SkipEpisodesAlreadyInMyLibraryHelp": "Hëllef zum Iwwersprangen von Episoden, déi scho in Ärer Bibliothéik sinn", + "Small": "Kleng", + "SmallCaps": "Keng Groossbuschtawen", + "Smaller": "Méi kleng", + "Smart": "Smart", + "SmartSubtitlesHelp": "Hëllef zu Smart Sous-titres", + "Songs": "Lidder", + "Sort": "Zortéieren", + "SortByValue": "Zortéieren no {0}", + "SortChannelsBy": "Kanäl zortéieren no", + "SortName": "Zortéiernumm", + "SpecialFeatures": "Spezialfeatures", + "Sports": "Sport", + "StereoDownmixAlgorithmHelp": "Hëllef zum Stereo-Downmix-Algorithmus", + "StoryArc": "Geschichtsbou", + "StopPlayback": "Wiedergabe anhalen", + "StopRecording": "Opnam anhalen", + "Studio": "Studio", + "Studios": "Studios", + "Subtitle": "Sous-titre", + "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Sous-titre Erschéngungsastellungen: Hierdie Astellungen gelten och für Cast-Geräter", + "SubtitleAppearanceSettingsDisclaimer": "Setzungen können je nach Plattform geréngfügig varieréieren", + "SubtitleBlack": "Schwaarz", + "SubtitleBlue": "Blo", + "SubtitleCyan": "Cyan", + "SubtitleDownloadersHelp": "Hëllef zu Sous-titre Downloaders", + "SubtitleGray": "Grau", + "SubtitleGreen": "Gréng", + "SubtitleLightGray": "Hellgrau", + "SubtitleMagenta": "Magenta", + "SubtitleOffset": "Sous-titre Offset", + "SubtitleRed": "Rout", + "Subtitles": "Sous-titres", + "SubtitleVerticalPositionHelp": "Hëllef zur vertikaler Positioun vu Sous-titres", + "SubtitleWhite": "Wäiss", + "SubtitleYellow": "Giel", + "Suggestions": "Proposen", + "Sunday": "Sonndeg", + "SyncPlayAccessHelp": "Hëllef zum SyncPlay-Zougang", + "SyncPlayGroupDefaultTitle": "Grupp", + "TabAccess": "Zougang", + "TabAdvanced": "Erweidert", + "TabCatalog": "Katalog", + "TabDashboard": "Dashboard", + "TabLatest": "Lescht", + "TabLogs": "Logs", + "TabMusic": "Musek", + "TabMyPlugins": "Meng Plugins", + "TabNetworking": "Netzwierk", + "TabNetworks": "Netzwierker", + "TabNfoSettings": "NFO-Astellungen", + "TabOther": "Anescht", + "TabParentalControl": "Elteren-Kontroll", + "TabPlugins": "Plugins", + "TabRepositories": "Repositories", + "TabScheduledTasks": "Zeitplang-Aufgaben", + "TabServer": "Server", + "TabStreaming": "Stréimen", + "TabUpcoming": "An Tour", + "TagsValue": "Tag-Wäerter", + "TellUsAboutYourself": "Erziel eis eppes iwwert Dich", + "TextSent": "Text geschéckt", + "ThemeSongs": "Themelidder", + "ThemeVideos": "Themevideoen", + "TheseSettingsAffectSubtitlesOnThisDevice": "Dës Astellungen hunn en Afloss op Sous-titres op dësem Gerät", + "ThisWizardWillGuideYou": "Dëse Wizard leet Iech duerch d'Konfiguratioun", + "Thumb": "Miniatur", + "ThumbCard": "Miniatur-Kaart", + "Thursday": "Donneschdeg", + "TitleHardwareAcceleration": "Hardware-Beschleunegung", + "TitleHostingSettings": "Hosting-Astellungen", + "TitlePlayback": "Wiedergabe", + "TonemappingAlgorithmHelp": "Hëllef zum Tonemapping-Algorithmus", + "TonemappingRangeHelp": "Hëllef zur Tonemapping-Gamme", + "Track": "Titel", + "TrackCount": "Titelzuel", + "Trailers": "Bande-annonce", + "Transcoding": "Transkodéierung", + "Translator": "Iwwersetzer", + "Tuesday": "Dënschdeg", + "TV": "TV", + "TvLibraryHelp": "Hëllef zur TV-Bibliothéik", + "TypeOptionPluralAudio": "Audio-Dateien", + "TypeOptionPluralBook": "Bicher", + "TypeOptionPluralBoxSet": "Box-Set", + "TypeOptionPluralEpisode": "Episoden", + "TypeOptionPluralMovie": "Filmer", + "TypeOptionPluralMusicAlbum": "Museksalben", + "TypeOptionPluralMusicArtist": "Musekskënschtler", + "TypeOptionPluralMusicVideo": "Museksvideoen", + "TypeOptionPluralSeason": "Staffelen", + "TypeOptionPluralSeries": "Sérien", + "TypeOptionPluralVideo": "Videoen", + "Typewriter": "Maschinneschrëft", + "Uniform": "Uniform", + "UninstallPluginConfirmation": "Sidd Dir sécher, datt Dir de Plugin deinstalléieren wëllt?", + "UnknownError": "Onbekannte Feeler", + "Unmute": "Enthalen", + "Unplayed": "Net gekuckt", + "Unrated": "Ouni Bewäertung", + "UnsupportedPlayback": "Wiedergabe gëtt net ënnerstëtzt", + "Up": "Rauf", + "Upload": "Eroplueden", + "UseCustomTagDelimiters": "Benotzerdefinéiert Tag-Delimiters benotzen", + "UseCustomTagDelimitersHelp": "Hëllef zum Benotze vu benotzerdefinéierten Tag-Delimiters", + "UseDoubleRateDeinterlacing": "Double-Rate Deinterlacing benotzen", + "UseDoubleRateDeinterlacingHelp": "Hëllef zum Double-Rate Deinterlacing", + "UseEpisodeImagesInNextUp": "Episode-Biller am Next Up benotzen", + "UseEpisodeImagesInNextUpHelp": "Hëllef zum Benotze vun Episode-Biller am Next Up", + "UserAgentHelp": "Hëllef zum Benotzer-Agent", + "UserMenu": "Benotzer-Menü", + "UserProfilesIntro": "Erstellt an ännert méi Benotzerprofiler", + "ValueAlbumCount": "Zuel vun Alben", + "ValueDiscNumber": "Disksnummer", + "ValueEpisodeCount": "Zuel vun Episoden", + "ValueMinutes": "Minutten", + "ValueMovieCount": "Filmzuel", + "ValueMusicVideoCount": "Museksvideoenzuel", + "ValueOneAlbum": "1 Album", + "ValueOneEpisode": "1 Episode", + "ValueOneMovie": "1 Film", + "ValueOneMusicVideo": "1 Museksvideo", + "ValueOneSeries": "1 Série", + "ValueOneSong": "1 Lidd", + "ValueSeconds": "Sekonnen", + "ValueSeriesCount": "Zuel vu Sérien", + "ValueSongCount": "Zuel vu Lidder", + "ValueSpecialEpisodeName": "Spezial-Episodenumm", + "ValueTimeLimitMultiHour": "{0} Stonnen-Limit", + "ValueTimeLimitSingleHour": "1 Stonn-Limit", + "Vertical": "Vertikal", + "Video": "Video", + "VideoAudio": "Video / Audio", + "ViewAlbum": "Album weisen", + "ViewAlbumArtist": "Album-Kënschtler weisen", + "ViewLyrics": "Songtexter weisen", + "ViewPlaybackInfo": "Wiedergabe-Info weisen", + "Watched": "Gekuckt", + "Wednesday": "Mëttwoch", + "WeeklyAt": "All Woch um {0}", + "WelcomeToProject": "Wëllkomm bei {0}", + "Whitelist": "Wäisslëscht", + "WizardCompleted": "Wizard ass fäerdeg", + "WriteAccessRequired": "Schreiwbarkeit ass erfuerdert", + "Writer": "Auteur (Writer)", + "Writers": "Auteuren (Writers)", + "XmlTvKidsCategoriesHelp": "Kanner-Kategorien-Hëllef für XmlTv", + "XmlTvMovieCategoriesHelp": "Film-Kategorien-Hëllef für XmlTv", + "XmlTvNewsCategoriesHelp": "Noriichten-Kategorien-Hëllef für XmlTv", + "XmlTvPathHelp": "Hëllef zum XmlTv-Chemin", + "XmlTvSportsCategoriesHelp": "Sports-Kategorien-Hëllef für XmlTv", + "Yadif": "Yadif", + "Yes": "Jo", + "Yesterday": "Gëschter", + "HeaderSelectFallbackFontPath": "Fallback-Schrëft-Chemin auswielen", + "HeaderSelectFallbackFontPathHelp": "Hëllef zum Fallback-Schrëft-Chemin auswielen", + "LabelFallbackFontPath": "Fallback-Schrëft-Chemin", + "LabelFallbackFontPathHelp": "Hëllef zum Fallback-Schrëft-Chemin", + "EnableFallbackFont": "Fallback-Schrëft aktivéieren", + "EnableFallbackFontHelp": "Hëllef zum Aktivéiere vun der Fallback-Schrëft", + "AspectRatioCover": "Aspect Ratio Cover", + "AspectRatioFill": "Aspect Ratio ausfëllen", + "Remuxing": "Remuxen", + "RemuxHelp1": "Hëllef zum Remux (Del 1)", + "RemuxHelp2": "Hëllef zum Remux (Del 2)", + "LabelPlaybackInfo": "Wiedergabe-Info", + "LabelAudioInfo": "Audio-Info", + "LabelVideoInfo": "Video-Info", + "LabelTrackGain": "Titel-Gain", + "LabelTranscodingInfo": "Transkodéierungs-Info", + "LabelDirectStreamingInfo": "Direkt Stréimungs-Info", + "LabelRemuxingInfo": "Remux-Info", + "LabelOriginalMediaInfo": "Original Medien-Info", + "LabelSyncPlayInfo": "SyncPlay-Info", + "PreferFmp4HlsContainer": "fMP4-HLS Container bevorzugen", + "PreferFmp4HlsContainerHelp": "Hëllef zum Bevorzugen vum fMP4-HLS Container", + "AllowHevcEncoding": "HEVC-Codéierung erlaaben", + "LabelAllowedAudioChannels": "Erlaabte Audio-Kanäl", + "LabelSelectAudioChannels": "Audio-Kanäl auswielen", + "LabelSelectMono": "Mono auswielen", + "LabelSelectStereo": "Stereo auswielen", + "YoutubeBadRequest": "YouTube - Ongëlteg Ufro", + "YoutubePlaybackError": "YouTube Wiedergabe-Feeler", + "YoutubeNotFound": "YouTube - Keng Resultater", + "YoutubeDenied": "YouTube - Zougang verweigert", + "MessageChromecastConnectionError": "Feeler beim Chromecast-Verbindung", + "MessagePlaybackError": "Feeler bei der Wiedergabe", + "EnableEnhancedNvdecDecoder": "Erweiderten NVDEC-Decodéierer aktivéieren", + "EnableVppTonemapping": "VPP-Tonemapping aktivéieren", + "AllowVppTonemappingHelp": "Hëllef zum Erlaaben vum VPP-Tonemapping", + "EnableVideoToolboxTonemapping": "VideoToolbox-Tonemapping aktivéieren", + "AllowVideoToolboxTonemappingHelp": "Hëllef zum Erlaaben vum VideoToolbox-Tonemapping", + "Controls": "Steierungselementer", + "LabelEnableGamepad": "Gamepad aktivéieren", + "EnableGamepadHelp": "Hëllef zum Aktivéiere vum Gamepad", + "AudioCodecNotSupported": "Audio-Codec gëtt net ënnerstëtzt", + "ContainerNotSupported": "Container gëtt net ënnerstëtzt", + "SubtitleCodecNotSupported": "Sous-titre-Codec gëtt net ënnerstëtzt", + "VideoCodecNotSupported": "Video-Codec gëtt net ënnerstëtzt", + "VideoCodecTagNotSupported": "Video-Codec-Tag gëtt net ënnerstëtzt", + "AudioBitrateNotSupported": "Audio-Bitrate gëtt net ënnerstëtzt", + "AudioChannelsNotSupported": "Audio-Kanäl gi net ënnerstëtzt", + "VideoResolutionNotSupported": "Video-Opléisung gëtt net ënnerstëtzt", + "AudioProfileNotSupported": "Audio-Profil gëtt net ënnerstëtzt", + "AudioSampleRateNotSupported": "Audio-Sampleraate gëtt net ënnerstëtzt", + "AnamorphicVideoNotSupported": "Anamorphescht Video gëtt net ënnerstëtzt", + "InterlacedVideoNotSupported": "Interlacéiert Video gëtt net ënnerstëtzt", + "SecondaryAudioNotSupported": "Sekundär Audio gëtt net ënnerstëtzt", + "RefFramesNotSupported": "Ref-Frames gi net ënnerstëtzt", + "VideoBitDepthNotSupported": "Video-Bit-Tiefe gëtt net ënnerstëtzt", + "VideoFramerateNotSupported": "Video-Framerate gëtt net ënnerstëtzt", + "VideoLevelNotSupported": "Video-Level gëtt net ënnerstëtzt", + "VideoProfileNotSupported": "Video-Profil gëtt net ënnerstëtzt", + "AudioBitDepthNotSupported": "Audio-Bit-Tiefe gëtt net ënnerstëtzt", + "ContainerBitrateExceedsLimit": "Container-Bitrate iwwerschreit Limite", + "PreferSystemNativeHwDecoder": "System-Native Hardware-Decodéierer bevorzugen", + "EnableIntelLowPowerH264HwEncoder": "Intel Low-Power-H.264 Hardware-Codéierer aktivéieren", + "EnableIntelLowPowerHevcHwEncoder": "Intel Low-Power-HEVC Hardware-Codéierer aktivéieren", + "IntelLowPowerEncHelp": "Hëllef zum Intel Low-Power-Codéierer", + "LabelHardwareEncodingOptions": "Optiounen zur Hardware-Codéierung", + "LabelEncodingFormatOptions": "Optiounen zum Codéierungsformat", + "EncodingFormatHelp": "Hëllef zum Codéierungsformat", + "AudioIsExternal": "Audio ass extern", + "VideoBitrateNotSupported": "Video-Bitrate gëtt net ënnerstëtzt", + "UnknownVideoStreamInfo": "Onbekannte Videoinfo", + "UnknownAudioStreamInfo": "Onbekannte Audioinfo", + "DirectPlayError": "Feeler bei der Direkter Wiedergabe", + "SelectAll": "Alles auswielen", + "Featurette": "Featurette", + "Short": "Kuerzfilm", + "Clip": "Clip", + "Trailer": "Bande-Annonce", + "BehindTheScenes": "Hannert de Kulissen", + "DeletedScene": "Geläschte Scène", + "Interview": "Interview", + "Scene": "Scène", + "Sample": "Beispill", + "Select": "Auswielen", + "ThemeSong": "Theme-Lidd", + "ThemeVideo": "Theme-Video", + "EnableEnhancedNvdecDecoderHelp": "Hëllef zum Aktivéiere vum erweiderten NVDEC-Decodéierer", + "EnableSplashScreen": "Splash-Écran aktivéieren", + "LabelVppTonemappingBrightness": "VPP Tonemapping-Héicht (Brightness)", + "LabelVppTonemappingBrightnessHelp": "Hëllef zur VPP Tonemapping-Héicht (Brightness)", + "LabelVppTonemappingContrast": "VPP Tonemapping-Kontrast", + "LabelVppTonemappingContrastHelp": "Hëllef zum VPP Tonemapping-Kontrast", + "VideoRangeTypeNotSupported": "Typ vun der Video-Gamme gëtt net ënnerstëtzt", + "LabelVideoRangeType": "Video-Gamme-Typ", + "MediaInfoVideoRangeType": "Video-Gamme-Typ", + "MediaInfoDoViTitle": "Dolby Vision Infos", + "MediaInfoDvVersionMajor": "DV Versioun (Major)", + "MediaInfoDvVersionMinor": "DV Versioun (Minor)", + "MediaInfoDvProfile": "DV Profil", + "MediaInfoDvLevel": "DV Niveau (Level)", + "MediaInfoRpuPresentFlag": "RPU Present-Flag", + "MediaInfoElPresentFlag": "EL Present-Flag", + "MediaInfoBlPresentFlag": "BL Present-Flag", + "MediaInfoDvBlSignalCompatibilityId": "DV-BL-Signal-Kompatibilitéits-ID", + "Unreleased": "Nach net verëffentlecht", + "LabelTonemappingMode": "Tonemapping-Modus", + "TonemappingModeHelp": "Hëllef zum Tonemapping-Modus", + "Unknown": "Onbekannt", + "AllowAv1Encoding": "AV1-Codéierung erlaaben", + "AiTranslated": "KI-übersat", + "MachineTranslated": "Maschinn-übersat", + "ForeignPartsOnly": "Just auslännesch Deeler", + "HearingImpairedShort": "HI", + "Trickplay": "Trickplay", + "LabelTrickplayAccel": "Trickplay-Beschleunegung", + "LabelTrickplayAccelEncoding": "Trickplay-Beschleunegungs-Codéierung", + "LabelTrickplayAccelEncodingHelp": "Hëllef zur Trickplay-Beschleunegungs-Codéierung", + "LabelTrickplayKeyFrameOnlyExtraction": "Just Keyframe-Extraktioun", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Hëllef zur Keyframe-Extraktioun bei Trickplay", + "BlockingScan": "Blocking Scan", + "LabelScanBehavior": "Scangesiicht (Behavior)", + "LabelScanBehaviorHelp": "Hëllef zum Verhale vum Scan", + "PriorityHigh": "Héich Prioritéit", + "PriorityAboveNormal": "Iwwer Normal", + "PriorityNormal": "Normal", + "PriorityBelowNormal": "Ënnert Normal", + "PriorityIdle": "Idle", + "LabelProcessPriority": "Prozessprioritéit", + "LabelProcessPriorityHelp": "Hëllef zur Prozessprioritéit", + "LabelImageInterval": "Bildintervall", + "LabelImageIntervalHelp": "Hëllef zum Bildintervall", + "LabelWidthResolutionsHelp": "Hëllef zu Breet/Opléisung(en)", + "LabelTileWidth": "Kachelbreet (Tile Width)", + "LabelTileWidthHelp": "Hëllef zur Kachelbreet", + "LabelTileHeight": "Kachelhéicht (Tile Height)", + "LabelTileHeightHelp": "Hëllef zur Kachelhéicht", + "LabelJpegQuality": "JPEG-Qualitéit", + "LabelJpegQualityHelp": "Hëllef zur JPEG-Qualitéit", + "LabelQscaleHelp": "Hëllef zur Qscale", + "LabelTrickplayThreadsHelp": "Hëllef zu Trickplay Threads", + "OptionExtractTrickplayImage": "Trickplay-Bild extrahéieren", + "ExtractTrickplayImagesHelp": "Hëllef zum Extrahéieren vu Trickplay-Biller", + "LabelExtractTrickplayDuringLibraryScan": "Trickplay extrahéieren während Bibliothéik-Scan", + "LabelExtractTrickplayDuringLibraryScanHelp": "Hëllef zum Extrahéieren vu Trickplay während Bibliothéik-Scan", + "AllowContentWithTagsHelp": "Hëllef zum Erlaaben vun Inhalter mat Markéierunge.", + "AllowedRemoteAddressesHelp": "Komma-separéiert Lëscht vun IP-Adressen oder IP/Netzmask Entréeë fir Netzwierker, déi däerfen aus der Distanz verbannen. Wann eidel gelooss, ginn all Fernadressen erlaabt.", + "AccessRestrictedTryAgainLater": "Zougang ass limitéiert, probéier et méi spéit nach eng Kéier.", + "AllowEmbeddedSubtitlesHelp": "Hëllef zum Erlaaben vu embeddéierten Sous-titres.", + "AllowFfmpegThrottlingHelp": "Wann eng Transkodéierung oder e Remux wäit genuch vorm aktuellen Wiedergabe-Punkt ass, pauszéiert de Prozess, sou datt e manner Ressourcë verbraucht. Dat ass am nëtzlechsten, wann Dir normal kuckt, ouni dacks ze spulen. Schalt dat aus, wann Dir Wiedergabeproblemer erliewt.", + "AllowOnTheFlySubtitleExtractionHelp": "Agebett Ënnertitelen kënnen aus Videoeextrahéiert an als einfachen Text un d’Clienten geliwwert ginn, fir Video-Transkodéierung ze vermeiden. Op e puer Systemer kann dëse Prozess laang daueren a féiert dozou, datt d’Video-Ofspillung während der Extraktioun hänke bleift. Deaktivéiert dëst, fir d’agebett Ënnertitelen an de Video mat Transkodéierung anzebrennen, wann se net natierlech vum Client-Gerät ënnerstëtzt ginn.", + "AllowHWTranscodingHelp": "Erlaabt dem Tuner, Streams spontan ze transkodéieren. Dëst kann hëllefen, d’Transkodéierung, déi vum Server erfuerderlech ass, ze reduzéieren.", + "LabelThrottleDelaySecondsHelp": "Zäit an Sekonnen, no där den Transkodéierer gedrosselt gëtt. Muss grouss genuch sinn, fir datt de Client e gesonde Buffer erhale kann. Funktionéiert nëmmen, wann Drosselung aktivéiert ass.", + "AskAdminToCreateLibrary": "Frot en Administrateur, fir eng Bibliothéik ze erstellen.", + "AllowSegmentDeletionHelp": "Läscht al Segmenter nodeems se vum Client erofgeluede goufen. Dëst verhënnert, datt déi komplett transkodéiert Datei op der Festplack gespäichert gëtt. Schalt dëst aus, wann Dir Problemer beim Ofspillen hutt.", + "AllowStreamSharingHelp": "Erlaabt Jellyfin, de mpegts-Stream vum Tuner ze duplizéieren an dëse duplizéierte Stream un d’Clienten ze deelen. Dëst ass nëtzlech, wann den Tuner eng Limit fir d’Gesamtzuel vun de Stréim huet, kann awer och Problemer beim Ofspillen verursaachen.", + "ButtonForgotPassword": "Passwuert vergiess", + "ButtonQuickStartGuide": "Schnellstart Guide", + "AllowTonemappingHelp": "Tone-Mapping kann den dynamesche Beräich vun engem Video vun HDR op SDR transforméieren, wärend Bilddetailer a Faarwen erhale bleiwen, déi wichteg si fir d’Darstellung vun der Originalzeen. Funktionéiert aktuell nëmmen mat 10-Bit HDR10-, HLG- an DoVi-Videoen. Dëst erfuerdert déi entspriechend GPGPU-Lafzäit.", + "ButtonEditOtherUserPreferences": "Bearbecht de Profil, d’Bild an d’perséinlech Astellungen vun dësem Benotzer.", + "AllowTonemappingSoftwareHelp": "Tone-Mapping kann den dynamesche Beräich vun engem Video vun HDR op SDR transforméieren, wärend Bilddetailer a Faarwen erhale bleiwen, déi wichteg Informatioune fir d’Darstellung vun der Originalzeen sinn. Funktionéiert aktuell nëmmen mat 10-Bit HDR10-, HLG- an DoVi-Videoen.", + "AlwaysRemuxMp3AudioFilesHelp": "Wann Dir Dateien hutt, bei deenen Äre Browser d’Zäite falsch berechent, aktivéiert dëst als Ëmwee.", + "ApiKeysCaption": "Lëscht vun den aktuell aktivéierten API-Schlësselen", + "AuthProviderHelp": "Wielt en Authentifikatiounsprovider, fir d’Passwuert vun dësem Benotzer z’authentifizéieren.", + "BirthDateValue": "Gebuer: {0}", + "BurnSubtitlesHelp": "Bestëmmt, ob de Server Ënnertitelen soll anbrennen. Dëst z’evitéiere verbessert d’Leeschtung wesentlech. Wielt Auto, fir bildbaséiert Formater (VobSub, PGS, SUB, IDX, asw.) an verschidden ASS- oder SSA-Ënnertitelen anzebrennen.", + "ButtonCast": "Cast to Device", + "ButtonTogglePlaylist": "Playlist", + "BookLibraryHelp": "Audio- a Textbicher ginn ënnerstëtzt. Kuckt d’{0} Buchbenennungsrichtlinnen {1} no.", + "BoxSet": "Box Set", + "ButtonArrowLeft": "Lénks", + "ButtonNextTrack": "Nächst Spur", + "ButtonSignOut": "Ofmellen", + "ConfirmEndPlayerSession": "Wëllt Dir Jellyfin op {0} ausschalten?", + "DeleteName": "{0} läschen", + "ChangingMetadataImageSettingsNewContent": "Ännerungen un den Astellungen fir Metadata- oder Konschtwierk-Downloads gëllen nëmmen fir neien Inhalt, deen an denger Bibliothéik derbäigesat gëtt. Fir d’Ännerungen op existent Titelen unzewenden, muss de seng Metadata manuell aktualiséieren.", + "ChannelNameOnly": "Nëmmen Kanal {0}", + "DefaultMetadataLangaugeDescription": "Dëst sinn deng Standardastellungen a kënnen op Basis vun all Bibliothéik personaliséiert ginn.", + "CinemaModeConfigurationHelp": "De Kino-Modus bréngt d’Kinoerfarung direkt an däi Wunnzëmmer, mat der Méiglechkeet Trailer an personaliséiert Introen virum Haaptfilm ofzespillen.", + "SelectAudioNormalizationHelp": "Spur-Verstäerkung – passt d’Laustäerkt vun all Spur un, fir se mat der selwechter Lautstärk ofzespillen. Album-Verstäerkung – passt d’Laustäerkt vun allen Spuren an engem Album un, wärend den dynamesche Beräich vum Album erhale bleift. Tëschent “Aus” an aneren Optiounen ze wiesselen erfuerdert en Neustart vun der aktueller Ofspillung.", + "ClearQueue": "Lëscht läschen", + "CopyFailed": "Kopéieren net méiglech", + "ConfigureDateAdded": "Setzt fest, wéi d’Metadata fir ‘Datum dobäigesat’ am Dashboard > Bibliothéiken > NFO-Astellungen bestëmmt ginn", + "ConfirmDeleteItem": "Wann Dir dëst Element läscht, gëtt et souwuel aus dem Dateisystem wéi och aus denger Mediebibliothéik geläscht. Sidd Dir sécher, datt Dir wëllt weiderfueren?", + "ConfirmDeleteItems": "Wann Dir dës Elementer läscht, ginn se souwuel aus dem Dateisystem wéi och aus denger Mediebibliothéik geläscht. Sidd Dir sécher, datt Dir wëllt weiderfueren?", + "CustomSubtitleStylingHelp": "Ënnertitel-Stil funktionéiert op de meeschte Geräter, mee bréngt eng zousätzlech Leeschtungsbelaaschtung mat sech.", + "ConfirmDeleteSeries": "Wann Dir dës Serie läscht, ginn ALL {0} Episoden souwuel aus dem Dateisystem wéi och aus denger Mediebibliothéik geläscht. Sidd Dir sécher, datt Dir wëllt weiderfueren?", + "CopyStreamURLSuccess": "Stream-URL erfollegräich kopéiert.", + "DeathDateValue": "Gestuerwen: {0}", + "DeinterlaceMethodHelp": "Wielt d’De-Interlacing-Method, déi benotzt gëtt, wann interlaced Inhalt mat Software transkodéiert gëtt. Wann Hardware-Beschleunegung mat Hardware-De-Interlacing aktivéiert ass, gëtt den Hardware-De-Interlacer amplaz vun dëser Astellung benotzt.", + "DeleteDevicesConfirmation": "Sidd Dir sécher, datt Dir all Geräter wëllt läschen? All aner Sessioune ginn ofgemellt. D’Geräter wäerte sech erëm weisen, wann e Benotzer sech déi nächst Kéier umellt.", + "DisablePlugin": "Deaktivéieren", + "DisableVbrAudioEncodingHelp": "Verhënnert, datt de Server Audio mat VBR fir dëse Client kodéiert.", + "DeviceAccessHelp": "Dëst gëllt nëmme fir Geräter, déi eenzegaarteg identifizéiert kënne ginn, a verhënnert net den Zougang iwwer Browser. D’Filtere vum Benotzer-Gerät-Zougang wäert verhënneren, datt si nei Geräter benotze kënnen, bis dës hei guttgeheescht goufen.", + "DirectStreamHelp1": "De Video-Stream ass kompatibel mam Gerät, mee huet en inkompatibelt Audio-Format (DTS, Dolby TrueHD, asw.) oder eng inkompatibel Unzuel u Audio-Kanäl. De Video-Stream gëtt verlousungsfräi spontan nei verpackt, ier en un d’Gerät geschéckt gëtt. Nëmmen den Audio-Stream gëtt transkodéiert." +} From 99064537385640f08cf186caf3aee4e86adc0079 Mon Sep 17 00:00:00 2001 From: Abdullah Khaled Date: Sun, 9 Feb 2025 20:08:34 +0000 Subject: [PATCH 009/235] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 327c79d890..f5419ef628 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -240,7 +240,7 @@ "LabelAlbumArtists": "فنانو الألبومات", "LabelAllowHWTranscoding": "السماح بالتشفير البيني بعتاد الحاسب", "LabelAppName": "اسم التطبيق", - "LabelAppNameExample": "مثال: Sickbeard، Sonarr", + "LabelAppNameExample": "اسم قابل للقراءة بشرياً لتحديد مفاتيح API. هذا الإعداد لن يؤثر على الوظائف.", "LabelArtists": "الفنانون", "LabelArtistsHelp": "افصل بين الفنانين ب ; فاصلة منقوطة.", "LabelAudioLanguagePreference": "اللغة المفضلة للصوت", @@ -907,7 +907,7 @@ "HeaderDetectMyDevices": "كشف أجهزتي", "HeaderDeleteItems": "حذف العناصر", "HeaderContinueListening": "استمر في الاستماع", - "HeaderConfigureRemoteAccess": "إعدادات الوصول عن بعد", + "HeaderConfigureRemoteAccess": "إعداد الوصول عن بعد", "HeaderChapterImages": "صور الفصل", "HeaderCancelSeries": "إلغاء السلسلة", "HeaderCancelRecording": "إلغاء التسجيل", @@ -1423,7 +1423,7 @@ "LabelRefreshMode": "وضع التحديث", "LabelRecord": "سجل", "LabelReasonForTranscoding": "سبب التحويل", - "LabelPublishedServerUriHelp": "تجاوز URI المستخدم بواسطة Jellyfin ، بناءً على الواجهة ، أو عنوان IP للعميل.", + "LabelPublishedServerUriHelp": "تجاوز عنوان URI المستخدم بواسطة Jellyfin، بناءً على الواجهة أو عنوان IP الخاص بالعميل. على سبيل المثال: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, أو all=https://jellyfin.example.com", "LabelPublishedServerUri": "عناوين URI للخادم المنشورة", "LabelPreferredSubtitleLanguage": "لغة الترجمة المفضلة", "LabelPlaylist": "قائمة التشغيل", @@ -1782,13 +1782,13 @@ "HeaderGuestCast": "النجوم الضيوف", "EnableHi10pHelp": "تمكين لتجنب تحويل ترميز مقاطع الفيديو H.264 10 بت. قم بتعطيل هذا الخيار إذا كان الفيديو يعرض إطارات فارغة.", "Colorist": "الملون", - "ChannelResolutionHD": "720", - "ChannelResolutionSD": "480 او أقل", + "ChannelResolutionHD": "HD", + "ChannelResolutionSD": "SD", "AllowTonemappingSoftwareHelp": "يمكن لتعيين الدرجة اللونية تحويل النطاق الديناميكي للفيديو من HDR إلى SDR مع الحفاظ على تفاصيل الصورة والألوان، وهي معلومات مهمة جدًا لتمثيل المشهد الأصلي. يعمل حاليًا فقط مع مقاطع فيديو HDR10 وHLG وDVi 10 بت فقط.", "AndOtherArtists": "{0} و {1} فنانين آخرين.", "BlockContentWithTagsHelp": "إخفاء الوسائط بعلامة واحدة على الأقل من العلامات المحددة.", "CoverArtist": "غلاف الفنان", - "ChannelResolutionUHD4K": "4K", + "ChannelResolutionUHD4K": "UHD (4K)", "DlnaMovedMessage": "تم نقل وظيفة DLNA إلى مكون إضافي.", "ConfirmDeleteSeries": "سيؤدي حذف هذه السلسلة إلى حذف جميع الحلقات {0} من نظام الملفات ومكتبة الوسائط الخاصة بك. هل أنت متأكد من رغبتك في المتابعة؟", "EnableHi10p": "تمكين ملف تعريف H.264 عالي 10", @@ -1813,11 +1813,11 @@ "AllowFmp4TranscodingContainerHelp": "اسمح بحاوية تحويل الترميز fMP4 لهذا الموالف لتمكين محتويات HEVC و HDR. ليست كل الموالفات متوافقة مع هذه الحاوية. قم بتعطيل هذا إذا واجهت مشاكل في التشغيل.", "AlwaysRemuxFlacAudioFilesHelp": "إذا كانت لديك ملفات يرفض متصفحك تشغيلها أو إذا كان المتصفح يرفض تشغيلها أو إذا كان يحسب الطوابع الزمنية بشكل غير دقيق، فقم بتمكين هذا كحل بديل.", "AlwaysRemuxMp3AudioFilesHelp": "إذا كانت لديك ملفات يقوم متصفحك بحساب الطوابع الزمنية بشكل غير دقيق، فقم بتمكين هذا كحل بديل.", - "ChannelResolutionFullHD": "1080", + "ChannelResolutionFullHD": "Full HD", "FallbackMaxStreamingBitrateHelp": "يُستخدم الحد الأقصى لمعدل بت البث الأقصى كمعدل بت احتياطي عندما يتعذر على ffprobe تحديد معدل بت الدفق المصدر. يساعد هذا في منع العملاء من طلب معدل بت مرتفع للغاية لتحويل الترميز، مما قد يتسبب في فشل المشغل وزيادة التحميل على المشفر.", "HeaderAddLyrics": "إضافة كلمات", "AlwaysBurnInSubtitleWhenTranscoding": "انسخ الترجمة دائماً عند تحويل الترميز", "AlwaysBurnInSubtitleWhenTranscodingHelp": "نسخ جميع العناوين الفرعية عند تشغيل تحويل الترميز. يضمن ذلك مزامنة الترجمة بعد تحويل الترميز على حساب انخفاض سرعة التحويل.", - "ChannelResolutionSDPAL": "480 (25 اطار) او أقل", + "ChannelResolutionSDPAL": "SD (PAL)", "EnableTrueHdHelp": "لا تفعّلها إلا إذا كان جهازك يدعم TrueHD أو كان متصلاً بجهاز استقبال صوتي متوافق، وإلا فقد يتسبب ذلك في فشل التشغيل." } From f5a4e0fcd57a2c69b949841aa8927fcd099646de Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Mon, 10 Feb 2025 08:10:04 +0000 Subject: [PATCH 010/235] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 1be6b6bf05..b9ea33ec4d 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -29,7 +29,7 @@ "Copy": "Kopiatu", "Copied": "Kopiatuta", "ButtonExitApp": "Aplikaziotik irten", - "AddToFavorites": "Gogokoetara gehitu", + "AddToFavorites": "Gehitu gogokoetara", "AudioBitDepthNotSupported": "Audioaren bit-sakontasuna ez da bateragarria", "VideoProfileNotSupported": "Bideo-kodearen profila ez da bateragarria", "VideoLevelNotSupported": "Bideo-kodearen maila ez da bateragarria", @@ -1261,13 +1261,13 @@ "AllowMediaConversionHelp": "Baimendu edo debekatu multimedia-bihurketa funtzioa.", "AllowMediaConversion": "Baimendu multimedia-bihurketa", "AllowHWTranscodingHelp": "Baimendu sintonizatzaileari edukia zuzenean transkodetzea. Horrek zerbitzariak gutxiago transkodetu behar izatea ekarriko du.", - "AllowFfmpegThrottlingHelp": "Bihurketak gelditu egingo dira ugaltzailea dagoen posiziotik behar beste aurreratzen direnean. Zerbitzarian karga murriztu dezake eta erabilgarria da etengabe erreproduzitzen denean, denbora-tarteen artean salto egin gabe, baina baliteke desaktibatu behar izatea erreprodukzioan arazoak badituzu edo edukia erreproduzitzen duzun bitartean posizioa maiz aldatzen baduzu.", - "AllowFfmpegThrottling": "Bihurketak bizkortzea", + "AllowFfmpegThrottlingHelp": "Bihurketa edo remux bat uneko erreprodukzio posiziotik aurrera nahiko urrun dagoenean, eten prozesua, baliabide gutxiago kontsumitzeko. Hau erabilgarriena da maiz bilatu gabe ikustean. Desgaitu hau erreproduzitzeko arazoak badituzu.", + "AllowFfmpegThrottling": "Mugatu bihurketak", "AllowedRemoteAddressesHelp": "IP helbideen komen edo IP/sare-maskararen sarreren bidez bereizitako zerrenda, urrunetik konektatzeko aukera emango zaien sareetarako. Hutsik utziz gero, urruneko norabide guztiak baimenduko dira.", "AllLibraries": "Liburutegi guztiak", "AllLanguages": "Hizkuntza guztiak", "AllEpisodes": "Atal guztiak", - "AllComplexFormats": "Formatu konplexu guztiak (ASS, SSA, VobSub, PGS, SUB, IDX)", + "AllComplexFormats": "Formatu konplexu guztiak (ASS, SSA, VobSub, PGS, SUB, IDX, …)", "AllChannels": "Kanal guztiak", "All": "Dena", "Alerts": "Alertak", @@ -1275,17 +1275,17 @@ "AlbumArtist": "Albumaren artista", "Album": "Albuma", "Aired": "Igorria", - "AirDate": "Jaulkipen-data", + "AirDate": "Emisio-data", "AgeValue": "({0} urte)", - "AddToPlayQueue": "Gehitu erreprodukzio-isatsari", - "AddToPlaylist": "Gehitu erreprodukzio-zerrenda bati", - "AddToCollection": "Gehitu bilduma bati", + "AddToPlayQueue": "Gehitu erreprodukzio-ilarara", + "AddToPlaylist": "Gehitu erreprodukzio-zerrendara", + "AddToCollection": "Gehitu bildumara", "AdditionalNotificationServices": "Bisitatu osagarrien katalogoa jakinarazpen-zerbitzu gehigarriak instalatzeko.", "AddedOnValue": "{0} erantsi da", "Add": "Gehitu", "Actor": "Aktorea", "AccessRestrictedTryAgainLater": "Une honetan sarbidea mugatuta dago. Saiatu berriro geroago.", - "Absolute": "Absolutua", + "Absolute": "Erabatekoa", "LabelDisplayMode": "Bistaratzeko modua", "LabelDisplayLanguageHelp": "Jellyfin itzultzea abian dagoen proiektu bat da.", "LabelDisplayLanguage": "Hizkuntza", @@ -1631,10 +1631,13 @@ "GoogleCastUnsupported": "Google Cast ez da bateragarria", "Experimental": "Esperimentala", "DownloadAll": "Deskargatu dena", - "AllowCollectionManagement": "Bildum baimena utzi", - "AllowSegmentDeletion": "Segmentuak ezabatu", - "AllowSegmentDeletionHelp": "Segmentu zaharrak ezabatu bezeroari bidali ondoren. Horrela ezin da kodifikatutako fitxategi osoa gordeko diskoan. Hau Throttling bakarrik aktibatuta baldin funtzionatuko du. Itzali aukera hau playback arazoak esperimentatzen baldin baduzu.", + "AllowCollectionManagement": "Baimendu erabiltzaile honek bildumak kudeatzea", + "AllowSegmentDeletion": "Ezabatu segmentuak", + "AllowSegmentDeletionHelp": "Ezabatu segmentu zaharrak bezeroak deskargatu ondoren. Honela, bihurtutako fitxategi osoa diskoan gordetzea saihesten da. Desgaitu erreproduzitzeko arazoak badituzu.", "LabelThrottleDelaySeconds": "Throttle buruan", "LabelThrottleDelaySecondsHelp": "Denbora segundotan transkodetzailea geldiarazten hasiko den. Bezeroak buffer osasuntsu bat mantentzeko bezain handia izan behar da. Bakarrik funtzionatzen du throttling onartua baldin badago.", - "LabelSegmentKeepSeconds": "Segmentuak gordetzeko denbora.." + "LabelSegmentKeepSeconds": "Segmentuak gordetzeko denbora..", + "AirPlay": "AirPlay", + "AllowContentWithTagsHelp": "Erakutsi zehaztutako etiketetik gutxienez bat duen serieen media.", + "AllowSubtitleManagement": "Baimendu erabiltzaile honek azpitituluak editatzea" } From bed863b370892e7fb3dc82c4a084e0a0ea35e34b Mon Sep 17 00:00:00 2001 From: yoga sree jagadam Date: Tue, 11 Feb 2025 12:57:01 +0000 Subject: [PATCH 011/235] Translated using Weblate (Telugu) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/te/ --- src/strings/te.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/strings/te.json b/src/strings/te.json index c454890181..c94afb098a 100644 --- a/src/strings/te.json +++ b/src/strings/te.json @@ -1538,5 +1538,11 @@ "ButtonSpace": "స్థలం", "ChannelResolutionSDPAL": "ఎస్డి (పాల్ )", "ChannelResolutionSD": "ఎస్డీ", - "Casual": "సాధారణ" + "Casual": "సాధారణ", + "Arranger": "వ్యవస్థాపకు", + "AndOtherArtists": "{0} మరియు {1} ఇతర కళాకారులు.", + "AllowTonemappingSoftwareHelp": "వాయు మాపనం అనేది వీడియో యొక్క చైతన్యవంతమైన పరిధిని హెచ్‌డిఆర్ నుండి యస్డిఆర్ కి మార్చగలదు, అదే సమయంలో అసలు దృశ్యాన్ని సూచించడానికి చాలా ముఖ్యమైన సమాచారం అయిన చిత్ర వివరాలు మరియు రంగులను నిర్వహిస్తుంది. ప్రస్తుతం ఇది 10బిట్ హెచ్‌డిఆర్10, హెచ్‌ఎల్‌జి మరియు డోవి వీడియోలతో మాత్రమే పనిచేస్తుంది.", + "AlwaysRemuxFlacAudioFilesHelp": "మీ విహరిణి ఆటలాడుట చేయడానికి తిరస్కరించిన వరుసలు ఉంటే లేదా సమయ కొలతలను తప్పుగా లెక్కిస్తే, దీన్ని ఒక పరిష్కారంగా ప్రారంభించండి.", + "AlwaysRemuxMp3AudioFilesHelp": "మీ విహరిణి సమయ కొలతలను తప్పుగా లెక్కించే వరుసలు మీ వద్ద ఉంటే, దీన్ని ఒక పరిష్కారంగా ప్రారంభించండి.", + "Anime": "అనిమే" } From 57ab403bf639a835903f5650e02acaa27d8360a4 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 11 Feb 2025 10:14:10 -0500 Subject: [PATCH 012/235] Add music videos --- src/controllers/favorites.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/controllers/favorites.js b/src/controllers/favorites.js index 89d0569a98..6a6be74600 100644 --- a/src/controllers/favorites.js +++ b/src/controllers/favorites.js @@ -54,6 +54,15 @@ function getSections() { overlayPlayButton: true, overlayText: false, centerText: true + }, { + name: 'MusicVideos', + types: 'MusicVideo', + shape: getBackdropShape(enableScrollX()), + preferThumb: true, + showTitle: true, + overlayPlayButton: true, + overlayText: false, + centerText: true }, { name: 'Collections', types: 'BoxSet', From ac32f7f23d34c999d2c0326fdfb941572b4ed6a2 Mon Sep 17 00:00:00 2001 From: AfmanS Date: Tue, 11 Feb 2025 17:58:33 +0000 Subject: [PATCH 013/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index bd3b5c383a..3068935fdd 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1988,5 +1988,11 @@ "HeaderNextVideo": "Próximo vídeo", "HeaderNextEpisode": "Próximo episódio", "LabelMediaSegmentProviders": "Fornecedores de segmentos de multimédia", - "MediaSegmentProvidersHelp": "Ativa e classifica os teus fornecedores de segmentos de multimédia preferidos por ordem de prioridade." + "MediaSegmentProvidersHelp": "Ativa e classifica os teus fornecedores de segmentos de multimédia preferidos por ordem de prioridade.", + "AutoSubtitleStylingHelp": "Este modo mudará automaticamente entre mecanismos de estilos de legendas nativos e personalizados com base no tipo do teu dispositivo.", + "Custom": "Personalizado", + "CustomSubtitleStylingHelp": "Estilos de legendas funcionarão na maioria dos dispositivos, mas com carga de rendimento adicional.", + "LabelSubtitleStyling": "Estilo de legendas", + "Native": "Nativo", + "NativeSubtitleStylingHelp": "Estilos de legendas não funcionarão na maioria dos dispositivos. Contudo, não causa carga de rendimento adicional." } From 596d543e3e8d5cefd53d381bf49292a92d481c7d Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Tue, 11 Feb 2025 18:07:21 +0000 Subject: [PATCH 014/235] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index f02d8fe8db..c9303f75bf 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1986,5 +1986,7 @@ "RenderPgsSubtitleHelp": "Determina se o cliente deve renderizar legendas PGS em vez de utilizar legendas embebidas. Isto pode evitar a transcodificação do lado do servidor em troca de desempenho de renderização do lado do cliente.", "LabelMediaSegmentProviders": "Fornecedores de segmentos de multimédia", "MediaSegmentProvidersHelp": "Ativa e classifica os teus fornecedores de segmentos de multimédia preferidos por ordem de prioridade.", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrai somente os fotogramas-chave para um processamento significativamente mais rápido com temporização menos precisa. Se o descodificador de hardware configurado não suportar esse modo, será utilizado o descodificador de software." + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrai somente os fotogramas-chave para um processamento significativamente mais rápido com temporização menos precisa. Se o descodificador de hardware configurado não suportar esse modo, será utilizado o descodificador de software.", + "AutoSubtitleStylingHelp": "Este modo mudará automaticamente entre mecanismos de estilos de legendas nativos e personalizados com base no tipo do teu dispositivo.", + "Custom": "Personalizado" } From 040d0330a0ac9487464f82c6e8a14597def54bf0 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Tue, 11 Feb 2025 18:30:51 +0000 Subject: [PATCH 015/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 3068935fdd..760dc6d9a8 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1989,10 +1989,10 @@ "HeaderNextEpisode": "Próximo episódio", "LabelMediaSegmentProviders": "Fornecedores de segmentos de multimédia", "MediaSegmentProvidersHelp": "Ativa e classifica os teus fornecedores de segmentos de multimédia preferidos por ordem de prioridade.", - "AutoSubtitleStylingHelp": "Este modo mudará automaticamente entre mecanismos de estilos de legendas nativos e personalizados com base no tipo do teu dispositivo.", + "AutoSubtitleStylingHelp": "Este modo alterna automaticamente entre os mecanismos de estilo de legendas nativo e personalizado com base no teu tipo de dispositivo.", "Custom": "Personalizado", - "CustomSubtitleStylingHelp": "Estilos de legendas funcionarão na maioria dos dispositivos, mas com carga de rendimento adicional.", + "CustomSubtitleStylingHelp": "O estilo de legendas funciona na maioria dos dispositivos, mas tem uma sobrecarga de desempenho adicional.", "LabelSubtitleStyling": "Estilo de legendas", "Native": "Nativo", - "NativeSubtitleStylingHelp": "Estilos de legendas não funcionarão na maioria dos dispositivos. Contudo, não causa carga de rendimento adicional." + "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho." } From 8b974a8074b9e473e2fbeb26cad544701ae5ad56 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Tue, 11 Feb 2025 18:30:35 +0000 Subject: [PATCH 016/235] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index c9303f75bf..952d2ea265 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1987,6 +1987,10 @@ "LabelMediaSegmentProviders": "Fornecedores de segmentos de multimédia", "MediaSegmentProvidersHelp": "Ativa e classifica os teus fornecedores de segmentos de multimédia preferidos por ordem de prioridade.", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrai somente os fotogramas-chave para um processamento significativamente mais rápido com temporização menos precisa. Se o descodificador de hardware configurado não suportar esse modo, será utilizado o descodificador de software.", - "AutoSubtitleStylingHelp": "Este modo mudará automaticamente entre mecanismos de estilos de legendas nativos e personalizados com base no tipo do teu dispositivo.", - "Custom": "Personalizado" + "AutoSubtitleStylingHelp": "Este modo alterna automaticamente entre os mecanismos de estilo de legendas nativo e personalizado com base no teu tipo de dispositivo.", + "Custom": "Personalizado", + "CustomSubtitleStylingHelp": "O estilo de legendas funciona na maioria dos dispositivos, mas tem uma sobrecarga de desempenho adicional.", + "LabelSubtitleStyling": "Estilo de legendas", + "Native": "Nativo", + "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho." } From 218912dffdfbb99a704745c64342245e71a9228b Mon Sep 17 00:00:00 2001 From: koreapyj Date: Wed, 12 Feb 2025 09:17:06 +0000 Subject: [PATCH 017/235] Translated using Weblate (Korean) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/ --- src/strings/ko.json | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/strings/ko.json b/src/strings/ko.json index 6429055b27..0a4e328379 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -1064,7 +1064,7 @@ "ErrorAddingMediaPathToVirtualFolder": "미디어 경로를 추가하는 중에 오류가 발생했습니다. 경로가 유효하고 Jellyfin이 해당 위치에 액세스 할 수 있는지 확인하세요.", "ErrorGettingTvLineups": "TV 구성을 다운로드 하는 중에 오류가 발생하였습니다. 정보가 맞는지 확인한 후 다시 시도해 주세요.", "BoxRear": "박스 (후면)", - "Absolute": "정확한", + "Absolute": "에피소드 번호", "LabelDropShadow": "그림자 효과", "LabelDiscNumber": "디스크 번호", "Identify": "식별자", @@ -1390,7 +1390,7 @@ "TvLibraryHelp": "{0} TV 이름 지정 가이드 {1}를 검토하세요.", "ThumbCard": "미리보기 카드", "Thumb": "미리보기", - "TheseSettingsAffectSubtitlesOnThisDevice": "이 설정은이 기기의 자막에 영향을 줍니다", + "TheseSettingsAffectSubtitlesOnThisDevice": "이 설정은 이 기기의 자막에 적용됩니다", "TabRepositories": "저장소", "SyncPlayAccessHelp": "이 사용자가 SyncPlay 기능에 대한 액세스 수준을 선택합니다. SyncPlay를 사용하면 다른 장치와 재생을 동기화 할 수 있습니다.", "Subtitle": "자막", @@ -1974,5 +1974,15 @@ "PasswordMissingSaveError": "새 비밀번호는 공백일 수 없습니다.", "LabelDuration": "길이", "LabelSaveTrickplayLocallyHelp": "쉬운 마이그레이션과 관리를 위해 트릭플레이 이미지를 미디어 폴더에 미디어와 함께 저장합니다.", - "HeaderAudioAdvanced": "오디오 고급" + "HeaderAudioAdvanced": "오디오 고급", + "HeaderNextEpisode": "다음 에피소드", + "HeaderNextVideo": "다음 동영상", + "LabelMediaSegmentProviders": "미디어 세그먼트 제공자", + "MediaInfoRotation": "회전", + "AutoSubtitleStylingHelp": "자막 스타일 적용 수단을 [자동]으로 설정하면 장치에서 사용 가능한 경우 [표준] 설정이 선택되고 그렇지 않으면 [사용자 정의] 설정이 선택됩니다.", + "Custom": "사용자 정의", + "CustomSubtitleStylingHelp": "자막 스타일 적용 수단을 [사용자 정의]로 설정하면 대부분의 장치에서 자막 스타일이 작동하지만 성능에 지장을 줄 수 있습니다.", + "LabelSubtitleStyling": "자막 스타일 적용 수단", + "Native": "표준", + "NativeSubtitleStylingHelp": "자막 스타일 적용 수단을 [표준]으로 설정하면 성능상 이득이 있지만 일부 장치에서 자막 스타일이 작동하지 않을 수 있습니다." } From 973ac5f329615412841985e0a54ed3b130f97e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20W=C3=BCnderich?= Date: Thu, 13 Feb 2025 18:57:05 +0100 Subject: [PATCH 018/235] Add Firefox 134+ to list of HEVC-supporting browsers (#5876) * Add Firefox 121+ to list of HEVC-supporting browsers Mozilla implemented support for HEVC decoding using WMF on Windows. Support for HEVC playback is being tested anyway using the canPlayHevc() function, so this should be a safe change for other operating systems (or systems without hardware HEVC decoding) as well. Fixes #5706 * Raise minimum Firefox version to 132 for HEVC playback HEVC 10bit was broken before, but the support seems to be mores table now * Raise minimum Firefox version to 134 for HEVC playback Support is now officially supported as per version 134 Co-authored-by: gnattu --------- Co-authored-by: gnattu --- src/scripts/browserDeviceProfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 8e43b1fb2f..f051d4a122 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -651,7 +651,7 @@ export default function (options) { } if (canPlayHevc(videoTestElement, options) - && (browser.edgeChromium || browser.safari || browser.tizen || browser.web0s || (browser.chrome && (!browser.android || browser.versionMajor >= 105)) || (browser.opera && !browser.mobile))) { + && (browser.edgeChromium || browser.safari || browser.tizen || browser.web0s || (browser.chrome && (!browser.android || browser.versionMajor >= 105)) || (browser.opera && !browser.mobile) || (browser.firefox && browser.versionMajor >= 134))) { // Chromium used to support HEVC on Android but not via MSE hlsInFmp4VideoCodecs.push('hevc'); } From 578c643731d432db6f1eb1c068f925d6aa43d0fe Mon Sep 17 00:00:00 2001 From: ItsAllAboutTheCode <52703+ItsAllAboutTheCode@users.noreply.github.com> Date: Thu, 13 Feb 2025 12:00:01 -0600 Subject: [PATCH 019/235] Updated the theme media player to playback content in a Random order --- CONTRIBUTORS.md | 1 + src/components/themeMediaPlayer.js | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index f73bfe3d4e..c79fa08ca9 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -94,6 +94,7 @@ - [iFraan](https://github.com/iFraan) - [Ali](https://github.com/bu3alwa) - [K. Kyle Puchkov](https://github.com/kepper104) +- [ItsAllAboutTheCode](https://github.com/ItsAllAboutTheCode) ## Emby Contributors diff --git a/src/components/themeMediaPlayer.js b/src/components/themeMediaPlayer.js index 87d86b7a4b..dacef3228f 100644 --- a/src/components/themeMediaPlayer.js +++ b/src/components/themeMediaPlayer.js @@ -10,6 +10,7 @@ import { queryClient } from 'utils/query/queryClient'; import { playbackManager } from './playback/playbackmanager'; import ServerConnections from './ServerConnections'; +import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client'; let currentOwnerId; let currentThemeIds = []; @@ -96,8 +97,12 @@ async function loadThemeMedia(serverId, itemId) { return; } - const { data: themeMedia } = await getLibraryApi(api) - .getThemeMedia({ userId, itemId: item.Id, inheritFromParent: true }); + const { data: themeMedia } = await getLibraryApi(api).getThemeMedia({ + userId, + itemId: item.Id, + inheritFromParent: true, + sortBy: [ItemSortBy.Random] + }); const result = userSettings.enableThemeVideos() && themeMedia.ThemeVideosResult?.Items?.length ? themeMedia.ThemeVideosResult : themeMedia.ThemeSongsResult; From 2ed007f50803078aa0a91a58217a4cfee662cd3b Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 13 Feb 2025 15:44:56 -0500 Subject: [PATCH 020/235] Remove unused eslint globals --- .eslintrc.js | 11 ----------- src/controllers/livetv/livetvschedule.js | 4 ++-- src/scripts/livetvcomponents.js | 6 +----- 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2c750c847c..cb8df6623d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -228,15 +228,12 @@ module.exports = { }, env: { node: false, - amd: true, browser: true, es6: true, es2017: true, es2020: true }, globals: { - // Browser globals - 'MediaMetadata': 'readonly', // Tizen globals 'tizen': 'readonly', 'webapis': 'readonly', @@ -249,19 +246,11 @@ module.exports = { 'ApiClient': 'writable', 'Events': 'writable', 'chrome': 'writable', - 'DlnaProfilePage': 'writable', 'DashboardPage': 'writable', 'Emby': 'readonly', - 'Globalize': 'writable', 'Hls': 'writable', 'LibraryMenu': 'writable', - 'LinkParser': 'writable', - 'LiveTvHelpers': 'writable', - 'Loading': 'writable', 'MetadataEditor': 'writable', - 'ServerNotifications': 'writable', - 'TaskButton': 'writable', - 'UserParentalControlPage': 'writable', 'Windows': 'readonly', // Build time definitions __COMMIT_SHA__: 'readonly', diff --git a/src/controllers/livetv/livetvschedule.js b/src/controllers/livetv/livetvschedule.js index 84d51b6513..2ececff07a 100644 --- a/src/controllers/livetv/livetvschedule.js +++ b/src/controllers/livetv/livetvschedule.js @@ -2,12 +2,12 @@ import cardBuilder from 'components/cardbuilder/cardBuilder'; import imageLoader from 'components/images/imageLoader'; import layoutManager from 'components/layoutManager'; import loading from 'components/loading/loading'; +import { getTimersHtml } from 'scripts/livetvcomponents'; import { getBackdropShape } from 'utils/card'; import Dashboard from 'utils/dashboard'; import 'elements/emby-button/emby-button'; import 'elements/emby-itemscontainer/emby-itemscontainer'; -import 'scripts/livetvcomponents'; function enableScrollX() { return !layoutManager.desktop; @@ -71,7 +71,7 @@ function renderActiveRecordings(context, promise) { } function renderTimers(context, timers, options) { - LiveTvHelpers.getTimersHtml(timers, options).then(function (html) { + getTimersHtml(timers, options).then(function (html) { const elem = context; if (html) { diff --git a/src/scripts/livetvcomponents.js b/src/scripts/livetvcomponents.js index 68a2c53453..6f35db3cae 100644 --- a/src/scripts/livetvcomponents.js +++ b/src/scripts/livetvcomponents.js @@ -8,7 +8,7 @@ function enableScrollX() { return !layoutManager.desktop; } -function getTimersHtml(timers, options) { +export function getTimersHtml(timers, options) { options = options || {}; const items = timers.map(function (t) { @@ -102,7 +102,3 @@ function getTimersHtml(timers, options) { } return Promise.resolve(html); } - -window.LiveTvHelpers = { - getTimersHtml: getTimersHtml -}; From 8cc88fb08c7ef3b4fb3874eb8e2d7346b4c10445 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 13 Feb 2025 15:59:57 -0500 Subject: [PATCH 021/235] Remove DashboardPage global --- .eslintrc.js | 1 - src/apps/dashboard/controllers/dashboard.js | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index cb8df6623d..3051ae4f77 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -246,7 +246,6 @@ module.exports = { 'ApiClient': 'writable', 'Events': 'writable', 'chrome': 'writable', - 'DashboardPage': 'writable', 'Emby': 'readonly', 'Hls': 'writable', 'LibraryMenu': 'writable', diff --git a/src/apps/dashboard/controllers/dashboard.js b/src/apps/dashboard/controllers/dashboard.js index 1ffa88be60..119fe8e670 100644 --- a/src/apps/dashboard/controllers/dashboard.js +++ b/src/apps/dashboard/controllers/dashboard.js @@ -394,7 +394,7 @@ function renderRunningTasks(view, tasks) { view.querySelector('#divRunningTasks').innerHTML = html; } -window.DashboardPage = { +const DashboardPage = { startInterval: function (apiClient) { apiClient.sendMessage('SessionsStart', '0,1500'); apiClient.sendMessage('ScheduledTasksInfoStart', '0,1000'); @@ -741,6 +741,7 @@ window.DashboardPage = { }); } }; + export default function (view) { function onRestartRequired(evt, apiClient) { console.debug('onRestartRequired not implemented', evt, apiClient); From 9c6ea4b525d5555ed1fd1a61d9237dba7d3ecec0 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 13 Feb 2025 16:13:38 -0500 Subject: [PATCH 022/235] Remove MetadataEditor global --- .eslintrc.js | 1 - src/controllers/edititemmetadata.js | 14 ++++++++------ src/scripts/editorsidebar.js | 17 +++-------------- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 3051ae4f77..21ae7e28e4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -249,7 +249,6 @@ module.exports = { 'Emby': 'readonly', 'Hls': 'writable', 'LibraryMenu': 'writable', - 'MetadataEditor': 'writable', 'Windows': 'readonly', // Build time definitions __COMMIT_SHA__: 'readonly', diff --git a/src/controllers/edititemmetadata.js b/src/controllers/edititemmetadata.js index a5ac202cc7..5502772db9 100644 --- a/src/controllers/edititemmetadata.js +++ b/src/controllers/edititemmetadata.js @@ -1,5 +1,5 @@ -import loading from '../components/loading/loading'; -import '../scripts/editorsidebar'; +import loading from 'components/loading/loading'; +import { getCurrentItemId, setCurrentItemId } from 'scripts/editorsidebar'; function reload(context, itemId) { loading.show(); @@ -16,14 +16,16 @@ function reload(context, itemId) { export default function (view) { view.addEventListener('viewshow', function () { - reload(this, MetadataEditor.getCurrentItemId()); + reload(this, getCurrentItemId()); }); - MetadataEditor.setCurrentItemId(null); + + setCurrentItemId(null); + view.querySelector('.libraryTree').addEventListener('itemclicked', function (event) { const data = event.detail; - if (data.id != MetadataEditor.getCurrentItemId()) { - MetadataEditor.setCurrentItemId(data.id); + if (data.id != getCurrentItemId()) { + setCurrentItemId(data.id); reload(view, data.id); } }); diff --git a/src/scripts/editorsidebar.js b/src/scripts/editorsidebar.js index 37094e5d03..0074d34260 100644 --- a/src/scripts/editorsidebar.js +++ b/src/scripts/editorsidebar.js @@ -287,11 +287,12 @@ function updateEditorNode(page, item) { } } -function setCurrentItemId(id) { +let itemId; +export function setCurrentItemId(id) { itemId = id; } -function getCurrentItemId() { +export function getCurrentItemId() { if (itemId) { return itemId; } @@ -326,16 +327,4 @@ $(document).on('itemsaved', '.metadataEditorPage', function (e, item) { .off('open_node.jstree', onNodeOpen) .off('load_node.jstree', onNodeOpen); }); -let itemId; -window.MetadataEditor = { - getItemPromise: function () { - const currentItemId = getCurrentItemId(); - if (currentItemId) { - return ApiClient.getItem(Dashboard.getCurrentUserId(), currentItemId); - } - return ApiClient.getRootFolder(Dashboard.getCurrentUserId()); - }, - getCurrentItemId: getCurrentItemId, - setCurrentItemId: setCurrentItemId -}; /* eslint-enable @typescript-eslint/naming-convention */ From ad053d6656faa3cbe4b483c1aa451f6d9cde2a23 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 29 Aug 2024 13:50:26 -0400 Subject: [PATCH 023/235] Add TablePage component --- src/apps/dashboard/components/TablePage.tsx | 46 ++++++++++++++++++++ src/apps/dashboard/routes/activity/index.tsx | 32 +++----------- src/components/Page.tsx | 6 ++- 3 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 src/apps/dashboard/components/TablePage.tsx diff --git a/src/apps/dashboard/components/TablePage.tsx b/src/apps/dashboard/components/TablePage.tsx new file mode 100644 index 0000000000..2061730996 --- /dev/null +++ b/src/apps/dashboard/components/TablePage.tsx @@ -0,0 +1,46 @@ +import Box from '@mui/material/Box/Box'; +import Typography from '@mui/material/Typography/Typography'; +import { type MRT_RowData, type MRT_TableInstance, MaterialReactTable } from 'material-react-table'; +import React from 'react'; + +import Page, { type PageProps } from 'components/Page'; + +interface TablePageProps extends PageProps { + title: string + table: MRT_TableInstance +} + +const TablePage = ({ + title, + table, + ...pageProps +}: TablePageProps) => { + return ( + + + + + {title} + + + + + + ); +}; + +export default TablePage; diff --git a/src/apps/dashboard/routes/activity/index.tsx b/src/apps/dashboard/routes/activity/index.tsx index 5b0e328777..2b424c9e5a 100644 --- a/src/apps/dashboard/routes/activity/index.tsx +++ b/src/apps/dashboard/routes/activity/index.tsx @@ -2,11 +2,9 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import type { ActivityLogEntry } from '@jellyfin/sdk/lib/generated-client/models/activity-log-entry'; import { LogLevel } from '@jellyfin/sdk/lib/generated-client/models/log-level'; import type { UserDto } from '@jellyfin/sdk/lib/generated-client/models/user-dto'; -import Box from '@mui/material/Box'; import ToggleButton from '@mui/material/ToggleButton'; import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; -import Typography from '@mui/material/Typography'; -import { type MRT_ColumnDef, MaterialReactTable, useMaterialReactTable } from 'material-react-table'; +import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; import { useSearchParams } from 'react-router-dom'; import { useLogEntries } from 'apps/dashboard/features/activity/api/useLogEntries'; @@ -15,12 +13,13 @@ import LogLevelCell from 'apps/dashboard/features/activity/components/LogLevelCe import OverviewCell from 'apps/dashboard/features/activity/components/OverviewCell'; import UserAvatarButton from 'apps/dashboard/features/activity/components/UserAvatarButton'; import type { ActivityLogEntryCell } from 'apps/dashboard/features/activity/types/ActivityLogEntryCell'; -import Page from 'components/Page'; import { useUsers } from 'hooks/useUsers'; import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; import globalize from 'lib/globalize'; import { toBoolean } from 'utils/string'; +import TablePage from '../components/TablePage'; + type UsersRecords = Record; const DEFAULT_PAGE_SIZE = 25; @@ -229,31 +228,12 @@ const Activity = () => { }); return ( - - - - - {globalize.translate('HeaderActivity')} - - - - - + table={table} + /> ); }; diff --git a/src/components/Page.tsx b/src/components/Page.tsx index 6787e8f545..f3f9db7249 100644 --- a/src/components/Page.tsx +++ b/src/components/Page.tsx @@ -2,7 +2,7 @@ import React, { type FC, type PropsWithChildren, type HTMLAttributes, useEffect, import viewManager from './viewManager/viewManager'; -type PageProps = { +type CustomPageProps = { id: string, // id is required for libraryMenu title?: string, isBackButtonEnabled?: boolean, @@ -12,11 +12,13 @@ type PageProps = { backDropType?: string, }; +export type PageProps = CustomPageProps & HTMLAttributes; + /** * Page component that handles hiding active non-react views, triggering the required events for * navigation and appRouter state updates, and setting the correct classes and data attributes. */ -const Page: FC>> = ({ +const Page: FC> = ({ children, id, className = '', From 9c0aa85c46d39dbbe4c5d7085626f45a6d7e5aed Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 30 Aug 2024 10:10:58 -0400 Subject: [PATCH 024/235] Rewrite devices page in react --- .../drawer/sections/DevicesDrawerSection.tsx | 8 + .../features/devices/api/useDevices.ts | 36 ++++ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/devices/index.tsx | 166 ++++++++++++++++++ src/strings/en-us.json | 1 + 5 files changed, 212 insertions(+) create mode 100644 src/apps/dashboard/features/devices/api/useDevices.ts create mode 100644 src/apps/dashboard/routes/devices/index.tsx diff --git a/src/apps/dashboard/components/drawer/sections/DevicesDrawerSection.tsx b/src/apps/dashboard/components/drawer/sections/DevicesDrawerSection.tsx index 18fcb010e8..b8ea68e708 100644 --- a/src/apps/dashboard/components/drawer/sections/DevicesDrawerSection.tsx +++ b/src/apps/dashboard/components/drawer/sections/DevicesDrawerSection.tsx @@ -27,6 +27,14 @@ const DevicesDrawerSection = () => { + + + + + + + + diff --git a/src/apps/dashboard/features/devices/api/useDevices.ts b/src/apps/dashboard/features/devices/api/useDevices.ts new file mode 100644 index 0000000000..8335f90876 --- /dev/null +++ b/src/apps/dashboard/features/devices/api/useDevices.ts @@ -0,0 +1,36 @@ +import type { DevicesApiGetDevicesRequest } from '@jellyfin/sdk/lib/generated-client'; +import type { AxiosRequestConfig } from 'axios'; +import type { Api } from '@jellyfin/sdk'; +import { getDevicesApi } from '@jellyfin/sdk/lib/utils/api/devices-api'; +import { useQuery } from '@tanstack/react-query'; + +import { useApi } from 'hooks/useApi'; + +const fetchDevices = async ( + api?: Api, + requestParams?: DevicesApiGetDevicesRequest, + options?: AxiosRequestConfig +) => { + if (!api) { + console.warn('[fetchDevices] No API instance available'); + return; + } + + const response = await getDevicesApi(api).getDevices(requestParams, { + signal: options?.signal + }); + + return response.data; +}; + +export const useDevices = ( + requestParams: DevicesApiGetDevicesRequest +) => { + const { api } = useApi(); + return useQuery({ + queryKey: ['Devices', requestParams], + queryFn: ({ signal }) => + fetchDevices(api, requestParams, { signal }), + enabled: !!api + }); +}; diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index eb42010cf3..0cda4e2595 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -4,6 +4,7 @@ import { AppType } from 'constants/appType'; export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'activity', type: AppType.Dashboard }, { path: 'branding', type: AppType.Dashboard }, + { path: 'devices2', page: 'devices', type: AppType.Dashboard }, { path: 'keys', type: AppType.Dashboard }, { path: 'logs', type: AppType.Dashboard }, { path: 'playback/trickplay', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx new file mode 100644 index 0000000000..b8b1b91aa4 --- /dev/null +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -0,0 +1,166 @@ +import type { DeviceInfoDto } from '@jellyfin/sdk/lib/generated-client/models/device-info-dto'; +import Delete from '@mui/icons-material/Delete'; +import Edit from '@mui/icons-material/Edit'; +import Box from '@mui/material/Box/Box'; +import Button from '@mui/material/Button/Button'; +import IconButton from '@mui/material/IconButton/IconButton'; +import Tooltip from '@mui/material/Tooltip/Tooltip'; +import React, { useMemo } from 'react'; + +import TablePage from 'apps/dashboard/components/TablePage'; +import { useDevices } from 'apps/dashboard/features/devices/api/useDevices'; +import globalize from 'lib/globalize'; +import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; +import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; +import { useApi } from 'hooks/useApi'; +import { getDeviceIcon } from 'utils/image'; +import UserAvatarButton from 'apps/dashboard/features/activity/components/UserAvatarButton'; +import { useUsers } from 'hooks/useUsers'; +import type { UserDto } from '@jellyfin/sdk/lib/generated-client/models/user-dto'; + +type UsersRecords = Record; + +const DevicesPage = () => { + const { api } = useApi(); + const { data: devices, isLoading: isDevicesLoading } = useDevices({}); + const { data: usersData, isLoading: isUsersLoading } = useUsers(); + + const isLoading = isDevicesLoading || isUsersLoading; + + const users: UsersRecords = useMemo(() => { + if (!usersData) return {}; + + return usersData.reduce((acc, user) => { + const userId = user.Id; + if (!userId) return acc; + + return { + ...acc, + [userId]: user + }; + }, {}); + }, [ usersData ]); + + const columns = useMemo[]>(() => [ + { + id: 'DateLastActivity', + accessorFn: row => parseISO8601Date(row.DateLastActivity), + header: globalize.translate('LabelTime'), + size: 160, + Cell: ({ cell }) => toLocaleString(cell.getValue()), + filterVariant: 'datetime-range', + enableEditing: false + }, + { + id: 'Name', + accessorFn: row => row.CustomName || row.Name, + header: globalize.translate('LabelDevice'), + size: 200, + Cell: ({ row, renderedCellValue }) => ( + <> + {row.original.AppName + {renderedCellValue} + + ) + }, + { + id: 'App', + accessorFn: row => [row.AppName, row.AppVersion] + .filter(v => !!v) // filter missing values + .join(' '), + header: globalize.translate('LabelAppName'), + size: 200, + enableEditing: false + }, + { + accessorKey: 'LastUserName', + header: globalize.translate('LabelUser'), + size: 120, + enableEditing: false, + Cell: ({ row, renderedCellValue }) => ( + <> + + {renderedCellValue} + + ) + } + ], [ users ]); + + const mrTable = useMaterialReactTable({ + columns, + data: devices?.Items || [], + + // Enable custom features + enableColumnPinning: true, + enableColumnResizing: true, + enableEditing: true, + + // Sticky header/footer + enableStickyFooter: true, + enableStickyHeader: true, + muiTableContainerProps: { + sx: { + maxHeight: 'calc(100% - 7rem)' // 2 x 3.5rem for header and footer + } + }, + + // State + initialState: { + pagination: { + pageIndex: 0, + pageSize: 25 + } + }, + state: { + isLoading + }, + + // Custom actions + enableRowActions: true, + positionActionsColumn: 'last', + renderRowActions: ({ row, table }) => ( + + + table.setEditingRow(row)} + > + + + + + + + + + + ), + + // Custom toolbar contents + renderTopToolbarCustomActions: () => ( + + ) + }); + + return ( + + ); +}; + +export default DevicesPage; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 9c69f90285..8770151ff2 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -661,6 +661,7 @@ "LabelDelimiterWhitelist": "Delimiter Whitelist", "LabelDelimiterWhitelistHelp": "Items to be excluded from tag splitting. One item per line.", "LabelDeveloper": "Developer", + "LabelDevice": "Device", "LabelDisableCustomCss": "Disable custom CSS code for theming/branding provided from the server.", "LabelDisableVbrAudioEncoding": "Disable VBR audio encoding", "LabelDiscNumber": "Disc number", From 538c0b64ff9452c2c3cbb74ef6898951809da783 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 26 Jan 2025 01:11:30 -0500 Subject: [PATCH 025/235] Update import for TablePage --- src/apps/dashboard/routes/activity/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/apps/dashboard/routes/activity/index.tsx b/src/apps/dashboard/routes/activity/index.tsx index 2b424c9e5a..a9734c774b 100644 --- a/src/apps/dashboard/routes/activity/index.tsx +++ b/src/apps/dashboard/routes/activity/index.tsx @@ -7,6 +7,7 @@ import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; import { useSearchParams } from 'react-router-dom'; +import TablePage from 'apps/dashboard/components/TablePage'; import { useLogEntries } from 'apps/dashboard/features/activity/api/useLogEntries'; import ActionsCell from 'apps/dashboard/features/activity/components/ActionsCell'; import LogLevelCell from 'apps/dashboard/features/activity/components/LogLevelCell'; @@ -18,8 +19,6 @@ import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; import globalize from 'lib/globalize'; import { toBoolean } from 'utils/string'; -import TablePage from '../components/TablePage'; - type UsersRecords = Record; const DEFAULT_PAGE_SIZE = 25; From e10aef993379321a65e9d7f793d778d2fbc5bed1 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 30 Jan 2025 12:43:55 -0500 Subject: [PATCH 026/235] Add device deletion support --- src/apps/dashboard/components/TablePage.tsx | 17 ++ .../activity/components/UserAvatarButton.tsx | 12 +- .../features/devices/api/useDeleteDevice.ts | 24 ++ .../features/devices/api/useDevices.ts | 4 +- .../features/devices/api/useUpdateDevice.ts | 24 ++ src/apps/dashboard/routes/activity/index.tsx | 46 +--- src/apps/dashboard/routes/devices/index.tsx | 254 ++++++++++++------ src/hooks/useUsers.ts | 25 +- 8 files changed, 286 insertions(+), 120 deletions(-) create mode 100644 src/apps/dashboard/features/devices/api/useDeleteDevice.ts create mode 100644 src/apps/dashboard/features/devices/api/useUpdateDevice.ts diff --git a/src/apps/dashboard/components/TablePage.tsx b/src/apps/dashboard/components/TablePage.tsx index 2061730996..4e5daef2a5 100644 --- a/src/apps/dashboard/components/TablePage.tsx +++ b/src/apps/dashboard/components/TablePage.tsx @@ -10,9 +10,25 @@ interface TablePageProps extends PageProps { table: MRT_TableInstance } +export const DEFAULT_TABLE_OPTIONS = { + // Enable custom features + enableColumnPinning: true, + enableColumnResizing: true, + + // Sticky header/footer + enableStickyFooter: true, + enableStickyHeader: true, + muiTableContainerProps: { + sx: { + maxHeight: 'calc(100% - 7rem)' // 2 x 3.5rem for header and footer + } + } +}; + const TablePage = ({ title, table, + children, ...pageProps }: TablePageProps) => { return ( @@ -39,6 +55,7 @@ const TablePage = ({ + {children} ); }; diff --git a/src/apps/dashboard/features/activity/components/UserAvatarButton.tsx b/src/apps/dashboard/features/activity/components/UserAvatarButton.tsx index 91f126e92c..e8f4530de3 100644 --- a/src/apps/dashboard/features/activity/components/UserAvatarButton.tsx +++ b/src/apps/dashboard/features/activity/components/UserAvatarButton.tsx @@ -1,4 +1,5 @@ import type { UserDto } from '@jellyfin/sdk/lib/generated-client/models/user-dto'; +import type { SxProps, Theme } from '@mui/material'; import IconButton from '@mui/material/IconButton/IconButton'; import React, { type FC } from 'react'; import { Link } from 'react-router-dom'; @@ -7,14 +8,21 @@ import UserAvatar from 'components/UserAvatar'; interface UserAvatarButtonProps { user?: UserDto + sx?: SxProps } -const UserAvatarButton: FC = ({ user }) => ( +const UserAvatarButton: FC = ({ + user, + sx +}) => ( user?.Id ? ( { + const { api } = useApi(); + + return useMutation({ + mutationFn: (params: DevicesApiDeleteDeviceRequest) => ( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + getDevicesApi(api!) + .deleteDevice(params) + ), + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + } + }); +}; diff --git a/src/apps/dashboard/features/devices/api/useDevices.ts b/src/apps/dashboard/features/devices/api/useDevices.ts index 8335f90876..782383078f 100644 --- a/src/apps/dashboard/features/devices/api/useDevices.ts +++ b/src/apps/dashboard/features/devices/api/useDevices.ts @@ -6,6 +6,8 @@ import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; +export const QUERY_KEY = 'Devices'; + const fetchDevices = async ( api?: Api, requestParams?: DevicesApiGetDevicesRequest, @@ -28,7 +30,7 @@ export const useDevices = ( ) => { const { api } = useApi(); return useQuery({ - queryKey: ['Devices', requestParams], + queryKey: [QUERY_KEY, requestParams], queryFn: ({ signal }) => fetchDevices(api, requestParams, { signal }), enabled: !!api diff --git a/src/apps/dashboard/features/devices/api/useUpdateDevice.ts b/src/apps/dashboard/features/devices/api/useUpdateDevice.ts new file mode 100644 index 0000000000..740c5ca67b --- /dev/null +++ b/src/apps/dashboard/features/devices/api/useUpdateDevice.ts @@ -0,0 +1,24 @@ +import type { DevicesApiUpdateDeviceOptionsRequest } from '@jellyfin/sdk/lib/generated-client/api/devices-api'; +import { getDevicesApi } from '@jellyfin/sdk/lib/utils/api/devices-api'; +import { useMutation } from '@tanstack/react-query'; + +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; +import { QUERY_KEY } from './useDevices'; + +export const useUpdateDevice = () => { + const { api } = useApi(); + + return useMutation({ + mutationFn: (params: DevicesApiUpdateDeviceOptionsRequest) => ( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + getDevicesApi(api!) + .updateDeviceOptions(params) + ), + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + } + }); +}; diff --git a/src/apps/dashboard/routes/activity/index.tsx b/src/apps/dashboard/routes/activity/index.tsx index a9734c774b..2793ff4fe1 100644 --- a/src/apps/dashboard/routes/activity/index.tsx +++ b/src/apps/dashboard/routes/activity/index.tsx @@ -1,26 +1,23 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import type { ActivityLogEntry } from '@jellyfin/sdk/lib/generated-client/models/activity-log-entry'; import { LogLevel } from '@jellyfin/sdk/lib/generated-client/models/log-level'; -import type { UserDto } from '@jellyfin/sdk/lib/generated-client/models/user-dto'; import ToggleButton from '@mui/material/ToggleButton'; import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; import { useSearchParams } from 'react-router-dom'; -import TablePage from 'apps/dashboard/components/TablePage'; +import TablePage, { DEFAULT_TABLE_OPTIONS } from 'apps/dashboard/components/TablePage'; import { useLogEntries } from 'apps/dashboard/features/activity/api/useLogEntries'; import ActionsCell from 'apps/dashboard/features/activity/components/ActionsCell'; import LogLevelCell from 'apps/dashboard/features/activity/components/LogLevelCell'; import OverviewCell from 'apps/dashboard/features/activity/components/OverviewCell'; import UserAvatarButton from 'apps/dashboard/features/activity/components/UserAvatarButton'; import type { ActivityLogEntryCell } from 'apps/dashboard/features/activity/types/ActivityLogEntryCell'; -import { useUsers } from 'hooks/useUsers'; +import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; import globalize from 'lib/globalize'; import { toBoolean } from 'utils/string'; -type UsersRecords = Record; - const DEFAULT_PAGE_SIZE = 25; const VIEW_PARAM = 'useractivity'; @@ -53,29 +50,7 @@ const Activity = () => { pageSize: DEFAULT_PAGE_SIZE }); - const { data: usersData, isLoading: isUsersLoading } = useUsers(); - - const users: UsersRecords = useMemo(() => { - if (!usersData) return {}; - - return usersData.reduce((acc, user) => { - const userId = user.Id; - if (!userId) return acc; - - return { - ...acc, - [userId]: user - }; - }, {}); - }, [ usersData ]); - - const userNames = useMemo(() => { - const names: string[] = []; - usersData?.forEach(user => { - if (user.Name) names.push(user.Name); - }); - return names; - }, [ usersData ]); + const { usersById: users, names: userNames, isLoading: isUsersLoading } = useUsersDetails(); const UserCell = getUserCell(users); @@ -175,22 +150,11 @@ const Activity = () => { }, [ activityView, searchParams, setSearchParams ]); const table = useMaterialReactTable({ + ...DEFAULT_TABLE_OPTIONS, + columns, data: logEntries?.Items || [], - // Enable custom features - enableColumnPinning: true, - enableColumnResizing: true, - - // Sticky header/footer - enableStickyFooter: true, - enableStickyHeader: true, - muiTableContainerProps: { - sx: { - maxHeight: 'calc(100% - 7rem)' // 2 x 3.5rem for header and footer - } - }, - // State initialState: { density: 'compact' diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index b8b1b91aa4..e8ad8bf074 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -5,41 +5,113 @@ import Box from '@mui/material/Box/Box'; import Button from '@mui/material/Button/Button'; import IconButton from '@mui/material/IconButton/IconButton'; import Tooltip from '@mui/material/Tooltip/Tooltip'; -import React, { useMemo } from 'react'; +import React, { FC, useCallback, useMemo, useState } from 'react'; -import TablePage from 'apps/dashboard/components/TablePage'; +import TablePage, { DEFAULT_TABLE_OPTIONS } from 'apps/dashboard/components/TablePage'; import { useDevices } from 'apps/dashboard/features/devices/api/useDevices'; import globalize from 'lib/globalize'; -import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; +import { type MRT_ColumnDef, MRT_Row, useMaterialReactTable } from 'material-react-table'; import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; import { useApi } from 'hooks/useApi'; import { getDeviceIcon } from 'utils/image'; import UserAvatarButton from 'apps/dashboard/features/activity/components/UserAvatarButton'; -import { useUsers } from 'hooks/useUsers'; -import type { UserDto } from '@jellyfin/sdk/lib/generated-client/models/user-dto'; +import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; +import { useUpdateDevice } from 'apps/dashboard/features/devices/api/useUpdateDevice'; +import { useDeleteDevice } from 'apps/dashboard/features/devices/api/useDeleteDevice'; +import ConfirmDialog from 'components/ConfirmDialog'; -type UsersRecords = Record; +interface DeviceInfoCell { + renderedCellValue: React.ReactNode + row: MRT_Row +} + +const DeviceNameCell: FC = ({ row, renderedCellValue }) => ( + <> + {row.original.AppName + {renderedCellValue} + +); + +const getUserCell = (users: UsersRecords) => function UserCell({ renderedCellValue, row }: DeviceInfoCell) { + return ( + <> + + {renderedCellValue} + + ); +}; const DevicesPage = () => { const { api } = useApi(); const { data: devices, isLoading: isDevicesLoading } = useDevices({}); - const { data: usersData, isLoading: isUsersLoading } = useUsers(); + const { usersById: users, names: userNames, isLoading: isUsersLoading } = useUsersDetails(); + + const [ isDeleteConfirmOpen, setIsDeleteConfirmOpen ] = useState(false); + const [ isDeleteAllConfirmOpen, setIsDeleteAllConfirmOpen ] = useState(false); + const [ pendingDeleteDeviceId, setPendingDeleteDeviceId ] = useState(); + const deleteDevice = useDeleteDevice(); + const updateDevice = useUpdateDevice(); const isLoading = isDevicesLoading || isUsersLoading; - const users: UsersRecords = useMemo(() => { - if (!usersData) return {}; + const onDeleteDevice = useCallback((id: string | null | undefined) => () => { + if (id) { + setPendingDeleteDeviceId(id); + setIsDeleteConfirmOpen(true); + } + }, []); - return usersData.reduce((acc, user) => { - const userId = user.Id; - if (!userId) return acc; + const onCloseDeleteConfirmDialog = useCallback(() => { + setPendingDeleteDeviceId(undefined); + setIsDeleteConfirmOpen(false); + }, []); - return { - ...acc, - [userId]: user - }; - }, {}); - }, [ usersData ]); + const onConfirmDelete = useCallback(() => { + if (pendingDeleteDeviceId) { + deleteDevice.mutate({ + id: pendingDeleteDeviceId + }, { + onSettled: onCloseDeleteConfirmDialog + }); + } + }, [ deleteDevice, onCloseDeleteConfirmDialog, pendingDeleteDeviceId ]); + + const onDeleteAll = useCallback(() => { + setIsDeleteAllConfirmOpen(true); + }, []); + + const onCloseDeleteAllConfirmDialog = useCallback(() => { + setIsDeleteAllConfirmOpen(false); + }, []); + + const onConfirmDeleteAll = useCallback(() => { + if (devices?.Items) { + Promise + .all(devices.Items.map(item => { + if (api && item.Id && api.deviceInfo.id === item.Id) { + return deleteDevice.mutateAsync({ id: item.Id }); + } + return Promise.resolve(); + })) + .finally(() => { + onCloseDeleteAllConfirmDialog(); + }); + } + }, [ api, deleteDevice, devices?.Items, onCloseDeleteAllConfirmDialog ]); + + const UserCell = getUserCell(users); const columns = useMemo[]>(() => [ { @@ -56,21 +128,7 @@ const DevicesPage = () => { accessorFn: row => row.CustomName || row.Name, header: globalize.translate('LabelDevice'), size: 200, - Cell: ({ row, renderedCellValue }) => ( - <> - {row.original.AppName - {renderedCellValue} - - ) + Cell: DeviceNameCell }, { id: 'App', @@ -86,35 +144,21 @@ const DevicesPage = () => { header: globalize.translate('LabelUser'), size: 120, enableEditing: false, - Cell: ({ row, renderedCellValue }) => ( - <> - - {renderedCellValue} - - ) + Cell: UserCell, + filterVariant: 'multi-select', + filterSelectOptions: userNames } - ], [ users ]); + ], [ UserCell, userNames ]); const mrTable = useMaterialReactTable({ + ...DEFAULT_TABLE_OPTIONS, + columns, data: devices?.Items || [], - // Enable custom features - enableColumnPinning: true, - enableColumnResizing: true, - enableEditing: true, - - // Sticky header/footer - enableStickyFooter: true, - enableStickyHeader: true, - muiTableContainerProps: { - sx: { - maxHeight: 'calc(100% - 7rem)' // 2 x 3.5rem for header and footer - } - }, - // State initialState: { + density: 'compact', pagination: { pageIndex: 0, pageSize: 25 @@ -124,32 +168,73 @@ const DevicesPage = () => { isLoading }, + // Editing device name + enableEditing: true, + onEditingRowSave: ({ table, row, values }) => { + const newName = values.Name?.trim(); + const hasChanged = row.original.CustomName ? + newName !== row.original.CustomName : + newName !== row.original.Name; + + // If the name has changed, save it as the custom name + if (row.original.Id && hasChanged) { + updateDevice.mutate({ + id: row.original.Id, + deviceOptionsDto: { + CustomName: newName || undefined + } + }); + } + + table.setEditingRow(null); //exit editing mode + }, + // Custom actions enableRowActions: true, positionActionsColumn: 'last', - renderRowActions: ({ row, table }) => ( - - - table.setEditingRow(row)} - > - - - - - - - - - - ), + renderRowActions: ({ row, table }) => { + const isDeletable = api && row.original.Id && api.deviceInfo.id === row.original.Id; + return ( + + + table.setEditingRow(row)} + > + + + + {/* Don't include Tooltip when disabled */} + {isDeletable ? ( + + + + ) : ( + + + + + + )} + + ); + }, // Custom toolbar contents renderTopToolbarCustomActions: () => ( - + ) }); @@ -159,7 +244,26 @@ const DevicesPage = () => { title={globalize.translate('HeaderDevices')} className='mainAnimatedPage type-interior' table={mrTable} - /> + > + + + ); }; diff --git a/src/hooks/useUsers.ts b/src/hooks/useUsers.ts index cc62d6b2c3..3e9d1f3b6f 100644 --- a/src/hooks/useUsers.ts +++ b/src/hooks/useUsers.ts @@ -1,11 +1,13 @@ import type { AxiosRequestConfig } from 'axios'; import type { Api } from '@jellyfin/sdk'; -import type { UserApiGetUsersRequest } from '@jellyfin/sdk/lib/generated-client'; +import type { UserApiGetUsersRequest, UserDto } from '@jellyfin/sdk/lib/generated-client'; import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; import { useQuery } from '@tanstack/react-query'; import { useApi } from './useApi'; +export type UsersRecords = Record; + const fetchUsers = async ( api?: Api, requestParams?: UserApiGetUsersRequest, @@ -32,3 +34,24 @@ export const useUsers = (requestParams?: UserApiGetUsersRequest) => { enabled: !!api }); }; + +export const useUsersDetails = () => { + const { data: users, ...rest } = useUsers(); + const usersById: UsersRecords = {}; + const names: string[] = []; + + if (users) { + users.forEach(user => { + const userId = user.Id; + if (userId) usersById[userId] = user; + if (user.Name) names.push(user.Name); + }); + } + + return { + users, + usersById, + names, + ...rest + }; +}; From e7c749307cde9c82db565760f8f368d568c2ed64 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 30 Jan 2025 12:49:51 -0500 Subject: [PATCH 027/235] Move UserAvatarButton component --- .../{features/activity => }/components/UserAvatarButton.tsx | 0 src/apps/dashboard/routes/activity/index.tsx | 2 +- src/apps/dashboard/routes/devices/index.tsx | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename src/apps/dashboard/{features/activity => }/components/UserAvatarButton.tsx (100%) diff --git a/src/apps/dashboard/features/activity/components/UserAvatarButton.tsx b/src/apps/dashboard/components/UserAvatarButton.tsx similarity index 100% rename from src/apps/dashboard/features/activity/components/UserAvatarButton.tsx rename to src/apps/dashboard/components/UserAvatarButton.tsx diff --git a/src/apps/dashboard/routes/activity/index.tsx b/src/apps/dashboard/routes/activity/index.tsx index 2793ff4fe1..2c5afbd1c6 100644 --- a/src/apps/dashboard/routes/activity/index.tsx +++ b/src/apps/dashboard/routes/activity/index.tsx @@ -11,7 +11,7 @@ import { useLogEntries } from 'apps/dashboard/features/activity/api/useLogEntrie import ActionsCell from 'apps/dashboard/features/activity/components/ActionsCell'; import LogLevelCell from 'apps/dashboard/features/activity/components/LogLevelCell'; import OverviewCell from 'apps/dashboard/features/activity/components/OverviewCell'; -import UserAvatarButton from 'apps/dashboard/features/activity/components/UserAvatarButton'; +import UserAvatarButton from 'apps/dashboard/components/UserAvatarButton'; import type { ActivityLogEntryCell } from 'apps/dashboard/features/activity/types/ActivityLogEntryCell'; import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index e8ad8bf074..4d9df29793 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -14,7 +14,7 @@ import { type MRT_ColumnDef, MRT_Row, useMaterialReactTable } from 'material-rea import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; import { useApi } from 'hooks/useApi'; import { getDeviceIcon } from 'utils/image'; -import UserAvatarButton from 'apps/dashboard/features/activity/components/UserAvatarButton'; +import UserAvatarButton from 'apps/dashboard/components/UserAvatarButton'; import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; import { useUpdateDevice } from 'apps/dashboard/features/devices/api/useUpdateDevice'; import { useDeleteDevice } from 'apps/dashboard/features/devices/api/useDeleteDevice'; From 671ab3751ae64a7c8fcc108cac09b3cc3c49b981 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 30 Jan 2025 13:09:33 -0500 Subject: [PATCH 028/235] Refactor devices page components --- .../devices/components/DeviceNameCell.tsx | 22 ++++++++++ .../features/devices/types/deviceInfoCell.ts | 7 +++ src/apps/dashboard/routes/devices/index.tsx | 44 +++++-------------- 3 files changed, 41 insertions(+), 32 deletions(-) create mode 100644 src/apps/dashboard/features/devices/components/DeviceNameCell.tsx create mode 100644 src/apps/dashboard/features/devices/types/deviceInfoCell.ts diff --git a/src/apps/dashboard/features/devices/components/DeviceNameCell.tsx b/src/apps/dashboard/features/devices/components/DeviceNameCell.tsx new file mode 100644 index 0000000000..efcf8301f4 --- /dev/null +++ b/src/apps/dashboard/features/devices/components/DeviceNameCell.tsx @@ -0,0 +1,22 @@ +import React, { FC } from 'react'; + +import { DeviceInfoCell } from 'apps/dashboard/features/devices/types/deviceInfoCell'; +import { getDeviceIcon } from 'utils/image'; + +const DeviceNameCell: FC = ({ row, renderedCellValue }) => ( + <> + {row.original.AppName + {renderedCellValue} + +); + +export default DeviceNameCell; diff --git a/src/apps/dashboard/features/devices/types/deviceInfoCell.ts b/src/apps/dashboard/features/devices/types/deviceInfoCell.ts new file mode 100644 index 0000000000..e9b1af2ad9 --- /dev/null +++ b/src/apps/dashboard/features/devices/types/deviceInfoCell.ts @@ -0,0 +1,7 @@ +import type { DeviceInfoDto } from '@jellyfin/sdk/lib/generated-client/models/device-info-dto'; +import type { MRT_Row } from 'material-react-table'; + +export interface DeviceInfoCell { + renderedCellValue: React.ReactNode + row: MRT_Row +} diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index 4d9df29793..35d4dafb74 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -5,41 +5,21 @@ import Box from '@mui/material/Box/Box'; import Button from '@mui/material/Button/Button'; import IconButton from '@mui/material/IconButton/IconButton'; import Tooltip from '@mui/material/Tooltip/Tooltip'; -import React, { FC, useCallback, useMemo, useState } from 'react'; +import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; +import React, { useCallback, useMemo, useState } from 'react'; import TablePage, { DEFAULT_TABLE_OPTIONS } from 'apps/dashboard/components/TablePage'; -import { useDevices } from 'apps/dashboard/features/devices/api/useDevices'; -import globalize from 'lib/globalize'; -import { type MRT_ColumnDef, MRT_Row, useMaterialReactTable } from 'material-react-table'; -import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; -import { useApi } from 'hooks/useApi'; -import { getDeviceIcon } from 'utils/image'; import UserAvatarButton from 'apps/dashboard/components/UserAvatarButton'; -import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; -import { useUpdateDevice } from 'apps/dashboard/features/devices/api/useUpdateDevice'; import { useDeleteDevice } from 'apps/dashboard/features/devices/api/useDeleteDevice'; +import { useDevices } from 'apps/dashboard/features/devices/api/useDevices'; +import { useUpdateDevice } from 'apps/dashboard/features/devices/api/useUpdateDevice'; +import DeviceNameCell from 'apps/dashboard/features/devices/components/DeviceNameCell'; +import type { DeviceInfoCell } from 'apps/dashboard/features/devices/types/deviceInfoCell'; import ConfirmDialog from 'components/ConfirmDialog'; - -interface DeviceInfoCell { - renderedCellValue: React.ReactNode - row: MRT_Row -} - -const DeviceNameCell: FC = ({ row, renderedCellValue }) => ( - <> - {row.original.AppName - {renderedCellValue} - -); +import { useApi } from 'hooks/useApi'; +import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; +import globalize from 'lib/globalize'; +import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; const getUserCell = (users: UsersRecords) => function UserCell({ renderedCellValue, row }: DeviceInfoCell) { return ( @@ -53,7 +33,7 @@ const getUserCell = (users: UsersRecords) => function UserCell({ renderedCellVal ); }; -const DevicesPage = () => { +export const Component = () => { const { api } = useApi(); const { data: devices, isLoading: isDevicesLoading } = useDevices({}); const { usersById: users, names: userNames, isLoading: isUsersLoading } = useUsersDetails(); @@ -267,4 +247,4 @@ const DevicesPage = () => { ); }; -export default DevicesPage; +Component.displayName = 'DevicesPage'; From 674dc7aa61b4db3dcb6758ad314abb5f5eaad14b Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 30 Jan 2025 13:16:14 -0500 Subject: [PATCH 029/235] Remove legacy devices page --- .../drawer/sections/DevicesDrawerSection.tsx | 8 - .../dashboard/controllers/devices/device.html | 23 --- .../dashboard/controllers/devices/device.js | 54 ------ .../controllers/devices/devices.html | 21 --- .../dashboard/controllers/devices/devices.js | 171 ------------------ src/apps/dashboard/routes/_asyncRoutes.ts | 2 +- src/apps/dashboard/routes/_legacyRoutes.ts | 14 -- 7 files changed, 1 insertion(+), 292 deletions(-) delete mode 100644 src/apps/dashboard/controllers/devices/device.html delete mode 100644 src/apps/dashboard/controllers/devices/device.js delete mode 100644 src/apps/dashboard/controllers/devices/devices.html delete mode 100644 src/apps/dashboard/controllers/devices/devices.js diff --git a/src/apps/dashboard/components/drawer/sections/DevicesDrawerSection.tsx b/src/apps/dashboard/components/drawer/sections/DevicesDrawerSection.tsx index b8ea68e708..18fcb010e8 100644 --- a/src/apps/dashboard/components/drawer/sections/DevicesDrawerSection.tsx +++ b/src/apps/dashboard/components/drawer/sections/DevicesDrawerSection.tsx @@ -27,14 +27,6 @@ const DevicesDrawerSection = () => { - - - - - - - - diff --git a/src/apps/dashboard/controllers/devices/device.html b/src/apps/dashboard/controllers/devices/device.html deleted file mode 100644 index 45dd733f72..0000000000 --- a/src/apps/dashboard/controllers/devices/device.html +++ /dev/null @@ -1,23 +0,0 @@ -
-
-
-
-
-
-

-
- -
- -
${LabelCustomDeviceDisplayNameHelp}
-
-
-
- -
-
-
-
-
diff --git a/src/apps/dashboard/controllers/devices/device.js b/src/apps/dashboard/controllers/devices/device.js deleted file mode 100644 index 3b84b133e7..0000000000 --- a/src/apps/dashboard/controllers/devices/device.js +++ /dev/null @@ -1,54 +0,0 @@ -import loading from 'components/loading/loading'; -import dom from 'scripts/dom'; -import 'elements/emby-input/emby-input'; -import 'elements/emby-button/emby-button'; -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('.reportedName', page).innerText = device.Name || ''; -} - -function loadData() { - const page = this; - loading.show(); - const id = getParameterByName('id'); - const device = ApiClient.getJSON(ApiClient.getUrl('Devices/Info', { - Id: id - })); - const deviceOptions = ApiClient.getJSON(ApiClient.getUrl('Devices/Options', { - Id: id - })).catch(() => undefined); - Promise.all([device, deviceOptions]).then(function (responses) { - load(page, responses[0], responses[1]); - loading.hide(); - }); -} - -function save(page) { - const id = getParameterByName('id'); - ApiClient.ajax({ - url: ApiClient.getUrl('Devices/Options', { - Id: id - }), - type: 'POST', - data: JSON.stringify({ - CustomName: page.querySelector('#txtCustomName').value - }), - contentType: 'application/json' - }).then(Dashboard.processServerConfigurationUpdateResult); -} - -function onSubmit(e) { - const form = this; - save(dom.parentWithClass(form, 'page')); - e.preventDefault(); - return false; -} - -export default function (view) { - view.querySelector('form').addEventListener('submit', onSubmit); - view.addEventListener('viewshow', loadData); -} - diff --git a/src/apps/dashboard/controllers/devices/devices.html b/src/apps/dashboard/controllers/devices/devices.html deleted file mode 100644 index 3d8825a339..0000000000 --- a/src/apps/dashboard/controllers/devices/devices.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
-
-
-
-

${HeaderDevices}

- -
-
-
-
-
-
diff --git a/src/apps/dashboard/controllers/devices/devices.js b/src/apps/dashboard/controllers/devices/devices.js deleted file mode 100644 index 01dd1f1732..0000000000 --- a/src/apps/dashboard/controllers/devices/devices.js +++ /dev/null @@ -1,171 +0,0 @@ -import { formatDistanceToNow } from 'date-fns'; -import escapeHtml from 'escape-html'; - -import loading from 'components/loading/loading'; -import dom from 'scripts/dom'; -import globalize from 'lib/globalize'; -import imageHelper from 'utils/image'; -import { getLocaleWithSuffix } from 'utils/dateFnsLocale.ts'; -import 'elements/emby-button/emby-button'; -import 'elements/emby-itemscontainer/emby-itemscontainer'; -import 'components/cardbuilder/card.scss'; -import Dashboard from 'utils/dashboard'; -import confirm from 'components/confirm/confirm'; -import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; - -// Local cache of loaded -let deviceIds = []; - -function canDelete(deviceId) { - return deviceId !== ApiClient.deviceId(); -} - -function deleteAllDevices(page) { - const msg = globalize.translate('DeleteDevicesConfirmation'); - - confirm({ - text: msg, - title: globalize.translate('HeaderDeleteDevices'), - confirmText: globalize.translate('Delete'), - primary: 'delete' - }).then(async () => { - loading.show(); - await Promise.all( - deviceIds.filter(canDelete).map((id) => ApiClient.deleteDevice(id)) - ); - loadData(page); - }); -} - -function deleteDevice(page, id) { - const msg = globalize.translate('DeleteDeviceConfirmation'); - - confirm({ - text: msg, - title: globalize.translate('HeaderDeleteDevice'), - confirmText: globalize.translate('Delete'), - primary: 'delete' - }).then(async () => { - loading.show(); - await ApiClient.deleteDevice(id); - loadData(page); - }); -} - -function showDeviceMenu(view, btn, deviceId) { - const menuItems = [{ - name: globalize.translate('Edit'), - id: 'open', - icon: 'mode_edit' - }]; - - if (canDelete(deviceId)) { - menuItems.push({ - name: globalize.translate('Delete'), - id: 'delete', - icon: 'delete' - }); - } - - import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => { - actionsheet.show({ - items: menuItems, - positionTo: btn, - callback: function (id) { - switch (id) { - case 'open': - Dashboard.navigate('dashboard/devices/edit?id=' + deviceId); - break; - - case 'delete': - deleteDevice(view, deviceId); - } - } - }); - }); -} - -function load(page, devices) { - const localeWithSuffix = getLocaleWithSuffix(); - - let html = ''; - html += devices.map(function (device) { - let deviceHtml = ''; - deviceHtml += "
"; - deviceHtml += '
'; - deviceHtml += ''; - deviceHtml += '
'; - - if (canDelete(device.Id)) { - if (globalize.getIsRTL()) { - deviceHtml += '
'; - } else { - deviceHtml += '
'; - } - deviceHtml += ''; - deviceHtml += '
'; - } - - deviceHtml += "
"; - deviceHtml += escapeHtml(device.CustomName || device.Name); - deviceHtml += '
'; - deviceHtml += "
"; - deviceHtml += escapeHtml(device.AppName + ' ' + device.AppVersion); - deviceHtml += '
'; - deviceHtml += "
"; - - if (device.LastUserName) { - deviceHtml += escapeHtml(device.LastUserName); - deviceHtml += ', ' + formatDistanceToNow(Date.parse(device.DateLastActivity), localeWithSuffix); - } - - deviceHtml += ' '; - deviceHtml += '
'; - deviceHtml += '
'; - deviceHtml += '
'; - deviceHtml += '
'; - return deviceHtml; - }).join(''); - page.querySelector('.devicesList').innerHTML = html; -} - -function loadData(page) { - loading.show(); - ApiClient.getJSON(ApiClient.getUrl('Devices')).then(function (result) { - load(page, result.Items); - deviceIds = result.Items.map((device) => device.Id); - loading.hide(); - }); -} - -export default function (view) { - view.querySelector('.devicesList').addEventListener('click', function (e) { - const btnDeviceMenu = dom.parentWithClass(e.target, 'btnDeviceMenu'); - - if (btnDeviceMenu) { - showDeviceMenu(view, btnDeviceMenu, btnDeviceMenu.getAttribute('data-id')); - } - }); - view.addEventListener('viewshow', function () { - loadData(this); - }); - - view.querySelector('#deviceDeleteAll').addEventListener('click', function() { - deleteAllDevices(view); - }); -} - diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 0cda4e2595..8c65b38060 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -4,7 +4,7 @@ import { AppType } from 'constants/appType'; export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'activity', type: AppType.Dashboard }, { path: 'branding', type: AppType.Dashboard }, - { path: 'devices2', page: 'devices', type: AppType.Dashboard }, + { path: 'devices', type: AppType.Dashboard }, { path: 'keys', type: AppType.Dashboard }, { path: 'logs', type: AppType.Dashboard }, { path: 'playback/trickplay', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index c2d9359ee2..a20083e3d2 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -23,20 +23,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'networking', view: 'networking.html' } - }, { - path: 'devices', - pageProps: { - appType: AppType.Dashboard, - controller: 'devices/devices', - view: 'devices/devices.html' - } - }, { - path: 'devices/edit', - pageProps: { - appType: AppType.Dashboard, - controller: 'devices/device', - view: 'devices/device.html' - } }, { path: 'libraries', pageProps: { From fd22b8461a7e3c02a200b02e7991eb444d616f63 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 30 Jan 2025 13:25:22 -0500 Subject: [PATCH 030/235] Remove actions column label --- src/apps/dashboard/routes/devices/index.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index 35d4dafb74..1ff02377c0 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -172,6 +172,11 @@ export const Component = () => { // Custom actions enableRowActions: true, positionActionsColumn: 'last', + displayColumnDefOptions: { + 'mrt-row-actions': { + header: '' + } + }, renderRowActions: ({ row, table }) => { const isDeletable = api && row.original.Id && api.deviceInfo.id === row.original.Id; return ( From 38ffbd06e3dc9f6c6efe2bf2a1a9dab857211c14 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 30 Jan 2025 13:28:33 -0500 Subject: [PATCH 031/235] Add error logging for deleting all devices --- src/apps/dashboard/routes/devices/index.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index 1ff02377c0..7600e51b46 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -85,6 +85,9 @@ export const Component = () => { } return Promise.resolve(); })) + .catch(err => { + console.error('[DevicesPage] failed deleting all devices', err); + }) .finally(() => { onCloseDeleteAllConfirmDialog(); }); From bd328b92025301d3ad92d2f73a43657257aa8501 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 30 Jan 2025 17:36:56 -0500 Subject: [PATCH 032/235] Fix date column label and formatting --- src/apps/dashboard/routes/devices/index.tsx | 11 +++++++---- src/strings/en-us.json | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index 7600e51b46..c0ec1e96b9 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -5,6 +5,8 @@ import Box from '@mui/material/Box/Box'; import Button from '@mui/material/Button/Button'; import IconButton from '@mui/material/IconButton/IconButton'; import Tooltip from '@mui/material/Tooltip/Tooltip'; +import format from 'date-fns/format'; +import parseISO from 'date-fns/parseISO'; import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; import React, { useCallback, useMemo, useState } from 'react'; @@ -17,9 +19,9 @@ import DeviceNameCell from 'apps/dashboard/features/devices/components/DeviceNam import type { DeviceInfoCell } from 'apps/dashboard/features/devices/types/deviceInfoCell'; import ConfirmDialog from 'components/ConfirmDialog'; import { useApi } from 'hooks/useApi'; +import { useLocale } from 'hooks/useLocale'; import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; import globalize from 'lib/globalize'; -import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; const getUserCell = (users: UsersRecords) => function UserCell({ renderedCellValue, row }: DeviceInfoCell) { return ( @@ -36,6 +38,7 @@ const getUserCell = (users: UsersRecords) => function UserCell({ renderedCellVal export const Component = () => { const { api } = useApi(); const { data: devices, isLoading: isDevicesLoading } = useDevices({}); + const { dateFnsLocale } = useLocale(); const { usersById: users, names: userNames, isLoading: isUsersLoading } = useUsersDetails(); const [ isDeleteConfirmOpen, setIsDeleteConfirmOpen ] = useState(false); @@ -99,10 +102,10 @@ export const Component = () => { const columns = useMemo[]>(() => [ { id: 'DateLastActivity', - accessorFn: row => parseISO8601Date(row.DateLastActivity), - header: globalize.translate('LabelTime'), + accessorFn: row => row.DateLastActivity ? parseISO(row.DateLastActivity) : undefined, + header: globalize.translate('LastActive'), size: 160, - Cell: ({ cell }) => toLocaleString(cell.getValue()), + Cell: ({ cell }) => format(cell.getValue(), 'Ppp', { locale: dateFnsLocale }), filterVariant: 'datetime-range', enableEditing: false }, diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 8770151ff2..bff1f768cc 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1007,6 +1007,7 @@ "LanNetworksHelp": "Comma separated list of IP addresses or IP/netmask entries for networks that will be considered on local network when enforcing bandwidth restrictions. If set, all other IP addresses will be considered to be on the external network and will be subject to the external bandwidth restrictions. If left blank, only the server's subnet is considered to be on the local network.", "Large": "Large", "Larger": "Larger", + "LastActive": "Last active", "LastSeen": "Last activity {0}", "LatestFromLibrary": "Recently Added in {0}", "LearnHowYouCanContribute": "Learn how you can contribute.", From 6d1da8fcbaa71541793d8d0a42e0cf84440ae0b2 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 30 Jan 2025 17:40:05 -0500 Subject: [PATCH 033/235] Fix missing hook dependency --- src/apps/dashboard/routes/devices/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index c0ec1e96b9..920398ecc2 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -134,7 +134,7 @@ export const Component = () => { filterVariant: 'multi-select', filterSelectOptions: userNames } - ], [ UserCell, userNames ]); + ], [ UserCell, dateFnsLocale, userNames ]); const mrTable = useMaterialReactTable({ ...DEFAULT_TABLE_OPTIONS, From bd92527529aeb45c504f30cd5df2700b5925cac5 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 31 Jan 2025 12:22:55 -0500 Subject: [PATCH 034/235] Update time format --- src/apps/dashboard/routes/devices/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index 920398ecc2..52f3287e80 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -105,7 +105,7 @@ export const Component = () => { accessorFn: row => row.DateLastActivity ? parseISO(row.DateLastActivity) : undefined, header: globalize.translate('LastActive'), size: 160, - Cell: ({ cell }) => format(cell.getValue(), 'Ppp', { locale: dateFnsLocale }), + Cell: ({ cell }) => format(cell.getValue(), 'Pp', { locale: dateFnsLocale }), filterVariant: 'datetime-range', enableEditing: false }, From 5262c9bee63a6e14b71db23d55f0e9ea9233c762 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 31 Jan 2025 16:20:08 -0500 Subject: [PATCH 035/235] Add common DateTimeCell for tables --- .../dashboard/components/table/DateTimeCell.tsx | 17 +++++++++++++++++ .../components/{ => table}/TablePage.tsx | 0 src/apps/dashboard/routes/activity/index.tsx | 9 +++++---- src/apps/dashboard/routes/devices/index.tsx | 10 ++++------ src/apps/dashboard/routes/keys/index.tsx | 14 +++++++++----- 5 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 src/apps/dashboard/components/table/DateTimeCell.tsx rename src/apps/dashboard/components/{ => table}/TablePage.tsx (100%) diff --git a/src/apps/dashboard/components/table/DateTimeCell.tsx b/src/apps/dashboard/components/table/DateTimeCell.tsx new file mode 100644 index 0000000000..a684e4b796 --- /dev/null +++ b/src/apps/dashboard/components/table/DateTimeCell.tsx @@ -0,0 +1,17 @@ +import format from 'date-fns/format'; +import type { MRT_Cell, MRT_RowData } from 'material-react-table'; +import { FC } from 'react'; + +import { useLocale } from 'hooks/useLocale'; + +interface CellProps { + cell: MRT_Cell +} + +const DateTimeCell: FC = ({ cell }) => { + const { dateFnsLocale } = useLocale(); + + return format(cell.getValue(), 'Pp', { locale: dateFnsLocale }); +}; + +export default DateTimeCell; diff --git a/src/apps/dashboard/components/TablePage.tsx b/src/apps/dashboard/components/table/TablePage.tsx similarity index 100% rename from src/apps/dashboard/components/TablePage.tsx rename to src/apps/dashboard/components/table/TablePage.tsx diff --git a/src/apps/dashboard/routes/activity/index.tsx b/src/apps/dashboard/routes/activity/index.tsx index 2c5afbd1c6..3e46c9e5e8 100644 --- a/src/apps/dashboard/routes/activity/index.tsx +++ b/src/apps/dashboard/routes/activity/index.tsx @@ -1,3 +1,4 @@ +import parseISO from 'date-fns/parseISO'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import type { ActivityLogEntry } from '@jellyfin/sdk/lib/generated-client/models/activity-log-entry'; import { LogLevel } from '@jellyfin/sdk/lib/generated-client/models/log-level'; @@ -6,7 +7,8 @@ import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; import { useSearchParams } from 'react-router-dom'; -import TablePage, { DEFAULT_TABLE_OPTIONS } from 'apps/dashboard/components/TablePage'; +import DateTimeCell from 'apps/dashboard/components/table/DateTimeCell'; +import TablePage, { DEFAULT_TABLE_OPTIONS } from 'apps/dashboard/components/table/TablePage'; import { useLogEntries } from 'apps/dashboard/features/activity/api/useLogEntries'; import ActionsCell from 'apps/dashboard/features/activity/components/ActionsCell'; import LogLevelCell from 'apps/dashboard/features/activity/components/LogLevelCell'; @@ -14,7 +16,6 @@ import OverviewCell from 'apps/dashboard/features/activity/components/OverviewCe import UserAvatarButton from 'apps/dashboard/components/UserAvatarButton'; import type { ActivityLogEntryCell } from 'apps/dashboard/features/activity/types/ActivityLogEntryCell'; import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; -import { parseISO8601Date, toLocaleString } from 'scripts/datetime'; import globalize from 'lib/globalize'; import { toBoolean } from 'utils/string'; @@ -82,10 +83,10 @@ const Activity = () => { const columns = useMemo[]>(() => [ { id: 'Date', - accessorFn: row => parseISO8601Date(row.Date), + accessorFn: row => row.Date ? parseISO(row.Date) : undefined, header: globalize.translate('LabelTime'), size: 160, - Cell: ({ cell }) => toLocaleString(cell.getValue()), + Cell: DateTimeCell, filterVariant: 'datetime-range' }, { diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index 52f3287e80..724374845e 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -5,12 +5,12 @@ import Box from '@mui/material/Box/Box'; import Button from '@mui/material/Button/Button'; import IconButton from '@mui/material/IconButton/IconButton'; import Tooltip from '@mui/material/Tooltip/Tooltip'; -import format from 'date-fns/format'; import parseISO from 'date-fns/parseISO'; import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; import React, { useCallback, useMemo, useState } from 'react'; -import TablePage, { DEFAULT_TABLE_OPTIONS } from 'apps/dashboard/components/TablePage'; +import DateTimeCell from 'apps/dashboard/components/table/DateTimeCell'; +import TablePage, { DEFAULT_TABLE_OPTIONS } from 'apps/dashboard/components/table/TablePage'; import UserAvatarButton from 'apps/dashboard/components/UserAvatarButton'; import { useDeleteDevice } from 'apps/dashboard/features/devices/api/useDeleteDevice'; import { useDevices } from 'apps/dashboard/features/devices/api/useDevices'; @@ -19,7 +19,6 @@ import DeviceNameCell from 'apps/dashboard/features/devices/components/DeviceNam import type { DeviceInfoCell } from 'apps/dashboard/features/devices/types/deviceInfoCell'; import ConfirmDialog from 'components/ConfirmDialog'; import { useApi } from 'hooks/useApi'; -import { useLocale } from 'hooks/useLocale'; import { type UsersRecords, useUsersDetails } from 'hooks/useUsers'; import globalize from 'lib/globalize'; @@ -38,7 +37,6 @@ const getUserCell = (users: UsersRecords) => function UserCell({ renderedCellVal export const Component = () => { const { api } = useApi(); const { data: devices, isLoading: isDevicesLoading } = useDevices({}); - const { dateFnsLocale } = useLocale(); const { usersById: users, names: userNames, isLoading: isUsersLoading } = useUsersDetails(); const [ isDeleteConfirmOpen, setIsDeleteConfirmOpen ] = useState(false); @@ -105,7 +103,7 @@ export const Component = () => { accessorFn: row => row.DateLastActivity ? parseISO(row.DateLastActivity) : undefined, header: globalize.translate('LastActive'), size: 160, - Cell: ({ cell }) => format(cell.getValue(), 'Pp', { locale: dateFnsLocale }), + Cell: DateTimeCell, filterVariant: 'datetime-range', enableEditing: false }, @@ -134,7 +132,7 @@ export const Component = () => { filterVariant: 'multi-select', filterSelectOptions: userNames } - ], [ UserCell, dateFnsLocale, userNames ]); + ], [ UserCell, userNames ]); const mrTable = useMaterialReactTable({ ...DEFAULT_TABLE_OPTIONS, diff --git a/src/apps/dashboard/routes/keys/index.tsx b/src/apps/dashboard/routes/keys/index.tsx index daedaa74b4..54c59d0da9 100644 --- a/src/apps/dashboard/routes/keys/index.tsx +++ b/src/apps/dashboard/routes/keys/index.tsx @@ -1,3 +1,6 @@ +import parseISO from 'date-fns/parseISO'; + +import DateTimeCell from 'apps/dashboard/components/table/DateTimeCell'; import Page from 'components/Page'; import { useApi } from 'hooks/useApi'; import globalize from 'lib/globalize'; @@ -14,7 +17,6 @@ import Stack from '@mui/material/Stack'; import Tooltip from '@mui/material/Tooltip'; import Typography from '@mui/material/Typography'; import { MaterialReactTable, MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; -import { getDisplayTime, parseISO8601Date, toLocaleDateString } from 'scripts/datetime'; import DeleteIcon from '@mui/icons-material/Delete'; import AddIcon from '@mui/icons-material/Add'; @@ -38,8 +40,8 @@ const ApiKeys = () => { }, { id: 'DateIssued', - accessorFn: item => parseISO8601Date(item.DateCreated), - Cell: ({ cell }) => toLocaleDateString(cell.getValue()) + ' ' + getDisplayTime(cell.getValue()), + accessorFn: item => item.DateCreated ? parseISO(item.DateCreated) : undefined, + Cell: DateTimeCell, header: globalize.translate('HeaderDateIssued'), filterVariant: 'datetime-range' } @@ -77,8 +79,10 @@ const ApiKeys = () => { }, renderTopToolbarCustomActions: () => ( - ), From fd0c3ab20430bc5ebbe336205e721af38da44d3f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 13 Feb 2025 10:33:24 -0500 Subject: [PATCH 036/235] Fix page index reset on refetch --- src/apps/dashboard/routes/devices/index.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/apps/dashboard/routes/devices/index.tsx b/src/apps/dashboard/routes/devices/index.tsx index 724374845e..c554971834 100644 --- a/src/apps/dashboard/routes/devices/index.tsx +++ b/src/apps/dashboard/routes/devices/index.tsx @@ -36,7 +36,10 @@ const getUserCell = (users: UsersRecords) => function UserCell({ renderedCellVal export const Component = () => { const { api } = useApi(); - const { data: devices, isLoading: isDevicesLoading } = useDevices({}); + const { data, isLoading: isDevicesLoading, isRefetching } = useDevices({}); + const devices = useMemo(() => ( + data?.Items || [] + ), [ data ]); const { usersById: users, names: userNames, isLoading: isUsersLoading } = useUsersDetails(); const [ isDeleteConfirmOpen, setIsDeleteConfirmOpen ] = useState(false); @@ -78,9 +81,9 @@ export const Component = () => { }, []); const onConfirmDeleteAll = useCallback(() => { - if (devices?.Items) { + if (devices) { Promise - .all(devices.Items.map(item => { + .all(devices.map(item => { if (api && item.Id && api.deviceInfo.id === item.Id) { return deleteDevice.mutateAsync({ id: item.Id }); } @@ -93,7 +96,7 @@ export const Component = () => { onCloseDeleteAllConfirmDialog(); }); } - }, [ api, deleteDevice, devices?.Items, onCloseDeleteAllConfirmDialog ]); + }, [ api, deleteDevice, devices, onCloseDeleteAllConfirmDialog ]); const UserCell = getUserCell(users); @@ -138,7 +141,7 @@ export const Component = () => { ...DEFAULT_TABLE_OPTIONS, columns, - data: devices?.Items || [], + data: devices, // State initialState: { @@ -152,6 +155,9 @@ export const Component = () => { isLoading }, + // Do not reset the page index when refetching data + autoResetPageIndex: !isRefetching, + // Editing device name enableEditing: true, onEditingRowSave: ({ table, row, values }) => { From 46b8e7d90c0cea423cb5e4cff1df16a292ccc415 Mon Sep 17 00:00:00 2001 From: spicy-weasel Date: Thu, 13 Feb 2025 20:39:44 +0000 Subject: [PATCH 037/235] Translated using Weblate (Tamil) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ta/ --- src/strings/ta.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ta.json b/src/strings/ta.json index b3dddb74dd..86b8efe8ad 100644 --- a/src/strings/ta.json +++ b/src/strings/ta.json @@ -1903,5 +1903,6 @@ "PlaylistPublicDescription": "உள்நுழைந்துள்ள எவரும் இந்த பிளேலிஸ்ட்டைப் பார்க்க அனுமதிக்கவும்.", "ErrorDeletingLyrics": "சேவையகத்திலிருந்து பாடல் வரிகளை நீக்குவதில் பிழை. ஜெல்லிஃபின் மீடியா கோப்புறையில் எழுதுவதற்கான அணுகலைப் பெற்றுள்ளதா என்பதைச் சரிபார்த்து, மீண்டும் முயற்சிக்கவும்.", "HeaderNoLyrics": "பாடல் வரிகள் எதுவும் கிடைக்கவில்லை", - "HeaderLyricDownloads": "பாடல் வரிகள் பதிவிறக்கம்" + "HeaderLyricDownloads": "பாடல் வரிகள் பதிவிறக்கம்", + "AllowFmp4TranscodingContainerHelp": "HEVC மற்றும் HDR பதிவுகளை செயல்படுத்துவதற்க்கு இந்த டியூனரிற்கு fMP4 ட்ரான்ஸ்கோடிங் கண்டெய்னரை அனுமதிக்கவும். எல்லா விதமான டியூனர்களும் இந்த கண்டெய்னருடன் ஒத்துவராது. தரவுகளை செயல்படுத்துவதில் ஏதேனும் தடங்கல் ஏற்பட்டால் இதை ஆஃப் செய்யவும்." } From 6bff5002b9ac18cf96272b625876c40a19c5580a Mon Sep 17 00:00:00 2001 From: BotBlake Date: Thu, 13 Feb 2025 23:24:25 +0100 Subject: [PATCH 038/235] Update issue forms (#6464) * rename issue template to [legacy] * add bug-report form * add playback-issue form * fix formatting on issue form * fix playback issue form * adress review * delete legacy templates * fix indent * Adress review Co-authored-by: Bill Thornton * adress review Co-authored-by: viown <48097677+viown@users.noreply.github.com> --------- Co-authored-by: Bill Thornton Co-authored-by: viown <48097677+viown@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/1-bug-report.md | 32 ---- .github/ISSUE_TEMPLATE/1-bug-report.yml | 122 +++++++++++++++ .github/ISSUE_TEMPLATE/2-playback-issue.md | 22 --- .github/ISSUE_TEMPLATE/2-playback-issue.yml | 145 ++++++++++++++++++ .../ISSUE_TEMPLATE/3-technical-discussion.md | 13 -- .github/ISSUE_TEMPLATE/4-meta-issue.md | 9 -- 6 files changed, 267 insertions(+), 76 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/1-bug-report.md create mode 100644 .github/ISSUE_TEMPLATE/1-bug-report.yml delete mode 100644 .github/ISSUE_TEMPLATE/2-playback-issue.md create mode 100644 .github/ISSUE_TEMPLATE/2-playback-issue.yml delete mode 100644 .github/ISSUE_TEMPLATE/3-technical-discussion.md delete mode 100644 .github/ISSUE_TEMPLATE/4-meta-issue.md diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.md b/.github/ISSUE_TEMPLATE/1-bug-report.md deleted file mode 100644 index 15efff9954..0000000000 --- a/.github/ISSUE_TEMPLATE/1-bug-report.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Bug Report -about: You have noticed a general issue or regression, and would like to report it -labels: bug ---- - -**Describe The Bug** - - -**Steps To Reproduce** - -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected Behavior** - - -**Logs** - - -**Screenshots** - - -**System (please complete the following information):** - - Platform: [e.g. Linux, Windows, iPhone, Tizen] - - Browser: [e.g. Firefox, Chrome, Safari] - - Jellyfin Version: [e.g. 10.6.0] - -**Additional Context** - diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.yml b/.github/ISSUE_TEMPLATE/1-bug-report.yml new file mode 100644 index 0000000000..d0646d8f39 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-bug-report.yml @@ -0,0 +1,122 @@ +name: Bug Report +description: You have noticed a general issue or regression, and would like to report it +labels: + - bug +body: + - type: checkboxes + id: before-posting + attributes: + label: "This issue respects the following points:" + description: All conditions are **required**. + options: + - label: This issue is **not** already reported on [GitHub](https://github.com/jellyfin/jellyfin-web/issues?q=is%3Aissue) _(I've searched it)_. + required: true + - label: I agree to follow Jellyfin's [Code of Conduct](https://jellyfin.org/docs/general/community-standards.html#code-of-conduct). + required: true + - label: This report addresses only a single issue; If you encounter multiple issues, kindly create separate reports for each one. + required: true + - type: markdown + attributes: + value: | + ## Bug information + - type: textarea + id: description + attributes: + label: Describe the bug + description: | + A clear and concise description of the bug. + You can also attach screenshots or screen recordings here to help explain your issue. + validations: + required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction Steps + description: | + Steps to reproduce the behavior: + placeholder: | + 1. Go to … + 2. Click on … + 3. Scroll down to … + 4. See error / the app crashes + validations: + required: true + - type: textarea + id: behaviour + attributes: + label: Expected/Actual behaviour + description: | + Describe the behavior you were expecting versus what actually occurred. + placeholder: | + I expected the app to... However, the actual behavior was that... + validations: + required: true + - type: textarea + id: logs + attributes: + label: Logs + description: | + Please paste any log errors. + placeholder: Paste logs… + - type: markdown + attributes: + value: | + ## Environment + - type: markdown + attributes: + value: | + ### Server + You will find these values in your Admin Dashboard + - type: input + id: server-version + attributes: + label: Server version + placeholder: 10.10.2 + validations: + required: true + - type: input + id: web-version + attributes: + label: Web version + placeholder: 10.10.2 + validations: + required: true + - type: input + id: build-version + attributes: + label: Build version + placeholder: 10.10.2 + validations: + required: true + - type: markdown + attributes: + value: | + ### Client + Information about the device you are seeing the issue on + - type: input + id: platform + attributes: + label: Platform + description: Specify the operating system or device where the issue occurs. If relevant, include details like version or model. + placeholder: e.g. Linux, Windows, iPhone, Tizen + validations: + required: true + - type: input + id: browser + attributes: + label: Browser + description: Indicate which browser you're using when encountering the issue. If possible, mention the browser version as well. + placeholder: e.g. Firefox, Chrome, Safari + validations: + required: true + - type: markdown + attributes: + value: | + ## Additional + - type: textarea + attributes: + label: Additional information + description: Include any relevant details, resources, or screenshots that might help in understanding or implementing the request. + placeholder: Add any additional context here. + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/2-playback-issue.md b/.github/ISSUE_TEMPLATE/2-playback-issue.md deleted file mode 100644 index bed7315abb..0000000000 --- a/.github/ISSUE_TEMPLATE/2-playback-issue.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Playback Issue -about: You have playback issues with some files -labels: playback ---- - -**Describe The Bug** - - -**Media Information** - - -**Screenshots** - - -**System (please complete the following information):** - - Platform: [e.g. Linux, Windows, iPhone, Tizen] - - Browser: [e.g. Firefox, Chrome, Safari] - - Jellyfin Version: [e.g. 10.6.0] - -**Additional Context** - diff --git a/.github/ISSUE_TEMPLATE/2-playback-issue.yml b/.github/ISSUE_TEMPLATE/2-playback-issue.yml new file mode 100644 index 0000000000..3c9599f8bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-playback-issue.yml @@ -0,0 +1,145 @@ +name: Playback Issue +description: Create a bug report related to media playback +labels: + - bug + - playback +body: + - type: checkboxes + id: before-posting + attributes: + label: "This issue respects the following points:" + description: All conditions are **required**. + options: + - label: This issue is **not** already reported on [GitHub](https://github.com/jellyfin/jellyfin-web/issues?q=is%3Aissue) _(I've searched it)_. + required: true + - label: I agree to follow Jellyfin's [Code of Conduct](https://jellyfin.org/docs/general/community-standards.html#code-of-conduct). + required: true + - label: This report addresses only a single issue; If you encounter multiple issues, kindly create separate reports for each one. + required: true + - type: markdown + attributes: + value: | + ## Bug information + - type: textarea + id: description + attributes: + label: Describe the bug + description: | + A clear and concise description of the bug. + You can also attach screenshots or screen recordings here to help explain your issue. + validations: + required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction Steps + description: | + Steps to reproduce the behavior: + placeholder: | + 1. Go to … + 2. Click on … + 3. Scroll down to … + 4. See error / the app crashes + validations: + required: true + - type: textarea + id: behaviour + attributes: + label: Expected/Actual behaviour + description: | + Describe the behavior you were expecting versus what actually occurred. + placeholder: | + I expected the app to... However, the actual behavior was that... + validations: + required: true + - type: textarea + id: mediainfo + attributes: + label: Media info of the file + description: | + Please share the media information for the file causing issues. You can use a variety of tools to retrieve this information. + - Use ffprobe (`ffprobe ./file.mp4`) + - Copy the media info from the web interface + placeholder: Paste media info… + render: shell + - type: markdown + attributes: + value: | + ## Logs + - type: textarea + id: logs + attributes: + label: Logs + description: | + Please paste your logs here if applicable. + placeholder: Paste logs… + - type: textarea + id: logs-ffmpeg + attributes: + label: FFmpeg logs + description: | + Please paste your FFmpeg logs here if available. You can find these in your servers dashboard under "logs". + placeholder: Paste logs… + render: shell + - type: markdown + attributes: + value: | + ## Environment + - type: markdown + attributes: + value: | + ### Server + You will find these values in your Admin Dashboard + - type: input + id: server-version + attributes: + label: Server version + placeholder: 10.10.2 + validations: + required: true + - type: input + id: web-version + attributes: + label: Web version + placeholder: 10.10.2 + validations: + required: true + - type: input + id: build-version + attributes: + label: Build version + placeholder: 10.10.2 + validations: + required: true + - type: markdown + attributes: + value: | + ### Client + Information about the device you are seeing the issue on + - type: input + id: platform + attributes: + label: Platform + description: Specify the operating system or device where the issue occurs. If relevant, include details like version or model. + placeholder: e.g. Linux, Windows, iPhone, Tizen + validations: + required: true + - type: input + id: browser + attributes: + label: Browser + description: Indicate which browser you're using when encountering the issue. If possible, mention the browser version as well. + placeholder: e.g. Firefox, Chrome, Safari + validations: + required: true + - type: markdown + attributes: + value: | + ## Additional + - type: textarea + attributes: + label: Additional information + description: Include any relevant details, resources, or screenshots that might help in understanding or implementing the request. + placeholder: Add any additional context here. + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/3-technical-discussion.md b/.github/ISSUE_TEMPLATE/3-technical-discussion.md deleted file mode 100644 index d8140fce75..0000000000 --- a/.github/ISSUE_TEMPLATE/3-technical-discussion.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Technical Discussion -about: You want to discuss technical aspects of changes you intend to make -labels: enhancement ---- - - diff --git a/.github/ISSUE_TEMPLATE/4-meta-issue.md b/.github/ISSUE_TEMPLATE/4-meta-issue.md deleted file mode 100644 index e034302e45..0000000000 --- a/.github/ISSUE_TEMPLATE/4-meta-issue.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Meta Issue -about: You want to track a number of other issues as part of a larger project -labels: meta ---- - -* [ ] Issue 1 [#123] -* [ ] Issue 2 [#456] -* [ ] ... From f1ab003a334a5732d91dbb165528a76414c3df00 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Thu, 13 Feb 2025 22:44:49 +0000 Subject: [PATCH 039/235] 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 04756e4a41..31e9a088cb 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1998,5 +1998,7 @@ "CustomSubtitleStylingHelp": "Ondertitelingsopmaak zal op de meeste apparaten werken, maar heeft invloed op de systeemprestaties.", "LabelSubtitleStyling": "Ondertitelingsopmaak", "Native": "Ingebouwd", - "NativeSubtitleStylingHelp": "Ondertitelingsopmaak zal niet op alle apparaten werken, maar de prestaties worden niet negatief beïnvloed." + "NativeSubtitleStylingHelp": "Ondertitelingsopmaak zal niet op alle apparaten werken, maar de prestaties worden niet negatief beïnvloed.", + "LabelDevice": "Apparaat", + "LastActive": "Laatst actief" } From cee86c4a22da1d3b30d23181de5adf5ed0b89861 Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 14 Feb 2025 06:18:44 +0000 Subject: [PATCH 040/235] 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 a09590ca72..1fbda4c829 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1999,5 +1999,7 @@ "Custom": "Niestandardowa", "LabelSubtitleStyling": "Stylizacja napisów", "NativeSubtitleStylingHelp": "Stylizacja napisów nie będzie działał na niektórych urządzeniach. Nie wiąże się to jednak z żadnym obciążeniem wydajności.", - "Native": "Natywna" + "Native": "Natywna", + "LabelDevice": "Urządzenie", + "LastActive": "Ostatnio aktywne" } From cb05b5eaf2077813dbe8358bc6b094f67194a30c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 14 Feb 2025 08:13:00 +0000 Subject: [PATCH 041/235] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index d8b2c563ba..24f2de9388 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1999,5 +1999,7 @@ "CustomSubtitleStylingHelp": "Zobrazení stylu titulků bude fungovat na většině zařízeních, ale vyžaduje výkon navíc.", "LabelSubtitleStyling": "Styl titulků", "Native": "Nativní", - "NativeSubtitleStylingHelp": "Zobrazení stylu titulků nebude na některých zařízeních fungovat, ale nevyžaduje žádný výkon navíc." + "NativeSubtitleStylingHelp": "Zobrazení stylu titulků nebude na některých zařízeních fungovat, ale nevyžaduje žádný výkon navíc.", + "LabelDevice": "Zařízení", + "LastActive": "Naposledy aktivní" } From c9ade820ed8422eb5457d913cc2b6f58d09d7369 Mon Sep 17 00:00:00 2001 From: flebel9 <175349397+flebel9@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:37:00 +0000 Subject: [PATCH 042/235] Add confirm dialog when deleting server --- src/controllers/session/selectServer/index.js | 20 +++++++++++++++---- src/strings/en-us.json | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/controllers/session/selectServer/index.js b/src/controllers/session/selectServer/index.js index 1c9fdf9ae3..8af9054edb 100644 --- a/src/controllers/session/selectServer/index.js +++ b/src/controllers/session/selectServer/index.js @@ -7,6 +7,7 @@ import appSettings from '../../../scripts/settings/appSettings'; import focusManager from '../../../components/focusManager'; import globalize from '../../../lib/globalize'; import actionSheet from '../../../components/actionSheet/actionSheet'; +import confirm from '../../../components/confirm/confirm'; import dom from '../../../scripts/dom'; import browser from '../../../scripts/browser'; import 'material-design-icons-iconfont'; @@ -136,10 +137,21 @@ export default function (view, params) { } function deleteServer(server) { - loading.show(); - ServerConnections.deleteServer(server.Id).then(function () { - loading.hide(); - loadServers(); + confirm({ + title: globalize.translate('DeleteName', server.Name), + text: globalize.translate('DeleteServerConfirmation'), + confirmText: globalize.translate('Delete'), + primary: 'delete' + }).then(function () { + loading.show(); + ServerConnections.deleteServer(server.Id).then(function () { + loading.hide(); + loadServers(); + }).catch(err => { + console.error('[selectServer] failed to delete server', err); + }); + }).catch(() => { + // confirm dialog closed }); } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index bff1f768cc..7c5c0185f6 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -218,6 +218,7 @@ "DeleteName": "Delete {0}", "DeleteUser": "Delete User", "DeleteUserConfirmation": "Are you sure you wish to delete this user?", + "DeleteServerConfirmation": "Are you sure you wish to delete this server?", "Depressed": "Depressed", "Descending": "Descending", "Desktop": "Desktop", From 5dc92e4f486fd30bbc66bcb2549263c222348485 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Fri, 14 Feb 2025 15:54:06 +0000 Subject: [PATCH 043/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 760dc6d9a8..0ab60636d6 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1994,5 +1994,8 @@ "CustomSubtitleStylingHelp": "O estilo de legendas funciona na maioria dos dispositivos, mas tem uma sobrecarga de desempenho adicional.", "LabelSubtitleStyling": "Estilo de legendas", "Native": "Nativo", - "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho." + "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho.", + "LabelDevice": "Dispositivo", + "LastActive": "Última atividade", + "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?" } From 49064c870b45313662572c09a05a2671703ff90b Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Fri, 14 Feb 2025 15:54:11 +0000 Subject: [PATCH 044/235] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 952d2ea265..4453abc635 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1992,5 +1992,8 @@ "CustomSubtitleStylingHelp": "O estilo de legendas funciona na maioria dos dispositivos, mas tem uma sobrecarga de desempenho adicional.", "LabelSubtitleStyling": "Estilo de legendas", "Native": "Nativo", - "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho." + "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho.", + "LabelDevice": "Dispositivo", + "LastActive": "Última atividade", + "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?" } From e4b23a7f35527e34df690a1b17e5cda4546c69bd Mon Sep 17 00:00:00 2001 From: Shrey Vakil <43979159+lx1922@users.noreply.github.com> Date: Fri, 14 Feb 2025 12:59:14 -0500 Subject: [PATCH 045/235] Fix Date Added helper text (#6525) --- 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 7c5c0185f6..84962e7568 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -171,7 +171,7 @@ "CommunityRating": "Community rating", "Composer": "Composer", "Conductor": "Conductor", - "ConfigureDateAdded": "Set up how metadata for 'Date added' is determined in the Dashboard > Libraries > NFO Settings", + "ConfigureDateAdded": "Set up how metadata for 'Date added' is determined in the Dashboard > Libraries > Display", "ConfirmDeleteImage": "Delete image?", "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "ConfirmDeleteSeries": "Deleting this series will delete ALL {0} episodes from both the file system and your media library. Are you sure you wish to continue?", From f2283c7ec73823c9d6f6b6d1ad57c4d68e5ca44b Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 14 Feb 2025 16:31:21 +0000 Subject: [PATCH 046/235] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 31e9a088cb..b206b6ee8c 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2000,5 +2000,6 @@ "Native": "Ingebouwd", "NativeSubtitleStylingHelp": "Ondertitelingsopmaak zal niet op alle apparaten werken, maar de prestaties worden niet negatief beïnvloed.", "LabelDevice": "Apparaat", - "LastActive": "Laatst actief" + "LastActive": "Laatst actief", + "DeleteServerConfirmation": "Weet je zeker dat je deze server wilt verwijderen?" } From 5ef531e4d147fed8121323a2b88e805d4d4b4a85 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 14 Feb 2025 18:05:23 +0000 Subject: [PATCH 047/235] 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 b206b6ee8c..d35f7c10bc 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -100,7 +100,7 @@ "ColorTransfer": "Kleuroverdracht", "CommunityRating": "Beoordeling gemeenschap", "Composer": "Componist", - "ConfigureDateAdded": "Stel in hoe de metadata voor 'Datum toegevoegd' wordt bepaald in Controlepaneel > Bibliotheken > NFO-instellingen", + "ConfigureDateAdded": "Stel in hoe de metadata voor 'Datum toegevoegd' wordt bepaald in Controlepaneel > Bibliotheken > Weergave", "ConfirmDeleteImage": "Afbeelding verwijderen?", "ConfirmDeleteItem": "Dit zal dit item verwijderen van zowel het bestandssysteem als uit je mediabibliotheek. Weet je zeker dat je wilt doorgaan?", "ConfirmDeleteItems": "Dit zal deze items verwijderen van zowel het bestandssysteem als uit je mediabibliotheek. Weet je zeker dat je wilt doorgaan?", From 1e61a4a7b3d24113596fd16b2c95df5656efbe56 Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 14 Feb 2025 18:51:16 +0000 Subject: [PATCH 048/235] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 1fbda4c829..12eb9fed9a 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -110,7 +110,7 @@ "ColorTransfer": "Transfer kolorów", "CommunityRating": "Ocena społeczności", "Composer": "Kompozytor", - "ConfigureDateAdded": "Ustaw sposób określania daty dodania w Kokpit > Biblioteki > Ustawienia NFO", + "ConfigureDateAdded": "Ustaw sposób określania daty dodania w Kokpit > Biblioteki > Wyświetlanie", "ConfirmDeleteImage": "Usunąć obraz?", "ConfirmDeleteItem": "Usunięcie tej pozycji usunie ją zarówno z systemu plików jak i z biblioteki mediów. Czy chcesz kontynuować?", "ConfirmDeleteItems": "Usunięcie tej pozycji usunie ją zarówno z systemu plików jak i z biblioteki mediów. Czy chcesz kontynuować?", @@ -2001,5 +2001,6 @@ "NativeSubtitleStylingHelp": "Stylizacja napisów nie będzie działał na niektórych urządzeniach. Nie wiąże się to jednak z żadnym obciążeniem wydajności.", "Native": "Natywna", "LabelDevice": "Urządzenie", - "LastActive": "Ostatnio aktywne" + "LastActive": "Ostatnio aktywne", + "DeleteServerConfirmation": "Czy na pewno chcesz usunąć ten serwer?" } From d7595a74541a92945a7cda6995ee6fb45055b835 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 14 Feb 2025 15:28:27 -0500 Subject: [PATCH 049/235] Refactor api keys to use TablePage component --- .../dashboard/components/table/TablePage.tsx | 13 ++- src/apps/dashboard/routes/activity/index.tsx | 4 +- src/apps/dashboard/routes/keys/index.tsx | 84 +++++++------------ 3 files changed, 42 insertions(+), 59 deletions(-) diff --git a/src/apps/dashboard/components/table/TablePage.tsx b/src/apps/dashboard/components/table/TablePage.tsx index 4e5daef2a5..d9724c9d1b 100644 --- a/src/apps/dashboard/components/table/TablePage.tsx +++ b/src/apps/dashboard/components/table/TablePage.tsx @@ -1,4 +1,5 @@ import Box from '@mui/material/Box/Box'; +import Stack from '@mui/material/Stack/Stack'; import Typography from '@mui/material/Typography/Typography'; import { type MRT_RowData, type MRT_TableInstance, MaterialReactTable } from 'material-react-table'; import React from 'react'; @@ -7,6 +8,7 @@ import Page, { type PageProps } from 'components/Page'; interface TablePageProps extends PageProps { title: string + subtitle?: string table: MRT_TableInstance } @@ -27,6 +29,7 @@ export const DEFAULT_TABLE_OPTIONS = { const TablePage = ({ title, + subtitle, table, children, ...pageProps @@ -44,7 +47,8 @@ const TablePage = ({ height: '100%' }} > - ({ {title} - + {subtitle && ( + + {subtitle} + + )} + {children} diff --git a/src/apps/dashboard/routes/activity/index.tsx b/src/apps/dashboard/routes/activity/index.tsx index 3e46c9e5e8..6736e17bb4 100644 --- a/src/apps/dashboard/routes/activity/index.tsx +++ b/src/apps/dashboard/routes/activity/index.tsx @@ -40,7 +40,7 @@ const getUserCell = (users: UsersRecords) => function UserCell({ row }: Activity ); }; -const Activity = () => { +export const Component = () => { const [ searchParams, setSearchParams ] = useSearchParams(); const [ activityView, setActivityView ] = useState( @@ -201,4 +201,4 @@ const Activity = () => { ); }; -export default Activity; +Component.displayName = 'ActivityPage'; diff --git a/src/apps/dashboard/routes/keys/index.tsx b/src/apps/dashboard/routes/keys/index.tsx index 54c59d0da9..2d5ea44270 100644 --- a/src/apps/dashboard/routes/keys/index.tsx +++ b/src/apps/dashboard/routes/keys/index.tsx @@ -1,26 +1,25 @@ -import parseISO from 'date-fns/parseISO'; - -import DateTimeCell from 'apps/dashboard/components/table/DateTimeCell'; -import Page from 'components/Page'; -import { useApi } from 'hooks/useApi'; -import globalize from 'lib/globalize'; -import React, { useCallback, useMemo } from 'react'; import type { AuthenticationInfo } from '@jellyfin/sdk/lib/generated-client/models/authentication-info'; -import confirm from 'components/confirm/confirm'; -import { useApiKeys } from 'apps/dashboard/features/keys/api/useApiKeys'; -import { useRevokeKey } from 'apps/dashboard/features/keys/api/useRevokeKey'; -import { useCreateKey } from 'apps/dashboard/features/keys/api/useCreateKey'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import IconButton from '@mui/material/IconButton'; -import Stack from '@mui/material/Stack'; import Tooltip from '@mui/material/Tooltip'; -import Typography from '@mui/material/Typography'; -import { MaterialReactTable, MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; -import DeleteIcon from '@mui/icons-material/Delete'; import AddIcon from '@mui/icons-material/Add'; +import DeleteIcon from '@mui/icons-material/Delete'; +import parseISO from 'date-fns/parseISO'; +import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table'; +import React, { useCallback, useMemo } from 'react'; -const ApiKeys = () => { +import DateTimeCell from 'apps/dashboard/components/table/DateTimeCell'; +import TablePage from 'apps/dashboard/components/table/TablePage'; +import { useApiKeys } from 'apps/dashboard/features/keys/api/useApiKeys'; +import { useRevokeKey } from 'apps/dashboard/features/keys/api/useRevokeKey'; +import { useCreateKey } from 'apps/dashboard/features/keys/api/useCreateKey'; +import confirm from 'components/confirm/confirm'; +import prompt from 'components/prompt/prompt'; +import { useApi } from 'hooks/useApi'; +import globalize from 'lib/globalize'; + +export const Component = () => { const { api } = useApi(); const { data: keys, isLoading } = useApiKeys(); const revokeKey = useRevokeKey(); @@ -119,53 +118,28 @@ const ApiKeys = () => { const showNewKeyPopup = useCallback(() => { if (!api) return; - import('../../../../components/prompt/prompt').then(({ default: prompt }) => { - prompt({ - title: globalize.translate('HeaderNewApiKey'), - label: globalize.translate('LabelAppName'), - description: globalize.translate('LabelAppNameExample') - }).then((value) => { - createKey.mutate({ - app: value - }); - }).catch(() => { - // popup closed + prompt({ + title: globalize.translate('HeaderNewApiKey'), + label: globalize.translate('LabelAppName'), + description: globalize.translate('LabelAppNameExample') + }).then((value) => { + createKey.mutate({ + app: value }); - }).catch(err => { - console.error('[apikeys] failed to load api key popup', err); + }).catch(() => { + // popup closed }); }, [api, createKey]); return ( - - - - - - {globalize.translate('HeaderApiKeys')} - - {globalize.translate('HeaderApiKeysHelp')} - - - - - + table={table} + /> ); }; -export default ApiKeys; +Component.displayName = 'ApiKeysPage'; From badd1dff41b76caf5b805b56e512a999e078fad9 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 14 Feb 2025 23:08:49 +0000 Subject: [PATCH 050/235] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index d35f7c10bc..53ec64d6ff 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2001,5 +2001,6 @@ "NativeSubtitleStylingHelp": "Ondertitelingsopmaak zal niet op alle apparaten werken, maar de prestaties worden niet negatief beïnvloed.", "LabelDevice": "Apparaat", "LastActive": "Laatst actief", - "DeleteServerConfirmation": "Weet je zeker dat je deze server wilt verwijderen?" + "DeleteServerConfirmation": "Weet je zeker dat je deze server wilt verwijderen?", + "LibraryNameInvalid": "De naam van de bibliotheek kan niet leeg zijn of beginnen of eindigen met een spatie." } From f5bb5b58138aff83a5defceee5d2a99a052f6b97 Mon Sep 17 00:00:00 2001 From: Kityn Date: Sat, 15 Feb 2025 06:15:11 +0000 Subject: [PATCH 051/235] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 12eb9fed9a..9379eb5857 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2002,5 +2002,6 @@ "Native": "Natywna", "LabelDevice": "Urządzenie", "LastActive": "Ostatnio aktywne", - "DeleteServerConfirmation": "Czy na pewno chcesz usunąć ten serwer?" + "DeleteServerConfirmation": "Czy na pewno chcesz usunąć ten serwer?", + "LibraryNameInvalid": "Nazwa biblioteki nie może być pusta ani zaczynać się lub kończyć spacją." } From d32ba5c28a435ad2591eab14d5a63ad93ef0cf70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Sat, 15 Feb 2025 08:29:27 +0000 Subject: [PATCH 052/235] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 24f2de9388..975dd3e642 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -84,7 +84,7 @@ "Collections": "Kolekce", "CommunityRating": "Hodnocení komunity", "Composer": "Skladatel", - "ConfigureDateAdded": "Nastavení způsobu, jakým je určeno datum přidání v nastavení knihovny v sekci Nástěnka > Knihovny > Nastavení NFO", + "ConfigureDateAdded": "Nastavení způsobu, jakým jsou určena metadata pro \"Datum přidání\" v sekci Nástěnka > Knihovny > Zobrazení", "ConfirmDeleteImage": "Odstranit obrázek?", "ConfirmDeleteItem": "Smazáním položky odstraníte soubor jak z knihovny médií tak ze souborového systému. Opravdu chcete pokračovat?", "ConfirmDeleteItems": "Odstraněním těchto položek odstraníte vaše média jak z knihovny médií, tak i ze souborového systému. Opravdu chcete pokračovat?", @@ -2001,5 +2001,7 @@ "Native": "Nativní", "NativeSubtitleStylingHelp": "Zobrazení stylu titulků nebude na některých zařízeních fungovat, ale nevyžaduje žádný výkon navíc.", "LabelDevice": "Zařízení", - "LastActive": "Naposledy aktivní" + "LastActive": "Naposledy aktivní", + "DeleteServerConfirmation": "Opravdu chcete odstranit tento server?", + "LibraryNameInvalid": "Název knihovny nesmí být prázdný nebo mít kolem sebe mezery." } From d367fc440f776f7af1290c9bba5bed0c6b2a4f25 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sat, 15 Feb 2025 09:37:55 +0000 Subject: [PATCH 053/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 0ab60636d6..49817286b9 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -47,8 +47,8 @@ "ChannelAccessHelp": "Seleciona os canais para partilhar com este utilizador. Os administradores poderão editar todos os canais utilizando o gestor de metadados.", "CinemaModeConfigurationHelp": "O modo cinema traz a experiência do cinema diretamente para a tua sala de estar, com a possibilidade de reproduzir trailers e introduções personalizadas antes da longa-metragem.", "Composer": "Compositor", - "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua mediateca. Tens a certeza de que queres continuar?", - "ConfirmDeleteItems": "A eliminação destes itens elimina-os do sistema de ficheiros e da tua mediateca. Tens a certeza de que queres continuar?", + "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", + "ConfirmDeleteItems": "A eliminação destes itens elimina-os do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ConfirmDeletion": "Confirmar Exclusão", "Connect": "Ligar", "Continuing": "A continuar", @@ -173,7 +173,7 @@ "HeaderSelectTranscodingPathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os ficheiros de transcodificação. O servidor requer permissões de escrita nesta pasta.", "HeaderSendMessage": "Enviar mensagem", "HeaderServerSettings": "Configurações do servidor", - "HeaderSetupLibrary": "Configurar mediatecas", + "HeaderSetupLibrary": "Configurar bibliotecas multimédia", "HeaderSpecialEpisodeInfo": "Informação sobre o episódio especial", "HeaderStatus": "Estado", "HeaderSubtitleProfile": "Perfil das legendas", @@ -445,7 +445,7 @@ "MessagePasswordResetForUsers": "Os seguintes utilizadores tiveram as suas palavras-passe redefinidas. Podem agora iniciar sessão com os códigos PIN que foram utilizados para efetuar a redefinição.", "MessagePleaseEnsureInternetMetadata": "Certifique-se de que a transferência de metadados da Internet está ativada.", "MessageReenableUser": "Veja abaixo para reativar", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "As seguintes pastas multimédia serão removidas da mediateca", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "As seguintes pastas multimédia serão removidas da tua biblioteca", "MinutesAfter": "minutos depois", "MinutesBefore": "minutos antes", "Monday": "Segunda", @@ -602,7 +602,7 @@ "ValueVideoCodec": "Codec de Vídeo: {0}", "Wednesday": "Quarta", "WelcomeToProject": "Bem-vindo ao Jellyfin!", - "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua mediateca. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", + "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua biblioteca multimédia. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", "Writer": "Argumento", "XmlDocumentAttributeListHelp": "Estes atributos são aplicados ao elemento principal de cada resposta XML.", "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tenta mais tarde.", @@ -650,12 +650,12 @@ "Shows": "Séries", "Songs": "Músicas", "Sync": "Sincronização", - "Absolute": "Completo", + "Absolute": "Absoluto", "CriticRating": "Classificação da crítica", "ContinueWatching": "Continuar a ver", "ConfirmEndPlayerSession": "Deseja encerrar o servidor Jellyfin em {0}?", "ConfirmDeleteImage": "Eliminar a imagem?", - "ConfigureDateAdded": "Configura a forma como é atribuída a data de adição, no Painel de Controlo > Bibliotecas > Definições NFO", + "ConfigureDateAdded": "Configura a forma como é atribuída a data de adição, no Painel de Controlo > Bibliotecas > Visualização", "CommunityRating": "Avaliação da comunidade", "ChannelNumber": "Número de canal", "ChannelNameOnly": "Apenas canal {0}", @@ -1596,7 +1596,7 @@ "AllowEmbeddedSubtitlesAllowImageOption": "Permitir imagem", "AllowEmbeddedSubtitlesAllowNoneOption": "Não permitir nenhum", "AllowEmbeddedSubtitlesAllowAllOption": "Permitir Todos", - "AllowEmbeddedSubtitlesHelp": "Desativar as legendas que estão empacotadas em containers multimédia. Requer uma atualização completa da mediateca.", + "AllowEmbeddedSubtitlesHelp": "Desativar as legendas que estão empacotadas em containers multimédia. Requer uma atualização completa da biblioteca.", "AllowEmbeddedSubtitles": "Desativar diferentes tipos de legendas embutidas", "PlaybackErrorPlaceHolder": "Isto é um item falso para um suporte físico que o Jellyfin não consegue reproduzir. Por favor, insira o disco para reproduzir.", "OtherArtist": "Outro artista", @@ -1723,7 +1723,7 @@ "HeaderDummyChapter": "Imagens dos Capítulos", "LabelEnableAudioVbrHelp": "A taxa de bits variável oferece melhor qualidade relativamente à taxa de bits média, mas, em alguns casos raros, pode causar problemas de ‘buffer’ e compatibilidade.", "Experimental": "Experimental", - "MessageRenameMediaFolder": "Mudar o nome de uma mediateca fará com que todos os metadados se percam, por isso, procede com cuidado.", + "MessageRenameMediaFolder": "Mudar o nome de uma biblioteca multimédia fará com que todos os metadados se percam, por isso, procede com cuidado.", "EnableCardLayout": "Mostrar em formato mosaico", "OptionDateShowAdded": "Data de adição da Série", "LabelLevel": "Nível", @@ -1795,7 +1795,7 @@ "PriorityAboveNormal": "Acima do normal", "LabelImageIntervalHelp": "Intervalo de tempo (ms) entre cada nova imagem trickplay.", "PriorityHigh": "Alta", - "LabelScanBehaviorHelp": "O comportamento predefinido é não bloquear, o que adicionará ficheiros multimédia à mediateca antes que a geração de trickplay seja feita. Bloquear irá garantir que os ficheiros trickplay são gerados antes de os ficheiros multimédia serem adicionados à mediateca, mas fará com que as pesquisas sejam significativamente mais longas.", + "LabelScanBehaviorHelp": "O comportamento predefinido é não bloquear, o que adicionará ficheiros multimédia à biblioteca antes que a geração de trickplay seja feita. Bloquear irá garantir que os ficheiros trickplay são gerados antes de os ficheiros multimédia serem adicionados à biblioteca, mas fará com que as pesquisas sejam significativamente mais longas.", "LabelTileWidthHelp": "Número máximo de imagens por mosaico na direção X.", "LabelTileHeight": "Altura do mosaico", "LabelTileWidth": "Largura do mosaico", @@ -1828,8 +1828,8 @@ "HeaderNoLyrics": "Nenhuma letra encontrada", "ChannelResolutionSDPAL": "SD (PAL)", "ChannelResolutionFullHD": "Full HD", - "ConfirmDeleteSeries": "A eliminação desta série elimina TODOS os {0} episódios do sistema de ficheiros e da tua mediateca. Tens a certeza de que queres continuar?", - "ConfirmDeleteLyrics": "A eliminação destas letras irá eliminá-las do sistema de ficheiros e da tua mediateca. Tens a certeza de que queres continuar?", + "ConfirmDeleteSeries": "A eliminação desta série elimina TODOS os {0} episódios do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", + "ConfirmDeleteLyrics": "A eliminação destas letras irá eliminá-las do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ErrorDeletingLyrics": "Ocorreu um erro ao eliminar as letras do servidor. Verifica se o Jellyfin tem acesso de escrita à pasta multimédia e tenta novamente.", "HeaderDeleteLyrics": "Eliminar letras", "ViewLyrics": "Ver letras", @@ -1997,5 +1997,6 @@ "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho.", "LabelDevice": "Dispositivo", "LastActive": "Última atividade", - "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?" + "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?", + "LibraryNameInvalid": "O nome da biblioteca multimédia não pode estar vazio ou ter espaços à esquerda, ou à direita." } From a275836662fd331c4923df566d03c09328a6b80a Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sat, 15 Feb 2025 09:36:52 +0000 Subject: [PATCH 054/235] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 4453abc635..8c103b3d78 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -10,7 +10,7 @@ "XmlTvPathHelp": "Caminho para um ficheiro XMLTV. O Servidor Jellyfin vai ler o ficheiro periodicamente para actualizar a programação de TV. O utilizador é responsável por criar e manter o ficheiro actualizado.", "XmlDocumentAttributeListHelp": "Estes atributos são aplicados ao elemento principal de cada resposta XML.", "Writer": "Argumento", - "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua mediateca. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", + "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua biblioteca multimédia. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", "WelcomeToProject": "Bem-vindo ao Jellyfin!", "Wednesday": "Quarta", "ValueVideoCodec": "Codec de Vídeo: {0}", @@ -459,7 +459,7 @@ "HeaderSpecialEpisodeInfo": "Informação do Episódio Especial", "HeaderSortOrder": "Direcção de Ordenação", "HeaderSortBy": "Ordenar Por", - "HeaderSetupLibrary": "Configurar mediatecas", + "HeaderSetupLibrary": "Configurar bibliotecas multimédia", "HeaderServerSettings": "Configurações do Servidor", "HeaderSeriesStatus": "Estado da Série", "HeaderSeriesOptions": "Opções da Série", @@ -588,7 +588,7 @@ "MinutesBefore": "minutos antes", "MinutesAfter": "minutos depois", "MessageUnableToConnectToServer": "Não foi possível estabelecer ligação ao servidor. Por favor, certifique-se que o servidor está a correr e tente de novo.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "As seguintes pastas multimédia serão removidas da mediateca", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "As seguintes pastas multimédia serão removidas da tua biblioteca", "MessageReenableUser": "Veja abaixo como reactivar", "MessagePluginInstallDisclaimer": "AVISO: A instalação de uma extensão de terceiros acarreta riscos. Ela pode conter código instável ou malicioso e pode ser alterado a qualquer momento. Instala apenas extensões de autores em quem confias e tem em atenção os potenciais efeitos que podem ter, incluindo consultas de serviços externos, análises mais longas da biblioteca ou processamento adicional em segundo plano.", "MessagePluginConfigurationRequiresLocalAccess": "Para configurar esta extensão, inicia sessão localmente no servidor.", @@ -805,10 +805,10 @@ "Connect": "Ligar", "ConfirmEndPlayerSession": "Deseja encerrar o Servidor Jellyfin em {0}?", "ConfirmDeletion": "Confirmar remoção", - "ConfirmDeleteItems": "A eliminação destes itens elimina-os do sistema de ficheiros e da tua mediateca. Tens a certeza de que queres continuar?", - "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua mediateca. Tens a certeza de que queres continuar?", + "ConfirmDeleteItems": "A eliminação destes itens elimina-os do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", + "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ConfirmDeleteImage": "Eliminar a imagem?", - "ConfigureDateAdded": "Configura a forma como é atribuída a data de adição, no Painel de Controlo > Bibliotecas > Definições NFO", + "ConfigureDateAdded": "Configura a forma como é atribuída a data de adição, no Painel de Controlo > Bibliotecas > Visualização", "Composer": "Compositor", "CommunityRating": "Avaliação da comunidade", "ColorTransfer": "Transferência de cores", @@ -1464,7 +1464,7 @@ "QuickConnectDescription": "Para iniciar sessão com a Ligação Rápida, clica no botão \"Ligação Rápida\" no dispositivo a partir do qual estás a iniciar sessão e introduz o código apresentado abaixo.", "RefreshQueued": "Actualização em fila.", "PlaybackRate": "Velocidade de Reprodução", - "AllowEmbeddedSubtitlesHelp": "Desativar as legendas que estão empacotadas em containers multimédia. Requer uma atualização completa da mediateca.", + "AllowEmbeddedSubtitlesHelp": "Desativar as legendas que estão empacotadas em containers multimédia. Requer uma atualização completa da biblioteca.", "LabelEnableGamepad": "Ativar Gamepad", "LabelTonemappingThreshold": "Limite de mapeamento de tons", "LabelTonemappingRange": "Intervalo de mapeamento de tons", @@ -1585,7 +1585,7 @@ "LabelVideoInfo": "Informações do vídeo", "LabelRemuxingInfo": "Informações sobre remixagem", "LabelDate": "Data", - "MessageRenameMediaFolder": "Mudar o nome de uma mediateca fará com que todos os metadados se percam, por isso, procede com cuidado.", + "MessageRenameMediaFolder": "Mudar o nome de uma biblioteca multimédia fará com que todos os metadados se percam, por isso, procede com cuidado.", "LabelSyncPlaySettingsMinDelaySkipToSync": "Atraso mínimo do pulo de sincronização", "LogLevel.None": "Nada", "LogLevel.Critical": "Crítico", @@ -1801,7 +1801,7 @@ "LabelImageInterval": "Intervalo de imagem", "LabelQscale": "Fator de qualidade (Qscale)", "LabelImageIntervalHelp": "Intervalo de tempo (ms) entre cada nova imagem trickplay.", - "LabelScanBehaviorHelp": "O comportamento predefinido é não bloquear, o que adicionará ficheiros multimédia à mediateca antes que a geração de trickplay seja feita. Bloquear irá garantir que os ficheiros trickplay são gerados antes de os ficheiros multimédia serem adicionados à mediateca, mas fará com que as pesquisas sejam significativamente mais longas.", + "LabelScanBehaviorHelp": "O comportamento predefinido é não bloquear, o que adicionará ficheiros multimédia à biblioteca antes que a geração de trickplay seja feita. Bloquear irá garantir que os ficheiros trickplay são gerados antes de os ficheiros multimédia serem adicionados à biblioteca, mas fará com que as pesquisas sejam significativamente mais longas.", "LabelWidthResolutions": "Resoluções de largura", "LabelTileWidth": "Largura do mosaico", "LabelWidthResolutionsHelp": "Lista separada por vírgulas das larguras (px) em que serão geradas as imagens trickplay. Todas as imagens devem ser geradas proporcionalmente à fonte, por isso um vídeo 16:9 com uma largura de 320 acabará por ter cerca de 320x180.", @@ -1825,11 +1825,11 @@ "EnableLibrary": "Ativar a biblioteca", "LabelTrickplayAccelEncodingHelp": "Atualmente apenas disponível em QSV, VA-API, VideoToolbox e RKMPP, esta opção não tem efeito noutros métodos de aceleração de hardware.", "LabelTrickplayAccelEncoding": "Ativar a codificação MJPEG acelerada por hardware", - "ConfirmDeleteLyrics": "A eliminação destas letras irá eliminá-las do sistema de ficheiros e da tua mediateca. Tens a certeza de que queres continuar?", + "ConfirmDeleteLyrics": "A eliminação destas letras irá eliminá-las do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ChannelResolutionFullHD": "Full HD", "ChannelResolutionUHD4K": "UHD (4K)", "ChannelResolutionSDPAL": "SD (PAL)", - "ConfirmDeleteSeries": "A eliminação desta série elimina TODOS os {0} episódios do sistema de ficheiros e da tua mediateca. Tens a certeza de que queres continuar?", + "ConfirmDeleteSeries": "A eliminação desta série elimina TODOS os {0} episódios do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "LabelScanBehavior": "Comportamento de análise", "LabelTrickplayThreads": "Threads FFmpeg", "Lyric": "Letra", @@ -1995,5 +1995,6 @@ "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho.", "LabelDevice": "Dispositivo", "LastActive": "Última atividade", - "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?" + "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?", + "LibraryNameInvalid": "O nome da biblioteca multimédia não pode estar vazio ou ter espaços à esquerda, ou à direita." } From 4ad107b468ec765b50f97175ae963abc25a8f0b1 Mon Sep 17 00:00:00 2001 From: pbf801 Date: Sat, 15 Feb 2025 10:44:17 +0000 Subject: [PATCH 055/235] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index cb1eaf4ec4..422a7f6e85 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -111,7 +111,7 @@ "HeaderContainerProfile": "Perfil del contenidor", "HeaderContainerProfileHelp": "Els perfils del contenidor indiquen limitacions d'un dispositiu en reproduir formats específics. Si la limitació és aplicable, llavors els mitjans es transcodificaran fins i tot si el format ha estat configurat per a reproducció directa.", "HeaderContinueListening": "Continuar escoltant", - "HeaderContinueWatching": "Continuar veient", + "HeaderContinueWatching": "Continua veient", "HeaderCustomDlnaProfiles": "Perfils personalitzats", "HeaderDateIssued": "Data d'emissió", "HeaderDefaultRecordingSettings": "Preferències d'enregistrament per defecte", @@ -665,7 +665,7 @@ "ConfirmEndPlayerSession": "Vols tancar Jellyfin a {0}?", "ConfirmDeleteItems": "L'esborrat d'aquests elements els eliminarà del sistema de fitxers i de la biblioteca de mitjans. Esteu segurs que voleu continuar?", "ConfirmDeleteItem": "L'esborrat d'aquest element l'eliminarà del sistema de fitxers i de la biblioteca multimèdia. Esteu segurs que voleu continuar?", - "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Biblioteques > Configuració de l'NFO", + "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Biblioteques > Visualització", "CommunityRating": "Ràting comunitari", "ColorTransfer": "Transferència de color", "ColorSpace": "Espai de color", @@ -1995,5 +1995,9 @@ "CustomSubtitleStylingHelp": "L'estilització de subtítols funciona en la majoria dels dispositius, però suposa un cost addicional de rendiment.", "LabelSubtitleStyling": "Estilització de subtítols", "Native": "Nadiu", - "NativeSubtitleStylingHelp": "L'estilització de subtítols no funcionarà en alguns dispositius. Tot i això, no suposa cap sobrecàrrega de rendiment." + "NativeSubtitleStylingHelp": "L'estilització de subtítols no funcionarà en alguns dispositius. Tot i això, no suposa cap sobrecàrrega de rendiment.", + "LibraryNameInvalid": "El nom de la biblioteca no pot estar buit ni tenir espais inicials/finals.", + "DeleteServerConfirmation": "De veritat vols eliminar aquest servidor?", + "LabelDevice": "Dispositiu", + "LastActive": "Últim actiu" } From f528ff8ae4fbcd21b9d301c848488454d773f1b6 Mon Sep 17 00:00:00 2001 From: theoverlordbamse Date: Sat, 15 Feb 2025 11:50:15 +0000 Subject: [PATCH 056/235] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/strings/da.json b/src/strings/da.json index 32ba56aa7a..27cad2015d 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1991,5 +1991,13 @@ "HeaderNextEpisode": "Næste afsnit", "HeaderNextVideo": "Næste video", "LabelMediaSegmentProviders": "Mediesegment tilbydere", - "MediaSegmentProvidersHelp": "Aktiver og arranger dine foretrukne mediesegment-tilbydere efter prioritering." + "MediaSegmentProvidersHelp": "Aktiver og arranger dine foretrukne mediesegment-tilbydere efter prioritering.", + "DeleteServerConfirmation": "Er du sikker på at du ønsker slette denne server?", + "AutoSubtitleStylingHelp": "Denne tilstand vil automatisk skifte mellem oprindelig og brugerdefineret stylings-mekanismer baseret på din enheds type.", + "Custom": "Brugerdefineret", + "CustomSubtitleStylingHelp": "Undertekse styling vil virke på de fleste enheder, men kommer med en præstations pris.", + "LabelSubtitleStyling": "Undertekst Styling", + "LabelDevice": "Enhed", + "LastActive": "Sidste aktiv", + "LibraryNameInvalid": "Bibloteks navn kan ikke være tom eller starte/slutte med mellemrun." } From f4a65403162aa90425574d0951d29bfe23d3e5be Mon Sep 17 00:00:00 2001 From: Fabi Date: Sat, 15 Feb 2025 17:24:32 +0000 Subject: [PATCH 057/235] 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, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 83705510a2..6471d3183f 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1999,5 +1999,9 @@ "Native": "Nativ", "NativeSubtitleStylingHelp": "Das Untertitel-Styling funktioniert auf einigen Geräten nicht. Allerdings ist damit kein Leistungsaufwand verbunden.", "AutoSubtitleStylingHelp": "In diesem Modus wird je nach Gerätetyp automatisch zwischen dem nativen und dem benutzerdefinierten Untertitel-Styling umgeschaltet.", - "Custom": "benutzerdefiniert" + "Custom": "benutzerdefiniert", + "LibraryNameInvalid": "Der Bibliotheksname darf nicht leer sein oder voran-/nachgestellte Leerzeichen haben.", + "DeleteServerConfirmation": "Bist du sicher, dass du diesen Server löschen möchtest?", + "LabelDevice": "Gerät", + "LastActive": "Zuletzt aktiv" } From fffa3bc19ec058b6e35d7dbe8d9f02f6dab4e8e1 Mon Sep 17 00:00:00 2001 From: Brian Roscoe Date: Sat, 15 Feb 2025 21:10:45 +0000 Subject: [PATCH 058/235] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 35b305a207..f1eb73f238 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1999,5 +1999,9 @@ "LabelSubtitleStyling": "Стилизация субтитров", "MediaSegmentProvidersHelp": "Включить и отсортировать предпочитаемых поставщиков видеофрагментов в порядке приоритета.", "Native": "Встроенные", - "NativeSubtitleStylingHelp": "Стилизация субтитров будет работать не на всех устройствах. Зато это не требует дополнительных вычислительных мощностей." + "NativeSubtitleStylingHelp": "Стилизация субтитров будет работать не на всех устройствах. Зато это не требует дополнительных вычислительных мощностей.", + "LibraryNameInvalid": "Имя библиотеки не может быть пустым или содержать пробелы до или после имени.", + "LabelDevice": "Устройство", + "LastActive": "Был активен", + "DeleteServerConfirmation": "Вы уверены что хотите удалить этот сервер?" } From 6843ad8f11c65fb5d53ac8f7afb16f5b2bceccb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20Grundstr=C3=B6m?= Date: Sun, 16 Feb 2025 00:39:18 +0000 Subject: [PATCH 059/235] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index 30af5f14c6..de78da4f25 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -96,7 +96,7 @@ "Collections": "Samlingar", "CommunityRating": "Användaromdöme", "Composer": "Kompositör", - "ConfigureDateAdded": "Konfigurera hur tillagt datum bestäms på bibliotek > NFO-inställningar", + "ConfigureDateAdded": "Konfigurera hur metadatat för 'Lades till datum' avgörs i Kontrollpanelen > Bibliotek > Skärm", "ConfirmDeleteImage": "Ta bort bild?", "ConfirmDeleteItem": "Tar du bort det här objektet tas det bort från både ditt filsystem och mediabibliotek. Är du säker på att du vill fortsätta?", "ConfirmDeleteItems": "Tar du bort dessa objekt tas dem också bort ifrån både ditt filsystem och mediabibliotek. Är du säker på att du vill fortsätta?", @@ -1994,5 +1994,9 @@ "AutoSubtitleStylingHelp": "Detta läge kommer automatiskt att byta mellan native och anpassade stilmekanismer baserat på din enhetstyp.", "Custom": "Anpassad", "LabelSubtitleStyling": "Styling av undertexter", - "Native": "Native" + "Native": "Native", + "LibraryNameInvalid": "Biblioteksnamnet kan inte vara tomt eller börja/sluta med mellanslag.", + "LabelDevice": "Enhet", + "LastActive": "Senast aktiv", + "DeleteServerConfirmation": "Är du säker på att du vill ta bort den här servern?" } From ce8bc964f63087bd5b0f564a2662e0b242e9def7 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 16 Feb 2025 03:35:00 -0500 Subject: [PATCH 060/235] Memoize table data --- src/apps/dashboard/routes/activity/index.tsx | 12 +++++++--- src/apps/dashboard/routes/keys/index.tsx | 24 +++++++------------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/apps/dashboard/routes/activity/index.tsx b/src/apps/dashboard/routes/activity/index.tsx index 6736e17bb4..09547af0b7 100644 --- a/src/apps/dashboard/routes/activity/index.tsx +++ b/src/apps/dashboard/routes/activity/index.tsx @@ -61,7 +61,13 @@ export const Component = () => { hasUserId: activityView !== ActivityView.All ? activityView === ActivityView.User : undefined }), [activityView, pagination.pageIndex, pagination.pageSize]); - const { data: logEntries, isLoading: isLogEntriesLoading } = useLogEntries(activityParams); + const { data, isLoading: isLogEntriesLoading } = useLogEntries(activityParams); + const logEntries = useMemo(() => ( + data?.Items || [] + ), [ data ]); + const rowCount = useMemo(() => ( + data?.TotalRecordCount || 0 + ), [ data ]); const isLoading = isUsersLoading || isLogEntriesLoading; @@ -154,7 +160,7 @@ export const Component = () => { ...DEFAULT_TABLE_OPTIONS, columns, - data: logEntries?.Items || [], + data: logEntries, // State initialState: { @@ -168,7 +174,7 @@ export const Component = () => { // Server pagination manualPagination: true, onPaginationChange: setPagination, - rowCount: logEntries?.TotalRecordCount || 0, + rowCount, // Custom toolbar contents renderTopToolbarCustomActions: () => ( diff --git a/src/apps/dashboard/routes/keys/index.tsx b/src/apps/dashboard/routes/keys/index.tsx index 2d5ea44270..1abb66884f 100644 --- a/src/apps/dashboard/routes/keys/index.tsx +++ b/src/apps/dashboard/routes/keys/index.tsx @@ -10,7 +10,7 @@ import { type MRT_ColumnDef, useMaterialReactTable } from 'material-react-table' import React, { useCallback, useMemo } from 'react'; import DateTimeCell from 'apps/dashboard/components/table/DateTimeCell'; -import TablePage from 'apps/dashboard/components/table/TablePage'; +import TablePage, { DEFAULT_TABLE_OPTIONS } from 'apps/dashboard/components/table/TablePage'; import { useApiKeys } from 'apps/dashboard/features/keys/api/useApiKeys'; import { useRevokeKey } from 'apps/dashboard/features/keys/api/useRevokeKey'; import { useCreateKey } from 'apps/dashboard/features/keys/api/useCreateKey'; @@ -21,7 +21,10 @@ import globalize from 'lib/globalize'; export const Component = () => { const { api } = useApi(); - const { data: keys, isLoading } = useApiKeys(); + const { data, isLoading } = useApiKeys(); + const keys = useMemo(() => ( + data?.Items || [] + ), [ data ]); const revokeKey = useRevokeKey(); const createKey = useCreateKey(); @@ -47,26 +50,15 @@ export const Component = () => { ], []); const table = useMaterialReactTable({ + ...DEFAULT_TABLE_OPTIONS, + columns, - data: keys?.Items || [], + data: keys, state: { isLoading }, - rowCount: keys?.TotalRecordCount || 0, - - enableColumnPinning: true, - enableColumnResizing: true, - - enableStickyFooter: true, - enableStickyHeader: true, - muiTableContainerProps: { - sx: { - maxHeight: 'calc(100% - 7rem)' // 2 x 3.5rem for header and footer - } - }, - // Enable (delete) row actions enableRowActions: true, positionActionsColumn: 'last', From bb0aceef5beef655b3876d3fc133af868cab0edd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martynas=20Kadi=C5=A1a?= Date: Sun, 16 Feb 2025 10:34:16 +0000 Subject: [PATCH 061/235] Translated using Weblate (Lithuanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/ --- src/strings/lt-lt.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/strings/lt-lt.json b/src/strings/lt-lt.json index 63337368fb..e7a64f6c32 100644 --- a/src/strings/lt-lt.json +++ b/src/strings/lt-lt.json @@ -1171,5 +1171,19 @@ "AlternateDVD": "Pakaitinis DVD", "Large": "Didelis", "AllowContentWithTagsHelp": "Rodyti tik mediją su bent viena pasirinkta žyma.", - "AlwaysBurnInSubtitleWhenTranscoding": "Visada perkoduojant įrašyti subtitrus" + "AlwaysBurnInSubtitleWhenTranscoding": "Visada perkoduojant įrašyti subtitrus", + "LabelSegmentKeepSecondsHelp": "Segmentų saugojimo laikas po atsiuntimo iš kliento. Veikia tik tada, kai segmentų trynimas yra įjungtas.", + "LabelSegmentKeepSeconds": "Segmentų saugojimo laikas", + "BlockContentWithTagsHelp": "Slėpti mediją atitinkančią bent vieną nurodytą žymą.", + "Author": "Autorius", + "CustomSubtitleStylingHelp": "Subtitrų stilius veiks ant daugumos įrenginių, bet našumas gali būt mažesnis.", + "DeleteName": "Ištrinti {0}", + "DeleteSeries": "Ištrinti serialą", + "DeleteEpisode": "Ištrinti epizodą", + "AndOtherArtists": "{0} ir {1} kiti atlikėjai.", + "ButtonEditUser": "Redaguoti vartotoją", + "DeleteEntireSeries": "Ištrinti {0} epizodus", + "DeleteLyrics": "Ištrinti žodžius", + "DeleteServerConfirmation": "Ar tikrai ištrinti šį serverį?", + "Anime": "Anime" } From f8df5da81edc82d425df08a5522e9bf815d8552e Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sun, 16 Feb 2025 14:35:06 +0000 Subject: [PATCH 062/235] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index 5d32e22e83..35b5414cc2 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -283,7 +283,7 @@ "HeaderDownloadSync": "Laadi alla ja sünkrooni", "HeaderCancelSeries": "Tühista sari", "CustomDlnaProfilesHelp": "Loo kohandatud profiil uue seadme jaoks või tühista süsteemi profiil.", - "ConfigureDateAdded": "Seadista, kuidas lisamise kuupäev kuvatakse juhtpaneeli meediakogu seadetes", + "ConfigureDateAdded": "Seadista, kuidas määratakse 'Lisamise kuupäev' metaandmed menüüs Halduspaneel > Meediakogud > Kuva", "Banner": "Bänner", "AllowTonemappingHelp": "Värvikaardistus võib muuta video dünaamilise ulatuse HDR -st SDR -ks, säilitades samal ajal pildi üksikasjad ja värvid, mis on algse stseeni kujutamisel väga oluline teave. Praegu töötab ainult 10-bitise HDR10, HLG ja DoVi videotega. See vajab vastavat GPGPU rakendust.", "HeaderDirectPlayProfile": "Otse-esituse profiil", @@ -704,7 +704,7 @@ "LabelManufacturerUrl": "Tootja URL", "LabelManufacturer": "Tootja", "LabelLogs": "Logid", - "LabelLockItemToPreventChanges": "Lukusta see üksus tulevaste muudatuste vältimiseks", + "LabelLockItemToPreventChanges": "Lukusta see üksus tulevaste metaandmete muudatuste vältimiseks", "LabelLocalHttpServerPortNumberHelp": "HTTP serveri TCP pordi number.", "LabelLocalHttpServerPortNumber": "Kohaliku HTTP pordi number", "LabelLocalCustomCss": "Kohandatud CSS stiil, mis kehtib ainult selle kliendi kohta. Võid ka serveri kohandatud CSS stiili keelata.", @@ -969,7 +969,7 @@ "LabelTonemappingPeak": "Toonikaardistuse piik", "LabelTonemappingParamHelp": "Häälesta värvikaardistuse algorütmi. Soovitatavad ja vaikeväärtused on NaN. Enamasti jäetakse see tühjaks.", "LabelTonemappingParam": "Toonikaardistuse parameeter", - "LabelTonemappingDesatHelp": "Rakenda piikidele, mis ületavad seda heledust. Mida kõrgem parameeter, seda rohkem värviteavet säilitatakse. See säte aitab vältida ebaloomulikult paisutatud värvide esiletoomist, muutudes (sujuvalt) valgeks. See muudab pildid loomulikumaks, vähendades seejuures teavet väljaspool vahemikku olevate värvide kohta. Soovitatavad ja vaikeväärtused on 0 ja 0,5.", + "LabelTonemappingDesatHelp": "Rakenda piikidele, mis ületavad seda heledust. Soovitatav väärtus on 0 (keelatud).", "LabelTonemappingDesat": "Toonikaardistuse küllastus", "LabelTonemappingAlgorithm": "Vali kasutatav värvikaardistuse algoritm", "LabelTitle": "Pealkiri", @@ -1973,5 +1973,13 @@ "MoviesAndShows": "Filmid ja Sarjad", "PlaylistError.UpdateFailed": "Tekkis tõrge esitusloendi muutmisel", "HeaderMediaSegmentActions": "Meediasegmentide toimingud", - "LabelMediaSegmentsType": "{0} segmenti" + "LabelMediaSegmentsType": "{0} segmenti", + "LabelMediaSegmentProviders": "Meediasegmentide pakkujad", + "HeaderNextEpisode": "Järgmine episood", + "Custom": "Kohandatud", + "CustomSubtitleStylingHelp": "Subtiitrite stiliseerimine töötab enamus seadmetes kuid nõuab rohkem resursse.", + "HeaderNextVideo": "Järgmine video", + "LabelSubtitleStyling": "Subtiitrite stiil", + "DeleteServerConfirmation": "Kas sa oled kindel, et soovid selle serveri kustutada?", + "LabelDevice": "Seade" } From 1df42db5d98753eae59b2838579cac6ae98414df Mon Sep 17 00:00:00 2001 From: Steve Grosbois Date: Mon, 17 Feb 2025 07:46:05 +0000 Subject: [PATCH 063/235] 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, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 22ac72b666..08003713d1 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1999,5 +1999,8 @@ "CustomSubtitleStylingHelp": "Le style des sous-titres fonctionnera sur la plupart des appareils, mais entraîne une perte de performances.", "LabelSubtitleStyling": "Style des sous-titres", "Native": "Natif", - "NativeSubtitleStylingHelp": "Le style des sous-titres ne fonctionne pas sur certains appareils. Cependant, cela n'entraîne aucune perte de performances." + "NativeSubtitleStylingHelp": "Le style des sous-titres ne fonctionne pas sur certains appareils. Cependant, cela n'entraîne aucune perte de performances.", + "DeleteServerConfirmation": "Êtes-vous sûr de vouloir supprimer ce serveur ?", + "LastActive": "Dernière activation", + "LabelDevice": "Appareil" } From 264e01619f4f16a2b308774b99361b0917e514a4 Mon Sep 17 00:00:00 2001 From: koreapyj Date: Mon, 17 Feb 2025 07:10:39 +0000 Subject: [PATCH 064/235] Translated using Weblate (Korean) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/ --- src/strings/ko.json | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/strings/ko.json b/src/strings/ko.json index 0a4e328379..41a154f9fa 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -289,7 +289,7 @@ "LabelLanguage": "언어", "LabelLocalHttpServerPortNumber": "로컬 HTTP 포트 번호", "LabelLocalHttpServerPortNumberHelp": "HTTP 서버의 TCP 포트 번호입니다.", - "LabelLockItemToPreventChanges": "변경할 수 없게 항목 잠금", + "LabelLockItemToPreventChanges": "이후 메타데이터 수정 제한", "LabelLoginDisclaimer": "로그인 고지사항", "LabelLoginDisclaimerHelp": "로그인 페이지 하단에 표시할 메세지.", "LabelLogs": "로그", @@ -1331,11 +1331,11 @@ "StopPlayback": "재생 중지", "LabelTonemappingParamHelp": "톤 매핑 알고리즘을 조정합니다. 권장 및 기본값은 NaN입니다. 일반적으로 비워 둡니다.", "LabelTonemappingParam": "톤 매핑 매개변수", - "LabelTonemappingPeakHelp": "이 값으로 신호 / 공칭 / 기준 피크를 재정의합니다. 디스플레이 메타 데이터에 포함 된 피크 정보를 신뢰할 수 없거나 낮은 범위에서 높은 범위로 톤 매핑 할 때 유용합니다. 권장 및 기본값은 100과 0입니다.", + "LabelTonemappingPeakHelp": "메타데이터에 내장된 피크 값 대신 설정한 피크 값을 사용합니다. 기본값은 100 (1000 nit) 입니다.", "LabelTonemappingPeak": "톤 매핑 피크", "LabelTonemappingThresholdHelp": "톤 매핑 알고리즘 매개 변수는 각 장면별로 미세 조정됩니다. 그리고 임계 값은 장면이 변경되었는지 여부를 감지하는 데 사용됩니다. 현재 프레임 평균 밝기와 현재 실행 평균 사이의 거리가 임계 값을 초과하면 장면 평균과 최고 밝기를 다시 계산합니다. 권장 및 기본값은 0.8 및 0.2입니다.", "LabelTonemappingThreshold": "Tonemapping 임계값", - "LabelTonemappingDesatHelp": "이 밝기 수준을 초과하는 하이라이트에는 채도를 낮추십시오. 매개 변수가 높을수록 더 많은 색상 정보가 보존됩니다. 이 설정은 대신 (부드럽게) 흰색으로 바뀌어 수퍼 하이라이트의 색상이 부 자연스럽게 날아가는 것을 방지합니다. 이렇게하면 범위를 벗어난 색상에 대한 정보를 줄이는 대신 이미지가 더 자연스럽게 느껴집니다. 권장 및 기본값은 0과 0.5입니다.", + "LabelTonemappingDesatHelp": "밝기가 이 값을 초과하면 채도를 낮춥니다. 추천 값은 0 (비활성화) 입니다.", "LabelTonemappingDesat": "톤 매핑 desat", "TonemappingRangeHelp": "출력 색상 범위를 선택합니다. 자동은 입력 범위와 동일합니다.", "LabelTonemappingRange": "Tonemapping 범위", @@ -1625,7 +1625,7 @@ "IntelLowPowerEncHelp": "저전력 인코딩은 불필요한 CPU-GPU 동기화를 유지할 수 있습니다. Linux에서 i915 HuC 펌웨어가 설정되지 않은 경우 비활성화해야 합니다.", "DirectPlayError": "다이렉트 재생 시작에 에러가 있습니다", "VideoRangeTypeNotSupported": "비디오의 레인지 타입이 지원되지 않습니다", - "LabelVppTonemappingBrightnessHelp": "VPP 톤 매핑에 밝기 게인을 적용합니다. 권장 값과 기본 값은 각각 16과 0입니다.", + "LabelVppTonemappingBrightnessHelp": "VPP 톤 매핑에 밝기 게인을 적용합니다. 추천 값은 16 입니다.", "MediaInfoDvVersionMinor": "DV 마이너 버전", "AllowEmbeddedSubtitles": "다양한 유형의 내장된 자막 비활성화", "AudioIsExternal": "오디오 스트림이 외부에 있습니다", @@ -1673,7 +1673,7 @@ "Scene": "장면", "EnableSplashScreen": "스플래시 스크린 활성화", "Featurette": "중단편 영화", - "LabelVppTonemappingContrastHelp": "VPP 톤 매핑에 대비 게인을 적용합니다. 권장 값과 기본 값은 모두 1입니다.", + "LabelVppTonemappingContrastHelp": "VPP 톤 매핑에 대비 게인을 적용합니다. 추천 값은 1 입니다.", "MediaInfoVideoRangeType": "비디오 레인지 타입", "MediaInfoDoViTitle": "DV 타이틀", "MediaInfoTitle": "제목", @@ -1984,5 +1984,9 @@ "CustomSubtitleStylingHelp": "자막 스타일 적용 수단을 [사용자 정의]로 설정하면 대부분의 장치에서 자막 스타일이 작동하지만 성능에 지장을 줄 수 있습니다.", "LabelSubtitleStyling": "자막 스타일 적용 수단", "Native": "표준", - "NativeSubtitleStylingHelp": "자막 스타일 적용 수단을 [표준]으로 설정하면 성능상 이득이 있지만 일부 장치에서 자막 스타일이 작동하지 않을 수 있습니다." + "NativeSubtitleStylingHelp": "자막 스타일 적용 수단을 [표준]으로 설정하면 성능상 이득이 있지만 일부 장치에서 자막 스타일이 작동하지 않을 수 있습니다.", + "LabelDevice": "장치", + "LastActive": "마지막 활동", + "DeleteServerConfirmation": "이 서버를 삭제하시겠습니까?", + "LibraryNameInvalid": "라이브러리 이름은 비워둘 수 없고 공백으로 시작하거나 끝날 수 없습니다." } From 1063ff20515691ddf23b9e34d6d9bf0c966c4ecc Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Mon, 17 Feb 2025 07:57:27 +0000 Subject: [PATCH 065/235] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index f1eb73f238..b051824f63 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -112,7 +112,7 @@ "ColorTransfer": "Цветопередача", "CommunityRating": "Общественная оценка", "Composer": "Композитор", - "ConfigureDateAdded": "Настройка метаданных \"Дата добавления\" находится по пути Панель > Медиатеки > Параметры NFO", + "ConfigureDateAdded": "Настройка метаданных \"Дата добавления\" находится по пути Панель > Медиатеки > Отображение", "ConfirmDeleteImage": "Удалить изображение?", "ConfirmDeleteItem": "При удалении данного элемента он удалится и из файловой системы, и из медиатеки. Вы действительно хотите продолжить?", "ConfirmDeleteItems": "При удалении данных элементов, он удалится и из файловой системы, и из медиатеки. Вы действительно хотите продолжить?", @@ -2003,5 +2003,5 @@ "LibraryNameInvalid": "Имя библиотеки не может быть пустым или содержать пробелы до или после имени.", "LabelDevice": "Устройство", "LastActive": "Был активен", - "DeleteServerConfirmation": "Вы уверены что хотите удалить этот сервер?" + "DeleteServerConfirmation": "Вы уверены, что хотите удалить этот сервер?" } From 5290415a2ef4b57c2406ae6208d8bc5d2e700df6 Mon Sep 17 00:00:00 2001 From: LK HO Date: Mon, 17 Feb 2025 07:32:47 +0000 Subject: [PATCH 066/235] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 3eaa9a1b74..1389f55dff 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -467,7 +467,7 @@ "DashboardOperatingSystem": "作業系統: {0}", "DashboardArchitecture": "架構: {0}", "DailyAt": "毎日的 {0}", - "ConfigureDateAdded": "在控制台 > 媒體庫 > NFO 設定中,設定判斷「新增日期」的方法", + "ConfigureDateAdded": "在控制台 > 媒體庫 > 顯示,設定判斷「新增日期」的方法", "ClearQueue": "清空佇列", "Bwdif": "BWDIF", "AllowTonemappingHelp": "色調映射(Tone-mapping)可以將影片的動態範圍從 HDR 轉換為 SDR,同時保留原始畫面的關鍵數據(細節和顏色)。目前僅適用於使用 HDR10、HLG及 DoVi 的影片。而此功能需要相應的 OpenCL 或 CUDA 執行程序。", @@ -481,7 +481,7 @@ "LeaveBlankToNotSetAPassword": "您可以將此欄位留空來將密碼設定為無。", "LearnHowYouCanContribute": "了解如何貢獻。", "LatestFromLibrary": "最近新增至 {0}", - "LastSeen": "上次觀看 {0}", + "LastSeen": "最後活動 {0}", "Large": "大", "LanNetworksHelp": "在強制頻寬限制時,認作本地網路上的 IP 位址或 IP/子網域遮罩項目的逗號分隔清單。若設置此項,所有其它 IP 位址將被視作在外部網路上,並且將受到外部頻寬限制。如果保留為空,則只將伺服器的子網域遮罩作本地網路。", "LabelZipCode": "郵遞編號", @@ -1269,5 +1269,10 @@ "ConfirmDeleteLyrics": "刪除這些歌詞將會同時從媒體庫中移除它們並從伺服器上刪除相關檔案。您是否確定刪除?", "Anime": "動漫", "ChannelResolutionSDPAL": "SD(PAL 格式)", - "AllowContentWithTagsHelp": "僅顯示至少有一個指定標籤的媒體。" + "AllowContentWithTagsHelp": "僅顯示至少有一個指定標籤的媒體。", + "LibraryNameInvalid": "媒體庫名稱不可為空,或有前置/後置的空格。", + "LabelDevice": "裝置", + "LastActive": "最後活躍", + "DeleteServerConfirmation": "你確定要刪除此伺服器?", + "LibraryScanFanoutConcurrency": "平衡掃描媒體庫的數量限制" } From 2b70fbc6773687d97cba54f9cda2e39c46360ceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aindri=C3=BA=20Mac=20Giolla=20Eoin?= Date: Mon, 17 Feb 2025 07:50:38 +0000 Subject: [PATCH 067/235] Translated using Weblate (Irish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ga/ --- src/strings/ga.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/ga.json b/src/strings/ga.json index 06667cd5aa..b6f8d2f789 100644 --- a/src/strings/ga.json +++ b/src/strings/ga.json @@ -1443,7 +1443,7 @@ "DeleteMedia": "Scrios meáin", "DeleteSeries": "Scrios Sraith", "DeleteEpisode": "Scrios Eipeasóid", - "ConfigureDateAdded": "Socraigh conas a chinntear meiteashonraí le haghaidh 'Dáta curtha leis' sa Phainéal > Leabharlanna > Socruithe NFO", + "ConfigureDateAdded": "Socraigh conas a chinntear meiteashonraí do 'Dáta curtha leis' ar an Deais > Leabharlanna > Scáthlán", "DeleteUser": "Scrios Úsáideoir", "DeleteUserConfirmation": "An bhfuil tú cinnte gur mian leat an t-úsáideoir seo a scriosadh?", "DetectingDevices": "Gléasanna a bhrath", @@ -1811,5 +1811,9 @@ "CustomSubtitleStylingHelp": "Oibreoidh stíliú fotheideal ar fhormhór na bhfeistí, ach tagann forchostas feidhmíochta breise leis.", "LabelSubtitleStyling": "Stíleáil fotheideal", "Native": "Dúchasach", - "NativeSubtitleStylingHelp": "Ní oibreoidh stíliú fotheideal ar ghléasanna áirithe. Mar sin féin, ní thagann sé le haon forchostais feidhmíochta." + "NativeSubtitleStylingHelp": "Ní oibreoidh stíliú fotheideal ar ghléasanna áirithe. Mar sin féin, ní thagann sé le haon forchostais feidhmíochta.", + "LibraryNameInvalid": "Ní féidir le hainm na leabharlainne a bheith folamh ná spásanna tosaigh/rianta a bheith ann.", + "DeleteServerConfirmation": "An bhfuil tú cinnte gur mian leat an freastalaí seo a scriosadh?", + "LastActive": "Gníomhach seo caite", + "LabelDevice": "Gléas" } From 76cf7a68318a6da59d246a2fff1568f98cb4afd3 Mon Sep 17 00:00:00 2001 From: GolanGitHub Date: Mon, 17 Feb 2025 10:43:35 +0000 Subject: [PATCH 068/235] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index cd8316b613..b0fdca2b49 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -93,10 +93,10 @@ "CinemaModeConfigurationHelp": "El modo cine proporciona la experiencia del cine directamente en su sala con la capacidad de reproducir tráilers e introducciones personalizadas antes de la función principal.", "Collections": "Colecciones", "Composer": "Compositor", - "ConfigureDateAdded": "Configura cómo se determina el metadato 'Fecha de adición' en el Panel de Control> Librerías > Configuración NFO", + "ConfigureDateAdded": "Configura cómo se determina el metadato 'Fecha de adición' en Panel de control > Bibliotecas > Mostrar", "ConfirmDeleteImage": "¿Borrar imagen?", - "ConfirmDeleteItem": "Al borrar este elemento se borrará del sistema de archivos y de la biblioteca. ¿Quieres continuar?", - "ConfirmDeleteItems": "Al borrar este elemento se borrará del sistema de archivos y de la biblioteca. ¿Quieres continuar?", + "ConfirmDeleteItem": "Eliminar este elemento lo eliminará tanto del sistema de archivos como de tu biblioteca multimedia. ¿Estás seguro de que deseas continuar?", + "ConfirmDeleteItems": "Al borrar este elemento se borrará del sistema de archivos y de la biblioteca. ¿Estás seguro de que deseas continuar?", "ConfirmDeletion": "Confirmar borrado", "ConfirmEndPlayerSession": "¿Quieres cerrar Jellyfin en el dispositivo {0}?", "Connect": "Conectar", @@ -1803,7 +1803,7 @@ "Trickplay": "Trickplay", "LabelTrickplayAccel": "Habilitar descodificación por hardware", "LabelScanBehavior": "Comportamiento de Escaneo", - "ConfirmDeleteSeries": "Eliminar esta serie eliminará TODOS {0} episodios tanto del sistema de archivos como de tu biblioteca de medios. ¿Estás seguro de que deseas continuar?", + "ConfirmDeleteSeries": "Eliminar esta serie eliminará TODOS LOS {0} episodios tanto del sistema de archivos como de tu biblioteca de medios. ¿Estás seguro de que deseas continuar?", "DeleteEntireSeries": "Eliminar {0} Episodios", "DeleteSeries": "Eliminar Series", "DeleteEpisode": "Eliminar Episodio", @@ -1829,7 +1829,7 @@ "PlaybackError.RateLimitExceeded": "Este medio no puede reproducirse en este momento debído a límites.", "EnableLibrary": "Activar la biblioteca", "EnableLibraryHelp": "Desactivar la biblioteca hará que no sea visible para ningún usuario.", - "ConfirmDeleteLyrics": "Borrando estas letras también las borrará tanto del sistema de ficheros como de tu biblioteca de medios. ¿Estás seguro de que deseas continuar?", + "ConfirmDeleteLyrics": "Borrando estas letras también las borrará tanto del sistema de archivos como de tu biblioteca de medios. ¿Estás seguro de que deseas continuar?", "DeleteLyrics": "Borrar letras", "HeaderNoLyrics": "No se han encontrado letras", "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.", @@ -1991,5 +1991,9 @@ "Custom": "Personalizado", "LabelSubtitleStyling": "Estilo de subtítulos", "Native": "Nativo", - "NativeSubtitleStylingHelp": "El estilo de los subtítulos no funcionará en algunos dispositivos. Sin embargo, no conlleva ninguna sobrecarga de rendimiento." + "NativeSubtitleStylingHelp": "El estilo de los subtítulos no funcionará en algunos dispositivos. Sin embargo, no conlleva ninguna sobrecarga de rendimiento.", + "DeleteServerConfirmation": "¿Estás seguro de que deseas eliminar este servidor?", + "LabelDevice": "Dispositivo", + "LastActive": "Último activo", + "LibraryNameInvalid": "El nombre de la biblioteca no puede estar vacío ni contener espacios al principio o al final." } From 5c5a727328f5a4fa8ffa3e98a6b7cc8ed6a398a8 Mon Sep 17 00:00:00 2001 From: Lars Christian Gamborg Date: Mon, 17 Feb 2025 11:38:34 +0000 Subject: [PATCH 069/235] =?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 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index 3c2749c10c..b6ca20013a 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1988,5 +1988,9 @@ "HeaderNextEpisode": "Neste episode", "HeaderNextVideo": "Neste video", "LabelMediaSegmentProviders": "Mediasegment tilbydere", - "MediaSegmentProvidersHelp": "Aktiver og arranger dine foretrukne tilbydere av mediasegmenter i prioritert rekkefølge." + "MediaSegmentProvidersHelp": "Aktiver og arranger dine foretrukne tilbydere av mediasegmenter i prioritert rekkefølge.", + "LabelDevice": "Enhet", + "LastActive": "Sist aktiv", + "DeleteServerConfirmation": "Er du sikker på du ønsker å fjerne denne tjeneren?", + "LibraryNameInvalid": "Biblioteksnavn kan ikke være tom eller inneholde mellomrom." } From 51ea905d8497aeab844471842626f0d94ad3d68b Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Mon, 17 Feb 2025 11:20:16 +0000 Subject: [PATCH 070/235] 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 950ead52d1..059e3c4648 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -976,7 +976,7 @@ "CustomDlnaProfilesHelp": "Vytvorte si vlastný profil pre nové zariadenie alebo pre prepísanie systémového profilu.", "CopyStreamURLSuccess": "URL úspešne skopírovaná.", "CopyStreamURL": "Kopírovať URL adresu streamu", - "ConfigureDateAdded": "Nastavenie spôsobu, akým sa určuje dátum pridania v sekcií Dashboard > Knižnica > NFO nastavenia", + "ConfigureDateAdded": "Nastavenie spôsobu, akým sa určujú metadáta pre \"Dátum pridania\" v sekcií Dashboard > Knižnica > Zobrazenie", "ColorTransfer": "Prenos farieb", "ColorPrimaries": "Primárna farba", "CinemaModeConfigurationHelp": "Kino režim prináša zážitok ako z kina priamo do vašej obývačky s možnosťou prehrať trailery a vlastné intrá pred hlavným programom.", @@ -1999,5 +1999,9 @@ "CustomSubtitleStylingHelp": "Štylizácia titulkov bude fungovať na väčšine zariadení, ale vyžaduje vačší výkon.", "LabelSubtitleStyling": "Štylizácia titulkov", "Native": "Natívne", - "NativeSubtitleStylingHelp": "Štylizácia titulkov nebude na niektorých zariadeniach fungovať, ale nevyžaduje žiadny výkon naviac." + "NativeSubtitleStylingHelp": "Štylizácia titulkov nebude na niektorých zariadeniach fungovať, ale nevyžaduje žiadny výkon naviac.", + "LibraryNameInvalid": "Názov knižnice nesmie byť prázdny ani obsahovať medzery na začiatku alebo konci.", + "LabelDevice": "Zariadenie", + "LastActive": "Naposledy aktívny", + "DeleteServerConfirmation": "Ste si istí, že chcete odstrániť tento server?" } From 8b1a4e0c659c3c1e6b87f29dc1cac812b3bc4b79 Mon Sep 17 00:00:00 2001 From: KecskeTech Date: Mon, 17 Feb 2025 14:48:37 +0000 Subject: [PATCH 071/235] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 065ca583db..8019149be4 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -492,7 +492,7 @@ "ColorSpace": "Színtér", "ColorTransfer": "Színátvitel", "Composer": "Zeneszerző", - "ConfigureDateAdded": "Állítsa be, hogy a „Hozzáadás Dátuma” metaadatok hogyan legyenek meghatározva az Irányítópult > Könyvtárak > NFO-beállítások menüpontban", + "ConfigureDateAdded": "Állítsa be, hogy a „Hozzáadás Dátuma” metaadatok hogyan legyenek meghatározva az Irányítópult > Könyvtárak > Kijelző menüpontban", "ConfirmDeleteImage": "Kép törlése?", "ConfirmDeleteItem": "Az elem törlésével az törlődni fog a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", "ConfirmDeleteItems": "Az elemek törlésével azok törlődni fognak a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", @@ -1966,5 +1966,7 @@ "LabelScreensaverTime": "Képernyőkíméjő Idő", "LibraryInvalidItemIdError": "Ez a könyvtár egy érvénytelen állapotban van, és nem lehet szerkeszteni. Valószínűleg egy bugot tapasztalsz: az útvonal az adatbázisban nem a megfelelő útvonal a fájlrendszerben.", "MoviesAndShows": "Filmek és Sorozatok", - "HeaderMediaSegmentActions": "Média Szegmens műveletek" + "HeaderMediaSegmentActions": "Média Szegmens műveletek", + "AutoSubtitleStylingHelp": "Ez a mód automatikusan vált a natív és egyéni feliratstílus között az eszköz típusod alapjáb.", + "Custom": "Egyéni" } From ceb4f8c78658099150bebbc25a64531862d78b3d Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Mon, 17 Feb 2025 16:04:51 +0000 Subject: [PATCH 072/235] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index f5735822b8..f269acc648 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -187,7 +187,7 @@ "ConfirmDeleteItems": "Xoá những mục này sẽ xoá chúng khỏi ổ cứng và thư viện của bạn. Bạn có chắc chắn muốn tiếp tục?", "ConfirmDeleteItem": "Xoá mục này sẽ xoá nó khỏi ổ cứng và thư viện của bạn. Bạn có chắc chắn muốn tiếp tục?", "ConfirmDeleteImage": "Bạn có chắc chắn xoá ảnh này?", - "ConfigureDateAdded": "Cài đặt xác định dữ liệu mô tả 'Ngày thêm' trong Trang tổng quan > Thư viện > Cài đặt NFO", + "ConfigureDateAdded": "Cài đặt cách xác định dữ liệu mô tả 'Ngày thêm' trong Trang tổng quan > Thư viện > Hiển thị", "Composer": "Tác giả", "CommunityRating": "Đánh giá cộng đồng", "ColorTransfer": "Chuyển đổi màu", @@ -1996,5 +1996,9 @@ "Custom": "Tùy chọn", "CustomSubtitleStylingHelp": "Kiểu phụ đề sẽ hoạt động trên hầu hết các thiết bị nhưng đi kèm với chi phí hiệu suất bổ sung.", "LabelSubtitleStyling": "Kiểu phụ đề", - "Native": "Gốc" + "Native": "Gốc", + "LibraryNameInvalid": "Tên thư viện không thể trống hoặc có khoảng trống ở đầu/cuối.", + "LabelDevice": "Thiết bị", + "LastActive": "Hoạt động cuối", + "DeleteServerConfirmation": "Bạn có chắc bạn muốn xóa máy chủ này không?" } From 4fb82c91a954d0fc799f2df385287a24c3b76765 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 6 Feb 2025 05:22:40 +0300 Subject: [PATCH 073/235] Migrate resume+streaming to React --- src/apps/dashboard/controllers/playback.html | 42 ----- src/apps/dashboard/controllers/playback.js | 39 ----- src/apps/dashboard/controllers/streaming.html | 20 --- src/apps/dashboard/controllers/streaming.js | 31 ---- src/apps/dashboard/routes/_asyncRoutes.ts | 2 + src/apps/dashboard/routes/_legacyRoutes.ts | 14 -- src/apps/dashboard/routes/branding/index.tsx | 21 +-- src/apps/dashboard/routes/logs/index.tsx | 15 +- src/apps/dashboard/routes/playback/resume.tsx | 151 ++++++++++++++++++ .../dashboard/routes/playback/streaming.tsx | 90 +++++++++++ 10 files changed, 255 insertions(+), 170 deletions(-) delete mode 100644 src/apps/dashboard/controllers/playback.html delete mode 100644 src/apps/dashboard/controllers/playback.js delete mode 100644 src/apps/dashboard/controllers/streaming.html delete mode 100644 src/apps/dashboard/controllers/streaming.js create mode 100644 src/apps/dashboard/routes/playback/resume.tsx create mode 100644 src/apps/dashboard/routes/playback/streaming.tsx diff --git a/src/apps/dashboard/controllers/playback.html b/src/apps/dashboard/controllers/playback.html deleted file mode 100644 index 87438cf86e..0000000000 --- a/src/apps/dashboard/controllers/playback.html +++ /dev/null @@ -1,42 +0,0 @@ -
-
-
-
-
-

${ButtonResume}

-
-
- -
- ${LabelMinResumePercentageHelp} -
-
-
- -
- ${LabelMaxResumePercentageHelp} -
-
-
- -
- ${LabelMinAudiobookResumeHelp} -
-
-
- -
- ${LabelMaxAudiobookResumeHelp} -
-
-
- -
- ${LabelMinResumeDurationHelp} -
-
-
-
-
-
-
diff --git a/src/apps/dashboard/controllers/playback.js b/src/apps/dashboard/controllers/playback.js deleted file mode 100644 index a21eb80c95..0000000000 --- a/src/apps/dashboard/controllers/playback.js +++ /dev/null @@ -1,39 +0,0 @@ -import 'jquery'; - -import loading from 'components/loading/loading'; -import Dashboard from 'utils/dashboard'; - -function loadPage(page, config) { - page.querySelector('#txtMinResumePct').value = config.MinResumePct; - page.querySelector('#txtMaxResumePct').value = config.MaxResumePct; - page.querySelector('#txtMinAudiobookResume').value = config.MinAudiobookResume; - page.querySelector('#txtMaxAudiobookResume').value = config.MaxAudiobookResume; - page.querySelector('#txtMinResumeDuration').value = config.MinResumeDurationSeconds; - loading.hide(); -} - -function onSubmit() { - loading.show(); - const form = this; - ApiClient.getServerConfiguration().then(function (config) { - config.MinResumePct = form.querySelector('#txtMinResumePct').value; - config.MaxResumePct = form.querySelector('#txtMaxResumePct').value; - config.MinAudiobookResume = form.querySelector('#txtMinAudiobookResume').value; - config.MaxAudiobookResume = form.querySelector('#txtMaxAudiobookResume').value; - config.MinResumeDurationSeconds = form.querySelector('#txtMinResumeDuration').value; - - ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult); - }); - - return false; -} - -$(document).on('pageinit', '#playbackConfigurationPage', function () { - $('.playbackConfigurationForm').off('submit', onSubmit).on('submit', onSubmit); -}).on('pageshow', '#playbackConfigurationPage', function () { - loading.show(); - const page = this; - ApiClient.getServerConfiguration().then(function (config) { - loadPage(page, config); - }); -}); diff --git a/src/apps/dashboard/controllers/streaming.html b/src/apps/dashboard/controllers/streaming.html deleted file mode 100644 index 54cb895623..0000000000 --- a/src/apps/dashboard/controllers/streaming.html +++ /dev/null @@ -1,20 +0,0 @@ -
-
-
-
-
-
-

${TabStreaming}

-
-
- -
${LabelRemoteClientBitrateLimitHelp}
-
-
- -
-
-
-
diff --git a/src/apps/dashboard/controllers/streaming.js b/src/apps/dashboard/controllers/streaming.js deleted file mode 100644 index 3f87c292d6..0000000000 --- a/src/apps/dashboard/controllers/streaming.js +++ /dev/null @@ -1,31 +0,0 @@ -import 'jquery'; - -import loading from 'components/loading/loading'; -import Dashboard from 'utils/dashboard'; - -function loadPage(page, config) { - page.querySelector('#txtRemoteClientBitrateLimit').value = config.RemoteClientBitrateLimit / 1e6 || ''; - loading.hide(); -} - -function onSubmit() { - loading.show(); - const form = this; - ApiClient.getServerConfiguration().then(function (config) { - config.RemoteClientBitrateLimit = parseInt(1e6 * parseFloat(form.querySelector('#txtRemoteClientBitrateLimit').value || '0'), 10); - ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult); - }); - - return false; -} - -$(document).on('pageinit', '#streamingSettingsPage', function () { - $('.streamingSettingsForm').off('submit', onSubmit).on('submit', onSubmit); -}).on('pageshow', '#streamingSettingsPage', function () { - loading.show(); - const page = this; - ApiClient.getServerConfiguration().then(function (config) { - loadPage(page, config); - }); -}); - diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 8c65b38060..cce1471000 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -7,6 +7,8 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'devices', type: AppType.Dashboard }, { path: 'keys', type: AppType.Dashboard }, { path: 'logs', type: AppType.Dashboard }, + { path: 'playback/resume', type: AppType.Dashboard }, + { path: 'playback/streaming', type: AppType.Dashboard }, { path: 'playback/trickplay', type: AppType.Dashboard }, { path: 'plugins/:pluginId', page: 'plugins/plugin', type: AppType.Dashboard }, { path: 'users', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index a20083e3d2..19a3bedc79 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -58,13 +58,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'metadatanfo', view: 'metadatanfo.html' } - }, { - path: 'playback/resume', - pageProps: { - appType: AppType.Dashboard, - controller: 'playback', - view: 'playback.html' - } }, { path: 'plugins/catalog', pageProps: { @@ -128,12 +121,5 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'scheduledtasks/scheduledtasks', view: 'scheduledtasks/scheduledtasks.html' } - }, { - path: 'playback/streaming', - pageProps: { - appType: AppType.Dashboard, - view: 'streaming.html', - controller: 'streaming' - } } ]; diff --git a/src/apps/dashboard/routes/branding/index.tsx b/src/apps/dashboard/routes/branding/index.tsx index 7859610a5c..a62cd929ba 100644 --- a/src/apps/dashboard/routes/branding/index.tsx +++ b/src/apps/dashboard/routes/branding/index.tsx @@ -8,8 +8,8 @@ import Stack from '@mui/material/Stack'; import Switch from '@mui/material/Switch'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; -import React, { useCallback, useEffect, useState } from 'react'; -import { type ActionFunctionArgs, Form, useActionData } from 'react-router-dom'; +import React, { useCallback, useState } from 'react'; +import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { getBrandingOptionsQuery, QUERY_KEY, useBrandingOptions } from 'apps/dashboard/features/branding/api/useBrandingOptions'; import Loading from 'components/loading/LoadingComponent'; @@ -60,8 +60,9 @@ export const loader = () => { }; export const Component = () => { + const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; - const [ isSubmitting, setIsSubmitting ] = useState(false); + const isSubmitting = navigation.state === 'submitting'; const { data: defaultBrandingOptions, @@ -69,14 +70,6 @@ export const Component = () => { } = useBrandingOptions(); const [ brandingOptions, setBrandingOptions ] = useState(defaultBrandingOptions || {}); - useEffect(() => { - setIsSubmitting(false); - }, [ actionData ]); - - const onSubmit = useCallback(() => { - setIsSubmitting(true); - }, []); - const setSplashscreenEnabled = useCallback((_: React.ChangeEvent, isEnabled: boolean) => { setBrandingOptions({ ...brandingOptions, @@ -98,13 +91,11 @@ export const Component = () => { return ( -
+ {globalize.translate('HeaderBranding')} diff --git a/src/apps/dashboard/routes/logs/index.tsx b/src/apps/dashboard/routes/logs/index.tsx index bafab8f763..7cd7799ac6 100644 --- a/src/apps/dashboard/routes/logs/index.tsx +++ b/src/apps/dashboard/routes/logs/index.tsx @@ -11,7 +11,7 @@ import Stack from '@mui/material/Stack'; import Switch from '@mui/material/Switch'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; -import { type ActionFunctionArgs, Form, useActionData } from 'react-router-dom'; +import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import ServerConnections from 'components/ServerConnections'; import { useServerLogs } from 'apps/dashboard/features/logs/api/useServerLogs'; import { useConfiguration } from 'hooks/useConfiguration'; @@ -43,8 +43,9 @@ export const action = async ({ request }: ActionFunctionArgs) => { }; const Logs = () => { + const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; - const [ isSubmitting, setIsSubmitting ] = useState(false); + const isSubmitting = navigation.state === 'submitting'; const { isPending: isLogEntriesPending, data: logs } = useServerLogs(); const { isPending: isConfigurationPending, data: defaultConfiguration } = useConfiguration(); @@ -72,10 +73,6 @@ const Logs = () => { }); }, [configuration]); - const onSubmit = useCallback(() => { - setIsSubmitting(true); - }, []); - if (isLogEntriesPending || isConfigurationPending || loading || !logs) { return ; } @@ -87,13 +84,13 @@ const Logs = () => { className='mainAnimatedPage type-interior' > - + {globalize.translate('TabLogs')} - {isSubmitting && actionData?.isSaved && ( + {!isSubmitting && actionData?.isSaved && ( {globalize.translate('SettingsSaved')} @@ -113,7 +110,7 @@ const Logs = () => { { + const api = ServerConnections.getCurrentApi(); + if (!api) throw new Error('No Api instance available'); + + const { data: config } = await getConfigurationApi(api).getConfiguration(); + const formData = await request.formData(); + + const minResumePercentage = formData.get('MinResumePercentage')?.toString(); + const maxResumePercentage = formData.get('MaxResumePercentage')?.toString(); + const minAudiobookResume = formData.get('MinAudiobookResume')?.toString(); + const maxAudiobookResume = formData.get('MaxAudiobookResume')?.toString(); + const minResumeDuration = formData.get('MinResumeDuration')?.toString(); + + if (minResumePercentage) config.MinResumePct = parseInt(minResumePercentage, 10); + if (maxResumePercentage) config.MaxResumePct = parseInt(maxResumePercentage, 10); + if (minAudiobookResume) config.MinAudiobookResume = parseInt(minAudiobookResume, 10); + if (maxAudiobookResume) config.MaxAudiobookResume = parseInt(maxAudiobookResume, 10); + if (minResumeDuration) config.MinResumeDurationSeconds = parseInt(minResumeDuration, 10); + + await getConfigurationApi(api) + .updateConfiguration({ serverConfiguration: config }); + + return { + isSaved: true + }; +}; + +const Resume = () => { + const navigation = useNavigation(); + const actionData = useActionData() as ActionData | undefined; + const isSubmitting = navigation.state === 'submitting'; + + const { isPending: isConfigurationPending, data: config } = useConfiguration(); + + if (isConfigurationPending) { + return ; + } + + return ( + + + + + + {globalize.translate('ButtonResume')} + + + {!isSubmitting && actionData?.isSaved && ( + + {globalize.translate('SettingsSaved')} + + )} + + + + + + + + + + + + + + + + + ); +}; + +export default Resume; diff --git a/src/apps/dashboard/routes/playback/streaming.tsx b/src/apps/dashboard/routes/playback/streaming.tsx new file mode 100644 index 0000000000..90e97d1233 --- /dev/null +++ b/src/apps/dashboard/routes/playback/streaming.tsx @@ -0,0 +1,90 @@ +import React from 'react'; +import Page from 'components/Page'; +import globalize from 'lib/globalize'; +import Alert from '@mui/material/Alert'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Stack from '@mui/material/Stack'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; +import ServerConnections from 'components/ServerConnections'; +import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; +import { useConfiguration } from 'hooks/useConfiguration'; +import Loading from 'components/loading/LoadingComponent'; +import { ActionData } from 'types/actionData'; + +export const action = async ({ request }: ActionFunctionArgs) => { + const api = ServerConnections.getCurrentApi(); + if (!api) throw new Error('No Api instance available'); + + const { data: config } = await getConfigurationApi(api).getConfiguration(); + const formData = await request.formData(); + + const bitrateLimit = formData.get('StreamingBitrateLimit')?.toString(); + config.RemoteClientBitrateLimit = Math.trunc(1e6 * parseFloat(bitrateLimit || '0')); + + await getConfigurationApi(api) + .updateConfiguration({ serverConfiguration: config }); + + return { + isSaved: true + }; +}; + +const Streaming = () => { + const navigation = useNavigation(); + const actionData = useActionData() as ActionData | undefined; + const isSubmitting = navigation.state === 'submitting'; + + const { isPending: isConfigurationPending, data: defaultConfiguration } = useConfiguration(); + + if (isConfigurationPending) { + return ; + } + + return ( + + +
+ + + {globalize.translate('TabStreaming')} + + + {!isSubmitting && actionData?.isSaved && ( + + {globalize.translate('SettingsSaved')} + + )} + + + + +
+
+
+ ); +}; + +export default Streaming; From e3b4eb9231f67f61489f2dcb14aa1a1dac134e92 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Mon, 17 Feb 2025 21:27:18 +0300 Subject: [PATCH 074/235] Rename to Component --- src/apps/dashboard/routes/logs/index.tsx | 4 ++-- src/apps/dashboard/routes/playback/resume.tsx | 4 ++-- src/apps/dashboard/routes/playback/streaming.tsx | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/apps/dashboard/routes/logs/index.tsx b/src/apps/dashboard/routes/logs/index.tsx index 7cd7799ac6..1cb085c914 100644 --- a/src/apps/dashboard/routes/logs/index.tsx +++ b/src/apps/dashboard/routes/logs/index.tsx @@ -42,7 +42,7 @@ export const action = async ({ request }: ActionFunctionArgs) => { }; }; -const Logs = () => { +export const Component = () => { const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; const isSubmitting = navigation.state === 'submitting'; @@ -133,4 +133,4 @@ const Logs = () => { ); }; -export default Logs; +Component.displayName = 'LogsPage'; diff --git a/src/apps/dashboard/routes/playback/resume.tsx b/src/apps/dashboard/routes/playback/resume.tsx index 808c6b702e..ab0da25b7c 100644 --- a/src/apps/dashboard/routes/playback/resume.tsx +++ b/src/apps/dashboard/routes/playback/resume.tsx @@ -41,7 +41,7 @@ export const action = async ({ request }: ActionFunctionArgs) => { }; }; -const Resume = () => { +export const Component = () => { const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; const isSubmitting = navigation.state === 'submitting'; @@ -148,4 +148,4 @@ const Resume = () => { ); }; -export default Resume; +Component.displayName = 'ResumePage'; diff --git a/src/apps/dashboard/routes/playback/streaming.tsx b/src/apps/dashboard/routes/playback/streaming.tsx index 90e97d1233..522b266b84 100644 --- a/src/apps/dashboard/routes/playback/streaming.tsx +++ b/src/apps/dashboard/routes/playback/streaming.tsx @@ -32,7 +32,7 @@ export const action = async ({ request }: ActionFunctionArgs) => { }; }; -const Streaming = () => { +export const Component = () => { const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; const isSubmitting = navigation.state === 'submitting'; @@ -87,4 +87,4 @@ const Streaming = () => { ); }; -export default Streaming; +Component.displayName = 'StreamingPage'; From afd241578fae6514d7a5163978ae2393a26df32e Mon Sep 17 00:00:00 2001 From: Ivan Beltrame <87547424+ivanbeltrame@users.noreply.github.com> Date: Mon, 17 Feb 2025 23:31:05 +0000 Subject: [PATCH 075/235] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index e1912ce040..128a1d5f94 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -97,7 +97,7 @@ "ColorTransfer": "Trasferimento Colore", "CommunityRating": "Voto del pubblico", "Composer": "Compositore", - "ConfigureDateAdded": "Scegli come determinare la Data di Aggiunta dal Pannello di Controllo -> Librerie -> Impostazioni NFO", + "ConfigureDateAdded": "Scegli come determinare la Data di Aggiunta dal Pannello di Controllo -> Librerie -> Display", "ConfirmDeleteImage": "Elimina immagine?", "ConfirmDeleteItem": "L'eliminazione di questo elemento lo cancellerà sia dal disco che dalla libreria multimediale. Sei sicuro di voler continuare?", "ConfirmDeleteItems": "L'eliminazione di questi elementi li cancellerà sia dal disco che dalla tua libreria multimediale. Sei sicuro di voler continuare?", @@ -1988,7 +1988,7 @@ "LyricDownloadersHelp": "Abilita e classifica i tuoi downloader di testi preferiti in ordine di priorità.", "MediaSegmentAction.None": "Niente", "MediaSegmentAction.Skip": "Salta", - "MoviesAndShows": "Movies and Shows", + "MoviesAndShows": "Film e Serie", "HeaderMediaSegmentActions": "Media Segment Actions", "HeaderNextEpisode": "Prossimo Episodio", "HeaderNextVideo": "Prossimo Video", @@ -1999,5 +1999,9 @@ "LabelMediaSegmentProviders": "Provider di segmenti multimediali", "LabelSubtitleStyling": "Stile dei sottotitoli", "Native": "Nativo", - "NativeSubtitleStylingHelp": "La formattazione dei sottotitoli potrebbe non funzionare su alcuni dispositivi. Tuttavia, non comporta alcun impatto sulle prestazioni." + "NativeSubtitleStylingHelp": "La formattazione dei sottotitoli potrebbe non funzionare su alcuni dispositivi. Tuttavia, non comporta alcun impatto sulle prestazioni.", + "LabelDevice": "Dispositivo", + "DeleteServerConfirmation": "Sei sicuro di voler eliminare questo server?", + "LastActive": "Ultimo accesso", + "LibraryNameInvalid": "Il nome della libreria non può essere vuoto o avere spazi iniziali o finali." } From 003d64552ab2a635cca03aca9eaad1c8380cc3d0 Mon Sep 17 00:00:00 2001 From: Xande-p Date: Mon, 17 Feb 2025 22:37:28 +0000 Subject: [PATCH 076/235] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index a668f0b7c1..88f6839158 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1628,7 +1628,7 @@ "ButtonExitApp": "Sair da aplicação", "ButtonClose": "Fechar", "AddToFavorites": "Adicionar aos favoritos", - "HomeVideosPhotos": "Início dos vídeos e fotos", + "HomeVideosPhotos": "Vídeos e Fotos Caseiros", "EnableRewatchingNextUp": "Ativar reassistir em \"A Seguir\"", "ButtonBackspace": "Backspace", "Trailer": "Trailer", From afc4db5559c64bdf7ed784e7cb94d1f696b1c02f Mon Sep 17 00:00:00 2001 From: Akis Date: Tue, 18 Feb 2025 14:54:21 +0000 Subject: [PATCH 077/235] Translated using Weblate (Greek) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/ --- src/strings/el.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/strings/el.json b/src/strings/el.json index 331ed487c0..4a390a1018 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -1880,15 +1880,19 @@ "LabelParallelImageEncodingLimitHelp": "Μέγιστος αριθμός παράλληλων κωδικοποιήσεων εικόνας. Αν αυτό είναι 0, θα επιλεγεί ένα όριο βασισμένο στον αριθμό πυρήνων του συστήματος.", "LabelSaveTrickplayLocallyHelp": "Η αποθήκευση των εικόνων trickplay μέσα στους φακέλους πολυμέσων θα τις βάλει δίπλα στα πολυμέσα σας για εύκολη μετάβαση και πρόσβαση.", "LabelRepository": "Αποθετήριο", - "Letterer": "Συγγραφέας", + "Letterer": "Ψηφιογράφος", "LabelNotInstalled": "Μη εγκατεστημένο", "Lyric": "Στίχος", - "LogoScreensaver": "Προφύλαξη Οθόνης Λογότυπου", + "LogoScreensaver": "Λογότυπο Προφύλαξης Οθόνης", "MediaSegmentProvidersHelp": "Ενεργοποίηση και ταξινόμηση των προτιμωμένων παροχέων τμημάτων πολυμέσων σε σειρά προτεραιότητας.", "LibraryInvalidItemIdError": "H βιβλιοθήκη βρίσκεται σε μη έγκυρη κατάσταση και δεν μπορεί να τροποποιηθεί. Πιθανότατα αντιμετοπίζετε σφάλμα: η διαδρομή στην βάση δεδομένη δεν είναι η σωστή στον δίσκο.", "Lyrics": "Στίχοι", "MediaInfoRotation": "Προσανατολισμός", "LimitSupportedVideoResolution": "Περιορισμός μέγιστης υποστηριζόμενης ανάλυσης βίντεο", "LimitSupportedVideoResolutionHelp": "Χρήση 'Μέγιστης Επιτρεπόμενης Ανάλυσης Μετατροπής Βίντεο' ως μέγιστης υποστηριζόμενης ανάλυσης βίντεο.", - "MediaSegmentAction.None": "Τίποτα" + "MediaSegmentAction.None": "Τίποτα", + "DeleteServerConfirmation": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον διακομιστή;", + "LabelDevice": "Συσκευή", + "LyricDownloadersHelp": "Ενεργοποίησε και κατάταξε τους προτιμόμενους παρόχους στίχων κατά σειρά προτεραιότητας.", + "LibraryNameInvalid": "Το όνομα της βιβλιοθήκης δεν μπορεί να είναι κενό ή να ξεκινά/τελειώνει με κενό." } From 9df1db0c7d30b9c31cd0c8e950615bd22d8511c9 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 18 Feb 2025 16:08:37 -0500 Subject: [PATCH 078/235] Fix sass deprecation warnings --- src/components/alphaPicker/style.scss | 2 +- src/components/multiSelect/multiSelect.scss | 2 +- .../remotecontrol/remotecontrol.scss | 2 +- src/components/toast/toast.scss | 2 +- src/elements/emby-scroller/emby-scroller.scss | 2 +- src/styles/_font.scss | 16 ++ src/styles/fonts.noto.scss | 2 +- src/styles/librarybrowser.scss | 2 +- src/styles/noto-sans/base-400-normal.scss | 18 +- src/styles/noto-sans/base-700-normal.scss | 18 +- src/styles/noto-sans/hk-400-normal.scss | 212 +++++++-------- src/styles/noto-sans/hk-700-normal.scss | 212 +++++++-------- src/styles/noto-sans/index.scss | 39 +-- src/styles/noto-sans/jp-400-normal.scss | 242 +++++++++--------- src/styles/noto-sans/jp-700-normal.scss | 242 +++++++++--------- src/styles/noto-sans/kr-400-normal.scss | 242 +++++++++--------- src/styles/noto-sans/kr-700-normal.scss | 242 +++++++++--------- src/styles/noto-sans/sc-400-normal.scss | 196 +++++++------- src/styles/noto-sans/sc-700-normal.scss | 196 +++++++------- src/styles/noto-sans/tc-400-normal.scss | 204 +++++++-------- src/styles/noto-sans/tc-700-normal.scss | 204 +++++++-------- src/styles/videoosd.scss | 2 +- 22 files changed, 1162 insertions(+), 1137 deletions(-) create mode 100644 src/styles/_font.scss diff --git a/src/components/alphaPicker/style.scss b/src/components/alphaPicker/style.scss index 66410efafd..a1fefcf0a8 100644 --- a/src/components/alphaPicker/style.scss +++ b/src/components/alphaPicker/style.scss @@ -1,4 +1,4 @@ -@import '../../styles/mixins'; +@use '../../styles/mixins' as *; .alphaPicker { text-align: center; diff --git a/src/components/multiSelect/multiSelect.scss b/src/components/multiSelect/multiSelect.scss index 317d274683..351b6192b3 100644 --- a/src/components/multiSelect/multiSelect.scss +++ b/src/components/multiSelect/multiSelect.scss @@ -1,4 +1,4 @@ -@import '../../styles/mixins'; +@use '../../styles/mixins' as *; .itemSelectionPanel { position: absolute; diff --git a/src/components/remotecontrol/remotecontrol.scss b/src/components/remotecontrol/remotecontrol.scss index d89d9192e5..ecab697a39 100644 --- a/src/components/remotecontrol/remotecontrol.scss +++ b/src/components/remotecontrol/remotecontrol.scss @@ -1,4 +1,4 @@ -@import '../../styles/mixins'; +@use '../../styles/mixins' as *; .nowPlayingPage { padding: 5em 0 0 0 !important; diff --git a/src/components/toast/toast.scss b/src/components/toast/toast.scss index da9b505a26..e1a4e1721a 100644 --- a/src/components/toast/toast.scss +++ b/src/components/toast/toast.scss @@ -1,4 +1,4 @@ -@import '../../styles/mixins'; +@use '../../styles/mixins' as *; .toastContainer { position: fixed; diff --git a/src/elements/emby-scroller/emby-scroller.scss b/src/elements/emby-scroller/emby-scroller.scss index 66b20e376f..4ca228eda2 100644 --- a/src/elements/emby-scroller/emby-scroller.scss +++ b/src/elements/emby-scroller/emby-scroller.scss @@ -1,4 +1,4 @@ -@import '../../styles/mixins'; +@use '../../styles/mixins' as *; .emby-scroller-container { position: relative; diff --git a/src/styles/_font.scss b/src/styles/_font.scss new file mode 100644 index 0000000000..fef50be0b7 --- /dev/null +++ b/src/styles/_font.scss @@ -0,0 +1,16 @@ +@use "sass:map"; + +// Map font weight numbers to names +$weight-names: (100: "Thin", 200: "ExtraLight", 300: "Light", 400: "Regular", 500: "Medium", 600: "SemiBold", 700: "Bold", 800: "ExtraBold", 900: "Black"); + +// Mixin to help create the Noto Sans font-faces +@mixin face($family: "Noto Sans", $style: normal, $weight: 400, $url: null, $range: null) { + @font-face { + font-family: $family; + font-style: $style; + font-display: swap; + font-weight: $weight; + src: local($family), local("#{$family} #{map.get($weight-names, $weight)}"), url($url) format("woff2"); + unicode-range: $range; + } +} diff --git a/src/styles/fonts.noto.scss b/src/styles/fonts.noto.scss index 53c1a9eb7c..31d5c574a2 100644 --- a/src/styles/fonts.noto.scss +++ b/src/styles/fonts.noto.scss @@ -1,4 +1,4 @@ -@import "../styles/noto-sans/index.scss"; +@use "../styles/noto-sans/index.scss" as *; html { font-family: "Noto Sans", "Noto Sans HK", "Noto Sans JP", "Noto Sans KR", "Noto Sans SC", "Noto Sans TC", sans-serif; diff --git a/src/styles/librarybrowser.scss b/src/styles/librarybrowser.scss index 85c47f8a6c..9afed6ed93 100644 --- a/src/styles/librarybrowser.scss +++ b/src/styles/librarybrowser.scss @@ -1,4 +1,4 @@ -@import 'mixins'; +@use 'mixins' as *; // The padding of the header content on mobile needs to be adjusted // based on the size of the poster card (values from card.scss) diff --git a/src/styles/noto-sans/base-400-normal.scss b/src/styles/noto-sans/base-400-normal.scss index 190547832a..49b45c7d23 100644 --- a/src/styles/noto-sans/base-400-normal.scss +++ b/src/styles/noto-sans/base-400-normal.scss @@ -1,47 +1,49 @@ +@use "../font"; + /* noto-sans-cyrillic-ext-400-normal */ -@include fontFace( +@include font.face( $url: "~@fontsource/noto-sans/files/noto-sans-cyrillic-ext-400-normal.woff2", $range: (U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F) ); /* noto-sans-cyrillic-400-normal */ -@include fontFace( +@include font.face( $url: "~@fontsource/noto-sans/files/noto-sans-cyrillic-400-normal.woff2", $range: (U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116) ); /* noto-sans-devanagari-400-normal */ -@include fontFace( +@include font.face( $url: "~@fontsource/noto-sans/files/noto-sans-devanagari-400-normal.woff2", $range: (U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB) ); /* noto-sans-greek-ext-400-normal */ -@include fontFace( +@include font.face( $url: "~@fontsource/noto-sans/files/noto-sans-greek-ext-400-normal.woff2", $range: (U+1F00-1FFF) ); /* noto-sans-greek-400-normal */ -@include fontFace( +@include font.face( $url: "~@fontsource/noto-sans/files/noto-sans-greek-400-normal.woff2", $range: (U+0370-03FF) ); /* noto-sans-vietnamese-400-normal */ -@include fontFace( +@include font.face( $url: "~@fontsource/noto-sans/files/noto-sans-vietnamese-400-normal.woff2", $range: (U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB) ); /* noto-sans-latin-ext-400-normal */ -@include fontFace( +@include font.face( $url: "~@fontsource/noto-sans/files/noto-sans-latin-ext-400-normal.woff2", $range: (U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF) ); /* noto-sans-latin-400-normal */ -@include fontFace( +@include font.face( $url: "~@fontsource/noto-sans/files/noto-sans-latin-400-normal.woff2", $range: (U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD) ); diff --git a/src/styles/noto-sans/base-700-normal.scss b/src/styles/noto-sans/base-700-normal.scss index f8ddaeff2d..3daecbb70f 100644 --- a/src/styles/noto-sans/base-700-normal.scss +++ b/src/styles/noto-sans/base-700-normal.scss @@ -1,54 +1,56 @@ +@use "../font"; + /* noto-sans-cyrillic-ext-700-normal */ -@include fontFace( +@include font.face( $weight: 700, $url: "~@fontsource/noto-sans/files/noto-sans-cyrillic-ext-700-normal.woff2", $range: (U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F) ); /* noto-sans-cyrillic-700-normal */ -@include fontFace( +@include font.face( $weight: 700, $url: "~@fontsource/noto-sans/files/noto-sans-cyrillic-700-normal.woff2", $range: (U+0700-045F, U+0490-0491, U+04B0-04B1, U+2116) ); /* noto-sans-devanagari-700-normal */ -@include fontFace( +@include font.face( $weight: 700, $url: "~@fontsource/noto-sans/files/noto-sans-devanagari-700-normal.woff2", $range: (U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB) ); /* noto-sans-greek-ext-700-normal */ -@include fontFace( +@include font.face( $weight: 700, $url: "~@fontsource/noto-sans/files/noto-sans-greek-ext-700-normal.woff2", $range: (U+1F00-1FFF) ); /* noto-sans-greek-700-normal */ -@include fontFace( +@include font.face( $weight: 700, $url: "~@fontsource/noto-sans/files/noto-sans-greek-700-normal.woff2", $range: (U+0370-03FF) ); /* noto-sans-vietnamese-700-normal */ -@include fontFace( +@include font.face( $weight: 700, $url: "~@fontsource/noto-sans/files/noto-sans-vietnamese-700-normal.woff2", $range: (U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB) ); /* noto-sans-latin-ext-700-normal */ -@include fontFace( +@include font.face( $weight: 700, $url: "~@fontsource/noto-sans/files/noto-sans-latin-ext-700-normal.woff2", $range: (U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF) ); /* noto-sans-latin-700-normal */ -@include fontFace( +@include font.face( $weight: 700, $url: "~@fontsource/noto-sans/files/noto-sans-latin-700-normal.woff2", $range: (U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD) diff --git a/src/styles/noto-sans/hk-400-normal.scss b/src/styles/noto-sans/hk-400-normal.scss index d27d8a1fed..abbd03c511 100644 --- a/src/styles/noto-sans/hk-400-normal.scss +++ b/src/styles/noto-sans/hk-400-normal.scss @@ -1,735 +1,737 @@ +@use "../font"; + $hkFamily: "Noto Sans HK"; /* noto-sans-hk-[0]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-0-400-normal.woff2", $range: (U+28eb2-28eb3, U+28ed9, U+28ee7, U+28fc5, U+29079, U+29088, U+2908b, U+29093, U+290af-290b1, U+290c0, U+290e4-290e5, U+290ec-290ed, U+2910d, U+29110, U+2913c, U+2914d, U+2915b, U+2915e, U+29170, U+2919c, U+291a8, U+291d5, U+291eb, U+2941d, U+29420, U+29433, U+2943f, U+29448, U+294d0, U+294d9-294da, U+294e5, U+294e7, U+2959e, U+295b0, U+295b8, U+295d7, U+295e9, U+295f4, U+29720, U+29732, U+297d4, U+29810, U+29857, U+298a4, U+298d1, U+298ea, U+298f1, U+298fa, U+29903, U+29905, U+2992f, U+29945, U+29947-29949, U+2995d, U+2996a, U+2999d, U+299c3, U+299c9, U+29a28, U+29a4d, U+29b05, U+29b0e, U+29bd5, U+29c73, U+29cad, U+29d3e, U+29d5a, U+29d7c, U+29d98, U+29d9b, U+29df6, U+29e06, U+29e2d, U+29e68, U+29eac, U+29eb0, U+29ec3, U+29ef8, U+29f23, U+29f30, U+29fb7, U+29fde, U+2a014, U+2a087, U+2a0b9, U+2a0e1, U+2a0ed, U+2a0f3, U+2a0f8, U+2a0fe, U+2a107, U+2a123, U+2a133-2a134, U+2a150, U+2a192-2a193, U+2a1ab, U+2a1b4-2a1b5, U+2a1df, U+2a1f5, U+2a220, U+2a233, U+2a293, U+2a29f, U+2a2b2, U+2a2b4, U+2a2b6, U+2a2ba, U+2a2bd, U+2a2df, U+2a2ff, U+2a351, U+2a3a9, U+2a3ed, U+2a434, U+2a45b, U+2a5c6, U+2a5cb, U+2a601, U+2a632, U+2a64a, U+2a65b, U+2a6a9, U+2adff, U+2f825, U+2f83b, U+2f840, U+2f878, U+2f894, U+2f8a6, U+2f8cd, U+2f994, U+2f9b2, U+2f9bc, U+2f9d4, U+f0001-f0005, U+f0019, U+f009b, U+f0101-f0104, U+f012b, U+f01ba, U+f01d6, U+f0209, U+f0217, U+f0223-f0224, U+fc355, U+fe327, U+fe517, U+feb97, U+fffb4) ); /* noto-sans-hk-[1]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-1-400-normal.woff2", $range: (U+28189, U+281af, U+281bc, U+28207, U+28218, U+2821a, U+28256, U+2827c, U+2829b, U+282cd, U+282e2, U+28306, U+28318, U+2832f, U+2833a, U+28365, U+2836d, U+2837d, U+2838a, U+28412, U+28468, U+2846c, U+28473, U+28482, U+28501, U+2853c-2853d, U+2856c, U+285e8, U+285f4, U+28600, U+2860b, U+28625, U+2863b, U+286aa-286ab, U+286b2, U+286bc, U+286d8, U+286e6, U+2870f, U+28713, U+28804, U+2882b, U+2890d, U+28933, U+28948-28949, U+28956, U+28964, U+28968, U+2896c-2896d, U+2897e, U+28989, U+2898d, U+289a8, U+289aa-289ab, U+289b8, U+289bc, U+289c0, U+289dc, U+289de, U+289e1, U+289e3-289e4, U+289e7-289e8, U+289f9-289fc, U+28a0f, U+28a16, U+28a25, U+28a29, U+28a32, U+28a36, U+28a44-28a4b, U+28a59-28a5a, U+28a81-28a83, U+28a9a-28a9c, U+28ac0, U+28ac6, U+28acb-28acc, U+28ace, U+28ade-28ae3, U+28ae5, U+28aea, U+28afc, U+28b0c, U+28b13, U+28b21-28b22, U+28b2b-28b2d, U+28b2f, U+28b46, U+28b4c, U+28b4e, U+28b50, U+28b63-28b66, U+28b6c, U+28b8f, U+28b99, U+28b9c-28b9d, U+28bb9, U+28bc2, U+28bc5, U+28bd4, U+28bd7, U+28bd9-28bda, U+28be7-28bec, U+28bf5, U+28bff, U+28c03, U+28c09, U+28c1c-28c1d, U+28c23, U+28c26, U+28c2b, U+28c30, U+28c39, U+28c3b, U+28cca, U+28ccd, U+28cd2, U+28d34, U+28d99, U+28db9, U+28e0f, U+28e36, U+28e39, U+28e65-28e66, U+28e97, U+28eac) ); /* noto-sans-hk-[2]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-2-400-normal.woff2", $range: (U+26da0-26da7, U+26dae, U+26ddc, U+26dea-26deb, U+26df0, U+26e00, U+26e05, U+26e07, U+26e12, U+26e42-26e45, U+26e6e, U+26e72, U+26e77, U+26e84, U+26e88, U+26e8b, U+26e99, U+26ed0-26ed7, U+26f26, U+26f73-26f74, U+26f9f, U+26fa1, U+26fbe, U+26fde-26fdf, U+2700e, U+2704b, U+27052-27053, U+27088, U+270ad-270af, U+270cd, U+270d2, U+270f0, U+270f8, U+27109, U+2710c-2710d, U+27126-27127, U+27164-27165, U+27175, U+271cd, U+2721b, U+27267, U+27280, U+27285, U+2728b, U+272b2, U+272b6, U+272e6, U+27352, U+2739a, U+273ff, U+27422, U+27450, U+27484, U+27486, U+27574, U+275a3, U+275e0, U+275e4, U+275fd-275fe, U+27607, U+2760c, U+27632, U+27639, U+27655-27657, U+27694, U+2770f, U+27735-27736, U+27741, U+2775e, U+27784-27785, U+277cc, U+27858, U+27870, U+2789d, U+278b2, U+278c8, U+27924, U+27967, U+2797a, U+279a0, U+279dd, U+279fd, U+27a0a, U+27a0e, U+27a3e, U+27a53, U+27a59, U+27a79, U+27a84, U+27abd-27abe, U+27af4, U+27b06, U+27b0b, U+27b18, U+27b38-27b3a, U+27b48, U+27b65, U+27bef, U+27bf4, U+27c12, U+27c6c, U+27cb1, U+27cc5, U+27d2f, U+27d53-27d54, U+27d66, U+27d73, U+27d84, U+27d8f, U+27d98, U+27dbd, U+27ddc, U+27e4d, U+27e4f, U+27f2e, U+27ff9, U+28002, U+28009, U+2801e, U+28023-28024, U+28048, U+28083, U+28090, U+280bd-280be, U+280e8-280e9, U+280f4, U+2812e, U+2814f, U+2815d, U+2816f) ); /* noto-sans-hk-[3]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-3-400-normal.woff2", $range: (U+25a9c, U+25aae-25aaf, U+25ae9, U+25b74, U+25b89, U+25bb3-25bb4, U+25bc6, U+25be4, U+25be8, U+25c01, U+25c06, U+25c21, U+25c4a, U+25c65, U+25c91, U+25ca4, U+25cc0-25cc1, U+25cfe, U+25d20, U+25d30, U+25d43, U+25d99, U+25db9, U+25e0e, U+25e49, U+25e81-25e83, U+25ea6, U+25ebc, U+25ed7-25ed8, U+25f1a, U+25f4b, U+25fe1-25fe2, U+26021, U+26029, U+26048, U+26064, U+26083, U+26097, U+260a4-260a5, U+26102, U+26121, U+26159-2615c, U+261ad-261ae, U+261b2, U+261dd, U+26258, U+26261, U+2626a-2626b, U+262d0, U+26335, U+2634b-2634c, U+26351, U+263be, U+263f5, U+263f8, U+26402, U+26410-26412, U+2644a, U+26469, U+26484, U+26488-26489, U+2648d, U+26498, U+26512, U+26572, U+265a0, U+265ad, U+265bf, U+26612, U+26626, U+266af, U+266b1, U+266b5, U+266da, U+266e8, U+266fc, U+26716, U+26741, U+26799, U+267b3-267b4, U+267cc, U+2681c, U+26846, U+2685e, U+2686e, U+26888, U+2688a, U+26893, U+268c7, U+2690e, U+26911, U+26926, U+26939, U+26951, U+269a8, U+269b5, U+269f2, U+269fa, U+26a2d-26a2e, U+26a34, U+26a42, U+26a51-26a52, U+26b05, U+26b0a, U+26b13, U+26b15, U+26b23, U+26b28, U+26b50-26b53, U+26b5b, U+26b75, U+26b82, U+26b96-26b97, U+26b9d, U+26bb3, U+26bc0, U+26bf7, U+26c21, U+26c40-26c41, U+26c46, U+26c7e-26c82, U+26ca4, U+26cb7-26cb8, U+26cbd, U+26cc0, U+26cc3, U+26cd1, U+26d22-26d2a, U+26d51, U+26d74) ); /* noto-sans-hk-[4]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-4-400-normal.woff2", $range: (U+249bb, U+249c5, U+249d0, U+249da, U+249de-249df, U+249e3, U+249e5, U+249ec-249ed, U+249f6-249f9, U+249fb, U+24a0e, U+24a12-24a13, U+24a15, U+24a21-24a2a, U+24a3e, U+24a42, U+24a45, U+24a4a, U+24a4e-24a51, U+24a5d, U+24a65-24a67, U+24a71, U+24a77-24a7a, U+24a8c, U+24a93-24a96, U+24aa4-24aa7, U+24ab1-24ab3, U+24aba-24abc, U+24ac0, U+24ac7, U+24aca, U+24ad1, U+24adf, U+24ae2, U+24ae9, U+24b0f, U+24b6e, U+24bf5, U+24c09, U+24c9e-24c9f, U+24cc9, U+24cd9, U+24d06, U+24d13, U+24db8, U+24dea-24deb, U+24e3b, U+24e50, U+24ea5, U+24ea7, U+24f0e, U+24f5c, U+24f82, U+24f86, U+24f97, U+24f9a, U+24fa9, U+24fb8, U+24fc2, U+2502c, U+25052, U+2509d, U+2512b, U+25148, U+2517d-2517e, U+251cd, U+251e3, U+251e6-251e7, U+25220-25221, U+25250, U+25299, U+252c7, U+252d8, U+2530e, U+25311, U+25313, U+25419, U+25425, U+2542f-25430, U+25446, U+2546c, U+2546e, U+2549a, U+25531, U+25535, U+2553f, U+2555b-2555e, U+25562, U+25565-25566, U+25581, U+25584, U+2558f, U+255b9, U+255d5, U+255db, U+255e0, U+25605, U+25635, U+25651, U+25683, U+25695, U+256e3, U+256f6, U+25706, U+2571d, U+25725, U+2573d, U+25772, U+257c7, U+257df-257e1, U+25857, U+2585d, U+25872, U+258c8, U+258de, U+258e1, U+25903, U+25946, U+25956, U+259ac, U+259cc, U+25a54, U+25a95) ); /* noto-sans-hk-[5]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-5-400-normal.woff2", $range: (U+23f61, U+23f7f-23f82, U+23f8f, U+23fb4, U+23fb7, U+23fc0, U+23fc5, U+23feb-23ff0, U+24011, U+24039-2403d, U+24057, U+24085, U+2408b-2408d, U+24091, U+240c9, U+240e1, U+240ec, U+24104, U+2410f, U+24119, U+2413f-24140, U+24144, U+2414e, U+24155-24157, U+2415c, U+2415f, U+24161, U+24177, U+2417a, U+241a3-241a5, U+241ac, U+241b5, U+241cd, U+241e2, U+241fc, U+2421b, U+2424b, U+24256, U+24259, U+24276-24278, U+24284, U+24293, U+24295, U+242a5, U+242bf, U+242c1, U+242c9-242ca, U+242ee, U+242fa, U+2430d, U+2431a, U+24334, U+24348, U+24362-24365, U+2438c, U+24396, U+2439c, U+243bd, U+243c1, U+243e9-243ea, U+243f2, U+243f8, U+24404, U+24435-24436, U+2445a-2445b, U+24473, U+24487-24488, U+244b9, U+244bc, U+244ce, U+244d3, U+244d6, U+24505, U+24521, U+24578, U+245c8, U+24618, U+2462a, U+24665, U+24674, U+24697, U+246d4, U+24706, U+24725, U+2472f, U+2478f, U+247e0, U+24812, U+24823, U+24882, U+248e9, U+248f0-248f3, U+248fb, U+248ff-24901, U+2490c, U+24916-24917, U+24919, U+2492f, U+24933-24934, U+2493e-24943, U+24962-24963, U+24974-24976, U+2497b, U+2497f, U+24982, U+24988-2498f, U+24994, U+249a4, U+249a7, U+249a9, U+249ab-249ad, U+249b7-249ba) ); /* noto-sans-hk-[6]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-6-400-normal.woff2", $range: (U+22e8b, U+22eb3, U+22eef, U+22f74, U+22fcc, U+22fe3, U+23033, U+23044, U+2304b, U+23066, U+2307d-2307e, U+2308e, U+230b7, U+230bc, U+230da, U+23103, U+2313d, U+2317d, U+23182, U+231a4-231a5, U+231b3, U+231c8-231c9, U+231ea, U+231f7-231f9, U+2320f, U+23225, U+2322f, U+23231-23234, U+23256, U+2325e, U+23262, U+23281, U+23289-2328a, U+232ab-232ad, U+232d2, U+232e0-232e1, U+23300, U+2330a, U+2331f, U+233b4, U+233cc, U+233de, U+233e6, U+233f4-233f5, U+233f9-233fa, U+233fe, U+23400, U+2343f, U+23450, U+2346f, U+23472, U+234e5, U+23519, U+23530, U+23551, U+2355a, U+23567, U+23595, U+23599, U+2359c, U+235bb, U+235cd-235cf, U+235f3, U+23600, U+23617, U+2361a, U+2363c, U+23640, U+23659, U+2365f, U+23677, U+2368e, U+2369e, U+236a6, U+236ad, U+236ba, U+236df, U+236ee, U+23703, U+23716, U+23720, U+2372d, U+2372f, U+2373f, U+23766, U+23781, U+237a2, U+237bc, U+237c2, U+237d5-237d7, U+2383a, U+239c2, U+23aa7, U+23adb, U+23aee, U+23afa, U+23b1a, U+23b5a, U+23c63, U+23c99-23c9b, U+23cb5, U+23cb7, U+23cc7-23cc9, U+23cfc-23cff, U+23d40, U+23d5b, U+23d7e, U+23d8f, U+23db6-23dbd, U+23de3, U+23df8, U+23e06, U+23e11, U+23e2c-23e31, U+23e39, U+23e88-23e8b, U+23eb9, U+23ebf, U+23ed7, U+23ef7-23efc, U+23f35, U+23f41, U+23f4a) ); /* noto-sans-hk-[7]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-7-400-normal.woff2", $range: (U+21927, U+2193b, U+21944, U+21958, U+2196a, U+2197c, U+21980, U+21983, U+21988, U+21996, U+219db, U+219f3, U+21a2d, U+21a34, U+21a45, U+21a4b, U+21a63, U+21b44, U+21bc1-21bc2, U+21c2a, U+21c70, U+21ca2, U+21ca5, U+21cac, U+21d46, U+21d53, U+21d5e, U+21d90, U+21db6, U+21dba, U+21dca, U+21dd1, U+21deb, U+21df9, U+21e1c, U+21e23, U+21e37, U+21e3d, U+21e89, U+21ea4, U+21ea8, U+21ec8, U+21ed5, U+21f0f, U+21f15, U+21f6a, U+21f9e, U+21fa1, U+21fe8, U+22045, U+22049, U+2207e, U+2209a, U+220c7, U+220fc, U+2212a, U+2215b, U+22173, U+2217a, U+221a1, U+221c1, U+221c3, U+22208, U+2227c, U+22321, U+22325, U+223bd, U+223d0, U+223d7, U+223fa, U+22465, U+22471, U+2248b, U+22491, U+224b0, U+224bc, U+224c1, U+224c9, U+224cc, U+224ed, U+22513, U+2251b, U+22530, U+22554, U+2258d, U+225af, U+225be, U+2261b-2261c, U+2262b, U+22668, U+2267a, U+22696, U+22698, U+226f4-226f6, U+22712, U+22714, U+2271b, U+2271f, U+2272a, U+22775, U+22781, U+22796, U+227b4-227b5, U+227cd, U+22803, U+2285f-22860, U+22871, U+228ad, U+228c1, U+228f7, U+22926, U+22939, U+2294f, U+22967, U+2296b, U+22980, U+22993, U+22a66, U+22acf, U+22ad5, U+22ae6, U+22ae8, U+22b0e, U+22b22, U+22b3f, U+22b43, U+22b6a, U+22bca, U+22bce, U+22c26-22c27, U+22c38, U+22c4c, U+22c51, U+22c55, U+22c62, U+22c88, U+22c9b, U+22ca1, U+22ca9, U+22cb2, U+22cb7, U+22cc2, U+22cc6, U+22cc9, U+22d07-22d08, U+22d12, U+22d44, U+22d4c, U+22d67, U+22d8d, U+22d95, U+22da0, U+22da3-22da4, U+22db7, U+22dee, U+22e0d, U+22e36, U+22e42, U+22e78) ); /* noto-sans-hk-[8]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-8-400-normal.woff2", $range: (U+21076-21078, U+2107b, U+21088, U+21096, U+2109d, U+210b4, U+210bf-210c1, U+210c7-210c9, U+210cf, U+210d3, U+210e4, U+210f4-210f6, U+2112f, U+2113b, U+2113d, U+21145, U+21148, U+2114f, U+21180, U+21187, U+211d9, U+2123c, U+2124f, U+2127c, U+212a8-212a9, U+212b0, U+212e3, U+212fe, U+21302-21305, U+21336, U+2133a, U+21375-21376, U+2138e, U+21398, U+2139c, U+213c5-213c6, U+213ed, U+213fe, U+21413, U+21416, U+21424, U+2143f, U+21452, U+21454-21455, U+2148a, U+21497, U+214b6, U+214e8, U+214fd, U+21577, U+21582, U+21596, U+2160a, U+21613, U+21619, U+2163e, U+21661, U+21692, U+216b8, U+216ba, U+216c0-216c2, U+216d3, U+216d5, U+216df, U+216e6-216e8, U+216fa-216fc, U+216fe, U+2170d, U+21710, U+21726, U+2173a-2173c, U+21757, U+2176c-21771, U+21773-21774, U+217ab, U+217b0-217b5, U+217c3, U+217c7, U+217d9-217dc, U+217df, U+217ef, U+217f5-217f6, U+217f8-217fc, U+21820, U+21828-2182a, U+2182d, U+21839-2183b, U+21840, U+21845, U+21852, U+2185e, U+21861-21864, U+21877, U+2187b, U+21883-21885, U+2189e-218a2, U+218be-218bf, U+218d1, U+218d6-218d9, U+218fa, U+21903-21905, U+21910-21912, U+21915, U+2191c, U+21922) ); /* noto-sans-hk-[9]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-9-400-normal.woff2", $range: (U+2048e, U+20491-20492, U+204a3, U+204d7, U+204fc, U+204fe, U+20547, U+2058e, U+205a5, U+205b3, U+205c3, U+205ca, U+205d0, U+205d5, U+205df-205e0, U+205eb, U+20611, U+20615, U+20619-2061a, U+20630, U+20656, U+20676, U+2070e, U+20731, U+20779, U+2082c, U+20873, U+208d5, U+20916, U+20923, U+20954, U+20979, U+209e7, U+20a11, U+20a50, U+20a6f, U+20a8a, U+20ab4, U+20ac2, U+20acd, U+20b0d, U+20b8f, U+20b9f, U+20ba8-20ba9, U+20bbf, U+20bc6, U+20bcb, U+20be2, U+20beb, U+20bfb, U+20bff, U+20c0b, U+20c0d, U+20c20, U+20c34, U+20c3a-20c3b, U+20c41-20c43, U+20c53, U+20c65, U+20c77-20c78, U+20c7c, U+20c8d, U+20c96, U+20c9c, U+20cb5, U+20cb8, U+20ccf, U+20cd3-20cd6, U+20cdd, U+20ced, U+20cff, U+20d15, U+20d28, U+20d31-20d32, U+20d46-20d49, U+20d4c-20d4e, U+20d6f, U+20d71, U+20d74, U+20d7c, U+20d7e-20d7f, U+20d96, U+20d9c, U+20da7, U+20db2, U+20dc8, U+20e04, U+20e09-20e0a, U+20e0d-20e11, U+20e16, U+20e1d, U+20e4c, U+20e6d, U+20e73, U+20e75-20e7b, U+20e8c, U+20e96, U+20e98, U+20e9d, U+20ea2, U+20eaa-20eac, U+20eb6, U+20ed7-20ed8, U+20edd, U+20ef8-20efb, U+20f1d, U+20f26, U+20f2d-20f2e, U+20f30-20f31, U+20f3b, U+20f4c, U+20f64, U+20f8d, U+20f90, U+20fad, U+20fb4-20fb6, U+20fbc, U+20fdf, U+20fea-20fed, U+21014, U+2101d-2101e, U+2104f, U+2105c, U+2106f, U+21075) ); /* noto-sans-hk-[10]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-10-400-normal.woff2", $range: (U+1f6f5, U+1f6f8, U+1f910-1f930, U+1f932-1f935, U+1f937-1f939, U+1f940-1f944, U+1f947-1f94a, U+1f950-1f95f, U+1f962-1f967, U+1f969-1f96a, U+1f980-1f981, U+1f984-1f98d, U+1f990-1f992, U+1f994-1f996, U+1f9c0, U+1f9d0, U+1f9d2, U+1f9d4, U+1f9d6, U+1f9d8, U+1f9da, U+1f9dc-1f9dd, U+1f9df-1f9e2, U+1f9e5-1f9e6, U+20021, U+20024, U+2003e, U+20046, U+2004e, U+20068, U+20086-20087, U+2008a, U+20094, U+200ca-200cd, U+200d1, U+200ee, U+2010c, U+2010e, U+20118, U+201a4, U+201a9, U+201ab, U+201c1, U+201d4, U+201f2, U+20204, U+2020c, U+20214, U+20239, U+2025b, U+20274-20275, U+20299, U+2029e, U+202a0, U+202b7, U+202bf-202c0, U+202e5, U+2030a, U+20325, U+20341, U+20345-20347, U+2037e-20380, U+203a0, U+203a7, U+203b5, U+203c9, U+203cb, U+203f5, U+203fc, U+20413-20414, U+2041f, U+20465, U+20487) ); /* noto-sans-hk-[15]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-15-400-normal.woff2", $range: (U+ff37, U+ff39-ff3a, U+ff3c, U+ff3e-ff5b, U+ff5d, U+ff61-ff65, U+ff67-ff68, U+ff6a, U+ff6c-ff7e, U+ff80-ff86, U+ff89-ff94, U+ff97-ff9e, U+ffb9, U+ffe0-ffe3, U+ffe9, U+ffeb, U+ffed, U+fffc, U+1d7c7, U+1f004, U+1f0cf, U+1f141-1f142, U+1f150, U+1f154, U+1f158, U+1f15b, U+1f15d-1f15e, U+1f162-1f163, U+1f170-1f171, U+1f174, U+1f177-1f178, U+1f17d-1f17f, U+1f192-1f195, U+1f197-1f19a, U+1f1e6-1f1f5, U+1f1f7-1f1ff, U+1f21a, U+1f22f, U+1f232-1f237, U+1f239-1f23a, U+1f250-1f251, U+1f300, U+1f302-1f304) ); /* noto-sans-hk-[16]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-16-400-normal.woff2", $range: (U+f94f, U+f95a, U+f95d-f95e, U+f961-f963, U+f965-f970, U+f974, U+f976-f97a, U+f97c, U+f97e-f97f, U+f981, U+f983, U+f988, U+f98a, U+f98c, U+f98e, U+f996-f997, U+f999-f99a, U+f99c, U+f99f-f9a0, U+f9a3, U+f9a8, U+f9ad, U+f9b2-f9b6, U+f9b9-f9ba, U+f9bd-f9be, U+f9c1, U+f9c4, U+f9c7, U+f9ca, U+f9cd, U+f9d0-f9d1, U+f9d3-f9d4, U+f9d7-f9d8, U+f9dc-f9dd, U+f9df-f9e1, U+f9e4, U+f9e8-f9ea, U+f9f4, U+f9f6-f9f7, U+f9f9-f9fa, U+f9fc-fa01, U+fa03-fa04, U+fa06, U+fa08-fa0a, U+fa0c, U+fa11, U+fa17, U+fa19, U+fa1b, U+fa1d, U+fa26, U+fa2c, U+fb01, U+fdfc, U+fe0e, U+fe33-fe36, U+fe38-fe44, U+fe49-fe51, U+fe54, U+fe56-fe57, U+fe59-fe5c, U+fe5f-fe6a, U+fe8e, U+fe92-fe93, U+feae, U+fecb-fecc, U+fee0, U+feec, U+fef3, U+ff04, U+ff07, U+ff26-ff2c, U+ff31-ff32, U+ff35-ff36) ); /* noto-sans-hk-[17]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-17-400-normal.woff2", $range: (U+f0b2, U+f0b7, U+f0be, U+f0c9, U+f0d8, U+f0e0, U+f0e6, U+f0fc, U+f104-f105, U+f16a, U+f16d, U+f18a, U+f1e0, U+f232, U+f308, U+f400, U+f442, U+f4df, U+f610-f611, U+f6b1-f6b5, U+f6ba-f6bc, U+f6c7, U+f6dd, U+f6e2, U+f6f3-f6f4, U+f6f8, U+f6fa, U+f6fc, U+f6fe, U+f700-f703, U+f705, U+f707, U+f709-f70b, U+f70d-f70f, U+f711, U+f713, U+f715-f717, U+f719-f71a, U+f71c-f721, U+f724-f725, U+f728, U+f734-f735, U+f737-f738, U+f73a, U+f73e-f742, U+f745, U+f748-f749, U+f74b-f74d, U+f74f-f751, U+f753-f756, U+f758-f75a, U+f75c, U+f75e, U+f760-f764, U+f768-f76a, U+f76c, U+f76f-f774, U+f776-f77a, U+f77c, U+f77e-f780, U+f785, U+f787-f78c, U+f78e, U+f792-f796, U+f798, U+f79c, U+f7f5, U+f812, U+f815, U+f876, U+f8f5, U+f8f8, U+f8ff, U+f901-f902, U+f904, U+f906-f907, U+f909-f90a, U+f90f, U+f914, U+f918-f919, U+f91b, U+f91d, U+f91f, U+f923, U+f925, U+f92d-f92f, U+f934, U+f937-f938, U+f93d, U+f93f, U+f941, U+f949, U+f94c, U+f94e) ); /* noto-sans-hk-[25]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-25-400-normal.woff2", $range: (U+9f27, U+9f29, U+9f2c, U+9f2f, U+9f31, U+9f34, U+9f37, U+9f39, U+9f3d-9f3e, U+9f41, U+9f44-9f45, U+9f4c-9f50, U+9f53-9f54, U+9f57, U+9f59-9f5a, U+9f5c, U+9f5f-9f60, U+9f62-9f63, U+9f66-9f67, U+9f69-9f6a, U+9f6c, U+9f72, U+9f76-9f77, U+9f7f, U+9f84-9f85, U+9f88, U+9f8e, U+9f91, U+9f94-9f98, U+9f9a-9f9b, U+9f9f-9fa0, U+9fa2, U+9fa4-9fb3, U+9fc7-9fcb, U+9fd0, U+a1f4, U+a4b0-a4b1, U+a4b3, U+a9c1-a9c2, U+aa31, U+ab34, U+ac00-ac01, U+ac04, U+ac08, U+ac10-ac11, U+ac13-ac16, U+ac19, U+ac1c-ac1d, U+ac24, U+ac70-ac71, U+ac74, U+ac77-ac78, U+ac80-ac81, U+ac83, U+ac8c, U+ac90, U+aca0, U+aca8-aca9, U+acac, U+acb0, U+acb8-acb9, U+acbc-acbd, U+acc1, U+acc4, U+ace0-ace1, U+ace4, U+ace8, U+acf0-acf1, U+acf3, U+acf5, U+acfc-acfd, U+ad00, U+ad0c, U+ad11, U+ad1c, U+ad2b, U+ad34, U+ad3a, U+ad50, U+ad6c, U+ad70, U+ad74, U+ad7f, U+ad81, U+ad8c, U+adc0, U+adc8, U+addc, U+ade0, U+adf8-adf9, U+adfc, U+ae00, U+ae08-ae09, U+ae30, U+ae34, U+ae38, U+ae40, U+ae4a, U+ae4c, U+ae54, U+ae5d, U+ae68, U+aebc, U+aed8, U+aef4, U+af2c-af2d, U+af34, U+af43, U+afb8) ); /* noto-sans-hk-[26]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-26-400-normal.woff2", $range: (U+9d9a, U+9da1-9da2, U+9da5, U+9da9, U+9dab-9dac, U+9db1-9db2, U+9db5, U+9db9-9dbd, U+9dbf-9dc2, U+9dc4, U+9dc7-9dc9, U+9dd3-9dd4, U+9dd6, U+9dd9-9dda, U+9dde-9ddf, U+9de2, U+9de5-9de6, U+9de8, U+9def-9df0, U+9df2-9df4, U+9df8, U+9dfa, U+9dfc-9dfd, U+9dff, U+9e02, U+9e07, U+9e0a, U+9e0c, U+9e0e, U+9e11, U+9e15, U+9e18, U+9e1a-9e1e, U+9e20-9e23, U+9e25-9e26, U+9e2d, U+9e2f, U+9e33, U+9e35, U+9e3d-9e3f, U+9e42-9e43, U+9e45, U+9e48-9e4a, U+9e4c, U+9e4f, U+9e51, U+9e55, U+9e64, U+9e66, U+9e6b, U+9e6d-9e6e, U+9e70, U+9e73, U+9e75, U+9e78, U+9e7b, U+9e80-9e85, U+9e87-9e88, U+9e8b-9e8c, U+9e90-9e91, U+9e93, U+9e95-9e96, U+9e98, U+9e9d-9e9e, U+9ea1-9ea2, U+9ea4, U+9ea6, U+9ea8-9ead, U+9eaf, U+9eb1, U+9eb4, U+9eb7-9eba, U+9ebe-9ebf, U+9ec1, U+9ec6-9ec7, U+9ecc-9ecd, U+9ed0, U+9ed2, U+9ed4, U+9ed9-9eda, U+9edc-9edd, U+9edf-9ee0, U+9ee2, U+9ee5, U+9ee7, U+9eee, U+9ef1, U+9ef3-9ef4, U+9ef6-9ef9, U+9efb-9eff, U+9f02, U+9f07-9f09, U+9f10, U+9f14-9f15, U+9f17, U+9f19, U+9f22, U+9f26) ); /* noto-sans-hk-[27]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-27-400-normal.woff2", $range: (U+9bea, U+9bed-9bee, U+9bf0-9bf1, U+9bf4-9bf5, U+9bf7, U+9bf9, U+9bfd, U+9bff, U+9c02, U+9c06, U+9c08-9c0a, U+9c0c-9c0d, U+9c10, U+9c12-9c13, U+9c15, U+9c1b-9c1c, U+9c1f-9c21, U+9c23-9c26, U+9c28-9c29, U+9c2d-9c2f, U+9c31-9c33, U+9c35-9c37, U+9c39-9c3b, U+9c3d-9c3e, U+9c40, U+9c42, U+9c45-9c49, U+9c4f, U+9c52-9c54, U+9c56, U+9c58-9c5a, U+9c5d, U+9c5f-9c60, U+9c63, U+9c67-9c68, U+9c72, U+9c75, U+9c78, U+9c7a-9c7c, U+9c7f-9c81, U+9c87-9c88, U+9c8d, U+9c91, U+9c94, U+9c97, U+9c9b, U+9ca4, U+9ca8, U+9cab, U+9cad, U+9cb1-9cb3, U+9cb6-9cb8, U+9cc4-9cc5, U+9ccc-9ccd, U+9cd5-9cd7, U+9cdd-9cdf, U+9ce7, U+9ce9, U+9cee-9cf0, U+9cf2, U+9cfc-9cfe, U+9d02-9d03, U+9d06-9d08, U+9d0c, U+9d0e, U+9d10, U+9d12, U+9d15-9d17, U+9d1d-9d1f, U+9d21, U+9d23, U+9d2b, U+9d2f-9d30, U+9d34, U+9d37, U+9d39, U+9d3d, U+9d42, U+9d44, U+9d49, U+9d4e, U+9d50, U+9d52-9d53, U+9d59, U+9d5c, U+9d5e-9d61, U+9d6a, U+9d6d-9d70, U+9d77, U+9d7a, U+9d7c, U+9d7e, U+9d83, U+9d87, U+9d89, U+9d8f, U+9d91-9d93, U+9d96, U+9d98) ); /* noto-sans-hk-[28]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-28-400-normal.woff2", $range: (U+9a6b, U+9a6d, U+9a6f-9a71, U+9a73-9a74, U+9a76, U+9a78-9a79, U+9a7b-9a7c, U+9a7e-9a7f, U+9a81-9a82, U+9a84-9a87, U+9a8a-9a8b, U+9a8f-9a91, U+9a97, U+9a9a, U+9a9e, U+9aa0-9aa1, U+9aa4-9aa5, U+9aaf-9ab2, U+9ab6-9ab7, U+9ab9-9aba, U+9abd-9abe, U+9ac0-9ac5, U+9ac8, U+9acb-9acc, U+9ace-9acf, U+9ad1, U+9ad5-9ad7, U+9ad9, U+9adf-9ae3, U+9aea-9aeb, U+9aed, U+9aef, U+9af2, U+9af4, U+9af9, U+9afb, U+9afd, U+9aff, U+9b02-9b04, U+9b08-9b09, U+9b0f, U+9b13-9b14, U+9b18, U+9b1f, U+9b22-9b23, U+9b28-9b2a, U+9b2c-9b30, U+9b32, U+9b34, U+9b39, U+9b3b, U+9b40, U+9b43, U+9b46-9b49, U+9b4b-9b4e, U+9b50-9b51, U+9b55, U+9b58, U+9b5b, U+9b5e-9b60, U+9b63, U+9b68-9b69, U+9b74, U+9b7d, U+9b7f-9b81, U+9b83-9b84, U+9b87-9b88, U+9b8a-9b8b, U+9b8d-9b90, U+9b92-9b95, U+9b97, U+9b9d, U+9b9f-9ba0, U+9ba2-9ba3, U+9ba8, U+9bab, U+9bb0, U+9bb8, U+9bc0-9bc1, U+9bc3, U+9bc6-9bc8, U+9bcf, U+9bd3-9bd7, U+9bd9, U+9bdb, U+9bdd, U+9be1-9be2, U+9be4-9be5, U+9be7, U+9be9) ); /* noto-sans-hk-[29]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-29-400-normal.woff2", $range: (U+98ec-98ee, U+98f1, U+98f4-98f5, U+9901, U+9908-9909, U+990c, U+990e, U+9911-9912, U+9914, U+9916-9917, U+9919, U+991b-991c, U+991e, U+9920, U+9927, U+992b-992c, U+992e, U+9931-9933, U+9937-9940, U+9942-9944, U+9948-994a, U+994c-994e, U+9951, U+9954, U+995c-995f, U+9961-9963, U+9965, U+9968, U+996a, U+996d-9972, U+9975-9976, U+997a, U+997c, U+997f-9980, U+9984-9985, U+9988, U+998b, U+998d, U+998f, U+9992, U+9994-9995, U+9997-9998, U+999b-999c, U+999e, U+99a0-99a1, U+99a4, U+99aa-99ab, U+99af, U+99b1, U+99b4, U+99b8-99b9, U+99bc, U+99c4-99c6, U+99cf, U+99d1-99d2, U+99d4, U+99d6, U+99d8-99da, U+99df-99e2, U+99e6, U+99e9, U+99ee, U+99f0, U+99f5, U+99f8, U+99fb, U+9a01-9a05, U+9a0c, U+9a0f-9a13, U+9a16, U+9a1b-9a1c, U+9a1f-9a21, U+9a24, U+9a26, U+9a28, U+9a2b, U+9a2d-9a2f, U+9a34-9a36, U+9a38, U+9a3b-9a3c, U+9a3e, U+9a40-9a44, U+9a4a, U+9a4c-9a4e, U+9a52, U+9a56, U+9a58, U+9a5c, U+9a62-9a65, U+9a69-9a6a) ); /* noto-sans-hk-[30]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-30-400-normal.woff2", $range: (U+9798, U+979b, U+979d-979f, U+97a3, U+97a5-97a6, U+97a8, U+97ab-97ac, U+97ae, U+97b1-97b2, U+97b4, U+97b6-97ba, U+97bd-97c3, U+97c6, U+97c8-97c9, U+97cd, U+97d2, U+97d6, U+97d8-97d9, U+97dc-97de, U+97e0-97e1, U+97e6-97e7, U+97ec-97ee, U+97f0-97f2, U+97f5, U+97f9-97fa, U+97fe, U+9804, U+9807, U+980a, U+980e-980f, U+9814-9816, U+981a, U+981c, U+981e-9821, U+9823, U+9826, U+9828, U+982a-982c, U+982e, U+9832-9835, U+9837, U+9839, U+983c-983d, U+9845, U+9847-9849, U+984b, U+984e, U+9852-9857, U+9859-985a, U+9862-9863, U+9865-9866, U+9868, U+986c, U+9870-9871, U+9873-9874, U+9877, U+987a-987f, U+9881-9882, U+9885, U+9887-988a, U+988c-988d, U+9890, U+9893, U+9896-9897, U+989a, U+989c-989e, U+98a0, U+98a4, U+98a6-98a7, U+98a9, U+98ae-98af, U+98b2-98b4, U+98b6-98bd, U+98bf, U+98c3, U+98c7-98c8, U+98ca, U+98d2-98d3, U+98d8-98da, U+98dc, U+98de, U+98e0-98e1, U+98e3, U+98e5-98e9, U+98eb) ); /* noto-sans-hk-[31]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-31-400-normal.woff2", $range: (U+9602, U+9607-9609, U+960e, U+9610-9611, U+9614, U+9616, U+9619-961a, U+961c-961d, U+961f, U+9621, U+9624, U+9628, U+962f, U+9633-9636, U+9638, U+963c, U+9641-9643, U+9645, U+9647-9648, U+964e-964f, U+9651, U+9653-9656, U+9658, U+965b-965f, U+9661, U+9665, U+9668-9669, U+966c, U+9672, U+9674, U+967a-967b, U+9681-9685, U+9688-9689, U+968b, U+968d, U+9695-9698, U+969e, U+96a0-96a5, U+96a9, U+96ac, U+96ae, U+96b0, U+96b2-96b4, U+96b6-96b7, U+96b9, U+96bc-96be, U+96c3, U+96c9-96cb, U+96ce-96cf, U+96d1-96d2, U+96d8, U+96dd, U+96e9, U+96eb, U+96f0-96f1, U+96f3-96f4, U+96f9, U+96fe-96ff, U+9701-9703, U+9705, U+9708, U+970a, U+970e-9711, U+9719, U+971b, U+971d, U+971f-9721, U+9728, U+972a, U+972d, U+9730-9731, U+9733-9734, U+9736, U+973a, U+973d-973e, U+9740-9741, U+9744, U+9746-9747, U+9749-974a, U+9750-9751, U+9753, U+9755, U+9757-9759, U+975b, U+975d, U+975f, U+9763, U+9765-9766, U+9768, U+976c-976d, U+9771, U+9773, U+9776, U+977a, U+977c, U+9780, U+9784-9789, U+978e-978f) ); /* noto-sans-hk-[32]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-32-400-normal.woff2", $range: (U+949d-94a3, U+94a5-94a9, U+94ac, U+94ae-94b1, U+94b3-94b5, U+94bb-94bc, U+94be-94c3, U+94c5-94c6, U+94c9, U+94ce-94d0, U+94db-94dd, U+94e0, U+94e2-94e3, U+94e8, U+94ec-94ee, U+94f0, U+94f2, U+94f5-94f6, U+94f8, U+94fa, U+94ff-9502, U+9504-9506, U+9508, U+950b-950c, U+950f-9510, U+9519-951b, U+951d, U+951f, U+9521-9526, U+952d-9530, U+9535, U+953a-953b, U+9540-9542, U+9547, U+9549-954a, U+954d, U+9550-9551, U+9554-9556, U+955c, U+956c-956d, U+956f-9570, U+9573, U+9576, U+9578, U+9582, U+9585-9586, U+9588, U+958e-958f, U+9596-9597, U+9599, U+959c, U+959e-95a2, U+95a4, U+95a6-95a7, U+95aa-95ae, U+95b0, U+95b2, U+95b6, U+95b9-95bf, U+95c2-95c4, U+95c7-95c9, U+95cb-95cd, U+95d0, U+95d3-95d5, U+95d7-95d8, U+95da, U+95de, U+95e0-95e1, U+95e4-95e5, U+95ea-95eb, U+95ef-95f0, U+95f2-95f3, U+95f5, U+95f7-95fa, U+95fd, U+9600-9601) ); /* noto-sans-hk-[33]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-33-400-normal.woff2", $range: (U+9370-9371, U+9373-9374, U+9376, U+9378-937a, U+937c-937d, U+9381, U+9384-9387, U+938c, U+938f-9390, U+9394, U+9397-9398, U+939a-939e, U+93a0-93a3, U+93a6-93a7, U+93a9-93aa, U+93ac-93ad, U+93af-93b0, U+93b3-93bb, U+93bd-93c4, U+93c6-93c7, U+93ca-93cd, U+93d0-93d1, U+93d3, U+93d6-93d8, U+93db-93de, U+93e0, U+93e4, U+93e8, U+93ee, U+93f0-93f1, U+93f3-93f5, U+93f7-93f9, U+93fb, U+9401, U+9403-9404, U+9407-9408, U+940f-9410, U+9413-9414, U+9417, U+9419-941e, U+9420-942b, U+942d-942f, U+9432-9433, U+9436, U+9438, U+943a, U+943d-9440, U+9442-9443, U+9445, U+944a, U+944c-944d, U+9454-9455, U+9458, U+945a-945b, U+945e, U+9460, U+9462-9463, U+9465, U+9467-9468, U+946a, U+946c-946d, U+946f, U+9471, U+9474-9477, U+9479, U+947b, U+947e-9481, U+9485, U+9488-948a, U+948e, U+9492-9493, U+9497, U+9499, U+949b-949c) ); /* noto-sans-hk-[34]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-34-400-normal.woff2", $range: (U+926b-926f, U+9271-9272, U+9274, U+9276-9278, U+927a-927c, U+927e-927f, U+9281-9284, U+9286, U+9288-928a, U+928d-928f, U+9291, U+9295-9296, U+9299-929b, U+929d, U+92a0-92ae, U+92b1-92b2, U+92b5-92b6, U+92ba-92bc, U+92be-92bf, U+92c2-92c3, U+92c6-92cd, U+92cf-92d1, U+92d4-92d5, U+92d7, U+92d9, U+92db, U+92dd, U+92df, U+92e3-92e6, U+92e8-92e9, U+92eb-92ef, U+92f1-92f4, U+92f6, U+92f9, U+92fb, U+92fd, U+9300-9303, U+9306-9307, U+930b, U+930f, U+9312, U+9315, U+9319-931b, U+931d-931f, U+9321, U+9323-9325, U+9327-932a, U+932c-932e, U+9330-9333, U+9335, U+9338, U+933c, U+9340-9349, U+934f-9352, U+9354, U+9356-935a, U+935c-9360, U+9362-936c, U+936e) ); /* noto-sans-hk-[35]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-35-400-normal.woff2", $range: (U+913a, U+9143, U+9146, U+9148-914a, U+914e-9151, U+9154, U+9156-9157, U+9159-915a, U+915c-915e, U+9161-9164, U+9167, U+916b, U+916e, U+9170-9172, U+9174, U+9176, U+9179-917a, U+917c, U+917f, U+9181-9182, U+9184-9186, U+918c-918e, U+9190-9191, U+9196, U+919a-919b, U+919e, U+91a1-91a4, U+91a7, U+91a9-91aa, U+91ae-91b2, U+91b4-91b6, U+91b8, U+91bb, U+91bd-91be, U+91c1, U+91c3-91c6, U+91c8-91ca, U+91d2-91d7, U+91d9, U+91df, U+91e1, U+91e4-91e9, U+91ec-91ed, U+91f0-91f1, U+91f5-91fa, U+91fd-9201, U+9203-920a, U+920d-920e, U+9210-9211, U+9213, U+9217-9219, U+921c, U+9221, U+9224-9225, U+9227-9228, U+922a-922b, U+922d-922e, U+9230-9231, U+9233, U+9235-9239, U+923b-9241, U+9244, U+9246, U+9248-9249, U+924b-9251, U+9253, U+9255, U+9258, U+925a, U+925d-925f, U+9262, U+9265-9267) ); /* noto-sans-hk-[36]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-36-400-normal.woff2", $range: (U+8fa9, U+8fab, U+8fae, U+8fb3, U+8fb5-8fb8, U+8fba-8fbd, U+8fbf, U+8fc1-8fc2, U+8fc6, U+8fc8, U+8fca, U+8fcc-8fcd, U+8fcf, U+8fd2-8fd3, U+8fd5, U+8fda, U+8fdc-8fdd, U+8fdf, U+8fe2-8fe5, U+8fe8-8fe9, U+8fed-8fee, U+8ff3, U+8ff5, U+8ff8, U+8ffa-8ffc, U+8ffe, U+9002, U+9004, U+9008, U+900a-900b, U+9011-9013, U+9016, U+901e, U+9021, U+9024, U+902d, U+902f-9030, U+9033-9037, U+9039-903b, U+9041, U+9044-9046, U+904c, U+904f-9052, U+9056-9058, U+905b, U+905d, U+9061-9062, U+9064-9065, U+9068, U+906c, U+906f, U+9074, U+9079, U+907d, U+9083, U+9085, U+9087-9089, U+908b, U+9090, U+9093, U+9095, U+9097, U+9099, U+909b, U+909d-909e, U+90a0-90a2, U+90ac, U+90af-90b0, U+90b2-90b4, U+90b6, U+90b9, U+90bb, U+90bd-90be, U+90c3-90c5, U+90c7, U+90d1, U+90d4-90d5, U+90d7, U+90db-90df, U+90e2-90e4, U+90ea-90eb, U+90ef, U+90f4, U+90f7-90f8, U+90fc, U+90fe-9100, U+9102, U+9104, U+9106, U+9112, U+9114-911a, U+911c, U+911e, U+9120, U+9122-9123, U+9129, U+912b, U+912f, U+9131-9132, U+9134, U+9136, U+9139) ); /* noto-sans-hk-[37]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-37-400-normal.woff2", $range: (U+8e39-8e3a, U+8e3c-8e3d, U+8e40-8e42, U+8e46-8e47, U+8e49-8e50, U+8e53-8e55, U+8e59-8e5b, U+8e60, U+8e62-8e63, U+8e67-8e69, U+8e6c-8e6d, U+8e6f, U+8e71, U+8e74-8e77, U+8e7a-8e7c, U+8e7e, U+8e80, U+8e82, U+8e84-8e85, U+8e87, U+8e89-8e8b, U+8e8f-8e95, U+8e99-8e9a, U+8e9d-8e9e, U+8ea1, U+8ea3, U+8ea5-8ea7, U+8eaa, U+8eac-8ead, U+8eaf-8eb1, U+8eb6, U+8eb9, U+8ebc, U+8ebe, U+8ec3, U+8ec6, U+8ecb, U+8ece-8ecf, U+8ed1, U+8ed4, U+8ed7, U+8eda-8edb, U+8ee2, U+8ee4, U+8ee8, U+8eeb, U+8eed, U+8ef2, U+8ef9-8efe, U+8f05, U+8f07-8f08, U+8f0a-8f0c, U+8f12-8f13, U+8f17, U+8f19-8f1a, U+8f1c, U+8f1e-8f1f, U+8f25-8f26, U+8f2d, U+8f30, U+8f33, U+8f36, U+8f3c, U+8f3e, U+8f40-8f42, U+8f45-8f47, U+8f4a, U+8f4d, U+8f54-8f55, U+8f5c-8f5d, U+8f61-8f62, U+8f64, U+8f67-8f69, U+8f6d-8f72, U+8f74, U+8f76, U+8f7b-8f7c, U+8f7f, U+8f83-8f86, U+8f88-8f8a, U+8f8d, U+8f90, U+8f93, U+8f95-8f97, U+8f99, U+8f9e-8fa0, U+8fa2, U+8fa5, U+8fa7) ); /* noto-sans-hk-[38]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-38-400-normal.woff2", $range: (U+8cc1-8cc2, U+8cc4-8cc5, U+8ccd, U+8ccf-8cd2, U+8cd4-8cd6, U+8cd9-8cdb, U+8ce1, U+8ce8-8ce9, U+8ceb, U+8cf0, U+8cf2, U+8cf7-8cf8, U+8cfb, U+8cfe, U+8d03-8d04, U+8d07, U+8d0b-8d0d, U+8d10-8d14, U+8d17-8d18, U+8d1b-8d1f, U+8d21-8d27, U+8d29-8d2c, U+8d2e-8d32, U+8d34-8d35, U+8d37-8d38, U+8d3a-8d3c, U+8d3e-8d3f, U+8d41-8d43, U+8d48, U+8d4b-8d4c, U+8d4e-8d50, U+8d54, U+8d56, U+8d58, U+8d5a-8d5b, U+8d5f-8d60, U+8d62-8d63, U+8d66-8d69, U+8d6c-8d6e, U+8d73, U+8d75-8d76, U+8d7a-8d7b, U+8d7d, U+8d82, U+8d84, U+8d8b, U+8d90-8d91, U+8d94, U+8d96, U+8d9c, U+8da6, U+8da9, U+8dab, U+8daf, U+8db2, U+8db5, U+8db7, U+8dba, U+8dbc, U+8dbf-8dc0, U+8dc2-8dc3, U+8dc6, U+8dcb, U+8dce-8dd0, U+8dd4, U+8dd6-8dd7, U+8dda-8ddb, U+8de3-8de4, U+8de9, U+8deb-8dec, U+8df1, U+8df5-8df7, U+8dfa-8dfd, U+8e01, U+8e05, U+8e08-8e0a, U+8e0e, U+8e14, U+8e16, U+8e18, U+8e1d-8e21, U+8e23, U+8e26-8e28, U+8e2a-8e2b, U+8e2d-8e2e, U+8e30-8e31, U+8e35) ); /* noto-sans-hk-[39]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-39-400-normal.woff2", $range: (U+8b26, U+8b28, U+8b2b, U+8b2d-8b2e, U+8b33, U+8b3f, U+8b41, U+8b43, U+8b46, U+8b4c-8b4f, U+8b53-8b54, U+8b56, U+8b59, U+8b5e-8b60, U+8b62, U+8b64, U+8b69-8b6d, U+8b72, U+8b7e, U+8b81, U+8b83, U+8b89, U+8b8c, U+8b8e-8b90, U+8b92, U+8b95-8b96, U+8b99, U+8b9b-8b9c, U+8b9e-8ba0, U+8ba3, U+8ba5, U+8ba7, U+8baa, U+8bad, U+8bb2-8bb4, U+8bb6-8bb9, U+8bbc-8bbd, U+8bbf-8bc0, U+8bc3, U+8bc5, U+8bc8-8bcb, U+8bcf, U+8bd1, U+8bd7-8bdc, U+8bde-8be1, U+8be3, U+8be5-8be7, U+8be9, U+8beb-8bec, U+8bef, U+8bf1-8bf2, U+8bf5-8bf6, U+8bf8, U+8bfa, U+8bfd-8bfe, U+8c01-8c02, U+8c05, U+8c08, U+8c0a-8c11, U+8c13-8c15, U+8c18-8c1c, U+8c1f, U+8c23-8c29, U+8c2c-8c2d, U+8c31, U+8c34, U+8c36, U+8c39, U+8c3f, U+8c47, U+8c49-8c4c, U+8c4f, U+8c51, U+8c55, U+8c62, U+8c68, U+8c73, U+8c78, U+8c7a-8c7c, U+8c82, U+8c85, U+8c89-8c8a, U+8c8d-8c8e, U+8c90, U+8c94, U+8c98-8c99, U+8c9b, U+8c9f, U+8ca3-8ca4, U+8cad-8cb0, U+8cb2, U+8cb9-8cba, U+8cbd) ); /* noto-sans-hk-[40]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-40-400-normal.woff2", $range: (U+8983, U+8987-898a, U+898c, U+8991, U+8994-8995, U+8997-8998, U+899a, U+899c, U+89a1, U+89a4-89a7, U+89a9, U+89ac, U+89af, U+89b2-89b3, U+89b7, U+89bb-89bc, U+89bf, U+89c5, U+89c9-89ca, U+89d1, U+89d4-89d5, U+89da, U+89dc-89de, U+89e5-89e7, U+89ed, U+89f1, U+89f3-89f4, U+89f6, U+89ff, U+8a01, U+8a03, U+8a07, U+8a09, U+8a0c, U+8a0f-8a12, U+8a16, U+8a1b-8a1c, U+8a22, U+8a25, U+8a27, U+8a29, U+8a2b, U+8a33, U+8a36, U+8a38, U+8a3d-8a3e, U+8a41, U+8a45-8a46, U+8a48-8a49, U+8a4e, U+8a51-8a52, U+8a54, U+8a56-8a58, U+8a5b, U+8a5d, U+8a61, U+8a63, U+8a67, U+8a6a-8a6c, U+8a70, U+8a74-8a76, U+8a7a-8a7c, U+8a7e, U+8a82, U+8a84-8a86, U+8a89, U+8a8f-8a92, U+8a94, U+8a9a, U+8a9c, U+8aa1, U+8aa3, U+8aa5, U+8aa7-8aa9, U+8aad, U+8aaf, U+8ab1, U+8ab4, U+8ab6, U+8abe, U+8ac2, U+8ac4, U+8ac6, U+8ac9, U+8acc-8acf, U+8ad1, U+8ada-8adb, U+8add-8ae2, U+8ae4, U+8ae6, U+8aea-8aeb, U+8aed, U+8af1-8af6, U+8af9-8afa, U+8afc, U+8b01, U+8b04-8b05, U+8b07, U+8b0b-8b0d, U+8b0f-8b10, U+8b13-8b14, U+8b16, U+8b1a, U+8b1c, U+8b1f, U+8b21-8b22) ); /* noto-sans-hk-[41]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-41-400-normal.woff2", $range: (U+8804-8806, U+880a-880b, U+880e-8811, U+8813, U+8815-8816, U+8818, U+881b, U+8821, U+8823, U+8827, U+882d, U+8831-8832, U+8835, U+8839-883a, U+883c, U+8842, U+8844-8846, U+884a, U+884e-884f, U+8852, U+8854-8856, U+8859-885a, U+885e, U+8860, U+8862, U+8864-8865, U+8869-886a, U+886c-886e, U+8871-8872, U+8875, U+8879, U+887d-887f, U+8882, U+8884-8885, U+8887-8888, U+888f-8890, U+8892-8893, U+8897-8898, U+889a-889e, U+88a0, U+88a2, U+88a4, U+88a8, U+88aa, U+88ad-88ae, U+88b1, U+88b4-88b5, U+88b7-88b8, U+88bc-88c0, U+88c4, U+88c6-88c7, U+88c9-88cc, U+88ce, U+88d2, U+88d6, U+88d8, U+88db, U+88df, U+88e4, U+88e6, U+88e8-88e9, U+88ec, U+88ef-88f1, U+88f3-88f5, U+88fc, U+88fe-8900, U+8902, U+8906, U+890a-890c, U+8912-8915, U+8918-891a, U+891f, U+8921, U+8923-8925, U+892a-892b, U+892d, U+8930, U+8933, U+8935-8936, U+8938, U+893d, U+8941-8943, U+8946-8947, U+8949, U+894c-894d, U+8954, U+8956-8957, U+8959, U+895c, U+895e-8960, U+8964-8966, U+896c, U+8971, U+8974, U+8977, U+897b, U+897e, U+8980, U+8982) ); /* noto-sans-hk-[42]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-42-400-normal.woff2", $range: (U+8696, U+869a, U+869c-869d, U+86a0-86a1, U+86a3-86a4, U+86a7-86aa, U+86ad, U+86af-86b4, U+86b6, U+86b9-86ba, U+86c0-86c2, U+86c4, U+86c6, U+86c9-86ca, U+86cc-86ce, U+86d0, U+86d3-86d4, U+86de-86df, U+86e9, U+86ed-86f0, U+86f3, U+86f8-86fc, U+86fe, U+8703, U+8706-870a, U+870d-870e, U+8711-8712, U+8715, U+8717, U+8719-871a, U+871e, U+8721-8723, U+8725, U+8728-8729, U+872e, U+8731, U+8734, U+8737, U+873a, U+873e-8740, U+8742, U+8747, U+8749, U+874b-874c, U+874e-874f, U+8753, U+8757-8758, U+875d, U+875f, U+8761-8765, U+8768, U+876a, U+876c-8772, U+8777, U+877a-877b, U+877d, U+8781, U+8784-8786, U+8788, U+878b-878c, U+8793, U+8797-8798, U+879f, U+87a3, U+87a5, U+87a8-87a9, U+87ab-87ad, U+87af, U+87b1, U+87b3, U+87b5, U+87b9, U+87bb, U+87bd-87c1, U+87c4-87c8, U+87ca-87cc, U+87ce, U+87d2, U+87d6, U+87da-87dc, U+87e0-87e1, U+87e3, U+87e5, U+87e7, U+87ea-87eb, U+87ee-87ef, U+87f3-87f7, U+87fe, U+8802-8803) ); /* noto-sans-hk-[43]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-43-400-normal.woff2", $range: (U+8511, U+8515, U+8517, U+851d-851f, U+8524, U+852b, U+852f, U+8532-8535, U+8537-8538, U+853a, U+853c, U+853e, U+8541-8542, U+8545, U+8548, U+854b-854e, U+8552-8553, U+8555-8558, U+855a, U+855e-855f, U+8561-8565, U+8568, U+856a-856c, U+856f-8570, U+8573-8574, U+8577-857b, U+8580-8581, U+8585-8586, U+858a, U+858c, U+858f-8590, U+8593-8594, U+8597-8599, U+859c, U+859f, U+85a1-85a2, U+85a4, U+85a8, U+85ab-85ac, U+85ae, U+85b3-85b4, U+85b7, U+85b9-85ba, U+85bd-85be, U+85c1-85c2, U+85cb, U+85ce, U+85d0, U+85d3, U+85d5-85d6, U+85dc, U+85e0, U+85e6, U+85e8, U+85ea, U+85ed-85ee, U+85f4, U+85f6-85f7, U+85f9-85fa, U+85fc, U+85ff, U+8602, U+8604-8605, U+860d, U+860f-8610, U+8613-8614, U+8616-8618, U+861a, U+861e, U+8621-8622, U+8627-862a, U+862f, U+8634-8636, U+8638, U+863a, U+863c, U+8640, U+8642, U+8645-8646, U+864c-864d, U+864f, U+8651-8654, U+8657, U+8659-865a, U+865c, U+8662, U+866b-866c, U+866f-8673, U+8677, U+867a-867b, U+867d-867e, U+8680-8682, U+868b-868d, U+8692-8695) ); /* noto-sans-hk-[44]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-44-400-normal.woff2", $range: (U+83bc-83c0, U+83c2, U+83c4-83c5, U+83c8-83c9, U+83cb, U+83cd-83cf, U+83d1, U+83d4-83d6, U+83d8, U+83dd, U+83df, U+83e1-83e2, U+83e5, U+83ea-83eb, U+83ed, U+83f0, U+83f3-83f4, U+83f9, U+83fb-83fe, U+8405-8407, U+840b, U+840f, U+8411, U+8413-8414, U+8416, U+8418, U+841b-841d, U+8420-8421, U+8423-8424, U+8426-8429, U+842b, U+842d-842e, U+8432-8433, U+8435, U+8437-8439, U+843b-843c, U+843e, U+8445-8448, U+844a, U+844e, U+8451-8453, U+8455-8456, U+8458-845a, U+845c, U+845f, U+8462, U+8464, U+8466-8467, U+846d, U+846f-8474, U+8476-8478, U+847a, U+847f-8480, U+8484, U+8488, U+848b, U+848d-848e, U+8492-8494, U+8496-8497, U+849d, U+849f, U+84a1, U+84a3, U+84a8, U+84ad, U+84af, U+84b1, U+84b4, U+84b9-84bb, U+84bd-84c0, U+84c2, U+84c6-84c7, U+84ca, U+84cd-84d3, U+84d6, U+84da, U+84dd-84df, U+84e1-84e2, U+84e4-84e8, U+84ea, U+84ef-84f0, U+84f3-84f4, U+84f7-84f8, U+84fa, U+84fc-84fd, U+84ff-8500, U+8503-8506, U+850c, U+8510) ); /* noto-sans-hk-[45]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-45-400-normal.woff2", $range: (U+828d-8291, U+8293-8294, U+8298, U+829a-829c, U+829e-82a4, U+82a6-82ab, U+82ae, U+82b0, U+82b4, U+82b6, U+82ba-82bc, U+82be-82bf, U+82c1, U+82c4-82c5, U+82c7, U+82ca-82cb, U+82cd, U+82cf-82d0, U+82d2, U+82d5-82d6, U+82d8-82d9, U+82db-82dc, U+82de-82e4, U+82e7, U+82ea-82eb, U+82ee-82f0, U+82f3-82f4, U+82f6-8301, U+8306-8308, U+830b-830e, U+8316, U+8318, U+831a-831b, U+831d-831e, U+8327, U+832a, U+832c-832d, U+832f, U+8331, U+8333-8334, U+8337, U+833a-833d, U+833f-8340, U+8342, U+8344-8347, U+834b-834c, U+834f, U+8351, U+8356-8358, U+835a, U+835e-8364, U+8366-8368, U+836b, U+836f, U+8373, U+8375, U+8378, U+837a-8380, U+8383, U+8385-8386, U+8391-8392, U+8394-8395, U+8398-8399, U+839b-839c, U+83a0, U+83a2, U+83a4, U+83a7-83aa, U+83ac, U+83af-83b5, U+83b7, U+83b9-83ba) ); /* noto-sans-hk-[46]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-46-400-normal.woff2", $range: (U+8115, U+8117-8118, U+811a-811b, U+811e, U+8121-8127, U+8129-812a, U+812c, U+812f-8134, U+8137-8138, U+813a, U+813d, U+8142, U+8144, U+8146, U+8148, U+814a, U+814c-814d, U+8151, U+8153, U+8156, U+8158-815a, U+8160, U+8167, U+8169, U+816c-816d, U+816f, U+8171, U+8174, U+817b-817e, U+8182, U+8184, U+8188, U+818a, U+8193-8195, U+8198, U+819b, U+819e, U+81a3, U+81a5-81a7, U+81aa-81ab, U+81af-81b0, U+81b5-81b6, U+81b8, U+81ba-81bb, U+81be-81bf, U+81c1, U+81c3, U+81c6, U+81c8, U+81ca, U+81cc-81cd, U+81cf, U+81d1-81d3, U+81d6-81d7, U+81d9-81da, U+81dd-81de, U+81e0-81e2, U+81e4, U+81e7, U+81ec, U+81ef, U+81f6, U+81fc, U+81fe, U+8200-8202, U+8204-8206, U+820b, U+820e, U+8210, U+8215, U+8217-8218, U+821a-821b, U+821d, U+8221-8222, U+8224, U+8226, U+8228-8229, U+822b, U+822d, U+822f-8234, U+8236-8238, U+823a, U+823e, U+8240, U+8244-8245, U+8249, U+824b, U+824e-824f, U+8254, U+8257, U+825a, U+825f, U+8262, U+8264-8265, U+8268, U+826b, U+826e, U+8270, U+8273, U+8276, U+8278-8279, U+827b, U+827d, U+827f, U+8283-8284, U+8287-828a) ); /* noto-sans-hk-[47]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-47-400-normal.woff2", $range: (U+7f9a, U+7f9d, U+7f9f, U+7fa1-7fa3, U+7fa5, U+7fa7, U+7fad-7fb2, U+7fb4, U+7fb6, U+7fb8, U+7fbc, U+7fbf-7fc0, U+7fc3, U+7fcb-7fcc, U+7fce-7fcf, U+7fd1, U+7fd5, U+7fd8, U+7fdb, U+7fdd-7fdf, U+7fe5-7fe7, U+7fe9, U+7feb-7fec, U+7fee, U+7ff2-7ff3, U+7ffa, U+7ffd-7ffe, U+8002, U+8004, U+8006, U+8008, U+800b, U+800e, U+8011-8012, U+8014, U+8016, U+8018-8019, U+801c-801d, U+8020, U+8024-8026, U+8028, U+802c, U+802e-8031, U+8035, U+8037-8039, U+803b-803c, U+8042-8043, U+804b-804c, U+8052, U+805b, U+8061-8063, U+8066, U+8068, U+806a, U+806e, U+8071, U+8073-8076, U+8079, U+807c, U+807e-8080, U+8083-8084, U+808f, U+8093, U+8095, U+8098, U+809c, U+809f-80a0, U+80a4, U+80a7, U+80ab, U+80ad-80ae, U+80b0-80b1, U+80b4-80b8, U+80bc-80c2, U+80c4, U+80c6-80c7, U+80cb, U+80cd, U+80cf, U+80d4, U+80d7, U+80d9, U+80db-80dd, U+80e0, U+80e3-80e5, U+80e7, U+80e9, U+80eb-80ed, U+80ef-80f1, U+80f3-80f4, U+80f6-80f7, U+80fc, U+80fe-80ff, U+8101, U+8103, U+8107, U+8109, U+810c, U+810e-8114) ); /* noto-sans-hk-[48]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-48-400-normal.woff2", $range: (U+7e5b, U+7e62, U+7e65, U+7e67-7e68, U+7e6c-7e70, U+7e76, U+7e78, U+7e7b, U+7e7e-7e7f, U+7e81-7e82, U+7e86-7e88, U+7e8a, U+7e8d-7e8e, U+7e92-7e94, U+7e98-7e9b, U+7e9e-7ea0, U+7ea3-7ea4, U+7ea8, U+7eaa-7eaf, U+7eb1-7eb3, U+7eb5-7eba, U+7ebd-7ebe, U+7ec0-7ec1, U+7ec3, U+7ec5, U+7ec7-7eca, U+7ecd-7ece, U+7ed1-7ed2, U+7ed4-7ed5, U+7ed7-7ed8, U+7eda-7edb, U+7edd-7ede, U+7ee2-7ee3, U+7ee5, U+7ee7, U+7ee9-7eeb, U+7eee-7ef0, U+7ef3, U+7ef5, U+7ef7-7ef8, U+7efd-7f01, U+7f03, U+7f05-7f09, U+7f0e, U+7f10, U+7f13-7f15, U+7f18-7f1a, U+7f1c-7f1d, U+7f20, U+7f24-7f25, U+7f28-7f2a, U+7f2d-7f2e, U+7f30, U+7f34, U+7f36-7f37, U+7f3d, U+7f40-7f45, U+7f47-7f4e, U+7f52-7f54, U+7f58, U+7f5a, U+7f5d, U+7f5f-7f63, U+7f65, U+7f68, U+7f6b, U+7f71, U+7f78, U+7f7d-7f7e, U+7f81-7f83, U+7f86-7f87, U+7f8b-7f8d, U+7f8f, U+7f91, U+7f93-7f95, U+7f97, U+7f99) ); /* noto-sans-hk-[49]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-49-400-normal.woff2", $range: (U+7d07-7d0a, U+7d0f, U+7d11-7d12, U+7d15, U+7d18, U+7d1c-7d1e, U+7d25, U+7d27, U+7d29, U+7d2c, U+7d31-7d32, U+7d35, U+7d38, U+7d3a, U+7d3c, U+7d3e-7d41, U+7d43, U+7d45-7d46, U+7d4c-7d4f, U+7d53-7d54, U+7d56, U+7d5a-7d5d, U+7d5f, U+7d63, U+7d67, U+7d6a, U+7d6d, U+7d70, U+7d73, U+7d75, U+7d79-7d7b, U+7d7d, U+7d80, U+7d83-7d84, U+7d86-7d89, U+7d8b-7d8f, U+7d91, U+7d95-7d9a, U+7d9d-7d9e, U+7da2-7da4, U+7da6, U+7da8, U+7daa, U+7dac, U+7dae-7db0, U+7db3, U+7db5, U+7db7, U+7db9, U+7dbd, U+7dc1, U+7dc3-7dc7, U+7dcc-7dd1, U+7dd3-7dd4, U+7dd6-7dd9, U+7ddb-7ddc, U+7de1-7de2, U+7de4-7de6, U+7df0-7df3, U+7df5-7df6, U+7dfc-7dfe, U+7e01-7e02, U+7e04, U+7e07-7e0b, U+7e10-7e11, U+7e13, U+7e15, U+7e1d-7e20, U+7e22, U+7e25-7e27, U+7e29, U+7e2d, U+7e2f-7e30, U+7e32-7e37, U+7e39, U+7e3b, U+7e44-7e45, U+7e47-7e48, U+7e4a-7e4b, U+7e4d, U+7e50-7e52, U+7e56, U+7e58-7e5a) ); /* noto-sans-hk-[50]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-50-400-normal.woff2", $range: (U+7b91-7b93, U+7b95-7b96, U+7b98, U+7b9c-7b9d, U+7ba0, U+7ba2-7ba3, U+7ba7, U+7ba9-7bac, U+7bae, U+7bb0, U+7bb2, U+7bb4, U+7bb6, U+7bb8-7bb9, U+7bc1, U+7bc3, U+7bc5-7bc6, U+7bcb-7bcc, U+7bcf-7bd0, U+7bd4, U+7bd9-7bdb, U+7bdd, U+7be0-7be1, U+7be5-7be6, U+7bea, U+7bec-7bee, U+7bf1-7bf3, U+7bf8-7bfa, U+7bfc-7c01, U+7c03, U+7c07, U+7c0a-7c0d, U+7c0f, U+7c11-7c12, U+7c15, U+7c1b, U+7c1e-7c20, U+7c23, U+7c25-7c26, U+7c2a-7c2b, U+7c35, U+7c37-7c39, U+7c40-7c42, U+7c44, U+7c48-7c49, U+7c50-7c51, U+7c53-7c54, U+7c56-7c57, U+7c59-7c5d, U+7c5f, U+7c63, U+7c65, U+7c69, U+7c6c-7c6e, U+7c70, U+7c74-7c75, U+7c79, U+7c7c, U+7c7e, U+7c83-7c84, U+7c86, U+7c8b, U+7c8d-7c8e, U+7c91, U+7c94-7c95, U+7c9b-7c9c, U+7c9f, U+7ca2, U+7ca4, U+7ca6, U+7ca8-7caa, U+7cac, U+7cae, U+7cb1-7cb3, U+7cb8, U+7cba, U+7cbc, U+7cbf-7cc0, U+7cc2-7cc3, U+7cc5, U+7cc7-7cc9, U+7ccc-7cce, U+7cd3, U+7cd7, U+7cda, U+7cdc-7cdd, U+7ce0, U+7ce2, U+7ce6, U+7ce8, U+7cea, U+7ced, U+7cf2-7cf6, U+7cf8-7cfa, U+7cfc, U+7d02, U+7d06) ); /* noto-sans-hk-[51]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-51-400-normal.woff2", $range: (U+7a2c-7a2d, U+7a32-7a33, U+7a37, U+7a39-7a3a, U+7a3c, U+7a3e, U+7a42-7a43, U+7a45, U+7a49, U+7a4f, U+7a56, U+7a5a, U+7a5c, U+7a60-7a61, U+7a63, U+7a65, U+7a68, U+7a6d-7a6e, U+7a70-7a72, U+7a77-7a79, U+7a7d, U+7a80, U+7a83, U+7a85-7a86, U+7a88, U+7a8d, U+7a90-7a91, U+7a93-7a96, U+7a98, U+7a9c-7a9d, U+7aa0, U+7aa3, U+7aa5-7aa6, U+7aa8, U+7aaa, U+7aac, U+7ab0, U+7ab3, U+7ab6, U+7ab8, U+7abb-7abc, U+7abe-7abf, U+7ac2-7ac3, U+7ac8-7ac9, U+7acf, U+7ad1-7ad3, U+7ad6, U+7ada-7ade, U+7ae2, U+7ae4, U+7ae6-7ae7, U+7ae9-7aeb, U+7af4, U+7af8, U+7afa-7afe, U+7b01-7b06, U+7b09-7b0c, U+7b0e-7b10, U+7b14, U+7b18, U+7b1a, U+7b1e-7b1f, U+7b22-7b25, U+7b27, U+7b29-7b2b, U+7b2d-7b2e, U+7b31-7b35, U+7b38-7b3c, U+7b42-7b43, U+7b45, U+7b47-7b48, U+7b4a, U+7b4c, U+7b4e-7b50, U+7b55, U+7b58, U+7b5b, U+7b5d, U+7b60, U+7b62, U+7b65-7b67, U+7b69, U+7b6c-7b6f, U+7b72-7b76, U+7b79, U+7b7b, U+7b7e, U+7b82, U+7b84-7b85, U+7b87, U+7b8b, U+7b8d-7b90) ); /* noto-sans-hk-[52]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-52-400-normal.woff2", $range: (U+78d2-78d5, U+78d7-78d8, U+78de, U+78e3-78e4, U+78e6-78e7, U+78ea, U+78ec, U+78ee, U+78f0-78f5, U+78fa-78fb, U+78fd-7900, U+7904-7906, U+790a, U+790c, U+7910-7912, U+791c, U+791e, U+7920-7921, U+792a-792c, U+792e, U+7931-7934, U+7936, U+7938, U+793b, U+793d, U+793f, U+7941-7942, U+7945-7947, U+7949, U+794c, U+794e, U+7953-7954, U+7957-795c, U+795f, U+7961-7962, U+7964, U+7967, U+7969, U+796b-796c, U+796f, U+7971-7973, U+7977-7979, U+797b-797c, U+797e, U+7980, U+7982-7988, U+798a-798b, U+7991, U+7993-7996, U+7998-799b, U+799d, U+799f-79a2, U+79a4-79a5, U+79a8-79a9, U+79af-79b0, U+79b3, U+79b5, U+79b8, U+79ba, U+79c3-79c4, U+79c6, U+79c8, U+79ca, U+79cc, U+79cf-79d0, U+79d4-79d6, U+79dc-79de, U+79e2-79e3, U+79e7, U+79ea-79ed, U+79ef-79f1, U+79f4, U+79f6-79f8, U+79fd, U+7a02-7a03, U+7a06, U+7a08-7a0a, U+7a0c, U+7a0e, U+7a10-7a11, U+7a14, U+7a17-7a19, U+7a1c, U+7a1e-7a1f, U+7a23, U+7a26, U+7a2a) ); /* noto-sans-hk-[53]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-53-400-normal.woff2", $range: (U+776c-776e, U+7771-7772, U+7777-7778, U+777a-777b, U+777d-777e, U+7780, U+7785, U+7787, U+7789, U+778b-778d, U+7791-7793, U+7798, U+779c, U+779f-77a0, U+77a2, U+77a5, U+77a9, U+77af-77b1, U+77b4, U+77b6-77b7, U+77b9, U+77bc-77bf, U+77c3, U+77c5, U+77c7, U+77cb-77cd, U+77d3, U+77d6-77d7, U+77dc-77de, U+77e3, U+77e6-77e7, U+77eb-77ec, U+77f0, U+77f2, U+77f4, U+77f6, U+77f8, U+77fa-77fc, U+77fe-7800, U+7803, U+7805-7806, U+7808-7809, U+7810-7812, U+7815-7816, U+7818, U+781a, U+781c-7823, U+7825-7827, U+7829, U+782c-7830, U+7833, U+7835, U+7837, U+7839-783a, U+783c-783e, U+7840, U+7842-7845, U+7847, U+784a-7855, U+7858, U+785a, U+785c-785d, U+7864, U+7866, U+7868, U+786a, U+786f, U+7874, U+7876, U+787a, U+787c, U+787f, U+7886-7889, U+788d, U+788f, U+7893, U+7895-7896, U+7898, U+789a, U+789e, U+78a1, U+78a3, U+78a5, U+78aa, U+78ad, U+78af, U+78b1-78b2, U+78b4, U+78b6, U+78b8-78b9, U+78be, U+78c7-78c9, U+78cb, U+78ce, U+78d0-78d1) ); /* noto-sans-hk-[54]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-54-400-normal.woff2", $range: (U+7601-7602, U+7607-760a, U+760c-760d, U+7610, U+7615-7616, U+7618-7620, U+7622-7623, U+7625, U+7627, U+7629, U+762b-762c, U+762e, U+7630, U+7632-7635, U+7638, U+763a-763c, U+763e, U+7640, U+7643, U+7646, U+7648-7649, U+764d-764f, U+7651, U+7654, U+7658, U+765c, U+765f, U+7663-7667, U+7669, U+766b-766d, U+766f-7670, U+7673-7674, U+7676, U+7678-767a, U+767f-7681, U+7683, U+7688, U+768a-768b, U+768e, U+7690, U+7695-7696, U+769a-769e, U+76a1, U+76a3-76a5, U+76aa, U+76b0-76b1, U+76b4, U+76b7-76b8, U+76c2, U+76c5, U+76c9, U+76cc-76cd, U+76cf-76d1, U+76d6-76d9, U+76e5-76e6, U+76e9, U+76ec, U+76f1, U+76f7, U+76f9-76fb, U+76ff-7700, U+7704-7705, U+7707-7708, U+770a, U+770c, U+770e-770f, U+7715, U+7719-771b, U+771d-771e, U+7722, U+7724-7726, U+7728, U+772b, U+772d, U+772f, U+7733-7736, U+7738, U+773b, U+773d, U+7741, U+7743-7744, U+7746, U+774c, U+774e-7752, U+7755, U+7758-775a, U+775f-7760, U+7762, U+7765-7766, U+7768-776a) ); /* noto-sans-hk-[55]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-55-400-normal.woff2", $range: (U+74aa-74ab, U+74ae, U+74b1-74b2, U+74b4-74b5, U+74b8-74ba, U+74bf, U+74c5-74c6, U+74c8, U+74cc-74cd, U+74d0, U+74d2-74d4, U+74d6, U+74d8, U+74da, U+74de-74e0, U+74e2, U+74e4, U+74e7-74e9, U+74ee-74f2, U+74f4, U+74f8-74f9, U+74fb, U+74ff-7501, U+7503, U+7505, U+7507, U+750c-750e, U+7511, U+7513, U+7515-7517, U+7519, U+751e, U+7521, U+7525, U+752a, U+752c-752f, U+7534, U+753e, U+7542, U+7545-7548, U+754a-754b, U+754d-754e, U+7551, U+7553, U+7555, U+755a-755b, U+755d, U+7560, U+7563-7564, U+7566-7568, U+756c-756f, U+7572-7575, U+7577-757a, U+757c, U+757e-757f, U+7583-7584, U+7587, U+7589, U+758b-758e, U+7590, U+7592, U+7594-7595, U+7597, U+7599-759a, U+759d-759f, U+75a1-75a3, U+75a5, U+75a7, U+75aa, U+75ac, U+75ae-75b1, U+75b3-75b4, U+75b8, U+75bd, U+75c0, U+75c2-75c4, U+75c8-75ca, U+75cc-75cd, U+75d2, U+75d4, U+75d9, U+75dc, U+75df, U+75e2-75e4, U+75e6-75e7, U+75e9-75ec, U+75f0-75f3, U+75f7, U+75f9-75fa, U+75fc, U+75fe-7600) ); /* noto-sans-hk-[56]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-56-400-normal.woff2", $range: (U+73b9-73ba, U+73bc, U+73bf, U+73c2, U+73c4-73c6, U+73c9, U+73cb-73cc, U+73ce-73d2, U+73d5-73d7, U+73d9, U+73db-73de, U+73e1-73eb, U+73ef, U+73f3, U+73f5-73f7, U+73f9-73fd, U+7400-7402, U+7404-7405, U+7407-7408, U+740a-740d, U+740f-7412, U+7414-7417, U+7419-7425, U+7428-7429, U+742c-7432, U+7435-743a, U+743c-7443, U+7445-744a, U+744c, U+7451-7454, U+7456-7457, U+7459, U+745d, U+7460-7462, U+7465, U+7467-7468, U+746b-746e, U+7471-7477, U+7479-747a, U+747c-747f, U+7481-7482, U+7484-7486, U+7488-748a, U+748c-7490, U+7492, U+7498-74a1, U+74a3-74a7, U+74a9) ); /* noto-sans-hk-[57]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-57-400-normal.woff2", $range: (U+7265-7266, U+726a-726b, U+726e-7270, U+7273-7275, U+7277, U+727a-727b, U+727e-727f, U+7281-7282, U+7284, U+7287, U+728a, U+728d, U+728f, U+7292, U+7294, U+7296, U+7298, U+729b, U+729f-72a2, U+72ad-72ae, U+72b0-72b5, U+72b8-72b9, U+72bc-72bd, U+72c1, U+72c3, U+72c5-72c6, U+72c8, U+72cc-72ce, U+72d2, U+72d4, U+72db, U+72dd, U+72df, U+72e1-72e2, U+72e8, U+72ec-72ee, U+72f1, U+72f3-72f4, U+72f7, U+72fa-72fb, U+72fd, U+7300-7302, U+7304, U+7307, U+730a-730b, U+730e, U+7310, U+7313, U+7315-7317, U+7319, U+731e-731f, U+7322, U+7328-732e, U+7330-7331, U+7337-733c, U+733e, U+7340-7341, U+7343, U+7348, U+734c-734d, U+734f-7350, U+7352, U+7355, U+7357, U+7359-735a, U+7360-7363, U+7365, U+7369-7371, U+7373-7374, U+7377, U+737a, U+737c, U+737e, U+7380, U+7385-7386, U+738a, U+738c, U+738e-738f, U+7391-7395, U+7397-7398, U+739b-739c, U+739e, U+73a0-73a2, U+73a5-73a8, U+73aa, U+73ad-73ae, U+73b3-73b8) ); /* noto-sans-hk-[58]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-58-400-normal.woff2", $range: (U+70fe-70ff, U+7104-7106, U+7109, U+710c, U+7110, U+7113-7116, U+7118, U+711c-711e, U+7120, U+7122, U+7129, U+712b-712c, U+712e-712f, U+7131, U+7133-7135, U+713b-713c, U+713e-7140, U+7143, U+7145-7147, U+714a-714b, U+714f-7153, U+7155-7157, U+715a, U+7160, U+7162, U+7166, U+7168, U+716b-716c, U+7171, U+7173-7178, U+717a-717e, U+7180-7181, U+7185, U+7187-7188, U+718b-718c, U+718e-7192, U+7196-7198, U+719a-719c, U+71a0, U+71a2-71a4, U+71a8, U+71ad, U+71af, U+71b2-71b5, U+71b7-71ba, U+71be, U+71c1, U+71c4, U+71ca-71cb, U+71ce-71d1, U+71d4, U+71d7-71d8, U+71da, U+71dc-71dd, U+71e0-71e1, U+71e7, U+71eb-71ec, U+71ee, U+71f4-71f6, U+71f9, U+71fc, U+71fe-7201, U+7203, U+7207, U+7209, U+720c, U+720e-720f, U+7213-7217, U+721a, U+721d, U+7222-7225, U+7228, U+722b, U+722e, U+7230, U+7237, U+723b, U+723f-7242, U+724b, U+724d, U+7250, U+7252-7253, U+7255-7258, U+725c-725d, U+7263-7264) ); /* noto-sans-hk-[59]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-59-400-normal.woff2", $range: (U+6fbc, U+6fbe, U+6fc2, U+6fc6-6fcb, U+6fce, U+6fd1-6fd4, U+6fd8-6fda, U+6fde, U+6fe0-6fe2, U+6fe8-6fe9, U+6fec, U+6fee, U+6ff0, U+6ff3, U+6ff5-6ff6, U+6ff8, U+6ffa, U+6ffc, U+6fff-7001, U+7003, U+7005-7007, U+700b, U+700d, U+7015, U+7018, U+701b, U+701e, U+7020-7021, U+7023, U+7026-7027, U+702c, U+702f-7032, U+7034-7035, U+7037-703c, U+7040, U+7042-7044, U+7046, U+7049, U+704b, U+704d, U+704f-7050, U+7052, U+7054-7055, U+705c-7061, U+7064-7069, U+706c-706f, U+7073-7075, U+7077-707a, U+707e-7081, U+7085-7086, U+7089, U+708b, U+708f-7091, U+7094-7096, U+7098, U+709c, U+709f-70a1, U+70a3-70a7, U+70a9, U+70ac, U+70af-70b2, U+70b4-70b5, U+70b7, U+70bb-70be, U+70c0-70c4, U+70ca-70cc, U+70d0, U+70d2, U+70d4-70d6, U+70d9-70dd, U+70df, U+70e6-70e9, U+70eb-70ec, U+70ef, U+70f1, U+70f4-70f5, U+70f7, U+70fa, U+70fd) ); /* noto-sans-hk-[60]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-60-400-normal.woff2", $range: (U+6e88-6e89, U+6e8b, U+6e8d-6e8f, U+6e93, U+6e98-6e9a, U+6e9f, U+6ea1, U+6ea4-6ea7, U+6eae, U+6eb1-6eb2, U+6eb4-6eb5, U+6eb7-6eb8, U+6ebb, U+6ebd, U+6ec1-6ec3, U+6ec7-6ec9, U+6ecd-6ed0, U+6ed3-6ed6, U+6ed8, U+6eda-6edb, U+6edd-6ede, U+6ee2, U+6ee4-6ee5, U+6ee8-6ee9, U+6eeb, U+6eee, U+6ef3, U+6ef8-6efb, U+6f00, U+6f04, U+6f08-6f0e, U+6f11-6f13, U+6f15-6f17, U+6f19-6f1a, U+6f23-6f2a, U+6f2d-6f31, U+6f33-6f36, U+6f3a-6f3d, U+6f40-6f41, U+6f43-6f44, U+6f47, U+6f4d-6f4f, U+6f53, U+6f56-6f57, U+6f59-6f5a, U+6f5c, U+6f5e-6f61, U+6f63, U+6f66-6f67, U+6f69-6f6c, U+6f6f, U+6f72-6f7f, U+6f81-6f82, U+6f87, U+6f89-6f8d, U+6f90, U+6f92, U+6f94-6f97, U+6f9c-6f9d, U+6f9f-6fa0, U+6fa2-6fa3, U+6fa5-6fa8, U+6faa-6fab, U+6fae-6faf, U+6fb4-6fb6, U+6fb9-6fbb) ); /* noto-sans-hk-[61]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-61-400-normal.woff2", $range: (U+6d64-6d65, U+6d67, U+6d6c-6d6d, U+6d6f-6d72, U+6d75, U+6d79, U+6d7c, U+6d7f, U+6d81-6d82, U+6d85, U+6d87, U+6d8e-6d8f, U+6d91-6d9b, U+6d9d, U+6d9f, U+6da1, U+6da4-6dac, U+6db1, U+6db3-6db4, U+6db7-6db9, U+6dbe-6dc0, U+6dc2, U+6dc4-6dc5, U+6dc8-6dca, U+6dcc-6dcd, U+6dcf-6dd0, U+6dd2-6dd3, U+6dd5-6dd6, U+6dd9, U+6ddb-6de0, U+6de2-6de6, U+6de9, U+6dec, U+6def-6df0, U+6df2, U+6df4, U+6df6, U+6df8, U+6dfc-6dfe, U+6e00, U+6e02-6e04, U+6e07-6e0b, U+6e0d-6e10, U+6e13-6e15, U+6e17-6e1a, U+6e1d, U+6e1f, U+6e22, U+6e24-6e25, U+6e27, U+6e2a-6e2b, U+6e2d-6e2e, U+6e30-6e31, U+6e36, U+6e39-6e3a, U+6e3c-6e3d, U+6e40-6e41, U+6e44-6e45, U+6e47, U+6e49, U+6e4b, U+6e4d-6e51, U+6e53-6e54, U+6e57, U+6e59, U+6e5c, U+6e5e-6e61, U+6e63-6e66, U+6e69-6e6b, U+6e6e, U+6e70-6e76, U+6e78, U+6e7c, U+6e7f-6e80, U+6e83, U+6e85-6e86) ); /* noto-sans-hk-[62]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-62-400-normal.woff2", $range: (U+6c3f, U+6c43, U+6c46, U+6c49-6c4f, U+6c54-6c55, U+6c58, U+6c5a-6c5c, U+6c5e, U+6c64-6c69, U+6c6b-6c6f, U+6c71-6c75, U+6c78-6c79, U+6c7c, U+6c7e-6c7f, U+6c82, U+6c84-6c87, U+6c8c-6c8d, U+6c8f, U+6c93-6c94, U+6c98, U+6c9a, U+6c9d, U+6c9f, U+6ca2, U+6ca5-6ca8, U+6caa, U+6cac-6cb2, U+6cb4-6cb5, U+6cba, U+6cbc, U+6cc2-6cc3, U+6cc5-6cc7, U+6ccb, U+6cce, U+6cd0-6cd2, U+6cd4, U+6cd6-6cd7, U+6cd9-6cda, U+6cdc-6ce0, U+6ce7, U+6ce9-6cec, U+6cee-6cef, U+6cf1, U+6cf7-6cf8, U+6cfb-6d02, U+6d04-6d07, U+6d09-6d0a, U+6d0c, U+6d0e-6d12, U+6d18-6d1a, U+6d1f, U+6d22-6d24, U+6d26-6d28, U+6d2b, U+6d2d-6d31, U+6d33-6d3a, U+6d3c, U+6d3f, U+6d43-6d47, U+6d4a-6d4b, U+6d4e-6d4f, U+6d51-6d53, U+6d57-6d58, U+6d5a-6d5c, U+6d5e-6d63) ); /* noto-sans-hk-[63]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-63-400-normal.woff2", $range: (U+6a9c-6aa1, U+6aa3-6aa5, U+6aa7-6aa8, U+6aab, U+6aae, U+6ab1-6ab2, U+6ab5, U+6aba, U+6abe, U+6ac2, U+6ac5-6ac6, U+6ac8-6aca, U+6acc, U+6ad3-6ad4, U+6ad8, U+6ada-6adb, U+6add-6adf, U+6ae3, U+6ae7-6ae8, U+6aea-6aec, U+6af1, U+6af3, U+6af6, U+6af8, U+6afa, U+6afc, U+6b05, U+6b09, U+6b0e-6b13, U+6b17, U+6b1d-6b1e, U+6b25, U+6b2c, U+6b31, U+6b35-6b37, U+6b39, U+6b3b, U+6b40, U+6b43, U+6b46, U+6b48, U+6b52-6b55, U+6b57, U+6b59, U+6b5b, U+6b5f-6b60, U+6b68-6b69, U+6b6f, U+6b74, U+6b7a, U+6b7c, U+6b7f-6b84, U+6b86-6b87, U+6b89, U+6b8b, U+6b8d, U+6b91-6b93, U+6b9b, U+6b9e, U+6ba1-6ba2, U+6ba4, U+6baa-6bab, U+6bad-6bae, U+6bb2-6bb4, U+6bbb, U+6bbd, U+6bc1-6bc2, U+6bcc, U+6bce, U+6bd0-6bd1, U+6bd5-6bd9, U+6bdc, U+6bde, U+6be1, U+6bea, U+6bec, U+6bf3, U+6bf9-6bfa, U+6bfd, U+6bff-6c00, U+6c02, U+6c05-6c06, U+6c0a, U+6c0c-6c0d, U+6c10, U+6c13, U+6c16, U+6c18-6c1a, U+6c1c, U+6c1f, U+6c21-6c22, U+6c24, U+6c26, U+6c28-6c2a, U+6c2c, U+6c2e-6c33, U+6c35-6c37, U+6c39-6c3a, U+6c3d-6c3e) ); /* noto-sans-hk-[64]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-64-400-normal.woff2", $range: (U+6957, U+6959, U+695b-695f, U+6961-696c, U+696e-6970, U+6972-6974, U+6976, U+6978-697a, U+697c, U+6980, U+6984-6986, U+6988-698a, U+698d-698e, U+6990-6991, U+6994, U+6996-699b, U+699e-699f, U+69a2-69a7, U+69ab, U+69ad, U+69af, U+69b1-69b3, U+69b6-69b7, U+69bb-69bc, U+69bf-69c1, U+69c3-69c5, U+69c7, U+69ca, U+69cc, U+69ce, U+69d0-69d1, U+69d4-69d6, U+69d8-69d9, U+69db, U+69df, U+69e1, U+69e4, U+69e8-69ea, U+69ed-69ee, U+69f1-69f4, U+69f6, U+69f8-69fb, U+69ff-6a00, U+6a03, U+6a05, U+6a0a-6a0c, U+6a17-6a18, U+6a1a-6a1c, U+6a28-6a2d, U+6a31-6a33, U+6a35, U+6a3b, U+6a3e-6a40, U+6a43, U+6a45, U+6a47-6a48, U+6a4c, U+6a50, U+6a52-6a53, U+6a55-6a57, U+6a5a-6a5b, U+6a5e, U+6a62-6a63, U+6a65-6a66, U+6a6a, U+6a71, U+6a74, U+6a79-6a7a, U+6a7c, U+6a7e-6a82, U+6a84, U+6a87, U+6a89-6a8a, U+6a8d-6a92, U+6a97, U+6a99) ); /* noto-sans-hk-[65]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-65-400-normal.woff2", $range: (U+67fe, U+6800-6805, U+6808-6809, U+680b, U+680d-6812, U+6814, U+6816, U+6818, U+681b-681e, U+6820, U+6822, U+6825, U+6827-6829, U+682b, U+682e-682f, U+6831-6834, U+6836, U+683a-683b, U+683e, U+6840-6841, U+6844-6845, U+6847, U+6849-684a, U+684e, U+6853, U+6855-6856, U+685c-685d, U+685f, U+6861-6863, U+6865-6869, U+686b, U+686d, U+686f, U+6871-6872, U+6874-6875, U+6877, U+6879, U+687b-687c, U+687e, U+6880, U+6882-6884, U+6886, U+6888, U+688f, U+6891-6892, U+6894, U+6896, U+6898, U+689b-689c, U+689f-68a0, U+68a2-68a3, U+68a6, U+68a9, U+68b1-68b2, U+68b4, U+68b6, U+68b9, U+68bd, U+68c0-68c1, U+68c3, U+68c5-68c6, U+68c8, U+68ca, U+68d0-68d1, U+68d3, U+68d6, U+68e1, U+68e3, U+68e6, U+68e8-68ec, U+68ef-68f1, U+68f3, U+68f6-68f7, U+68f9-68fd, U+6900-6904, U+6906-6907, U+6909, U+690b, U+690f-6910, U+6917-691c, U+6925, U+692a, U+692c-692d, U+6932, U+6934, U+6936, U+6939, U+693c-6940, U+6942-6943, U+6946, U+6949, U+6952, U+6954-6956) ); /* noto-sans-hk-[66]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-66-400-normal.woff2", $range: (U+66b3, U+66b5-66b6, U+66b8-66bc, U+66be-66bf, U+66c1, U+66c4, U+66c7-66c8, U+66cc-66cf, U+66d5, U+66d8-66db, U+66df, U+66e1-66e2, U+66e7-66e9, U+66ef, U+66f1, U+66f5, U+66f7, U+66fa, U+66fd, U+6702, U+6705, U+670a, U+670c, U+670e-6710, U+6713-6716, U+6718-6719, U+671e, U+6720, U+6722-6727, U+6729, U+672e, U+6733, U+6736, U+6738-6739, U+673f-6740, U+6742, U+6744-6745, U+6747-6748, U+674b-674d, U+6753, U+6755, U+6759, U+675d-675e, U+6760, U+6762-6763, U+6767-676c, U+676e, U+6772-6777, U+677a-677c, U+6782, U+6786-6787, U+678a-678c, U+678e-678f, U+6791-6793, U+6796, U+6798-6799, U+679f-67a5, U+67aa-67ae, U+67b0-67b5, U+67b7-67bc, U+67bf-67c3, U+67c5-67c6, U+67c8-67ca, U+67ce, U+67d2, U+67d6-67d9, U+67db-67e0, U+67e2, U+67e4, U+67e9-67ea, U+67f0, U+67f2, U+67f6-67fb) ); /* noto-sans-hk-[67]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-67-400-normal.woff2", $range: (U+6535, U+6537-6538, U+653a, U+653d, U+6542-6543, U+6549, U+654c-654e, U+6554-6555, U+655a-655b, U+655d, U+655f, U+6561, U+6564-6565, U+6567, U+656b, U+656d-656e, U+6573, U+6576, U+6579-657b, U+6581, U+6585-6586, U+6588-6589, U+658b, U+658e, U+6593, U+6595, U+659b, U+659d, U+659f-65a1, U+65a9, U+65ab, U+65ad, U+65b2-65b3, U+65b5, U+65bb, U+65be-65bf, U+65c2-65c4, U+65c6, U+65cc, U+65ce, U+65d1-65d2, U+65d4, U+65d6, U+65db, U+65e1, U+65e3, U+65e7, U+65ee-65f0, U+65f2-65f4, U+65f7-65f8, U+65fc-65fd, U+65ff-6600, U+6603-6605, U+6609, U+660d, U+6610-6611, U+6618-6619, U+661c-661e, U+6621-6624, U+6626, U+6629, U+662b, U+6630, U+6633-6636, U+6639-663d, U+6640-6641, U+6644-6645, U+6648, U+664a-664d, U+6653-6657, U+6659, U+665b, U+665d-665e, U+6660-6667, U+6669, U+666b-666c, U+6672-6673, U+6677-6679, U+667b-667e, U+6681-6685, U+668b-6690, U+6692, U+6698, U+669a, U+669d, U+669f-66a0, U+66a4, U+66a6-66a7, U+66aa, U+66ad, U+66b2) ); /* noto-sans-hk-[68]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-68-400-normal.woff2", $range: (U+63f2-63f3, U+63f5-63f8, U+63fa-63fe, U+6400-6402, U+6405-6407, U+6409-640c, U+6410, U+6414-6415, U+6418, U+641b, U+641f-6423, U+6425-6428, U+642a-642b, U+642f-6430, U+6432, U+6434, U+6437-6438, U+643a-643b, U+643d-6444, U+6446-6447, U+644a-644b, U+644e, U+6450-6453, U+6456, U+6459-645c, U+645e, U+6460-6461, U+6463-6465, U+6468, U+646c-646e, U+6470-6477, U+6479, U+647b-647d, U+6480, U+6482, U+6485, U+648b-648d, U+6491, U+6493, U+6496-649a, U+649d, U+649f-64a0, U+64a2-64a3, U+64ac, U+64af, U+64b1, U+64b3-64b4, U+64b6-64b9, U+64bb, U+64be, U+64c0, U+64c3-64c4, U+64d0, U+64d2-64d3, U+64d5, U+64d7-64d8, U+64dd, U+64e1-64e5, U+64e7, U+64e9-64ea, U+64ed, U+64ef-64f0, U+64f3, U+64f8, U+64fb-64fc, U+64ff, U+6504-6506, U+6509-650a, U+6511-6512, U+6516, U+6518-6519, U+651b, U+651f-6523, U+6525-6526, U+6529, U+652b, U+652e, U+6530, U+6532, U+6534) ); /* noto-sans-hk-[69]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-69-400-normal.woff2", $range: (U+628e, U+6290, U+6294, U+629a-629e, U+62a0, U+62a2, U+62a6, U+62a8, U+62af, U+62b3, U+62b6, U+62ba-62bb, U+62be-62bf, U+62c1-62c5, U+62c8, U+62ca, U+62cf, U+62d1, U+62d5, U+62d7, U+62d9, U+62dd, U+62df-62e3, U+62e5-62e8, U+62ee, U+62f4-62fb, U+62fd, U+6300, U+6302, U+6308, U+630c-630e, U+6310, U+6312-6313, U+6318-631b, U+631d-6321, U+6323-6325, U+632d-632e, U+6331-6332, U+6334-6339, U+633b-633c, U+633e-6340, U+6342-6346, U+634b-634c, U+634e, U+6352, U+6357, U+635a, U+635c-635f, U+6361, U+6363-6365, U+6369, U+636b-636d, U+636f-6370, U+6373, U+6375-6376, U+6379-637b, U+637d, U+637f, U+6381, U+6384, U+6387, U+638a-638b, U+638d-638e, U+6390, U+6394-6397, U+639e-639f, U+63a3-63a4, U+63a6, U+63ac-63af, U+63b1-63b4, U+63b7, U+63b9-63bb, U+63bd-63be, U+63c1, U+63c3-63c4, U+63c8, U+63cd-63ce, U+63d1, U+63d6, U+63dc, U+63de, U+63e0, U+63e2-63e4, U+63e6, U+63e9, U+63f0) ); /* noto-sans-hk-[70]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-70-400-normal.woff2", $range: (U+612f-6130, U+6134, U+6136, U+613c-613f, U+6142, U+6144, U+6146-6147, U+6149-614a, U+614d, U+6150-6153, U+6159-615a, U+615c-6160, U+6164-6165, U+6169-616d, U+616f, U+6171-6175, U+6177, U+617a, U+617c-617d, U+617f-6181, U+6187, U+618a-618e, U+6192-6195, U+6198-619c, U+619f, U+61a1, U+61a7-61a8, U+61aa-61af, U+61b7-61ba, U+61bf-61c0, U+61c3, U+61c6, U+61ca-61cd, U+61cf-61d0, U+61d2-61d3, U+61da, U+61de-61e0, U+61e2-61e3, U+61e6, U+61e8, U+61ed-61ee, U+61f5, U+61f9-61fa, U+61fd-61fe, U+6207, U+6209, U+620d-620e, U+6213-6215, U+6219, U+621b, U+621d-6223, U+6225-6227, U+6229, U+622b-622c, U+622e-622f, U+6231, U+6238-6239, U+623b, U+623d-623e, U+6242-6243, U+6246, U+6248-6249, U+624c, U+6251, U+6255, U+6259-625a, U+625e, U+6260-6262, U+6265-6269, U+626b-626c, U+6270-6273, U+6275, U+627a-627d, U+6282-6283, U+6285-6286, U+6289, U+628c) ); /* noto-sans-hk-[71]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-71-400-normal.woff2", $range: (U+5fe7, U+5fea, U+5fec-5fee, U+5ff1, U+5ff3, U+5ff8, U+5ffa-5ffc, U+5fff-6000, U+6002, U+6005, U+600a, U+600d, U+600f-6010, U+6014, U+6017, U+6019-601c, U+601e, U+6020, U+6022-6023, U+6026, U+6029, U+602b-602c, U+602e-602f, U+6031, U+6033-6035, U+6039, U+603c, U+6040-6043, U+6045, U+6047, U+604a-604c, U+604f, U+6053, U+6059-605b, U+605d, U+6060, U+6063, U+6067, U+606a-606b, U+606e, U+6072-6078, U+607a, U+607c, U+607e-6081, U+6083, U+6086, U+608a, U+608c, U+608e, U+6092-6093, U+6095-6097, U+609b, U+609d-609e, U+60a2, U+60a4, U+60a6-60a7, U+60a9-60aa, U+60ac-60ad, U+60af-60b1, U+60b3-60b5, U+60b8, U+60bb, U+60bd-60be, U+60c0, U+60c6-60c7, U+60ca-60cb, U+60d3-60d5, U+60d7-60db, U+60dd-60de, U+60e2-60e3, U+60e6-60f0, U+60f2, U+60f4, U+60f6, U+60fa-60fb, U+60fd, U+60ff-6100, U+6103, U+6106-6107, U+610a-610e, U+6110, U+6112-6116, U+6119, U+6120, U+6122-6124, U+6128-612e) ); /* noto-sans-hk-[72]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-72-400-normal.woff2", $range: (U+5e6c, U+5e6e, U+5e75, U+5e77, U+5e7a, U+5e80-5e81, U+5e83, U+5e86, U+5e88, U+5e8b, U+5e90, U+5e92, U+5e96, U+5e99, U+5e9b, U+5e9d-5ea2, U+5ea4-5ea5, U+5eb3-5eb6, U+5eb9, U+5ebd-5ebe, U+5ec3-5ec4, U+5ec6, U+5ecb-5ecd, U+5ed0-5ed2, U+5ed4-5ed5, U+5ed8-5ed9, U+5edb, U+5edd, U+5ee1, U+5ee8-5ee9, U+5eec, U+5eef-5ef0, U+5ef4-5ef5, U+5ef8-5ef9, U+5efb-5efc, U+5efe, U+5f01-5f03, U+5f05, U+5f07-5f09, U+5f0b-5f0e, U+5f10-5f12, U+5f14, U+5f16, U+5f1b, U+5f1d, U+5f22, U+5f25, U+5f28-5f29, U+5f2d, U+5f2f-5f30, U+5f36, U+5f38-5f39, U+5f3b-5f3c, U+5f3e, U+5f40-5f42, U+5f45-5f46, U+5f4a, U+5f4d, U+5f50-5f52, U+5f54, U+5f56-5f58, U+5f5a-5f5e, U+5f61, U+5f63, U+5f66-5f67, U+5f6b, U+5f72-5f74, U+5f76, U+5f78, U+5f7b, U+5f7d, U+5f82-5f84, U+5f87, U+5f89-5f8a, U+5f8d, U+5f93, U+5f95, U+5f98-5f99, U+5f9b-5f9c, U+5fa0, U+5fa4, U+5fa6-5fa8, U+5fab-5fad, U+5fb1, U+5fb3-5fb4, U+5fba, U+5fbc, U+5fc2, U+5fc4, U+5fc6, U+5fc9, U+5fcb, U+5fce-5fd6, U+5fdb-5fdf, U+5fe1, U+5fe4) ); /* noto-sans-hk-[73]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-73-400-normal.woff2", $range: (U+5cee, U+5cf1, U+5cf4-5cf5, U+5cf8, U+5cfc, U+5cfe-5d00, U+5d06, U+5d08, U+5d0a-5d0d, U+5d15, U+5d18, U+5d1a, U+5d1d, U+5d1f-5d22, U+5d24, U+5d26-5d28, U+5d2c-5d2f, U+5d33-5d35, U+5d3d-5d3f, U+5d42-5d43, U+5d46-5d4b, U+5d4e, U+5d52-5d53, U+5d56-5d59, U+5d5b-5d5c, U+5d65, U+5d68-5d69, U+5d6b-5d6c, U+5d6f-5d70, U+5d74-5d75, U+5d78, U+5d7b, U+5d7e-5d7f, U+5d81-5d82, U+5d85-5d88, U+5d8b-5d8c, U+5d8e, U+5d92, U+5d94, U+5d97, U+5d99, U+5d9d, U+5da0-5da2, U+5da4, U+5da7, U+5da9-5dab, U+5dae, U+5db2, U+5db4, U+5db6-5db9, U+5dbd, U+5dc1-5dc5, U+5dc9, U+5dcb-5dcd, U+5dd2, U+5dd6-5dd8, U+5ddb-5ddc, U+5de0, U+5de3, U+5de9, U+5df0, U+5df3, U+5df5, U+5df9, U+5dfb-5dfd, U+5e00-5e01, U+5e04-5e05, U+5e09-5e0b, U+5e11-5e12, U+5e14, U+5e18-5e1c, U+5e1f-5e22, U+5e27-5e28, U+5e2f-5e30, U+5e34, U+5e37, U+5e3a, U+5e3c, U+5e40, U+5e42-5e44, U+5e47-5e48, U+5e4c, U+5e54, U+5e57-5e5b, U+5e5e-5e5f, U+5e61-5e62, U+5e64, U+5e6a) ); /* noto-sans-hk-[74]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-74-400-normal.woff2", $range: (U+5b6d-5b6e, U+5b70-5b76, U+5b7a-5b7d, U+5b7f-5b82, U+5b84, U+5b8d, U+5b90, U+5b92-5b93, U+5b95-5b96, U+5b9f-5ba1, U+5ba6-5ba8, U+5baa-5bad, U+5bb7, U+5bbd-5bbe, U+5bc0-5bc1, U+5bc3, U+5bd0-5bd1, U+5bd4-5bd8, U+5bdb-5bdd, U+5be4-5be5, U+5bef, U+5bf3, U+5bfb, U+5bfe-5bff, U+5c02-5c03, U+5c05, U+5c09, U+5c0c, U+5c10, U+5c12-5c13, U+5c15, U+5c18-5c19, U+5c1b-5c20, U+5c22-5c23, U+5c25, U+5c27-5c28, U+5c2a-5c2b, U+5c34, U+5c38, U+5c3d, U+5c42, U+5c44, U+5c47, U+5c49-5c4a, U+5c50, U+5c53, U+5c58-5c59, U+5c5b, U+5c5d, U+5c61, U+5c63, U+5c68, U+5c6d-5c6e, U+5c74, U+5c78-5c86, U+5c88, U+5c8a-5c8d, U+5c92-5c9c, U+5c9e, U+5ca0, U+5ca2-5ca3, U+5ca5-5ca7, U+5cab-5cad, U+5cb5, U+5cb7, U+5cba-5cbb, U+5cc1-5cc2, U+5cc8, U+5cca-5ccb, U+5cce, U+5cd1-5cd2, U+5cd5-5cd6, U+5cd8-5cda, U+5cdf-5ce1, U+5ce5-5ce6, U+5ce8-5cea, U+5ced) ); /* noto-sans-hk-[75]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-75-400-normal.woff2", $range: (U+5a33-5a34, U+5a38, U+5a3c-5a3d, U+5a3f-5a45, U+5a47-5a48, U+5a4a, U+5a4c-5a4d, U+5a50-5a51, U+5a53-5a54, U+5a56-5a57, U+5a59, U+5a5d-5a5e, U+5a60-5a63, U+5a65, U+5a67-5a68, U+5a6a-5a6e, U+5a71, U+5a73-5a76, U+5a79-5a7c, U+5a7e, U+5a81-5a84, U+5a86, U+5a88, U+5a8c, U+5a90-5a91, U+5a93, U+5a96-5a97, U+5a99, U+5a9c, U+5a9e-5aa1, U+5aa4, U+5aa7, U+5aaa-5aac, U+5aae-5aaf, U+5ab1, U+5ab4-5ab5, U+5ab8, U+5aba-5abc, U+5abe-5abf, U+5ac3-5ac4, U+5ac6-5acb, U+5ace-5adc, U+5ae0-5ae1, U+5ae3-5ae6, U+5ae8, U+5aea-5aeb, U+5aee, U+5af0, U+5af2, U+5af5, U+5afa, U+5afe-5aff, U+5b01, U+5b05, U+5b08, U+5b0b, U+5b0d, U+5b11, U+5b15-5b17, U+5b19, U+5b1b, U+5b1d, U+5b1f, U+5b21-5b23, U+5b28, U+5b2a-5b2d, U+5b32, U+5b34, U+5b36-5b38, U+5b3e-5b41, U+5b43-5b46, U+5b4a-5b4c, U+5b4f, U+5b51, U+5b53, U+5b59, U+5b5b-5b5c, U+5b62, U+5b65, U+5b68, U+5b6c) ); /* noto-sans-hk-[76]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-76-400-normal.woff2", $range: (U+58bc, U+58c2, U+58c5-58c6, U+58ca-58cc, U+58ce, U+58d0-58d1, U+58d5, U+58d9-58da, U+58dc, U+58df-58e0, U+58e9, U+58ec, U+58ee, U+58f1-58f3, U+58f6-58f7, U+58fb-58fc, U+5900, U+5902, U+5905-5906, U+5909-590c, U+590e, U+5910-5911, U+5914, U+5919, U+591b, U+591d, U+591f, U+5923-5924, U+592c, U+5932, U+5938-593a, U+5940, U+5942, U+5944, U+594b-594c, U+594e, U+5950, U+5953, U+5956, U+5958, U+595a, U+5961, U+5966, U+5968-5969, U+596c-596d, U+5975, U+5977, U+597b-597c, U+597e, U+5980-5981, U+5986-598a, U+598f, U+5994, U+5997-5998, U+599a, U+599f-59a3, U+59a6-59a7, U+59a9, U+59ab-59ac, U+59af-59b2, U+59b6-59b8, U+59ba, U+59be-59bf, U+59c1, U+59c3-59c4, U+59c7-59c9, U+59cd-59ce, U+59d2, U+59d6-59d9, U+59dd-59de, U+59e0, U+59e3-59e5, U+59e9-59eb, U+59ee-59f3, U+59f5-59f9, U+59fc-59fd, U+5a00, U+5a02, U+5a04-5a07, U+5a09, U+5a0b-5a0d, U+5a11-5a13, U+5a16-5a17, U+5a1a, U+5a1e, U+5a20-5a21, U+5a23-5a24, U+5a27, U+5a29-5a2f, U+5a32) ); /* noto-sans-hk-[77]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-77-400-normal.woff2", $range: (U+575b-5760, U+5763, U+5767-5769, U+576b, U+576d, U+576f-5770, U+5772-5775, U+5777, U+577a-5780, U+5784, U+5788, U+578a, U+578c-578e, U+5790, U+5792-5793, U+5795, U+579a-579c, U+579f-57a1, U+57a4, U+57a6-57a7, U+57a9-57ab, U+57b3-57b5, U+57b8-57bb, U+57be, U+57c2, U+57c4-57c8, U+57cc, U+57cf, U+57d2, U+57dc-57de, U+57e1-57e2, U+57e5-57e7, U+57ed-57f0, U+57f3-57f6, U+57f8, U+57fb-57fe, U+5800-5801, U+5803-5804, U+5807, U+5809-580b, U+580d-580e, U+5810-5812, U+5814-5815, U+5818-5819, U+581d-581e, U+5820, U+5822-5823, U+5826, U+582c-582d, U+5830, U+583a, U+583f-5841, U+5844, U+5847-5848, U+584b, U+584d, U+584f, U+5852, U+5859-585a, U+585c, U+585f, U+5861, U+5864, U+5868-5869, U+586c-586d, U+5871-5873, U+5879, U+587c-5881, U+5887-5889, U+588e, U+5890-5892, U+5896-589a, U+589d, U+58a1, U+58a3, U+58a6-58a7, U+58a9-58aa, U+58ac, U+58b0-58b1, U+58b5-58b6, U+58bb) ); /* noto-sans-hk-[78]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-78-400-normal.woff2", $range: (U+5611-5613, U+5615-5616, U+5618, U+561a, U+561c, U+561e, U+5620-5621, U+5623-5625, U+5627, U+562a, U+562c-562e, U+5630-5631, U+5635-563a, U+5640, U+5642-5643, U+5649, U+564c-5650, U+5652, U+5654, U+5658-565d, U+5661, U+5664-5666, U+5669, U+566b, U+566d, U+566f, U+5671-5672, U+5676, U+567a-567c, U+5680, U+5684-5686, U+5689-568c, U+568e-568f, U+5692-5693, U+5697-5699, U+569c, U+569e, U+56a1-56a7, U+56a9, U+56ab-56ad, U+56af, U+56b1, U+56b3, U+56b5-56b6, U+56b8-56b9, U+56bf-56c1, U+56c3, U+56c5, U+56c7-56c8, U+56cb-56cc, U+56d1-56d4, U+56d6-56d9, U+56dd, U+56df, U+56e1-56e5, U+56ea-56ec, U+56ee-56ef, U+56f1-56f4, U+56f7, U+56f9, U+56fb, U+56ff-5700, U+5703-5704, U+5706-5707, U+5709-570a, U+570c, U+570f, U+5711, U+5715, U+5717, U+571c-571d, U+5723-5724, U+5727, U+5729-572a, U+572c, U+572e-572f, U+5732, U+5734-5735, U+573b, U+573d, U+573f, U+5741, U+5743, U+5746, U+574b-574d, U+574f, U+5752, U+5754, U+575a) ); /* noto-sans-hk-[79]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-79-400-normal.woff2", $range: (U+54bf, U+54c4, U+54ca, U+54cc, U+54cf-54d2, U+54d4, U+54d6-54d7, U+54da, U+54de-54df, U+54e2-54e4, U+54e7, U+54eb, U+54ef, U+54f3, U+54fd, U+54ff, U+5501-5502, U+5504-5506, U+550a, U+550c-550f, U+5511-5513, U+5516-5518, U+551a-551b, U+551e, U+5520, U+5523-5528, U+552a-552d, U+5530, U+5532-5533, U+5535-5536, U+553b-553c, U+553e-553f, U+5541-5542, U+5544-5545, U+5547, U+5549, U+554b, U+554d-554e, U+5550-5551, U+5553, U+5555-5557, U+555c-555d, U+5562-5563, U+5567, U+5569, U+556b-556c, U+5570, U+5573, U+5575-5579, U+557b-557c, U+557f, U+5581, U+5583, U+5586, U+5588, U+558b, U+558f-5591, U+5599, U+559f, U+55a1, U+55a3, U+55a5-55a6, U+55a8-55a9, U+55ab, U+55ad, U+55b0-55b1, U+55b3-55b4, U+55b6-55b7, U+55b9, U+55bc-55bd, U+55c1, U+55c4-55c5, U+55c7, U+55c9, U+55cc-55cd, U+55d0, U+55d2, U+55d4-55d9, U+55db, U+55dd-55df, U+55e1-55e6, U+55e9-55ea, U+55ec, U+55ee, U+55f1-55f3, U+55f5-55f7, U+55f9-55fb, U+55fd-55fe, U+5600-5602, U+5608, U+560c, U+560f) ); /* noto-sans-hk-[80]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-80-400-normal.woff2", $range: (U+536e-536f, U+5372, U+5374, U+5379-537a, U+537c-537e, U+5382, U+5385, U+5389, U+538b-538c, U+538e, U+5392-5396, U+5399, U+53a0-53a2, U+53a4-53a6, U+53a8-53ab, U+53ae, U+53b0, U+53b3-53b4, U+53b6-53b7, U+53b9, U+53bf, U+53c1, U+53c4-53c5, U+53ce-53d0, U+53d2, U+53d5, U+53d9-53da, U+53df-53e1, U+53e7-53e9, U+53f1, U+53f5-53f6, U+53f9, U+53fb-53fe, U+5400-5402, U+5405-5407, U+540f, U+5412, U+5414-5417, U+541a, U+5420-5421, U+5423-5425, U+5428-5429, U+542c-542f, U+5431-5432, U+5434, U+5437, U+543d, U+543f, U+5441, U+5444-5445, U+5447, U+5449, U+544b-544d, U+5450-5455, U+5457, U+545b-545c, U+545f-5460, U+5463-5464, U+5469-5472, U+5474, U+5476, U+5478, U+547b, U+547e-547f, U+5482-5488, U+548a, U+548d-5491, U+5493-5494, U+5498-549e, U+54a1-54a5, U+54ab, U+54ad-54af, U+54b4-54b5, U+54b7, U+54b9, U+54bb-54bc, U+54be) ); /* noto-sans-hk-[81]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-81-400-normal.woff2", $range: (U+51d0-51d4, U+51d6, U+51d9, U+51db-51dc, U+51df, U+51e2, U+51e4, U+51e6, U+51e9-51ea, U+51ed, U+51ef, U+51f4-51f5, U+51fc, U+51fe-51ff, U+5201-5202, U+5204-5205, U+5208, U+520b, U+520d-520e, U+5213, U+5215-5216, U+5218, U+521a, U+521f-5220, U+5223, U+5226-5228, U+5232-5234, U+5239, U+523c, U+5241-5242, U+5244, U+5249, U+524c, U+524f, U+5251-5252, U+5255, U+5257, U+5259, U+525c, U+525e, U+5260-5261, U+5263-5265, U+5268, U+526e, U+5270, U+5273-5274, U+5277, U+5279, U+527d, U+527f, U+5281-5282, U+5284, U+528a, U+528c, U+528f-5290, U+5292-5294, U+529a, U+529d, U+52a4, U+52a6, U+52ac-52ad, U+52b1-52b5, U+52b9, U+52bb-52bc, U+52be-52c0, U+52c5, U+52cb-52cd, U+52d0-52d1, U+52d6-52d7, U+52db, U+52e0-52e1, U+52e3, U+52e6-52e7, U+52eb, U+52ed-52ee, U+52f0-52f2, U+52f7, U+52f9-52fa, U+5300-5302, U+530a-530b, U+530d, U+530f-5310, U+5315, U+531a, U+531c-531d, U+5324, U+5327, U+532c-532e, U+5331-5333, U+5338, U+533b-533e, U+5342, U+5344-5345, U+534b-534d, U+534f-5350, U+5358, U+535d-535f, U+5362-5364, U+5367, U+5369, U+536b-536d) ); /* noto-sans-hk-[82]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-82-400-normal.woff2", $range: (U+505d-5060, U+5063, U+5066, U+506a, U+506c, U+506f-5072, U+5078, U+507a-507b, U+507f-5081, U+5088-5089, U+508b-508c, U+508e, U+5090, U+5092, U+5095-5096, U+509a-509d, U+50a3, U+50a5-50a6, U+50a8, U+50af, U+50b1, U+50b4, U+50ba, U+50bc, U+50c2, U+50c6-50ca, U+50cd-50ce, U+50d0, U+50d6, U+50d9, U+50dd-50df, U+50e1, U+50e3, U+50e5-50e6, U+50e8-50ea, U+50ec-50f0, U+50f3-50f4, U+50fb-50fc, U+50fe, U+5101-5102, U+5105-5109, U+510b-510e, U+5110, U+5113-5115, U+5117, U+511a-511c, U+511e, U+5120-5121, U+5125, U+512b, U+5131, U+5134-5135, U+5138-513c, U+5140, U+514e, U+5150-5151, U+5155-5157, U+515a, U+515f-5160, U+5162, U+516a, U+516e, U+5172, U+5174, U+5179, U+517b, U+517d, U+5182, U+5186, U+5188-5189, U+518b, U+518f, U+5191, U+5193, U+5195-5197, U+519a-519c, U+519e, U+51a2, U+51a6-51a9, U+51ab, U+51ad-51af, U+51b1-51b6, U+51b8, U+51ba-51c0, U+51c3-51c5, U+51c7, U+51c9-51cb, U+51ce-51cf) ); /* noto-sans-hk-[83]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-83-400-normal.woff2", $range: (U+4f22, U+4f24, U+4f28-4f2b, U+4f2d, U+4f31-4f32, U+4f35, U+4f37, U+4f39, U+4f3b, U+4f3e, U+4f41-4f43, U+4f45, U+4f47, U+4f49, U+4f4b-4f4c, U+4f52, U+4f57-4f58, U+4f5a, U+4f5d-4f5f, U+4f61, U+4f63-4f64, U+4f67, U+4f6a, U+4f6e-4f6f, U+4f72, U+4f74, U+4f76-4f7b, U+4f7d-4f7e, U+4f80-4f82, U+4f84, U+4f89-4f8a, U+4f8e-4f94, U+4f96-4f98, U+4f9a, U+4f9e, U+4fa0-4fa3, U+4fa5-4fa8, U+4faa-4fac, U+4fb0, U+4fb2-4fb4, U+4fb7-4fba, U+4fbd, U+4fc0-4fc1, U+4fc5-4fc8, U+4fcb-4fce, U+4fd1, U+4fd3-4fd4, U+4fd8-4fdc, U+4fdf, U+4fe2-4fe5, U+4fe8-4fea, U+4fec-4fed, U+4ff0, U+4ff2-4ff6, U+4ff8-4ffa, U+4ffd, U+5000, U+5002-5003, U+5005, U+5008, U+500c, U+500f, U+5013-5015, U+501b-501c, U+501e, U+5022-5025, U+5027-5028, U+502c-502e, U+5030-5032, U+5034, U+5036, U+503a-503b, U+503e, U+5040-5041, U+5043, U+5045-5046, U+5048, U+504a-504e, U+5051-5053, U+5056, U+5058) ); /* noto-sans-hk-[84]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-84-400-normal.woff2", $range: (U+4ad1, U+4ae4, U+4aff, U+4b10, U+4b19, U+4b20, U+4b2c, U+4b37, U+4b6f-4b70, U+4b72, U+4b7b, U+4b7e, U+4b8e, U+4b90, U+4b93, U+4b96-4b97, U+4b9d, U+4bbd-4bbe, U+4bc0, U+4c04, U+4c07, U+4c0e, U+4c32, U+4c3b, U+4c3e, U+4c40, U+4c47, U+4c57, U+4c5b, U+4c6d, U+4c77, U+4c7b, U+4c7d, U+4c81, U+4c85, U+4ca4, U+4cae, U+4cb0, U+4cb7, U+4ccd, U+4ce1-4ce2, U+4ced, U+4d07, U+4d09, U+4d10, U+4d34, U+4d76-4d77, U+4d89, U+4d91, U+4d9c, U+4e02, U+4e04-4e05, U+4e0c, U+4e0f-4e10, U+4e15, U+4e17, U+4e1b, U+4e21-4e22, U+4e25, U+4e27, U+4e2c, U+4e2f, U+4e31, U+4e34, U+4e36-4e37, U+4e3d, U+4e3f-4e42, U+4e44, U+4e47, U+4e49, U+4e4c, U+4e52-4e54, U+4e57, U+4e5a-4e5b, U+4e60-4e61, U+4e69-4e6a, U+4e6d, U+4e78, U+4e80-4e81, U+4e85, U+4e87, U+4e89-4e8a, U+4e8d, U+4e8f, U+4e93, U+4e96, U+4e98-4e99, U+4e9c, U+4e9f-4ea0, U+4ea2-4ea3, U+4ea5, U+4ea9, U+4eb0, U+4eb2-4eb3, U+4eb5-4eb7, U+4eb9, U+4ebb-4ebc, U+4ebf, U+4ec2-4ec6, U+4ec8-4ec9, U+4ecf, U+4ed1, U+4ed3, U+4edc-4ee1, U+4ee7-4eeb, U+4eee-4eef, U+4ef1, U+4ef3-4ef5, U+4ef8, U+4efa, U+4efc, U+4f00, U+4f02-4f03, U+4f05, U+4f07-4f09, U+4f0b, U+4f0e, U+4f15, U+4f17, U+4f1d-4f1f) ); /* noto-sans-hk-[85]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-85-400-normal.woff2", $range: (U+41db, U+41ed, U+41ef, U+41f9, U+4211, U+4223, U+4240, U+4260, U+426a, U+4276, U+427a, U+428c, U+4294, U+42a2, U+42b5, U+42b9, U+42bc, U+42f4, U+42fb-42fc, U+430a, U+432b, U+436e, U+4397, U+439a, U+43ba, U+43c1, U+43c8, U+43d9, U+43df, U+43ed, U+43f0, U+43f2, U+4401-4402, U+4413, U+4425, U+442d, U+447a, U+448f, U+4491, U+449f-44a0, U+44a2, U+44b0, U+44b7, U+44bd, U+44c0, U+44c3, U+44c5, U+44ce, U+44dd-44df, U+44e1, U+44e4, U+44e9-44ec, U+44f4, U+4503-4504, U+4509, U+450b, U+4516, U+451b, U+451d, U+4527, U+452e, U+4533, U+4536, U+453b, U+453d, U+453f, U+4543, U+4551-4552, U+4555, U+4558, U+455c, U+4561-4562, U+456a, U+456d, U+4576-4578, U+4585, U+45a6, U+45b3, U+45da, U+45e9-45ea, U+4603, U+4606, U+460f, U+4615, U+4617, U+465b, U+467a, U+4680, U+46a1, U+46ae, U+46bb, U+46cf-46d0, U+46e5, U+46f5, U+46f7, U+4713, U+4718, U+4736, U+4744, U+474e-474f, U+477c, U+4798, U+47a6, U+47d5, U+47ed, U+47f4, U+4800, U+480b, U+4837, U+485d, U+4871, U+489b, U+48ad-48ae, U+48d0, U+48dd, U+48ed, U+48f3, U+48fa, U+4906, U+4911, U+491e, U+4925, U+492a, U+492d, U+492f-4930, U+4935, U+493c-493e, U+4945, U+4951, U+4953, U+4965, U+496a, U+4972, U+4989, U+49a1, U+49a7, U+49df, U+49e5, U+49e7, U+4a0f, U+4a1d, U+4a24, U+4a35, U+4a3b, U+4a96, U+4aa4, U+4ab4, U+4ab8) ); /* noto-sans-hk-[86]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-86-400-normal.woff2", $range: (U+3b95-3b96, U+3b99, U+3ba1, U+3bbc, U+3bbe, U+3bc2, U+3bc4, U+3bd7, U+3bdd, U+3bec, U+3bf2-3bf4, U+3bff, U+3c0d, U+3c11, U+3c15, U+3c18, U+3c54, U+3c8b, U+3ca5, U+3ccb, U+3ccd, U+3cd1, U+3cd6, U+3cdc, U+3ceb, U+3cef, U+3d12-3d13, U+3d1d, U+3d32, U+3d3b, U+3d46, U+3d4c, U+3d4e, U+3d51, U+3d5f, U+3d62, U+3d68-3d6a, U+3d6f, U+3d75, U+3d7d, U+3d85, U+3d88, U+3d8a, U+3d8f, U+3d91, U+3da5, U+3dad, U+3db4, U+3dbf, U+3dc6-3dc7, U+3dc9, U+3dcc-3dcd, U+3dd3, U+3ddb, U+3de7-3de8, U+3deb, U+3df3-3df4, U+3df7, U+3dfc-3dfd, U+3e03, U+3e06, U+3e40, U+3e43, U+3e48, U+3e55, U+3e74, U+3ea8-3eaa, U+3ead, U+3eb1, U+3eb8, U+3ebf, U+3ec2, U+3ec7, U+3eca, U+3ecc, U+3ed0-3ed1, U+3ed6-3ed7, U+3eda-3edb, U+3ede, U+3ee1-3ee2, U+3ee7, U+3ee9, U+3eeb-3eec, U+3ef0, U+3ef3-3ef4, U+3efa, U+3efc, U+3eff-3f00, U+3f04, U+3f06-3f08, U+3f0e, U+3f21, U+3f53, U+3f58-3f59, U+3f63, U+3f7c, U+3f93, U+3f97, U+3fc0, U+3fc8, U+3fd7, U+3fdc, U+3fe5, U+3fed, U+3ff9-3ffa, U+4004, U+4009, U+401d, U+4039, U+4045, U+4053, U+4057, U+4062, U+4065, U+406a, U+406f, U+4071, U+40a8, U+40b4, U+40bb, U+40bf, U+40c8, U+40d8, U+40df, U+40f8, U+40fa, U+4102-4104, U+4109, U+410e, U+411b, U+4131-4132, U+4167, U+416c, U+416e, U+417c, U+417f, U+4181, U+4190, U+41b2, U+41c4, U+41ca, U+41cf) ); /* noto-sans-hk-[87]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-87-400-normal.woff2", $range: (U+3572, U+3577-3578, U+3584, U+3597-3598, U+35a1, U+35a5, U+35ad, U+35bf, U+35c1, U+35c5, U+35c7, U+35ca, U+35ce, U+35d2, U+35d6, U+35db, U+35dd, U+35f1-35f3, U+35fb, U+35fe, U+3609, U+3618, U+361a, U+3623, U+3625, U+362d, U+3635, U+3639, U+363e, U+3647-3649, U+364e, U+365f, U+3661, U+367a, U+3681, U+369a, U+36a5, U+36aa, U+36ac, U+36b0-36b1, U+36b5, U+36b9, U+36bc, U+36c1, U+36c3-36c5, U+36c7-36c8, U+36d3-36d4, U+36d6, U+36dd, U+36e1-36e2, U+36e5-36e6, U+36f5, U+3701, U+3703, U+3708, U+370a, U+370d, U+371c, U+3722-3723, U+3725, U+372c-372d, U+3730, U+3732-3733, U+373a, U+3740, U+3743, U+3762, U+376f, U+3797, U+37a0, U+37b9, U+37be, U+37d6, U+37f2, U+37f8, U+37fb, U+380f, U+3819, U+3820, U+382d, U+3836, U+3838, U+3863, U+3875, U+38a0, U+38c3, U+38cc, U+38d1, U+38d4, U+38ec, U+38fa, U+3908, U+3914, U+3927, U+3932, U+393f, U+394d, U+3963, U+3978, U+3980, U+3989-398a, U+3992, U+3999, U+399b, U+39a1, U+39a4, U+39b8, U+39dc, U+39e2, U+39e5, U+39ec, U+39f8, U+39fb, U+39fe, U+3a01-3a03, U+3a06, U+3a17-3a18, U+3a29-3a2a, U+3a34, U+3a4b, U+3a52, U+3a57, U+3a5c, U+3a5e, U+3a66-3a67, U+3a97, U+3aab, U+3abd, U+3ade, U+3ae0, U+3af0, U+3af2, U+3af5, U+3afb, U+3b0e, U+3b19, U+3b22, U+3b2b, U+3b39, U+3b42, U+3b58, U+3b60, U+3b71-3b72, U+3b7b-3b7c, U+3b80) ); /* noto-sans-hk-[88]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-88-400-normal.woff2", $range: (U+2f3f, U+2f42, U+2f45, U+2f63-2f64, U+2f83, U+2f8f, U+3003-3007, U+3012-3013, U+3016-3019, U+3020-3025, U+3030, U+303d, U+3041, U+3043, U+3045, U+3047, U+3049, U+3052, U+305c, U+3062, U+306d, U+307a, U+307c, U+3080, U+308e, U+3090-3091, U+3099-309e, U+30a5, U+30c2, U+30c5, U+30ee, U+30f0-30f2, U+30f4-30f6, U+30fd-30fe, U+3105-3106, U+3108, U+310a-310b, U+310d-3112, U+3115-3117, U+3119, U+3131, U+3134, U+3137, U+3139, U+3141-3142, U+3145, U+3147-3148, U+314b, U+314d-314f, U+3153, U+315c, U+3160-3161, U+3163-3164, U+3181, U+318d, U+3192-3193, U+3196-3198, U+319d-319f, U+3220-3226, U+3231, U+3268, U+3281, U+328b, U+3291-3292, U+3295-3297, U+3299, U+329d, U+329f, U+32a3-32a4, U+32d6, U+32e1, U+3314, U+3322, U+337f, U+338e-338f, U+339c-339e, U+33a1, U+33c4, U+33d1-33d2, U+3435, U+3440, U+3449-344a, U+344c, U+3464, U+3473, U+3479-347a, U+347d-347e, U+3493, U+3496, U+34a5, U+34af, U+34bc, U+34c1, U+34c8, U+34df, U+34e4, U+34e6, U+34fb, U+3506, U+353e, U+3551, U+3553, U+3559, U+3561, U+3569, U+356d, U+3570) ); /* noto-sans-hk-[89]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-89-400-normal.woff2", $range: (U+26fd, U+2701-2702, U+2704-2706, U+2708, U+270a-2712, U+2714, U+2716-2727, U+2729-273e, U+2740-274f, U+2752-275b, U+275d-275e, U+2761, U+2763, U+2765-2769, U+276e-276f, U+2771, U+2776-277e, U+2780-2782, U+278a-278c, U+2794-2796, U+2798-2799, U+279c-27a6, U+27a8-27ab, U+27ad, U+27af-27b0, U+27b2-27b3, U+27b7-27b9, U+27bc-27bd, U+27bf, U+27e9-27eb, U+27f5-27f6, U+2800, U+28ec, U+2922, U+2934-2935, U+29bf, U+2a2f, U+2b05-2b07, U+2b1b, U+2b50, U+2b55, U+2cf5, U+2e1c-2e1d, U+2f00, U+2f08, U+2f12, U+2f24, U+2f29, U+2f2f, U+2f3c) ); /* noto-sans-hk-[90]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-90-400-normal.woff2", $range: (U+25a1, U+25a3-25a4, U+25a6-25ac, U+25b0, U+25b4, U+25b7-25b9, U+25bb, U+25bd, U+25bf-25c2, U+25c7-25ca, U+25cc-25cd, U+25d0-25d9, U+25dc-25e6, U+25ea-25eb, U+25ef, U+25fb-25fe, U+2600-2604, U+2607, U+2609-260b, U+260d-2615, U+2618, U+261a-2623, U+262a, U+262d-2630, U+2638-263e, U+2641-2642, U+2648-2656, U+2658-265c, U+265e-2660, U+2662-2664, U+2666-2669, U+266b-266f, U+267b, U+2692-2696, U+2698, U+269b-269c, U+26a0-26a1, U+26a3-26a5, U+26aa-26ac, U+26bd-26be, U+26c4-26c5, U+26c8, U+26d1, U+26d3-26d4, U+26e4, U+26e9-26ea, U+26f0-26f5, U+26f9-26fa) ); /* noto-sans-hk-[91]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-91-400-normal.woff2", $range: (U+2477-2481, U+2488-2491, U+24b6-24c5, U+24c7-24ca, U+24cc, U+24ce, U+24d0-24df, U+24e1-24ea, U+24f5, U+24ff, U+2501, U+2503-250d, U+250f-2511, U+2513-2515, U+2517-2518, U+251b-251d, U+2520, U+2523-2524, U+2528, U+252b-252c, U+252f, U+2533-2534, U+2537, U+253b-253c, U+2541, U+2543-2545, U+254b, U+2550-2570, U+2572, U+2574, U+2579, U+2580-258a, U+258c-2595, U+2597) ); /* noto-sans-hk-[92]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-92-400-normal.woff2", $range: (U+208d-208e, U+20a1, U+20a4, U+20a6, U+20a8-20ab, U+20ad-20ae, U+20b1-20b3, U+20b5, U+20b8-20ba, U+20bd, U+20dd, U+20e3, U+2105, U+2109, U+2112-2113, U+2115-2117, U+2120-2121, U+2126, U+212b, U+2139, U+2153, U+2194-2197, U+2199, U+219d-219e, U+21a0, U+21a9-21aa, U+21ac, U+21af-21b1, U+21b3-21b5, U+21ba-21bb, U+21c4, U+21ca, U+21cc, U+21d0, U+21d2-21d4, U+21d8, U+21dd, U+21e2-21e9, U+2200, U+2202, U+2205-2208, U+220e-220f, U+2211-2212, U+2215, U+2217-221a, U+221d-2220, U+2225, U+2227-222b, U+222e, U+2234-2237, U+223c-223d, U+2248, U+2256, U+2260-2261, U+2264-2265, U+226a-226b, U+226e-226f, U+2282-2283, U+2295-2296, U+2299, U+22a5, U+22b0-22b1, U+22b9, U+22bf, U+22c5-22c6, U+22c8, U+22d0-22d1, U+22ee, U+2312-2313, U+2318, U+231a-231b, U+2323, U+2328, U+239d, U+23a0, U+23af, U+23e4, U+23e9-23ea, U+23ec, U+23f0-23f3, U+23fa, U+2445, U+2460-2471, U+2474-2476) ); /* noto-sans-hk-[93]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-93-400-normal.woff2", $range: (U+1d0a-1d0b, U+1d0d, U+1d0f, U+1d17-1d18, U+1d1b-1d1c, U+1d20-1d22, U+1d25, U+1d2c, U+1d2e, U+1d30-1d31, U+1d33-1d3a, U+1d3c, U+1d3e-1d42, U+1d52, U+1d55, U+1d5b, U+1d5e, U+1d9c, U+1da0, U+1dc4-1dc5, U+1e3b, U+1e43, U+1e45, U+1e47, U+1e63, U+1e6d, U+1e73, U+1ea0, U+1ea2, U+1ea4-1ea9, U+1eab-1eaf, U+1eb1, U+1eb3, U+1eb5, U+1eb7, U+1eb9, U+1ebb, U+1ebd-1ebe, U+1ec0-1ec3, U+1ec5-1ec6, U+1ec9, U+1ecb-1ecd, U+1ecf-1ed1, U+1ed3-1ed5, U+1ed7-1edd, U+1edf, U+1ee1, U+1ee3-1ee7, U+1ee9, U+1eeb, U+1eed, U+1eef-1ef1, U+1ef3, U+1ef7, U+1ef9, U+1f62, U+1fa2, U+2001-2006, U+2009-200a, U+200c-200d, U+200f-2012, U+2015-2016, U+201a, U+201e, U+2020-2021, U+2023-2025, U+2028, U+202a-202d, U+202f-2030, U+2032-2033, U+2035, U+2038, U+203e-203f, U+2042-2044, U+2049, U+204d-204e, U+2060-2061, U+2063, U+2070, U+2074-207b, U+207d-2083, U+208a) ); /* noto-sans-hk-[98]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-98-400-normal.woff2", $range: (U+1fb-1ff, U+219, U+221, U+225-226, U+228-22b, U+22e-22f, U+231-235, U+239, U+23b, U+23e, U+250-252, U+254-255, U+259-25e, U+261-263, U+268-26b, U+26d, U+26f-277, U+279-27a, U+27d-281, U+283, U+28a-28c, U+28f, U+292, U+294-296, U+298-29a, U+29c, U+29f, U+2a1-2a2, U+2a4-2a7, U+2a9-2aa, U+2ae-2b3, U+2b5-2b7, U+2b9-2bf, U+2c2-2c4, U+2c6-2c9, U+2cc-2cd, U+2d0, U+2d8, U+2da, U+2dc, U+2e1-2e3, U+2e7, U+2eb, U+2ee, U+2f1-2ff, U+302-304, U+306-309, U+30c-30d, U+311, U+31b, U+321, U+323-325, U+328-329, U+32b-32c, U+32e-32f, U+331-33a, U+33c-33f, U+348, U+353, U+358-359) ); /* noto-sans-hk-[99]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-99-400-normal.woff2", $range: (U+a1-a2, U+a4, U+a6-a8, U+aa, U+ac, U+af, U+b1, U+b5-b6, U+b8-ba, U+bc-be, U+c0-c8, U+ca-cc, U+ce-d5, U+d8-df, U+f0, U+f5, U+f8, U+fb, U+fe-100, U+102, U+105, U+107, U+109-10b, U+10f, U+112, U+115, U+117, U+119, U+11b, U+11f, U+121, U+123-124, U+127, U+129, U+12c-12d, U+130-13f, U+141-142, U+144, U+148, U+14b-14c, U+14f-153, U+159-15b, U+15e-160, U+163-166, U+169-16a, U+16d-171, U+173-17e, U+192, U+1a0, U+1a4, U+1aa, U+1ac-1ad, U+1af, U+1b1, U+1b4-1be, U+1d0, U+1d2, U+1d4, U+1da, U+1dc-1dd, U+1e1, U+1e3-1e4, U+1e7, U+1e9, U+1eb-1ec, U+1f0-1f1, U+1f3-1f5, U+1f7, U+1f9-1fa) ); /* noto-sans-hk-[100]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-100-400-normal.woff2", $range: (U+a3, U+2ca, U+6cc, U+200e, U+2223, U+2640, U+273f, U+301c-301d, U+3107, U+310c, U+4e30, U+4e3e, U+4e5e, U+4e71, U+4f26, U+4f7c, U+4f83, U+50da, U+5243, U+5267, U+529e, U+5321, U+5352, U+5477, U+548b, U+54a6, U+54b2, U+54c2, U+54c6, U+54cd, U+54ee, U+5543, U+55d1, U+55d3, U+55f0, U+560d, U+5629, U+5660, U+57ae, U+57e0, U+57e4, U+5904, U+592d, U+5965, U+5a31, U+5a7f, U+5b5a, U+5bb8, U+5c14, U+5c3b, U+5c5c, U+5c5e, U+5d10, U+5e10, U+603b, U+604d, U+611c, U+6137, U+61c8, U+6292, U+62c7, U+6371, U+6382, U+645f, U+64ae, U+64c2, U+651e, U+65f1, U+660a, U+663e, U+673d, U+6784, U+6789, U+67ff, U+6813, U+6854, U+68d8, U+697d, U+6a01, U+6a1e, U+6baf, U+6c08, U+6c17, U+6c2b, U+6c81, U+6cbd, U+6dc6, U+6df9, U+6ed9, U+6ee1, U+6f86, U+6fc1, U+6fdb, U+701f, U+7076, U+715c, U+7194, U+71fb, U+720d, U+72b6, U+7396, U+739f, U+73af, U+745b, U+746f, U+748b, U+7647, U+7699, U+76bf, U+76ce, U+76de, U+77aa, U+786b, U+7881, U+78ca, U+793c, U+797a, U+79b9, U+79bb, U+79bf, U+7a92, U+7ac7, U+7ae3, U+7b19, U+7b20, U+7b51, U+7b94, U+7cbd, U+7cde, U+7cef, U+7dde, U+7f88, U+80da, U+814b, U+8235, U+8258, U+8282, U+82b9, U+8401, U+846b, U+84c1, U+8518, U+8611, U+8778, U+8783, U+8814, U+8a15, U+8aa6, U+8b2c, U+8ba8-8ba9, U+8bc6, U+8be2, U+8c22, U+8d05, U+8dbe, U+8e34, U+8e66, U+8ec0, U+8f91, U+9005, U+9082, U+9091, U+914b, U+916f, U+92c5, U+92f0, U+9318, U+9382, U+938a, U+93e2, U+964b, U+968f, U+96c1, U+96cc-96cd, U+96db, U+97a0, U+9803, U+9876, U+9879, U+9886, U+9955, U+9986, U+99f1, U+9a5b, U+9abc, U+9b77, U+9c57, U+9c9c, U+9d1b, U+9d26, U+9d51, U+9eef, U+9f99, U+c2a4, U+e253, U+e313-e314, U+e5c7, U+e5c9, U+e8db-e8dc, U+ff25, U+ff2d-ff2e, U+ff34, U+ffe5, U+1f60a, U+1f618, U+1f62d) ); /* noto-sans-hk-[101]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-101-400-normal.woff2", $range: (U+b4, U+10d, U+2d9, U+641, U+e20, U+e29, U+20ac, U+2266, U+25be, U+301e, U+3058, U+4e07, U+4e1d, U+4e66, U+4ece, U+4f88, U+4fde, U+5016, U+5180, U+5199, U+51aa, U+5306, U+5386, U+53d8, U+5413, U+541d, U+5436, U+54ce, U+54e8, U+54fc, U+5571, U+557e, U+558e, U+55a7, U+56a8, U+57a2-57a3, U+58b3, U+5960, U+5992-5993, U+59a4, U+5a55, U+5ab2, U+5afb, U+5b56, U+5bc5, U+5bc7, U+5bf0, U+5cb1, U+5cc7, U+5d84, U+5dff, U+5e93, U+5ed3, U+5f6a, U+60bc, U+61c7, U+61ff, U+6218, U+6254, U+634d, U+6467, U+64f1-64f2, U+6582, U+65fb, U+6615, U+6687, U+66ae, U+66e0, U+66e6, U+66f0, U+6781, U+67f5, U+6837, U+68a7, U+6a1f, U+6b27, U+6b4e, U+6b73, U+6b79, U+6bcb, U+6c5d, U+6cf5, U+6dee, U+6ec4, U+6ecc, U+6f88, U+6fef, U+701d, U+703e, U+707c, U+7099, U+710a, U+725f, U+72d9, U+72e9, U+731d, U+7325, U+7463, U+7480, U+74a8, U+7523, U+7526, U+75e0, U+7613, U+7656, U+76d4, U+773a, U+775c, U+775e, U+780c, U+78e1, U+78f7, U+7960, U+7a20, U+7aaf, U+7b08, U+7b71, U+7be4, U+7cec, U+7cf0, U+7d5e, U+7d62, U+7dbe, U+7e1b, U+7ea2, U+7ec4, U+7ec6, U+7edc, U+7eed, U+7efc, U+7f16, U+7f57, U+7fb9, U+7fca, U+803d, U+816e, U+82a5, U+82b7, U+8317, U+8338, U+834a, U+83d3, U+8469, U+849e, U+854a, U+8559, U+865e, U+86e4, U+8700, U+8759, U+8760, U+8782, U+879e, U+87d1, U+880d, U+8836, U+8944, U+89c8, U+8aac, U+8b74, U+8ba2, U+8ba4, U+8bae, U+8bfb, U+8c4e, U+8cb3, U+8cb6, U+8d16, U+8d28, U+8e44, U+8f3b, U+8f3f, U+8fb9, U+8fc4, U+8fde, U+8ff9, U+9076, U+90ae, U+90b8, U+9257, U+9310, U+93df, U+94fe, U+95a5, U+95a9, U+962e, U+9690, U+9704, U+9713, U+97f6, U+9824, U+986b, U+9884, U+98e2, U+991a, U+99a5, U+99dd, U+9ab8, U+9b41, U+9bad, U+9dd7, U+c774, U+e5d4, U+fe52, U+fe5d, U+ff02, U+1f389, U+1f449, U+1f495) ); /* noto-sans-hk-[102]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-102-400-normal.woff2", $range: (U+2cb, U+5d1, U+5d9, U+5e2, U+5e8, U+5ea, U+633, U+e32, U+2252, U+2267, U+2573, U+25b3, U+25c4, U+2713, U+2715, U+30e2, U+4e28, U+4e3c, U+4e4d, U+4e70, U+4f18, U+4fef, U+5018, U+501a, U+5026, U+5137, U+513f, U+51a5, U+51f3, U+524b, U+5254, U+52d8, U+5308, U+5384, U+53cc, U+5443, U+5466, U+54a7-54a8, U+54bd, U+54c9, U+54cb, U+555e, U+556a, U+5580, U+560e, U+5614, U+561f, U+562f, U+566c, U+5679, U+56bc, U+56cd, U+56e7, U+56ed, U+572d, U+5742, U+57d7, U+582f, U+589f, U+5b09, U+5ba5, U+5c51, U+5c90, U+5cef, U+5d16, U+5dd4, U+5e08, U+5e26, U+5f0a, U+5f20, U+606c, U+620f, U+625b, U+62a4, U+62ce, U+62d0, U+62f1, U+63a0, U+63c6, U+63f9, U+6413, U+6417, U+6483, U+64f7, U+650f, U+65a7, U+665f, U+66d6, U+6746, U+6756, U+67d1, U+68d7, U+68e0, U+68f5, U+6977, U+6995, U+69a8, U+69b4, U+69d3, U+6a3d, U+6abb, U+6bb7, U+6bd3, U+6c47, U+6cc4, U+6cd3, U+6dae, U+6e26, U+6e29, U+6e5b, U+6eaf, U+6eba, U+7028, U+70b3, U+711a, U+733f, U+73c0, U+73ee, U+7444, U+745a, U+7487, U+7540, U+75a4, U+7729, U+779e, U+798e, U+79bd, U+79cd, U+79e9, U+7a3d, U+7a4c, U+7a9f, U+7ac4, U+7aff, U+7b77, U+7c27, U+7ca7, U+7cd9, U+7d76, U+7e43, U+7e55, U+7ea6, U+7ed9, U+7ff1, U+808b, U+809b, U+80fa, U+81a8, U+827a, U+8309, U+8328, U+832b, U+8396, U+83e0, U+840e, U+8425, U+852d, U+853b, U+8588, U+85e9, U+86b5, U+8718, U+87ec, U+8910, U+893b, U+89c1-89c2, U+8b3e, U+8baf, U+8bc1, U+8bcd, U+8bdd, U+8c41, U+8c48, U+8d2d, U+8d5e, U+8fbe, U+9015, U+90a8, U+90b5, U+90e1, U+9169, U+9183, U+91d0, U+91dc, U+9293, U+92f8, U+9472, U+9598, U+95ed, U+95fb, U+9605, U+96c7, U+9739, U+9742, U+9761, U+99ad, U+9ae6, U+9b1a, U+9b44, U+9bc9, U+9d3f, U+9e7c, U+9e92, U+fe5e, U+ff22-ff24, U+ff2f-ff30, U+ff33) ); /* noto-sans-hk-[103]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-103-400-normal.woff2", $range: (U+60, U+f7, U+161, U+2198, U+2571, U+258b, U+25b6, U+2661, U+3051, U+3109, U+4e11, U+4e1c, U+4e24, U+4e2b, U+4ef7, U+4f36, U+4fd0, U+5029-502a, U+5055, U+508d, U+50ad, U+50d5, U+50e7, U+50f1, U+50f5, U+51c8, U+51fb, U+5203, U+524e, U+5288, U+5323, U+53c2, U+5458, U+54b1, U+54b3, U+54b8, U+5582, U+55b2, U+55ba, U+55da, U+55dc, U+5662, U+5678, U+56ae, U+56c2, U+57d5, U+5862, U+58e4, U+58f0, U+5907, U+590d, U+5934, U+5978, U+5984, U+5a25, U+5be1, U+5c06, U+5c62, U+5c91, U+5cfb, U+5d01, U+5d11, U+5d1b, U+5e87, U+5eb8, U+5eff, U+5f27, U+5f3a, U+5f53, U+5f64, U+6001, U+6168, U+61a9, U+6233, U+62a5, U+62ed, U+638f, U+6399, U+63c0, U+646f, U+6590, U+6631, U+664f, U+6689, U+66dc, U+672f, U+67af, U+67ec, U+6807, U+6a44, U+6c14, U+6c40, U+6c70, U+6c76, U+6cb8, U+6ce3, U+6df3, U+6e20, U+6e43, U+6ebc, U+6eec, U+6f2c, U+6fb1, U+7009, U+7011, U+701a, U+7117, U+7184, U+71ed, U+72f9, U+7426, U+74bd, U+74cf, U+752b, U+7554, U+75b9, U+7621, U+7671-7672, U+7693, U+76ef, U+7737, U+77a7, U+77b3, U+77bb, U+77da, U+77e2, U+77e9, U+77ef, U+7801, U+7940, U+797f, U+79a7, U+79b1, U+7a6b, U+7ac5, U+7b1b, U+7dab, U+7db4, U+7db8, U+7dcb, U+7ddd, U+7de0, U+7e9c, U+7ed3, U+7ef4, U+803f, U+8046, U+8087, U+8116, U+8214, U+821c, U+82d4, U+8305, U+831c, U+8335, U+8339, U+8350, U+8354, U+8526, U+860a, U+86db, U+8713, U+873b, U+8822, U+88c5, U+8993, U+8a1f, U+8ab9, U+8ad7, U+8e72, U+8f44, U+8f4e, U+8f9c, U+8fd0, U+8fd8, U+8fe6, U+9042, U+907c, U+91ba, U+9452, U+9591, U+95e2, U+9631, U+9699, U+96b8, U+9709, U+978d, U+9811, U+9830, U+98ce, U+9945, U+99ed, U+9a8c, U+9ad3, U+9baa, U+9be8, U+9c77, U+9cf6, U+9d72, U+9e1f, U+9ec4, U+fe31, U+fe55, U+ff03, U+ff20, U+ff3b, U+ff3d, U+1f3fb, U+1f44d, U+1f60d) ); /* noto-sans-hk-[104]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-104-400-normal.woff2", $range: (U+10c, U+e17, U+e44, U+2728, U+3081, U+4e13, U+4e19, U+4e1e, U+4e5c, U+4ea7, U+4ed7, U+4f20, U+4f8d, U+4ffe, U+5021, U+515c, U+51a4, U+51e0, U+521b, U+522b, U+532a, U+534e, U+5355, U+537f, U+5398, U+539d, U+541f, U+543c, U+544e, U+5509, U+5598, U+5622, U+5632, U+563f, U+5641, U+566a, U+5695, U+569f, U+56da, U+573a, U+574e, U+5835, U+584c, U+5885, U+58ae, U+5a1f, U+5ac2, U+5b24, U+5bb0, U+5bde, U+5bfc, U+5c39, U+5c4c, U+5c60, U+5e76, U+5e7f, U+5e9a, U+5f13, U+5f6c, U+6127, U+61f2, U+6208, U+620a, U+620c, U+6252, U+62ef, U+6328, U+633d, U+6362, U+63b0, U+63c9, U+640f, U+64a9, U+6514, U+652c, U+655e, U+6583, U+658c, U+6627, U+66f3, U+6734, U+6743, U+676d, U+67c4, U+67da, U+68cd, U+68f2, U+690e, U+6ab3, U+6b16, U+6b38, U+6b3d, U+6bc6, U+6ca1, U+6cab, U+6d8c, U+6dea, U+6e32, U+6e3e, U+6e58, U+6eef, U+6ef2, U+6fe4, U+708a, U+7130, U+7165, U+7172, U+71c9, U+7232, U+7239, U+7261, U+7280, U+72a7, U+72f8, U+73c8, U+7464, U+753b, U+754f, U+755c, U+75d8, U+76ea, U+776b, U+7779, U+777f, U+7784, U+778e, U+77db, U+77ee, U+79e4, U+7a46, U+7a57, U+7aba, U+7aed, U+7b4d, U+7c7b, U+7c7d, U+7d13, U+7d33, U+7dbb, U+7dec, U+7df9, U+7e46, U+7ea7, U+7edf, U+8085, U+8165, U+81fb, U+82b8, U+82d3, U+8343, U+839e, U+83e9, U+840d, U+851a, U+853d, U+8543, U+859b, U+85fb, U+87fb, U+888d, U+8adc, U+8b0a, U+8bb0, U+8bbe, U+8bc4, U+8bf4, U+8c5a, U+8cc3, U+8ce4, U+8d44, U+8e81, U+8f66, U+8fdb, U+900d, U+9063, U+914c, U+9223, U+9226, U+923a, U+925b, U+9264, U+929c, U+92b9, U+9320, U+934d, U+935b, U+9444, U+957f, U+96a7, U+9756, U+97ad, U+97cc, U+9898, U+98ea, U+9921, U+9952, U+9a55, U+9b0d, U+9b91, U+9bca, U+9ebd, U+9f4b, U+e60f-e611, U+ff1c-ff1d, U+ff21, U+ff38, U+ff9f, U+fffd, U+1f602) ); /* noto-sans-hk-[105]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-105-400-normal.woff2", $range: (U+e22, U+2103, U+25a0, U+266a, U+2699, U+3014-3015, U+4e1a, U+4e50, U+4f10, U+4f3d, U+4f6c, U+4f70, U+4fcf, U+5006, U+50d1, U+5170, U+518c, U+51f0, U+51f6, U+51f9, U+5219, U+5256, U+525d, U+52c9, U+5349, U+5351, U+5356, U+5375, U+53db, U+53ee, U+53f7, U+5492, U+5497, U+54fa, U+5538, U+55bb, U+55e8, U+56b7, U+5757, U+58be, U+5937, U+59dc, U+59e8, U+5a49, U+5a9a-5a9b, U+5ab3, U+5b9b, U+5b9e, U+5be8, U+5c37, U+5c4e, U+5d14, U+5d19, U+5d4c, U+5d50, U+5deb, U+5e84, U+5e94, U+5ec2, U+5f17, U+5f26, U+5f55, U+5f77, U+5f7f, U+5fbd, U+6052, U+6064-6065, U+608d, U+609a, U+6101, U+611a, U+614c, U+621a, U+6237, U+6284, U+6296, U+62e9, U+632a-632b, U+634f, U+6488, U+6500, U+652a, U+6556, U+65e0, U+65ec, U+6643, U+679a, U+6850, U+6893, U+6897, U+68b3, U+68d5, U+6930, U+6960, U+6a11, U+6a38, U+6a3a, U+6b22, U+6b67, U+6b6a, U+6c59, U+6c83, U+6ccc, U+6df5, U+6ef7, U+6f3e, U+6f80, U+70ed, U+7164, U+722a, U+7260, U+7272, U+73b0, U+74ca, U+74e3, U+7538, U+7586, U+75b5, U+7624, U+7661-7662, U+7838, U+786e, U+788c, U+7950, U+79a6, U+79aa, U+7a40, U+7a62, U+7bf7, U+7c3e, U+7c98, U+7ca5, U+7d21, U+7d2e, U+7dba, U+7e79, U+7ecf, U+7f79, U+8086, U+810a, U+8139, U+813e, U+817a, U+81b3, U+821f, U+8247, U+8259, U+8271, U+8431, U+846c, U+849c, U+84b2, U+84c4, U+8513-8514, U+8549, U+8755, U+8877, U+8881, U+88f9, U+8a1d, U+8a3c, U+8a6d-8a6e, U+8a93, U+8ae7, U+8af7, U+8b17, U+8b5a, U+8ba1, U+8bba, U+8cdc, U+8dea, U+8f6c, U+8f7d, U+8fc7, U+8fd9, U+902e, U+90ca, U+916a, U+916c, U+921e, U+9245, U+947c, U+9594, U+95a8, U+95ee, U+95f4, U+9706, U+971e, U+980c, U+9891, U+98b1, U+98fc, U+9903, U+9957, U+99ae, U+99ff, U+9db4, U+e602-e605, U+ff16-ff19) ); /* noto-sans-hk-[106]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-106-400-normal.woff2", $range: (U+a5, U+2190-2191, U+2193, U+22c1, U+2302, U+25cb, U+25ce, U+2709, U+4e0e, U+4e18, U+4e3a, U+4e48, U+4e91, U+4eec, U+5112, U+524a, U+52a3, U+52ab, U+52c3, U+52f3, U+52fb, U+5320, U+5339, U+533f, U+53e2, U+5435, U+543e, U+5480, U+5495, U+5564, U+5572, U+55c6, U+55ef, U+563b, U+5653, U+5657, U+5764, U+5824, U+58d8, U+5955, U+5983, U+598d, U+59a8, U+59da, U+59e6, U+5a36, U+5bb5, U+5bc2, U+5bee, U+5bf9, U+5cb3, U+5d17, U+5dbc, U+5e2e, U+6070, U+60df, U+6190, U+61a4, U+61be, U+61fc, U+62ac, U+62bc, U+636e, U+6398, U+63a9, U+6435, U+6487, U+6495, U+64ab, U+64bf, U+6577, U+65ac, U+6602, U+6652, U+66f9, U+672d, U+6761, U+683d, U+68ad, U+68b5, U+68da, U+68e7, U+6a59, U+6a61, U+6ae5, U+6b47, U+6bef, U+6c50, U+6c9b, U+6e23, U+6e34, U+6e4a, U+6e67, U+6ea2, U+6eb6, U+6f20, U+6feb, U+7149, U+714c, U+715e, U+7199, U+71ac, U+7231, U+7262, U+7409, U+745f, U+7469, U+7504, U+7535, U+753a, U+75f4, U+7682, U+76ba, U+76f2, U+77fd, U+780d, U+7832, U+78c5, U+78ef, U+7901, U+79be, U+79c9, U+79e6, U+7a1a, U+7a84, U+7aca, U+7cb5, U+7cb9, U+7cdf, U+7ce7, U+7d6e, U+7db1, U+7def, U+7e61, U+7e7d, U+7e8f, U+7f38, U+7f77, U+7fa8, U+7fc5, U+7fe1, U+7ff9, U+800d, U+8015, U+8054, U+80a2, U+80aa, U+80ba, U+814e, U+8180, U+819d, U+81c0, U+828b, U+82ad, U+82af, U+83f1, U+83f8, U+8403, U+8475, U+84bc, U+84c9, U+84ec, U+8523, U+8569, U+8591, U+85b0, U+86d9, U+8774, U+881f, U+884d, U+88d4, U+89c4, U+89c6, U+8a60, U+8a79, U+8b19, U+8bd5, U+8bf7, U+8c03, U+8c79, U+8cc8, U+8d9f, U+8e10, U+8e48, U+8eba, U+8faf, U+9009, U+9017, U+9175, U+9187, U+918b, U+91d8, U+9214, U+946b, U+9470, U+9640, U+9675, U+96ef, U+9716, U+97cb, U+97e9, U+985b, U+99b3, U+9b4f, U+9d09, U+9e9f, U+9edb, U+9f90, U+ff05, U+ff14, U+1f464) ); /* noto-sans-hk-[107]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-107-400-normal.woff2", $range: (U+4e08, U+4e2a, U+4e56, U+4e9a, U+4ea8, U+4ead, U+4ec7, U+4f3a, U+4f51, U+4f62, U+4faf, U+507d, U+5098, U+50ac, U+5147, U+5173, U+5187, U+51f8, U+51fd, U+52a1, U+52a8, U+52f8, U+535c, U+53ed, U+541e, U+5475, U+54a9, U+54c0, U+54c7, U+5589, U+5605, U+5690, U+5733, U+5782, U+57c3, U+5858, U+5893, U+589c, U+58e2, U+5974, U+599e, U+59a5, U+59ec, U+5b66, U+5b99, U+5b9d, U+5c2c, U+5c48, U+5c65, U+5cfd, U+5d0e, U+5dba, U+5de2, U+5e06, U+5e15, U+5ec1, U+5ed6, U+5f00, U+5f4c, U+5f65, U+6055, U+609f, U+60b6, U+6241, U+624e, U+626f, U+6291, U+62cc, U+62d3, U+62d8, U+62da, U+62fe, U+6349, U+6367, U+63ea, U+6454, U+64a4, U+64b2, U+64bc, U+64c5, U+64ce, U+6558, U+6572, U+65a5, U+65e8, U+65ed, U+6606, U+6614, U+6670, U+6688, U+673a, U+674f, U+6770, U+6795, U+68cb, U+6912, U+6953, U+6aac, U+6aaf, U+6ab8, U+6b20, U+6b96, U+6bbf, U+6bc5, U+6c6a, U+6cbe, U+6d59, U+6d78, U+6dc7, U+6deb, U+6e7e, U+6e9c, U+6f3f, U+6f51, U+6f70, U+6f84, U+6fa1, U+704c, U+7051, U+70ab, U+70ad, U+70f9, U+7119, U+714e, U+71d9, U+71e5-71e6, U+72c4, U+72d0, U+72e0, U+7334, U+744b, U+7455, U+74f7, U+7529, U+75ab, U+75b2, U+766e, U+76c3, U+76fc, U+76fe, U+7891, U+7948, U+7a74, U+7b28, U+7c60, U+7c72, U+7cca, U+7ebf, U+7f55, U+7ff0, U+8154, U+81c2, U+81d8, U+81e3, U+81e5, U+8292, U+8299, U+8302, U+8304, U+8332, U+83c1, U+83c7, U+83ca, U+845b, U+8490, U+85af, U+8650, U+8667, U+8abc, U+8b0e, U+8b39, U+8bed, U+8c54, U+8c6b, U+8c9e, U+8ca7, U+8caa-8cab, U+8ce6, U+8cec-8ced, U+8eb2, U+8fb0, U+901d, U+908f, U+9127, U+91c0, U+9215, U+92b3, U+932b, U+93fd, U+95ca, U+964c, U+96c0, U+970d, U+9774, U+97fb, U+9812, U+9817, U+9913, U+9935, U+99c1, U+9b31, U+9d5d, U+9d6c, U+9e79, U+fe0f, U+fe30, U+ff0b, U+ff10, U+ff15) ); /* noto-sans-hk-[108]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-108-400-normal.woff2", $range: (U+b0, U+926, U+928, U+939, U+93f-940, U+94d, U+200b, U+22ef, U+25ba, U+25c6, U+2665, U+4e4f, U+4e59, U+4f0d, U+4f0f, U+4f19, U+4f59, U+4fae, U+5075, U+50b2, U+50b5, U+511f, U+5141, U+5146, U+514c, U+5185, U+51dd, U+522e, U+5319, U+533a, U+5378, U+53ad, U+53c9, U+53d1, U+53d4, U+543b, U+5442, U+5446, U+5481, U+54e9, U+5507, U+5565, U+559a, U+55aa, U+5606, U+56ca, U+56fe, U+582a, U+58fa, U+5915, U+5949, U+5962, U+5996, U+59fb, U+5a77, U+5b0c, U+5b5f, U+5bd3, U+5be2, U+5bfa, U+5c41, U+5ca9, U+5d07, U+5ec8, U+5eca, U+5f18, U+5f4e, U+5f59, U+5f6d, U+5f79, U+5fb9, U+6028, U+6062, U+6068, U+606d, U+6094, U+60f1, U+6108-6109, U+614e, U+6170, U+617e, U+61b2, U+61f8, U+6247, U+626d, U+6276, U+62ab, U+62cb, U+62f3, U+6368, U+6380, U+6492, U+64b0, U+64e0, U+6570, U+660f, U+6649, U+6691, U+66a8, U+6749, U+67f1, U+67f3-67f4, U+6842, U+6851, U+687f, U+68df, U+69fd, U+6a58, U+6c27, U+6c88, U+6cca, U+6cdb, U+6d29, U+6d66, U+6daf, U+6f01, U+6f06, U+6f58, U+6f62, U+6f6d, U+6ff1, U+6ffe, U+7058, U+70ae, U+7235, U+7267, U+73ca, U+742a, U+758f, U+75bc, U+76c6, U+7740, U+7955, U+7a00, U+7a3b, U+7b4b, U+7bad, U+7be9, U+7c4c, U+7cfe, U+7dbf, U+7e2b, U+7e31, U+7e73, U+7f9e, U+7fc1, U+7ffc, U+8096, U+809d, U+80de, U+8108, U+8155, U+816b, U+81df, U+8277, U+82bd, U+8352, U+8393, U+8404, U+8525, U+856d, U+8587, U+8606, U+868a, U+8776, U+87ba, U+87f9, U+886b, U+8870, U+88d5, U+896a, U+896f, U+8a23, U+8a87, U+8ad2, U+8b00, U+8b20, U+8cb8, U+8cca, U+8ce0, U+8d39, U+8d6b, U+8d81, U+8db4, U+8e29, U+8ef8, U+8f1b, U+8f5f, U+8fa8, U+906e, U+9077, U+90aa, U+90b1, U+90c1, U+9165, U+919c, U+92c1, U+95d6, U+95e8, U+975a, U+98c6, U+9ecf, U+9f0e, U+9f52, U+feff, U+ff06, U+ff0a, U+ff12-ff13) ); /* noto-sans-hk-[109]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-109-400-normal.woff2", $range: (U+627-629, U+631, U+639, U+644, U+64a, U+25cf, U+2606, U+2764, U+3008-3009, U+4e1f, U+4e38, U+4e43, U+4ed5, U+4ef0, U+4eff, U+4fb6, U+4fe0, U+5085, U+50a2, U+50be, U+5118, U+5211-5212, U+5272, U+52fe, U+5366, U+53b2, U+53ec, U+54ac, U+5587, U+55b5, U+561b, U+5751, U+576a, U+57cb, U+58ef, U+592f, U+594f, U+5951, U+5954, U+596e, U+59d1, U+5ac1, U+5acc, U+5b8b, U+5c4d, U+5c6f, U+5ca1, U+5d29, U+5de1, U+5dfe, U+5e7d, U+5edf, U+5ef7, U+5f7c, U+5f81, U+5fa1, U+5faa, U+5fcc, U+5ffd, U+6021, U+6046, U+6155, U+6212, U+62b9, U+6316, U+6350, U+6478, U+647a, U+6490, U+64e6, U+6524, U+6591, U+659c, U+65a4, U+65e6, U+65f6, U+6607, U+6674, U+6765, U+679d, U+68a8, U+6b3a, U+6c57, U+6c61, U+6c90, U+6cbf, U+6d69, U+6db5, U+6dcb, U+6dd1, U+6e21, U+70d8, U+71c3, U+71d5, U+722c, U+727d, U+72ac, U+72fc, U+731c, U+7336, U+7344, U+7384, U+73ab, U+7433-7434, U+745c, U+7470, U+758a, U+75d5, U+7652, U+76c8, U+76e7, U+7709, U+7720, U+7747, U+7763, U+77ac-77ad, U+7802, U+78a7, U+78a9, U+78b3, U+78c1, U+78da, U+7926, U+796d, U+798d, U+7aae, U+7b52, U+7c92, U+7d68, U+7d81, U+7e5e, U+7e69, U+7f50, U+7f70, U+7f75, U+8058, U+8070, U+80c3, U+8105-8106, U+8179, U+818f, U+81a9, U+81ed, U+820c-820d, U+82d1, U+838e, U+83cc, U+8461, U+84b8, U+852c, U+857e, U+85e4, U+863f, U+8679, U+86c7, U+8702, U+8896, U+88c2, U+88f8, U+8af8, U+8b7d, U+8ca2, U+8cc0, U+8d64, U+8d74, U+8d99, U+8e5f, U+8e8d, U+8ecc, U+8ed2, U+8fb1, U+8fc5, U+9022, U+9038, U+903e, U+905c, U+9072, U+9081, U+9189, U+9234, U+92d2, U+934a, U+95a3, U+962a, U+9646, U+9676, U+96d5, U+971c, U+9838, U+9875, U+98c4, U+99db, U+9a45, U+9a5f, U+9a6c, U+9ad2, U+9cf4, U+9d28, U+9daf, U+9df9, U+9e7d, U+9f9c, U+ff11, U+ff1e) ); /* noto-sans-hk-[110]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-110-400-normal.woff2", $range: (U+2500, U+25bc, U+4e95, U+4f50, U+4f54, U+4f69, U+4fc4, U+4fca, U+5009, U+50bb, U+5154, U+51cc, U+528d, U+5291, U+52d2, U+52e4, U+5353, U+5360, U+540a-540b, U+5410, U+54f2, U+5510, U+5514, U+5537, U+558a, U+55ac, U+5617, U+56fd, U+573e, U+5766, U+5783, U+57d4, U+5806, U+5821, U+5857, U+5875, U+58f9, U+596a, U+59ae, U+59c6, U+59ca, U+59ff, U+5a03, U+5ae9, U+5b64, U+5bb4, U+5c3f, U+5e16, U+5e45, U+5e72, U+5ec9, U+5f90-5f92, U+6012, U+6016, U+6084-6085, U+6089, U+60a0, U+60a3, U+60b2, U+60d1, U+60f9, U+6148, U+6158, U+6191, U+626e, U+62d4, U+632f, U+633a, U+6355, U+63aa, U+642c, U+64a5, U+64cb, U+6566, U+6575, U+6597, U+660c, U+66b1, U+66ec, U+6731, U+6735, U+675c, U+67ef, U+6846, U+6876, U+6881, U+68af-68b0, U+68c9, U+6905, U+6b98, U+6bc0, U+6beb, U+6c0f, U+6c1b, U+6c41, U+6ce5, U+6cf3, U+6d25, U+6d2a, U+6d3d, U+6d6e, U+6dd8, U+6dda, U+6dfa, U+6e9d, U+6eaa, U+6ec5, U+6ecb, U+6ef4, U+6f0f, U+6f32, U+707d, U+708e, U+7092, U+716e, U+723a, U+731b, U+7345, U+7375, U+7378, U+73b2, U+74e6, U+75be, U+75de, U+764c, U+76dc, U+788e, U+7897, U+789f, U+78b0, U+790e, U+7965, U+7a4e, U+7aa9, U+7c43, U+7d17, U+7dd2, U+7e96, U+7f51, U+7f69, U+7f72, U+7fd4, U+7fe0, U+8017, U+80a9, U+80d6, U+8102, U+8150, U+8178, U+81bd, U+829d, U+82ac, U+8303, U+840c, U+8482, U+8499, U+85a9-85aa, U+883b, U+8861, U+88c1, U+88cf, U+88d9, U+8a3a, U+8a98, U+8aee, U+8c8c, U+8ce2, U+8d0f, U+8da8, U+8dcc, U+8e0f, U+8e22, U+8f1d, U+8f29, U+8fad, U+9003, U+9006, U+903c, U+904d, U+9059, U+9075, U+90ce, U+90ed, U+9130, U+91ac, U+91e3, U+9285, U+9298, U+92ea, U+9326, U+937e, U+93c8, U+95c6, U+9677, U+9727, U+994b, U+99a8, U+99d0, U+9a30, U+9a37, U+9b42, U+9b45, U+9d3b, U+9e7f, U+9ee8, U+9f3b, U+c5b4) ); /* noto-sans-hk-[111]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-111-400-normal.woff2", $range: (U+5e, U+2502, U+2605, U+4e32, U+4e58, U+4ea1, U+4ef2, U+4f2f-4f30, U+4f75, U+4fd7, U+4ff1, U+501f, U+5049, U+5074, U+5091, U+5144, U+517c, U+51c6, U+51cd, U+5269-526a, U+52aa, U+52c1, U+52c7, U+52df, U+5377, U+541b, U+5439, U+5440, U+5448, U+54aa, U+54e6, U+54ed, U+5674, U+5687, U+585e, U+588a, U+58a8, U+58c1, U+5925, U+5948, U+5999, U+59b3, U+5a1c, U+5a46, U+5b54, U+5b5d, U+5b6b, U+5b8f, U+5bd2, U+5be9, U+5c0a, U+5c16, U+5c46, U+5cf0, U+5e25, U+5e3d, U+5e79, U+5ee2, U+5f04, U+5f31, U+5fcd, U+5fe0, U+60dc, U+6163, U+616e, U+6182, U+61f6, U+622a, U+6258, U+6293, U+62c6, U+62d2, U+6372, U+63da, U+63ed-63ee, U+6416, U+6458, U+649e, U+64ec, U+64f4, U+651c, U+65cb, U+65e2, U+65fa, U+6628, U+6668, U+66a2, U+66c9, U+66fc, U+6717, U+67cf, U+67d4, U+6817, U+6885, U+69cd, U+6a6b, U+6afb, U+6b32, U+6b49, U+6bbc, U+6c89, U+6c96, U+6cc9, U+6d1b, U+6d1e, U+6dfb, U+6efe, U+6f38, U+6f5b, U+6f64, U+6f8e, U+6fa4, U+7070, U+70b8, U+70cf, U+70e4, U+7159, U+7169, U+7210, U+721b, U+7238, U+737b, U+73bb, U+746a, U+7483, U+74dc, U+74f6, U+7518, U+756a, U+75c7, U+775b, U+78e8, U+7919, U+7956, U+795d, U+7a0d, U+7bc9, U+7c97, U+7cd5, U+7d10, U+7d1b, U+7de9, U+7dfb, U+7e3e, U+7e6a, U+7f6a, U+7f8a, U+7fbd, U+8000, U+8036, U+809a, U+80ce, U+80e1, U+80f8, U+8170, U+819c, U+8216, U+8239, U+8266, U+827e, U+82b3, U+8377, U+83ab, U+85c9, U+865b, U+8766, U+87a2, U+87f2, U+8972, U+8a17, U+8a50, U+8a95, U+8b02, U+8b6f, U+8c6c, U+8ca9, U+8cfa, U+8d95, U+8de1, U+8f14, U+8f9b, U+8fa3, U+8feb, U+8ff4, U+9010, U+901b, U+905e, U+9080, U+912d, U+9177, U+91c7, U+9336, U+9451, U+947d, U+963b, U+966a, U+9670, U+9769, U+9813, U+98fd, U+99d5, U+9a19, U+9b27, U+9b6f, U+9ece, U+9ed8, U+9f13, U+9f20, U+ad6d, U+d55c) ); /* noto-sans-hk-[112]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-112-400-normal.woff2", $range: (U+201c-201d, U+203b, U+2192, U+25b2, U+300f, U+4e01, U+4e39, U+4e73, U+4e88, U+4e8e, U+4ed9, U+4f0a, U+4f38, U+4f5b, U+4fc3, U+500d, U+504f, U+5076-5077, U+5100, U+5104, U+5132, U+5175, U+5192, U+51a0, U+51ac, U+51e1, U+51f1, U+5200, U+5224, U+5237-5238, U+523a, U+526f, U+5289, U+52de, U+52f5, U+5371, U+539a, U+53e5, U+540e, U+547c, U+552f, U+5531, U+5634, U+56c9, U+56f0, U+574a, U+5761, U+57f7, U+57f9, U+5805, U+5851, U+5854, U+586b, U+58fd, U+592e, U+5967, U+59bb, U+59d3, U+5a18, U+5b30, U+5b55, U+5b87, U+5b97, U+5be7, U+5bec, U+5bf8, U+5c24, U+5cb8, U+5df7, U+5e1d, U+5e2d, U+5e7b, U+5f1f, U+5f70, U+5fd9, U+61b6, U+6234, U+62b5, U+62d6, U+62dc, U+62fc, U+6383, U+63cf, U+63d2, U+63e1, U+640d, U+64cd, U+64fa, U+64fe, U+654f, U+6562, U+656c, U+65c1, U+65d7, U+6620, U+6676, U+6697, U+66ab, U+66c6, U+66dd, U+66ff, U+671d, U+672b, U+677e, U+67d0, U+67d3, U+68c4, U+690d, U+694a, U+695a, U+6ac3, U+6b04, U+6b23, U+6b78, U+6b8a, U+6c60, U+6d74, U+6d89, U+6db2, U+6dbc, U+6de1, U+6df7, U+6e38, U+6e6f, U+6f02, U+6fc3, U+6fd5, U+70c8, U+7126, U+718a, U+723d, U+7246, U+72af, U+73cd, U+760b, U+7626, U+7687, U+79df, U+7a05, U+7a3f, U+7a69, U+7af6, U+7c3d, U+7c3f, U+7c4d, U+7cd6, U+7d0b, U+7d2b, U+7de3, U+7e2e, U+8010, U+808c, U+80a5, U+80af, U+812b, U+817f, U+819a, U+82d7, U+8389-838a, U+83f2, U+840a, U+8463, U+8521, U+8584, U+860b, U+864e, U+871c, U+878d, U+885d, U+8932, U+89f8, U+8a69, U+8afe, U+8b5c, U+8c37, U+8c46, U+8cbf, U+8cd3, U+8cf4, U+8d08, U+8d0a, U+8ddd, U+8fea, U+9014, U+9055, U+907a, U+9178, U+92fc, U+934b, U+9396, U+93ae, U+9583, U+9663, U+96bb, U+9707, U+9738, U+9846, U+9905, U+9a0e, U+9aa8, U+9b25, U+9b3c, U+9ce5, U+9cf3, U+9ea5, U+9eb5, U+9f4a, U+9f61, U+ff0d) ); /* noto-sans-hk-[113]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-113-400-normal.woff2", $range: (U+3c, U+d7, U+300e, U+4e4e, U+4e82, U+4e92, U+4ec1, U+4ecd, U+4f48, U+4f53, U+4fb5, U+5012, U+502b, U+522a, U+52dd, U+52ff, U+532f, U+53eb, U+53f3, U+5409, U+5433, U+5496, U+54c8, U+554a, U+5561, U+5594, U+559d, U+56b4, U+56fa, U+5713, U+5750, U+57df, U+584a, U+58c7, U+58de, U+593e, U+5976, U+59d0, U+59d4, U+5a66, U+5b85, U+5b88, U+5ba3, U+5bae, U+5bbf, U+5bdf, U+5c01, U+5c04, U+5c3a, U+5c3e, U+5c4f, U+5ddd-5dde, U+5de8, U+5e63, U+5e7c, U+5e8a, U+5eda, U+5ef3, U+5ef6, U+5f48, U+6015, U+6025, U+602a, U+6050, U+6069, U+60e1, U+6162, U+6176, U+61c2, U+6200, U+6263, U+6279, U+6297, U+62b1, U+62bd, U+62ec, U+6311, U+6377, U+6388-6389, U+638c, U+63a2, U+63f4, U+641e, U+6436, U+64c1, U+6551, U+6557, U+6563, U+6696, U+66b4, U+66f2, U+6751, U+675f, U+676f, U+6790, U+6838, U+684c, U+68d2, U+6982, U+699c, U+69ae, U+69cb, U+6a39, U+6a4b, U+6b66, U+6bd2, U+6cb3, U+6ce1, U+6d3e, U+6de8, U+6ed1, U+6f22, U+6f54, U+6fc0, U+6fdf, U+719f, U+71c8, U+7236, U+7259, U+72d7, U+7389, U+73e0, U+745e, U+751a, U+7532-7533, U+7562, U+7591, U+75c5, U+75db, U+7686, U+76d2, U+76db, U+76df, U+76e3, U+7701, U+7761, U+786c, U+7981, U+79cb, U+79d2, U+79fb, U+7a81, U+7a97, U+7aef, U+7b26, U+7b80, U+7c64, U+7d0d, U+7d14, U+7d2f, U+7dca, U+7df4, U+7e54, U+7e6b, U+7f3a, U+8033, U+804a, U+805a, U+81a0, U+81e8, U+8212, U+821e, U+82e6, U+8336, U+8449, U+84cb, U+84ee, U+85e5, U+8607, U+888b, U+8a13, U+8a5e, U+8aa0, U+8aa4, U+8ab0, U+8ab2, U+8ac7, U+8b66, U+8c6a, U+8c93, U+8c9d, U+8de8, U+8f2a, U+8fb2, U+906d, U+907f, U+90a6, U+9109, U+9192, U+91cb, U+91dd, U+964d, U+9686, U+968e, U+9694, U+969c, U+96de, U+96e8, U+96ea, U+96f7, U+975c, U+9760, U+978b, U+9858, U+9918, U+9aee, U+9ebb, U+ff0e-ff0f, U+ff5c) ); /* noto-sans-hk-[114]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-114-400-normal.woff2", $range: (U+b7, U+2022, U+2027, U+3042, U+3044, U+3046, U+3048, U+304a-3050, U+3053-3057, U+3059-305b, U+305d-3061, U+3063-306c, U+306e-3079, U+307b, U+307d-307f, U+3082-308d, U+308f, U+3092-3093, U+30a1-30a4, U+30a6-30c1, U+30c3-30c4, U+30c6-30e1, U+30e3-30ed, U+30ef, U+30f3, U+30fb-30fc, U+4e7e, U+4ea6, U+4eac, U+4f34, U+50b7, U+51b0, U+523b, U+5283, U+5348, U+5354, U+54e5, U+5708, U+590f, U+592b, U+599d, U+59b9, U+5a01, U+5a5a, U+5de7, U+5e78, U+5e9c, U+5fb5, U+6167, U+61f7, U+627f, U+63a1, U+64d4, U+65bd, U+68ee, U+6b4c, U+6bba, U+6c5f, U+6d0b, U+6d6a, U+6e1b, U+6e56, U+6f6e, U+71d2, U+722d, U+72c2, U+751c, U+7530, U+7642, U+76e1, U+79c0, U+7adf, U+7af9, U+7d9c, U+7da0, U+7e23, U+7e41, U+8056, U+8173, U+822a, U+8349, U+83dc, U+8840, U+885b, U+8907, U+8a34, U+8cb4, U+8dd1, U+8fd4, U+8ff0, U+93e1, U+984f, U+98ef, U+9b54) ); /* noto-sans-hk-[115]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-115-400-normal.woff2", $range: (U+23-25, U+3d, U+2026, U+4e03, U+4e45, U+4e5d, U+4eae, U+4ed4, U+4ed8, U+4ee4, U+4f01, U+4f3c, U+4f8b, U+4fc2, U+5019, U+505c, U+50c5, U+5145, U+51b7, U+5207, U+521d, U+525b, U+5287, U+52e2, U+535a, U+537b, U+5426, U+542b, U+5438, U+5462, U+54ea, U+555f, U+5566, U+5584, U+5609, U+570d, U+571f, U+5747, U+5802, U+58d3, U+591c, U+5920, U+5922, U+5957, U+5979, U+5a92, U+5abd, U+5b63, U+5b69, U+5b83, U+5b9c, U+5bb3, U+5bc4, U+5bf5, U+5c3c, U+5c40, U+5c4b, U+5c64, U+5cf6, U+5de6, U+5e0c, U+5e55, U+5eab, U+5ead, U+5ee0, U+5f85, U+5f8b, U+5fa9, U+5fd7-5fd8, U+5ff5, U+600e, U+6298, U+62db, U+62ff, U+639b, U+63a7, U+642d, U+6469, U+64ad, U+651d, U+653b, U+65b7, U+65cf, U+665a, U+666e, U+66fe, U+6728, U+674e, U+67b6, U+6821, U+6839, U+6843, U+6a94, U+6b50, U+6b62, U+6b72, U+6b7b, U+6bcd, U+6bdb, U+6c38, U+6c7a, U+6c7d, U+6c99, U+6cb9, U+6ce2, U+6cf0, U+6d17, U+6d32, U+6e2c, U+6fb3, U+7206, U+723e, U+725b, U+734e, U+7387, U+73ed, U+7565, U+7570, U+76ca, U+76e4, U+773e, U+77ed, U+77f3, U+7814, U+7834, U+7968, U+79d8, U+7a76, U+7a7f, U+7b11, U+7b46, U+7b54, U+7bc4, U+7d19, U+7d20, U+7d22, U+7d42, U+7d55, U+7e7c, U+7f85, U+7ffb, U+8077, U+8089, U+80cc, U+81c9, U+81f4, U+81fa, U+820a, U+822c, U+826f, U+85cd, U+86cb, U+88dc, U+8986, U+8a0e, U+8a2a, U+8a73, U+8a8c, U+8b1b, U+8b9a, U+8c50, U+8c61, U+8ca0, U+8cde, U+8cfd, U+8d8a, U+8df3, U+8e64, U+8ecd, U+8edf, U+8f38, U+8ff7, U+9000, U+9047, U+9060, U+90f5, U+9152, U+91ce, U+9280, U+9418, U+9435, U+9589, U+9592, U+9678, U+967d, U+968a, U+96aa, U+96c5, U+96d6, U+96dc, U+96f6, U+9732, U+9748, U+9802, U+9806, U+9808, U+9818, U+983b, U+984d, U+9867, U+98db, U+98f2, U+98fe, U+9a5a, U+9b06, U+9b5a, U+9bae, U+9e97, U+ff1b, U+ff5e) ); /* noto-sans-hk-[116]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-116-400-normal.woff2", $range: (U+26, U+40, U+4e14, U+4e9e, U+4ec0, U+4f11, U+4f4e-4f4f, U+4f73, U+4fee, U+503c, U+5047, U+514b, U+516b, U+516d, U+5178, U+520a, U+5236, U+5343, U+5347, U+534a, U+5370, U+53cd, U+53e4, U+53e6, U+53f2, U+5403, U+5411, U+5427, U+5468, U+5473, U+547d, U+552e, U+55ce, U+5740, U+57ce, U+5883, U+589e, U+5931, U+5947, U+59cb, U+5a1b, U+5b58, U+5b98, U+5ba4, U+5bc6, U+5bcc, U+5beb, U+5bf6, U+5c45, U+5c6c, U+5dee, U+5df4, U+5e03, U+5e33, U+5e6b, U+5e7e, U+5e8f, U+5e95, U+5ea7, U+5f15, U+5f62, U+5f69, U+5f80, U+5fae, U+5fb7, U+601d, U+60e0, U+614b, U+6230, U+6236, U+623f, U+628a, U+6295, U+62c9, U+6309, U+63db, U+64c7, U+64ca, U+64da, U+652f, U+6545, U+6548, U+65af, U+65e9, U+6625, U+666f, U+667a, U+670b, U+671b, U+6750, U+677f, U+6848, U+6975, U+6a13, U+6a21, U+6aa2, U+6b65, U+6b77, U+6bb5, U+6cc1, U+6ce8, U+6df1, U+6e90, U+6e96, U+6eab, U+6f14, U+6f2b, U+700f, U+706b, U+724c, U+72c0, U+7368, U+7372, U+74b0, U+756b, U+76ae, U+773c, U+78ba, U+78bc, U+798f, U+79ae, U+7a4d, U+7ae5, U+7b56, U+7b97, U+7bb1, U+7bc7, U+7c73, U+7c89, U+7d00, U+7d30, U+7d39, U+7d72, U+7dad, U+7e8c, U+7f6e, U+7fa4, U+7fa9, U+7fd2, U+8003, U+807d, U+80a1, U+80b2, U+8166, U+8208-8209, U+82e5, U+843d, U+85cf, U+85dd, U+862d, U+8857, U+8863, U+88e1, U+89ba, U+89d2, U+8a31, U+8a62, U+8a66, U+8a72, U+8abf, U+8b1d, U+8b58, U+8b70, U+8b80, U+8ca1, U+8ca8, U+8cac, U+8cbc, U+8d70, U+8da3, U+8db3, U+8ddf, U+8f03, U+8f15, U+8f2f, U+8fa6, U+8fce, U+8ffd, U+900f, U+9031, U+9069, U+908a, U+91ab, U+91cc, U+92b7, U+9322, U+932f, U+9375, U+9632, U+963f, U+9644, U+9662, U+9673, U+96a8, U+96c4, U+96d9, U+96e2-96e3, U+96f2, U+9752, U+97d3, U+97ff, U+9805, U+9810, U+986f, U+990a, U+9910, U+9928, U+9ec3, U+9ed1, U+9f8d) ); /* noto-sans-hk-[117]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-117-400-normal.woff2", $range: (U+3e, U+5f, U+7e, U+3000, U+300a-300b, U+3010-3011, U+4e16, U+4e26, U+4e94, U+4e9b, U+4ea4, U+4eca-4ecb, U+4efb, U+4efd, U+4f46, U+4f55, U+4f9b, U+4f9d, U+4fbf, U+505a, U+5065, U+5099, U+50cf, U+50f9, U+512a, U+5143, U+5148, U+514d, U+5152, U+5169, U+5171, U+5177, U+518a, U+5217, U+5225, U+5247, U+5275, U+529f, U+52a9, U+5305, U+5341, U+5357, U+5361, U+5373, U+53bb, U+53c3, U+53c8, U+53d6-53d7, U+53e3, U+53ea, U+53f8, U+5404, U+559c, U+5668, U+56db, U+56e0, U+5712, U+5718, U+578b, U+57fa, U+58eb, U+592a, U+5c0b, U+5c0e, U+5c11, U+5c1a, U+5c55, U+5c71, U+5df1, U+5e2b, U+5e36, U+5e97, U+5eb7, U+5ee3, U+5efa, U+5f35, U+5f37, U+5f88, U+5f9e, U+5fc5, U+606f, U+60a8, U+6232, U+624d, U+6253, U+627e, U+6280, U+62cd, U+6301, U+6307, U+6392, U+6539, U+653e-653f, U+6559, U+6574, U+65c5, U+6613, U+66f8, U+672a, U+6797, U+67e5, U+6a19, U+6a23, U+6b61, U+6bcf, U+6bd4, U+6c11, U+6c42, U+6d41, U+6d77, U+6d88, U+6e05, U+6e2f, U+6eff, U+7136, U+7167, U+71df, U+738b, U+73a9, U+7403, U+7531, U+7537, U+754c, U+7559, U+767d-767e, U+76f4, U+793a, U+795e, U+79c1, U+79d1, U+7a2e, U+7a31, U+7a7a, U+7ae0, U+7ba1, U+7bc0, U+7c21, U+7cfb, U+7d04-7d05, U+7d1a, U+7d44, U+7d66, U+7d71, U+7de8, U+7e3d, U+8001, U+800c, U+805e, U+8072, U+81f3, U+82b1, U+82f1, U+83ef, U+842c, U+8457, U+85a6, U+8655, U+8853, U+88ab, U+88dd, U+88fd, U+897f, U+898f, U+89aa, U+89bd, U+89c0, U+89e3, U+8a02, U+8a3b, U+8a55, U+8a8d, U+8a9e, U+8ad6, U+8b49, U+8b77, U+8b8a, U+8b93, U+8cb7, U+8ce3, U+8cea, U+8cfc, U+8f09, U+8fd1, U+9001, U+901f-9020, U+9054, U+90a3, U+914d, U+91cf, U+9304, U+95b1, U+9650, U+9664, U+969b, U+96b1, U+96c6, U+9700, U+975e, U+97f3, U+98a8, U+98df, U+9999, U+99ac, U+9a57, U+9ebc) ); /* noto-sans-hk-[118]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-118-400-normal.woff2", $range: (U+d, U+2b, U+7c, U+a0, U+a9, U+300c-300d, U+4e09, U+4e3b, U+4e4b, U+4e5f, U+4e86, U+4e8b-4e8c, U+4eab, U+4ed6, U+4ee3, U+4ef6, U+4f1a, U+4f4d, U+4f60, U+4f7f, U+4f86, U+4fdd, U+4fe1, U+5011, U+50b3, U+5149, U+5167, U+5176, U+518d, U+5229, U+524d, U+529b, U+52a0, U+52d9, U+5316-5317, U+5340, U+539f, U+53ca-53cb, U+5408, U+540c-540d, U+544a, U+548c, U+54c1, U+54e1, U+5546, U+554f, U+55ae, U+56de, U+5716, U+5831, U+5834, U+5916, U+5929, U+5973, U+597d, U+5982, U+5b57, U+5b78, U+5b89, U+5b8c, U+5b9a, U+5ba2, U+5bb9, U+5be6, U+5c07-5c08, U+5c0d, U+5c31, U+5de5, U+5df2, U+5e02, U+5e38, U+5e73-5e74, U+5ea6, U+5f0f, U+5f71, U+5f8c, U+5f97, U+5feb, U+6027, U+60c5, U+60f3, U+610f, U+611b, U+611f, U+61c9, U+6210, U+6216, U+6240, U+624b, U+63a5, U+63a8, U+63d0, U+641c, U+6536, U+6578, U+6599, U+65b9, U+660e, U+661f, U+662d, U+66f4, U+670d, U+671f, U+6771, U+679c, U+682a, U+683c, U+689d, U+696d, U+6a02, U+6a5f, U+6b0a, U+6b21, U+6b3e, U+6b64, U+6c23, U+6c34, U+6c92, U+6cbb, U+6cd5, U+6d3b, U+7063, U+7121, U+71b1, U+7247-7248, U+7269, U+7279, U+73fe, U+7406, U+7522, U+7576, U+767b, U+76ee, U+76f8, U+770b, U+771f, U+77e5, U+793e, U+7a0b, U+7acb, U+7ad9, U+7b2c, U+7b49, U+7cbe, U+7d50, U+7d61, U+7d93, U+7dda, U+7f8e, U+8005, U+806f, U+80fd, U+81ea, U+8207, U+8272, U+865f, U+8868, U+8981, U+898b, U+8996, U+8a00, U+8a08, U+8a0a, U+8a18, U+8a2d, U+8a71, U+8aaa, U+8acb, U+8cbb, U+8cc7, U+8d77, U+8d85, U+8def, U+8eab, U+8eca, U+8f49, U+9019-901a, U+9023, U+9032, U+904a-904b, U+904e, U+9053, U+9078, U+9084, U+90e8, U+90fd, U+91cd, U+91d1, U+9577, U+9580, U+9593, U+9762, U+982d, U+984c, U+985e, U+9996, U+9ad4, U+9ad8, U+9ede, U+ff01, U+ff08-ff09, U+ff1f) ); /* noto-sans-hk-[119]-400-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-119-400-normal.woff2", $range: (U+20-22, U+27-2a, U+2c-3b, U+3f, U+41-5d, U+61-7b, U+7d, U+ab, U+ae, U+b2-b3, U+bb, U+bf, U+c9, U+cd, U+d6, U+e0-ef, U+f1-f4, U+f6, U+f9-fa, U+fc-fd, U+101, U+103, U+110-111, U+113, U+12b, U+14d, U+16b, U+1a1, U+1b0, U+1ce, U+300-301, U+1ea1, U+1ea3, U+1ebf, U+1ec7, U+2013-2014, U+2039-203a, U+203c, U+2122, U+3001-3002, U+3113-3114, U+3118, U+311a-3129, U+4e00, U+4e0a-4e0b, U+4e0d, U+4e2d, U+4eba, U+4ee5, U+4f5c, U+500b, U+5165, U+5168, U+516c, U+51fa, U+5206, U+5230, U+52d5, U+53ef-53f0, U+570b, U+5728, U+5730, U+591a, U+5927, U+5b50, U+5bb6, U+5c0f, U+5fc3, U+6211, U+6587, U+65b0, U+65bc, U+65e5, U+662f, U+6642, U+6700, U+6703, U+6708-6709, U+672c, U+6b63, U+70b9-70ba, U+751f, U+7528, U+767c, U+7684, U+7db2, U+884c, U+958b, U+95dc, U+96fb, U+9801, U+ff0c, U+ff1a) diff --git a/src/styles/noto-sans/hk-700-normal.scss b/src/styles/noto-sans/hk-700-normal.scss index 0adc71e154..86e6d7ba71 100644 --- a/src/styles/noto-sans/hk-700-normal.scss +++ b/src/styles/noto-sans/hk-700-normal.scss @@ -1,7 +1,9 @@ +@use "../font"; + $hkFamily: "Noto Sans HK"; /* noto-sans-hk-[0]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-0-700-normal.woff2", @@ -9,7 +11,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[1]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-1-700-normal.woff2", @@ -17,7 +19,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[2]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-2-700-normal.woff2", @@ -25,7 +27,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[3]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-3-700-normal.woff2", @@ -33,7 +35,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[4]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-4-700-normal.woff2", @@ -41,7 +43,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[5]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-5-700-normal.woff2", @@ -49,7 +51,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[6]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-6-700-normal.woff2", @@ -57,7 +59,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[7]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-7-700-normal.woff2", @@ -65,7 +67,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[8]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-8-700-normal.woff2", @@ -73,7 +75,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[9]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-9-700-normal.woff2", @@ -81,7 +83,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[10]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-10-700-normal.woff2", @@ -89,7 +91,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[15]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-15-700-normal.woff2", @@ -97,7 +99,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[16]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-16-700-normal.woff2", @@ -105,7 +107,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[17]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-17-700-normal.woff2", @@ -113,7 +115,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[25]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-25-700-normal.woff2", @@ -121,7 +123,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[26]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-26-700-normal.woff2", @@ -129,7 +131,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[27]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-27-700-normal.woff2", @@ -137,7 +139,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[28]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-28-700-normal.woff2", @@ -145,7 +147,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[29]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-29-700-normal.woff2", @@ -153,7 +155,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[30]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-30-700-normal.woff2", @@ -161,7 +163,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[31]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-31-700-normal.woff2", @@ -169,7 +171,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[32]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-32-700-normal.woff2", @@ -177,7 +179,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[33]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-33-700-normal.woff2", @@ -185,7 +187,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[34]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-34-700-normal.woff2", @@ -193,7 +195,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[35]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-35-700-normal.woff2", @@ -201,7 +203,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[36]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-36-700-normal.woff2", @@ -209,7 +211,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[37]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-37-700-normal.woff2", @@ -217,7 +219,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[38]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-38-700-normal.woff2", @@ -225,7 +227,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[39]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-39-700-normal.woff2", @@ -233,7 +235,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[40]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-40-700-normal.woff2", @@ -241,7 +243,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[41]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-41-700-normal.woff2", @@ -249,7 +251,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[42]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-42-700-normal.woff2", @@ -257,7 +259,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[43]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-43-700-normal.woff2", @@ -265,7 +267,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[44]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-44-700-normal.woff2", @@ -273,7 +275,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[45]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-45-700-normal.woff2", @@ -281,7 +283,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[46]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-46-700-normal.woff2", @@ -289,7 +291,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[47]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-47-700-normal.woff2", @@ -297,7 +299,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[48]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-48-700-normal.woff2", @@ -305,7 +307,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[49]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-49-700-normal.woff2", @@ -313,7 +315,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[50]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-50-700-normal.woff2", @@ -321,7 +323,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[51]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-51-700-normal.woff2", @@ -329,7 +331,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[52]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-52-700-normal.woff2", @@ -337,7 +339,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[53]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-53-700-normal.woff2", @@ -345,7 +347,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[54]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-54-700-normal.woff2", @@ -353,7 +355,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[55]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-55-700-normal.woff2", @@ -361,7 +363,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[56]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-56-700-normal.woff2", @@ -369,7 +371,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[57]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-57-700-normal.woff2", @@ -377,7 +379,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[58]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-58-700-normal.woff2", @@ -385,7 +387,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[59]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-59-700-normal.woff2", @@ -393,7 +395,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[60]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-60-700-normal.woff2", @@ -401,7 +403,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[61]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-61-700-normal.woff2", @@ -409,7 +411,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[62]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-62-700-normal.woff2", @@ -417,7 +419,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[63]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-63-700-normal.woff2", @@ -425,7 +427,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[64]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-64-700-normal.woff2", @@ -433,7 +435,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[65]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-65-700-normal.woff2", @@ -441,7 +443,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[66]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-66-700-normal.woff2", @@ -449,7 +451,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[67]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-67-700-normal.woff2", @@ -457,7 +459,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[68]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-68-700-normal.woff2", @@ -465,7 +467,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[69]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-69-700-normal.woff2", @@ -473,7 +475,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[70]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-70-700-normal.woff2", @@ -481,7 +483,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[71]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-71-700-normal.woff2", @@ -489,7 +491,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[72]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-72-700-normal.woff2", @@ -497,7 +499,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[73]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-73-700-normal.woff2", @@ -505,7 +507,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[74]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-74-700-normal.woff2", @@ -513,7 +515,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[75]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-75-700-normal.woff2", @@ -521,7 +523,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[76]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-76-700-normal.woff2", @@ -529,7 +531,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[77]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-77-700-normal.woff2", @@ -537,7 +539,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[78]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-78-700-normal.woff2", @@ -545,7 +547,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[79]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-79-700-normal.woff2", @@ -553,7 +555,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[80]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-80-700-normal.woff2", @@ -561,7 +563,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[81]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-81-700-normal.woff2", @@ -569,7 +571,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[82]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-82-700-normal.woff2", @@ -577,7 +579,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[83]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-83-700-normal.woff2", @@ -585,7 +587,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[84]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-84-700-normal.woff2", @@ -593,7 +595,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[85]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-85-700-normal.woff2", @@ -601,7 +603,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[86]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-86-700-normal.woff2", @@ -609,7 +611,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[87]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-87-700-normal.woff2", @@ -617,7 +619,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[88]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-88-700-normal.woff2", @@ -625,7 +627,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[89]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-89-700-normal.woff2", @@ -633,7 +635,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[90]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-90-700-normal.woff2", @@ -641,7 +643,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[91]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-91-700-normal.woff2", @@ -649,7 +651,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[92]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-92-700-normal.woff2", @@ -657,7 +659,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[93]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-93-700-normal.woff2", @@ -665,7 +667,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[98]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-98-700-normal.woff2", @@ -673,7 +675,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[99]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-99-700-normal.woff2", @@ -681,7 +683,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[100]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-100-700-normal.woff2", @@ -689,7 +691,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[101]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-101-700-normal.woff2", @@ -697,7 +699,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[102]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-102-700-normal.woff2", @@ -705,7 +707,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[103]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-103-700-normal.woff2", @@ -713,7 +715,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[104]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-104-700-normal.woff2", @@ -721,7 +723,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[105]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-105-700-normal.woff2", @@ -729,7 +731,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[106]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-106-700-normal.woff2", @@ -737,7 +739,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[107]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-107-700-normal.woff2", @@ -745,7 +747,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[108]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-108-700-normal.woff2", @@ -753,7 +755,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[109]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-109-700-normal.woff2", @@ -761,7 +763,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[110]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-110-700-normal.woff2", @@ -769,7 +771,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[111]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-111-700-normal.woff2", @@ -777,7 +779,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[112]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-112-700-normal.woff2", @@ -785,7 +787,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[113]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-113-700-normal.woff2", @@ -793,7 +795,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[114]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-114-700-normal.woff2", @@ -801,7 +803,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[115]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-115-700-normal.woff2", @@ -809,7 +811,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[116]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-116-700-normal.woff2", @@ -817,7 +819,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[117]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-117-700-normal.woff2", @@ -825,7 +827,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[118]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-118-700-normal.woff2", @@ -833,7 +835,7 @@ $hkFamily: "Noto Sans HK"; ); /* noto-sans-hk-[119]-700-normal */ -@include fontFace( +@include font.face( $family: $hkFamily, $weight: 700, $url: "~@fontsource/noto-sans-hk/files/noto-sans-hk-119-700-normal.woff2", diff --git a/src/styles/noto-sans/index.scss b/src/styles/noto-sans/index.scss index 560a38d441..e9037522c3 100644 --- a/src/styles/noto-sans/index.scss +++ b/src/styles/noto-sans/index.scss @@ -1,33 +1,18 @@ -// Map font weight numbers to names -$weight-names: (100: "Thin", 200: "ExtraLight", 300: "Light", 400: "Regular", 500: "Medium", 600: "SemiBold", 700: "Bold", 800: "ExtraBold", 900: "Black"); - -// Mixin to help create the Noto Sans font-faces -@mixin fontFace($family: "Noto Sans", $style: normal, $weight: 400, $url: null, $range: null) { - @font-face { - font-family: $family; - font-style: $style; - font-display: swap; - font-weight: $weight; - src: local($family), local("#{$family} #{map-get($weight-names, $weight)}"), url($url) format("woff2"); - unicode-range: $range; - } -} - // Standard character set -@import "./base-400-normal"; -@import "./base-700-normal"; +@use "./base-400-normal"; +@use "./base-700-normal"; // HK character set -@import "./hk-400-normal"; -@import "./hk-700-normal"; +@use "./hk-400-normal"; +@use "./hk-700-normal"; // JP character set -@import "./jp-400-normal"; -@import "./jp-700-normal"; +@use "./jp-400-normal"; +@use "./jp-700-normal"; // KR character set -@import "./kr-400-normal"; -@import "./kr-700-normal"; +@use "./kr-400-normal"; +@use "./kr-700-normal"; // SC character set -@import "./sc-400-normal"; -@import "./sc-700-normal"; +@use "./sc-400-normal"; +@use "./sc-700-normal"; // TC character set -@import "./tc-400-normal"; -@import "./tc-700-normal"; +@use "./tc-400-normal"; +@use "./tc-700-normal"; diff --git a/src/styles/noto-sans/jp-400-normal.scss b/src/styles/noto-sans/jp-400-normal.scss index f24cfebd02..ee7378d0cd 100644 --- a/src/styles/noto-sans/jp-400-normal.scss +++ b/src/styles/noto-sans/jp-400-normal.scss @@ -1,840 +1,842 @@ +@use "../font"; + $jpFamily: "Noto Sans JP"; /* noto-sans-jp-[0]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-0-400-normal.woff2", $range: (U+25ee8, U+25f23, U+25f5c, U+25fd4, U+25fe0, U+25ffb, U+2600c, U+26017, U+26060, U+260ed, U+26222, U+2626a, U+26270, U+26286, U+2634c, U+26402, U+2667e, U+266b0, U+2671d, U+268dd, U+268ea, U+26951, U+2696f, U+26999, U+269dd, U+26a1e, U+26a58, U+26a8c, U+26ab7, U+26aff, U+26c29, U+26c73, U+26c9e, U+26cdd, U+26e40, U+26e65, U+26f94, U+26ff6-26ff8, U+270f4, U+2710d, U+27139, U+273da-273db, U+273fe, U+27410, U+27449, U+27614-27615, U+27631, U+27684, U+27693, U+2770e, U+27723, U+27752, U+278b2, U+27985, U+279b4, U+27a84, U+27bb3, U+27bbe, U+27bc7, U+27c3c, U+27cb8, U+27d73, U+27da0, U+27e10, U+27eaf, U+27fb7, U+2808a, U+280bb, U+28277, U+28282, U+282f3, U+283cd, U+2840c, U+28455, U+284dc, U+2856b, U+285c8-285c9, U+286d7, U+286fa, U+28946, U+28949, U+2896b, U+28987-28988, U+289ba-289bb, U+28a1e, U+28a29, U+28a43, U+28a71, U+28a99, U+28acd, U+28add, U+28ae4, U+28bc1, U+28bef, U+28cdd, U+28d10, U+28d71, U+28dfb, U+28e0f, U+28e17, U+28e1f, U+28e36, U+28e89, U+28eeb, U+28ef6, U+28f32, U+28ff8, U+292a0, U+292b1, U+29490, U+295cf, U+2967f, U+296f0, U+29719, U+29750, U+29810, U+298c6, U+29a72, U+29d4b, U+29ddb, U+29e15, U+29e3d, U+29e49, U+29e8a, U+29ec4, U+29edb, U+29ee9, U+29fce, U+29fd7, U+2a01a, U+2a02f, U+2a082, U+2a0f9, U+2a190, U+2a2b2, U+2a38c, U+2a437, U+2a5f1, U+2a602, U+2a61a, U+2a6b2, U+2a9e6, U+2b746, U+2b751, U+2b753, U+2b75a, U+2b75c, U+2b765, U+2b776-2b777, U+2b77c, U+2b782, U+2b789, U+2b78b, U+2b78e, U+2b794, U+2b7ac, U+2b7af, U+2b7bd, U+2b7c9, U+2b7cf, U+2b7d2, U+2b7d8, U+2b7f0, U+2b80d, U+2b817, U+2b81a, U+2d544, U+2e278, U+2e569, U+2e6ea, U+2f804, U+2f80f, U+2f815, U+2f818, U+2f81a, U+2f822, U+2f828, U+2f82c, U+2f833, U+2f83f, U+2f846, U+2f852, U+2f862, U+2f86d, U+2f873, U+2f877, U+2f884, U+2f899-2f89a, U+2f8a6, U+2f8ac, U+2f8b2, U+2f8b6, U+2f8d3, U+2f8db-2f8dc, U+2f8e1, U+2f8e5, U+2f8ea, U+2f8ed, U+2f8fc, U+2f903, U+2f90b, U+2f90f, U+2f91a, U+2f920-2f921, U+2f945, U+2f947, U+2f96c, U+2f995, U+2f9d0, U+2f9de-2f9df, U+2f9f4) ); /* noto-sans-jp-[1]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-1-400-normal.woff2", $range: (U+1f235-1f23b, U+1f240-1f248, U+1f250-1f251, U+2000b, U+20089-2008a, U+200a2, U+200a4, U+200b0, U+200f5, U+20158, U+201a2, U+20213, U+2032b, U+20371, U+20381, U+203f9, U+2044a, U+20509, U+2053f, U+205b1, U+205d6, U+20611, U+20628, U+206ec, U+2074f, U+207c8, U+20807, U+2083a, U+208b9, U+2090e, U+2097c, U+20984, U+2099d, U+20a64, U+20ad3, U+20b1d, U+20b9f, U+20bb7, U+20d45, U+20d58, U+20de1, U+20e64, U+20e6d, U+20e95, U+20f5f, U+21201, U+2123d, U+21255, U+21274, U+2127b, U+212d7, U+212e4, U+212fd, U+2131b, U+21336, U+21344, U+213c4, U+2146d-2146e, U+215d7, U+21647, U+216b4, U+21706, U+21742, U+218bd, U+219c3, U+21a1a, U+21c56, U+21d2d, U+21d45, U+21d62, U+21d78, U+21d92, U+21d9c, U+21da1, U+21db7, U+21de0, U+21e33-21e34, U+21f1e, U+21f76, U+21ffa, U+2217b, U+22218, U+2231e, U+223ad, U+22609, U+226f3, U+2285b, U+228ab, U+2298f, U+22ab8, U+22b46, U+22b4f-22b50, U+22ba6, U+22c1d, U+22c24, U+22de1, U+22e42, U+22feb, U+231b6, U+231c3-231c4, U+231f5, U+23372, U+233cc, U+233d0, U+233d2-233d3, U+233d5, U+233da, U+233df, U+233e4, U+233fe, U+2344a-2344b, U+23451, U+23465, U+234e4, U+2355a, U+23594, U+235c4, U+23638-2363a, U+23647, U+2370c, U+2371c, U+2373f, U+23763-23764, U+237e7, U+237f1, U+237ff, U+23824, U+2383d, U+23a98, U+23c7f, U+23cbe, U+23cfe, U+23d00, U+23d0e, U+23d40, U+23dd3, U+23df9-23dfa, U+23f7e, U+2404b, U+24096, U+24103, U+241c6, U+241fe, U+242ee, U+243bc, U+243d0, U+24629, U+246a5, U+247f1, U+24896, U+248e9, U+24a4d, U+24b56, U+24b6f, U+24c16, U+24d14, U+24e04, U+24e0e, U+24e37, U+24e6a, U+24e8b, U+24ff2, U+2504a, U+25055, U+25122, U+251a9, U+251cd, U+251e5, U+2521e, U+2524c, U+2542e, U+2548e, U+254d9, U+2550e, U+255a7, U+2567f, U+25771, U+257a9, U+257b4, U+25874, U+259c4, U+259cc, U+259d4, U+25ad7, U+25ae3-25ae4, U+25af1, U+25bb2, U+25c4b, U+25c64, U+25da1, U+25e2e, U+25e56, U+25e62, U+25e65, U+25ec2, U+25ed8) ); /* noto-sans-jp-[2]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-2-400-normal.woff2", $range: (U+ffd7, U+ffda-ffdc, U+ffe0-ffe2, U+ffe4, U+ffe6, U+ffe8-ffee, U+1f100-1f10c, U+1f110-1f16c, U+1f170-1f1ac, U+1f200-1f202, U+1f210-1f234) ); /* noto-sans-jp-[3]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-3-400-normal.woff2", $range: (U+fa10, U+fa12-fa6d, U+fb00-fb04, U+fe10-fe19, U+fe30-fe42, U+fe44-fe52, U+fe54-fe66, U+fe68-fe6b, U+ff02, U+ff04, U+ff07, U+ff51, U+ff5b, U+ff5d, U+ff5f-ff60, U+ff66, U+ff69, U+ff87, U+ffa1-ffbe, U+ffc2-ffc7, U+ffca-ffcf, U+ffd2-ffd6) ); /* noto-sans-jp-[4]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-4-400-normal.woff2", $range: (U+f92d-f959, U+f95b-f9f2, U+f9f4-fa0b, U+fa0e-fa0f) ); /* noto-sans-jp-[5]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-5-400-normal.woff2", $range: (U+9e8b-9e8c, U+9e8e-9e8f, U+9e91-9e92, U+9e95-9e96, U+9e98, U+9e9b, U+9e9d-9e9e, U+9ea4-9ea5, U+9ea8-9eaa, U+9eac-9eb0, U+9eb3-9eb5, U+9eb8, U+9ebc-9ebf, U+9ec3, U+9ec6, U+9ec8, U+9ecb-9ecd, U+9ecf-9ed1, U+9ed4-9ed5, U+9ed8, U+9edb-9ee0, U+9ee4-9ee5, U+9ee7-9ee8, U+9eec-9ef2, U+9ef4-9ef9, U+9efb-9eff, U+9f02-9f03, U+9f07-9f09, U+9f0e-9f12, U+9f14-9f17, U+9f19-9f1b, U+9f1f-9f22, U+9f26, U+9f2a-9f2c, U+9f2f, U+9f31-9f32, U+9f34, U+9f37, U+9f39-9f3a, U+9f3c-9f3f, U+9f41, U+9f43-9f47, U+9f4a, U+9f4e-9f50, U+9f52-9f58, U+9f5a, U+9f5d-9f61, U+9f63, U+9f66-9f6a, U+9f6c-9f73, U+9f75-9f77, U+9f7a, U+9f7d, U+9f7f, U+9f8f-9f92, U+9f94-9f97, U+9f99, U+9f9c-9fa3, U+9fa5, U+9fb4, U+9fbc-9fc2, U+9fc4, U+9fc6, U+9fcc, U+f900-f92c) ); /* noto-sans-jp-[6]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-6-400-normal.woff2", $range: (U+9c3e, U+9c41, U+9c43-9c4a, U+9c4e-9c50, U+9c52-9c54, U+9c56, U+9c58, U+9c5a-9c61, U+9c63, U+9c65, U+9c67-9c6b, U+9c6d-9c6e, U+9c70, U+9c72, U+9c75-9c78, U+9c7a-9c7c, U+9ce6-9ce7, U+9ceb-9cec, U+9cf0, U+9cf2, U+9cf6-9cf7, U+9cf9, U+9d02-9d03, U+9d06-9d09, U+9d0b, U+9d0e, U+9d11-9d12, U+9d15, U+9d17-9d18, U+9d1b-9d1f, U+9d23, U+9d26, U+9d2a-9d2c, U+9d2f-9d30, U+9d32-9d34, U+9d3a, U+9d3c-9d3f, U+9d41-9d48, U+9d4a, U+9d50-9d54, U+9d59, U+9d5d-9d65, U+9d69-9d6c, U+9d6f-9d70, U+9d72-9d73, U+9d76-9d77, U+9d7a-9d7c, U+9d7e, U+9d83-9d84, U+9d86-9d87, U+9d89-9d8a, U+9d8d-9d8e, U+9d92-9d93, U+9d95-9d9a, U+9da1, U+9da4, U+9da9-9dac, U+9dae, U+9db1-9db2, U+9db5, U+9db8-9dbd, U+9dbf-9dc4, U+9dc6-9dc7, U+9dc9-9dca, U+9dcf, U+9dd3-9dd7, U+9dd9-9dda, U+9dde-9de0, U+9de3, U+9de5-9de7, U+9de9, U+9deb, U+9ded-9df0, U+9df3-9df4, U+9df8, U+9dfd-9dfe, U+9e02, U+9e07, U+9e0a, U+9e0d-9e0e, U+9e10-9e12, U+9e15-9e16, U+9e19-9e1f, U+9e75, U+9e79-9e7d, U+9e80-9e85, U+9e87-9e88) ); /* noto-sans-jp-[7]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-7-400-normal.woff2", $range: (U+9ae5-9ae7, U+9ae9, U+9aeb-9aec, U+9aee-9aef, U+9af1-9af5, U+9af7, U+9af9-9afb, U+9afd, U+9aff-9b06, U+9b08-9b09, U+9b0b-9b0e, U+9b10, U+9b12, U+9b16, U+9b18-9b1d, U+9b1f-9b20, U+9b22-9b23, U+9b25-9b2f, U+9b32-9b35, U+9b37, U+9b39-9b3b, U+9b3d, U+9b43-9b44, U+9b48, U+9b4b-9b4f, U+9b51, U+9b55-9b58, U+9b5b, U+9b5e, U+9b61, U+9b63, U+9b65-9b66, U+9b68, U+9b6a-9b6f, U+9b72-9b79, U+9b7f-9b80, U+9b83-9b87, U+9b89-9b8b, U+9b8d, U+9b8f-9b94, U+9b96-9b97, U+9b9a, U+9b9d-9ba0, U+9ba6-9ba7, U+9ba9-9baa, U+9bac, U+9bb0-9bb2, U+9bb4, U+9bb7-9bb9, U+9bbb-9bbc, U+9bbe-9bc1, U+9bc6-9bc8, U+9bca, U+9bce-9bd2, U+9bd4, U+9bd7-9bd8, U+9bdd, U+9bdf, U+9be1-9be5, U+9be7, U+9bea-9beb, U+9bee-9bf3, U+9bf5, U+9bf7-9bfa, U+9bfd, U+9bff-9c00, U+9c02, U+9c04, U+9c06, U+9c08-9c0d, U+9c0f-9c16, U+9c18-9c1e, U+9c21-9c2a, U+9c2d-9c32, U+9c35-9c37, U+9c39-9c3a, U+9c3d) ); /* noto-sans-jp-[8]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-8-400-normal.woff2", $range: (U+98eb, U+98ed-98ee, U+98f0-98f1, U+98f3, U+98f6, U+9902, U+9907-9909, U+9911-9912, U+9914-9918, U+991a-9922, U+9924, U+9926-9927, U+992b-992c, U+992e, U+9931-9935, U+9939-993e, U+9940-9942, U+9945-9949, U+994b-994e, U+9950-9952, U+9954-9955, U+9958-9959, U+995b-995c, U+995e-9960, U+9963, U+9997-9998, U+999b, U+999d-999f, U+99a3, U+99a5-99a6, U+99a8, U+99ad-99ae, U+99b0-99b2, U+99b5, U+99b9-99ba, U+99bc-99bd, U+99bf, U+99c1, U+99c3, U+99c8-99c9, U+99d1, U+99d3-99d5, U+99d8-99df, U+99e1-99e2, U+99e7, U+99ea-99ee, U+99f0-99f2, U+99f4-99f5, U+99f8-99f9, U+99fb-99fe, U+9a01-9a05, U+9a08, U+9a0a-9a0c, U+9a0f-9a11, U+9a16, U+9a1a, U+9a1e, U+9a20, U+9a22-9a24, U+9a27, U+9a2b, U+9a2d-9a2e, U+9a31, U+9a33, U+9a35-9a38, U+9a3e, U+9a40-9a45, U+9a47, U+9a4a-9a4e, U+9a51-9a52, U+9a54-9a58, U+9a5b, U+9a5d, U+9a5f, U+9a62, U+9a64-9a65, U+9a69-9a6c, U+9aaa, U+9aac-9ab0, U+9ab2, U+9ab4-9ab7, U+9ab9, U+9abb-9ac1, U+9ac3, U+9ac6, U+9ac8, U+9ace-9ad3, U+9ad5-9ad7, U+9adb-9adc, U+9ade-9ae0, U+9ae2-9ae4) ); /* noto-sans-jp-[9]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-9-400-normal.woff2", $range: (U+971d, U+9721-9724, U+9728, U+972a, U+9730-9731, U+9733, U+9736, U+9738-9739, U+973b, U+973d-973e, U+9741-9744, U+9746-974a, U+974d-974f, U+9751, U+9755, U+9757-9758, U+975a-975c, U+9760-9761, U+9763-9764, U+9766-9768, U+976a-976b, U+976e, U+9771, U+9773, U+9776-977d, U+977f-9781, U+9785-9786, U+9789, U+978b, U+978f-9790, U+9795-9797, U+9799-979a, U+979c, U+979e-97a0, U+97a2-97a3, U+97a6, U+97a8, U+97ab-97ac, U+97ae, U+97b1-97b6, U+97b8-97ba, U+97bc, U+97be-97bf, U+97c1, U+97c3-97ce, U+97d0-97d1, U+97d4, U+97d7-97d9, U+97db-97de, U+97e0-97e1, U+97e4, U+97e6, U+97ed-97ef, U+97f1-97f2, U+97f4-97f8, U+97fa, U+9804, U+9807, U+980a, U+980c-980f, U+9814, U+9816-9817, U+9819-981a, U+981c, U+981e, U+9820-9821, U+9823-9826, U+982b, U+982e-9830, U+9832-9835, U+9837, U+9839, U+983d-983e, U+9844, U+9846-9847, U+984a-984b, U+984f, U+9851-9853, U+9856-9857, U+9859-985b, U+9862-9863, U+9865-9866, U+986a-986c, U+986f-9871, U+9873-9875, U+98aa-98ab, U+98ad-98ae, U+98b0-98b1, U+98b4, U+98b6-98b8, U+98ba-98bc, U+98bf, U+98c2-98c8, U+98cb-98cc, U+98ce, U+98dc, U+98de, U+98e0-98e1, U+98e3, U+98e5-98e7, U+98e9-98ea) ); /* noto-sans-jp-[10]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-10-400-normal.woff2", $range: (U+944a, U+944c, U+9452-9453, U+9455, U+9459-945c, U+945e-9463, U+9468, U+946a-946b, U+946d-9472, U+9475, U+9477, U+947c-947f, U+9481, U+9483-9485, U+9578-9579, U+957e-957f, U+9582, U+9584, U+9586-9588, U+958a, U+958c-958f, U+9592, U+9594, U+9596, U+9598-9599, U+959d-95a1, U+95a4, U+95a6-95a9, U+95ab-95ad, U+95b1, U+95b4, U+95b6, U+95b9-95bf, U+95c3, U+95c6, U+95c8-95cd, U+95d0-95d6, U+95d9-95da, U+95dc-95e2, U+95e4-95e6, U+95e8, U+961d-961e, U+9621-9622, U+9624-9626, U+9628, U+962c, U+962e-962f, U+9631, U+9633-9634, U+9637-963a, U+963c-963d, U+9641-9642, U+964b-964c, U+964f, U+9652, U+9654, U+9656-9658, U+965c-965f, U+9661, U+9666, U+966a, U+966c, U+966e, U+9672, U+9674, U+9677, U+967b-967c, U+967e-967f, U+9681-9684, U+9689, U+968b, U+968d, U+9691, U+9695-9698, U+969a, U+969d, U+969f, U+96a4-96aa, U+96ae-96b4, U+96b6, U+96b8-96bb, U+96bd, U+96c1, U+96c9-96cb, U+96cd-96ce, U+96d2, U+96d5-96d6, U+96d8-96da, U+96dc-96df, U+96e9, U+96ef, U+96f1, U+96f9-96fa, U+9702-9706, U+9708-9709, U+970d-970f, U+9711, U+9713-9714, U+9716, U+9719-971b) ); /* noto-sans-jp-[11]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-11-400-normal.woff2", $range: (U+92bc-92bd, U+92bf-92c3, U+92c5-92c8, U+92cb-92d0, U+92d2-92d3, U+92d5, U+92d7-92d9, U+92dc-92dd, U+92df-92e1, U+92e3-92e5, U+92e7-92ea, U+92ec, U+92ee, U+92f0, U+92f2, U+92f7-92fb, U+92ff-9300, U+9302, U+9304, U+9308, U+930d, U+930f-9311, U+9314-9315, U+9318-931a, U+931c-931f, U+9321-9325, U+9327-932b, U+932e, U+9333-9337, U+933a-933b, U+9344, U+9347-934a, U+934d, U+9350-9352, U+9354-9358, U+935a, U+935c, U+935e, U+9360, U+9364-9365, U+9367, U+9369-936d, U+936f-9371, U+9373-9374, U+9376, U+937a, U+937d-9382, U+9388, U+938a-938b, U+938d, U+938f, U+9392, U+9394-9395, U+9397-9398, U+939a-939b, U+939e, U+93a1, U+93a3-93a4, U+93a6, U+93a8-93a9, U+93ab-93ad, U+93b0, U+93b4-93b6, U+93b9-93bb, U+93c1, U+93c3-93cd, U+93d0-93d1, U+93d3, U+93d6-93d9, U+93dc-93df, U+93e2, U+93e4-93e8, U+93f1, U+93f5, U+93f7-93fb, U+93fd, U+9401-9404, U+9407-9409, U+940d-9410, U+9413-9417, U+9419-941a, U+941f, U+9421, U+942b, U+942e-942f, U+9431-9434, U+9436, U+9438, U+943a-943b, U+943d, U+943f, U+9441, U+9443-9445, U+9448) ); /* noto-sans-jp-[12]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-12-400-normal.woff2", $range: (U+9143, U+9146-914c, U+914f, U+9153, U+9156-915b, U+9161, U+9163-9165, U+9167, U+9169, U+916d, U+9172-9174, U+9179-917b, U+9181-9183, U+9185-9187, U+9189-918b, U+918e, U+9191, U+9193-9195, U+9197-9198, U+919e, U+91a1-91a2, U+91a6, U+91a8, U+91aa-91b6, U+91ba-91bd, U+91bf-91c6, U+91c9, U+91cb, U+91d0, U+91d3-91d4, U+91d6-91d7, U+91d9-91db, U+91de-91df, U+91e1, U+91e4-91e6, U+91e9-91ea, U+91ec-91f1, U+91f5-91f7, U+91f9, U+91fb-91fd, U+91ff-9201, U+9204-9207, U+9209-920a, U+920c, U+920e, U+9210-9218, U+921c-921e, U+9223-9226, U+9228-9229, U+922c, U+922e-9230, U+9233, U+9235-923a, U+923c, U+923e-9240, U+9242-9243, U+9245-924b, U+924d-9251, U+9256-925a, U+925c-925e, U+9260-9261, U+9264-9269, U+926e-9270, U+9275-9279, U+927b-927f, U+9288-928a, U+928d-928e, U+9291-9293, U+9295-9297, U+9299, U+929b-929c, U+929f-92a0, U+92a4-92a5, U+92a7-92a8, U+92ab, U+92af, U+92b2-92b3, U+92b6-92bb) ); /* noto-sans-jp-[13]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-13-400-normal.woff2", $range: (U+8f52-8f55, U+8f57-8f58, U+8f5c-8f5e, U+8f61-8f66, U+8f9c-8f9d, U+8f9f-8fa2, U+8fa4-8fa8, U+8fad-8faf, U+8fb4-8fb8, U+8fbe, U+8fc0-8fc2, U+8fc6, U+8fc8, U+8fca-8fcb, U+8fcd, U+8fd0, U+8fd2-8fd3, U+8fd5, U+8fda, U+8fe0, U+8fe2-8fe5, U+8fe8-8fea, U+8fed-8fef, U+8ff1, U+8ff4-8ff6, U+8ff8-8ffb, U+8ffe, U+9002, U+9004-9005, U+9008, U+900b-900e, U+9011, U+9013, U+9015-9016, U+9018, U+901b, U+901e, U+9021, U+9027-902a, U+902c-902d, U+902f, U+9033-9037, U+9039, U+903c, U+903e-903f, U+9041, U+9043-9044, U+9049, U+904c, U+904f-9052, U+9056, U+9058, U+905b-905e, U+9062, U+9066-9068, U+906c, U+906f-9070, U+9072, U+9074, U+9076, U+9079, U+9080-9083, U+9085, U+9087-9088, U+908b-908c, U+908e-9090, U+9095, U+9097-9099, U+909b, U+90a0-90a2, U+90a5, U+90a8, U+90af-90b6, U+90bd-90be, U+90c3-90c5, U+90c7-90c9, U+90cc, U+90d2, U+90d5, U+90d7-90d9, U+90db-90df, U+90e2, U+90e4-90e5, U+90eb, U+90ef-90f0, U+90f2, U+90f4, U+90f6, U+90fe-9100, U+9102, U+9104-9106, U+9108, U+910d, U+9110, U+9112, U+9114-911a, U+911c, U+911e, U+9120, U+9122-9123, U+9125, U+9127, U+9129, U+912d-9132, U+9134, U+9136-9137, U+9139-913a, U+913c-913d) ); /* noto-sans-jp-[14]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-14-400-normal.woff2", $range: (U+8dc0, U+8dc2, U+8dc5-8dc8, U+8dca-8dcc, U+8dce-8dcf, U+8dd1, U+8dd4-8dd7, U+8dd9-8ddb, U+8ddf, U+8de3-8de5, U+8de7, U+8dea-8dec, U+8df0-8df2, U+8df4, U+8dfc-8dfd, U+8dff, U+8e01, U+8e04-8e06, U+8e08-8e09, U+8e0b-8e0c, U+8e10-8e11, U+8e14, U+8e16, U+8e1d-8e23, U+8e26-8e27, U+8e30-8e31, U+8e33-8e39, U+8e3d, U+8e40-8e42, U+8e44, U+8e47-8e50, U+8e54-8e55, U+8e59, U+8e5b-8e64, U+8e69, U+8e6c-8e6d, U+8e6f-8e72, U+8e75-8e77, U+8e79-8e7c, U+8e81-8e85, U+8e89, U+8e8b, U+8e90-8e95, U+8e98-8e9b, U+8e9d-8e9e, U+8ea1-8ea2, U+8ea7, U+8ea9-8eaa, U+8eac-8eb1, U+8eb3, U+8eb5-8eb6, U+8eba-8ebb, U+8ebe, U+8ec0-8ec1, U+8ec3-8ec8, U+8ecb, U+8ecf, U+8ed1, U+8ed4, U+8edb-8edc, U+8ee3, U+8ee8, U+8eeb, U+8eed-8eee, U+8ef0-8ef1, U+8ef7, U+8ef9-8efc, U+8efe, U+8f00, U+8f02, U+8f05, U+8f07-8f08, U+8f0a, U+8f0f-8f10, U+8f12-8f13, U+8f15-8f19, U+8f1b-8f1c, U+8f1e-8f21, U+8f23, U+8f25-8f28, U+8f2b-8f2f, U+8f33-8f37, U+8f39-8f3b, U+8f3e, U+8f40-8f43, U+8f45-8f47, U+8f49-8f4a, U+8f4c-8f4f, U+8f51) ); /* noto-sans-jp-[15]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-15-400-normal.woff2", $range: (U+8b2d, U+8b30, U+8b37, U+8b3c, U+8b3e, U+8b41-8b46, U+8b48-8b49, U+8b4c-8b4f, U+8b51-8b54, U+8b56, U+8b59, U+8b5b, U+8b5e-8b5f, U+8b63, U+8b69, U+8b6b-8b6d, U+8b6f, U+8b71, U+8b74, U+8b76, U+8b78-8b79, U+8b7c-8b81, U+8b84-8b85, U+8b8a-8b8f, U+8b92-8b96, U+8b99-8b9a, U+8b9c-8ba0, U+8c38-8c3a, U+8c3d-8c3f, U+8c41, U+8c45, U+8c47-8c49, U+8c4b-8c4c, U+8c4e-8c51, U+8c53-8c55, U+8c57-8c59, U+8c5b, U+8c5d, U+8c62-8c64, U+8c66, U+8c68-8c69, U+8c6b-8c6d, U+8c73, U+8c75-8c76, U+8c78, U+8c7a-8c7c, U+8c7e, U+8c82, U+8c85-8c87, U+8c89-8c8b, U+8c8d-8c8e, U+8c90, U+8c92-8c94, U+8c98-8c99, U+8c9b-8c9c, U+8c9f, U+8ca4, U+8cad-8cae, U+8cb2-8cb3, U+8cb6, U+8cb9-8cba, U+8cbd, U+8cc1-8cc2, U+8cc4-8cc6, U+8cc8-8cc9, U+8ccb, U+8ccd-8ccf, U+8cd2, U+8cd5-8cd6, U+8cd9-8cda, U+8cdd, U+8ce1, U+8ce3-8ce4, U+8ce6, U+8ce8, U+8cec, U+8cef-8cf2, U+8cf4-8cf5, U+8cf7-8cf8, U+8cfa-8cfb, U+8cfd-8cff, U+8d01, U+8d03-8d04, U+8d07, U+8d09-8d0b, U+8d0d-8d10, U+8d12-8d14, U+8d16-8d17, U+8d1b-8d1d, U+8d65, U+8d67, U+8d69, U+8d6b-8d6e, U+8d71, U+8d73, U+8d76, U+8d7f, U+8d81-8d82, U+8d84, U+8d88, U+8d8d, U+8d90-8d91, U+8d95, U+8d99, U+8d9e-8da0, U+8da6, U+8da8, U+8dab-8dac, U+8daf, U+8db2, U+8db5, U+8db7, U+8db9-8dbc, U+8dbe) ); /* noto-sans-jp-[16]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-16-400-normal.woff2", $range: (U+8973-8975, U+8977, U+897a-897e, U+8980, U+8983, U+8988-898a, U+898d, U+8990, U+8993-8995, U+8998, U+899b-899c, U+899f-89a1, U+89a5-89a6, U+89a9, U+89ac, U+89af-89b0, U+89b2, U+89b4-89b7, U+89ba, U+89bc-89bd, U+89bf-89c1, U+89d4-89d8, U+89da, U+89dc-89dd, U+89e5, U+89e7, U+89e9, U+89eb, U+89ed, U+89f1, U+89f3-89f4, U+89f6, U+89f8-89f9, U+89fd, U+89ff, U+8a01, U+8a04-8a05, U+8a07, U+8a0c, U+8a0f-8a12, U+8a14-8a16, U+8a1b, U+8a1d-8a1e, U+8a20-8a22, U+8a24-8a26, U+8a2b-8a2c, U+8a2f, U+8a35-8a37, U+8a3b, U+8a3d-8a3e, U+8a40-8a41, U+8a43, U+8a45-8a49, U+8a4d-8a4e, U+8a51-8a54, U+8a56-8a58, U+8a5b-8a5d, U+8a61-8a62, U+8a65, U+8a67, U+8a6c-8a6d, U+8a75-8a77, U+8a79-8a7c, U+8a7e-8a80, U+8a82-8a86, U+8a8b, U+8a8f-8a92, U+8a96-8a97, U+8a99-8a9a, U+8a9f, U+8aa1, U+8aa3, U+8aa5-8aaa, U+8aae-8aaf, U+8ab3, U+8ab6-8ab7, U+8abb-8abc, U+8abe, U+8ac2-8ac4, U+8ac6, U+8ac8-8aca, U+8acc-8acd, U+8ad0-8ad1, U+8ad3-8ad5, U+8ad7, U+8ada-8ae2, U+8ae4, U+8ae7, U+8aeb-8aec, U+8aee, U+8af0-8af1, U+8af3-8af7, U+8afa, U+8afc, U+8aff, U+8b01-8b02, U+8b04-8b07, U+8b0a-8b0d, U+8b0f-8b11, U+8b14, U+8b16, U+8b1a, U+8b1c, U+8b1e-8b20, U+8b26, U+8b28, U+8b2b-8b2c) ); /* noto-sans-jp-[17]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-17-400-normal.woff2", $range: (U+87e2-87e6, U+87ea-87ed, U+87ef, U+87f1, U+87f3, U+87f5-87f8, U+87fa-87fb, U+87fe-87ff, U+8801, U+8803, U+8805-8807, U+8809-880b, U+880d-8816, U+8818-881c, U+881e-881f, U+8821-8822, U+8827-8828, U+882d-882e, U+8830-8832, U+8835-8836, U+8839-883c, U+8841-8845, U+8848-884b, U+884d-884e, U+8851-8852, U+8855-8856, U+8858-885a, U+885c, U+885e-8860, U+8862, U+8864, U+8869, U+886b, U+886e-886f, U+8871-8872, U+8875, U+8877, U+8879, U+887b, U+887d-887e, U+8880-8882, U+8888, U+888d, U+8892, U+8897-889c, U+889e-88a0, U+88a2, U+88a4, U+88a8, U+88aa, U+88ae, U+88b0-88b1, U+88b5, U+88b7, U+88ba, U+88bc-88c0, U+88c3-88c4, U+88c6, U+88ca-88ce, U+88d1-88d4, U+88d8-88d9, U+88db, U+88dd-88e1, U+88e7-88e8, U+88ef-88f2, U+88f4-88f5, U+88f7, U+88f9, U+88fc, U+8901-8902, U+8904, U+8906, U+890a, U+890c-890f, U+8913, U+8915-8916, U+8918-891a, U+891c-891e, U+8920, U+8925-8928, U+892a-892b, U+8930-8932, U+8935-893b, U+893e, U+8940-8946, U+8949, U+894c-894d, U+894f, U+8952, U+8956-8957, U+895a-895c, U+895e, U+8960-8964, U+8966, U+896a-896b, U+896d-8970) ); /* noto-sans-jp-[18]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-18-400-normal.woff2", $range: (U+8655-8659, U+865b, U+865d-8664, U+8667, U+8669, U+866c, U+866f, U+8671, U+8675-8677, U+867a-867b, U+867d, U+8687-8689, U+868b-868d, U+8691, U+8693, U+8695-8696, U+8698, U+869a, U+869c-869d, U+86a1, U+86a3-86a4, U+86a6-86ab, U+86ad, U+86af-86b1, U+86b3-86b9, U+86bf-86c1, U+86c3-86c6, U+86c9, U+86cb, U+86ce, U+86d1-86d2, U+86d4-86d5, U+86d7, U+86da, U+86dc, U+86de-86e0, U+86e3-86e7, U+86e9, U+86ec-86ed, U+86ef, U+86f8-86fe, U+8700, U+8703-870b, U+870d-8714, U+8719-871a, U+871e-871f, U+8721-8723, U+8725, U+8728-8729, U+872e-872f, U+8731-8732, U+8734, U+8737, U+8739-8740, U+8743, U+8745, U+8749, U+874b-874e, U+8751, U+8753, U+8755, U+8757-8759, U+875d, U+875f-8761, U+8763-8766, U+8768, U+876a, U+876e-876f, U+8771-8772, U+8774, U+8778, U+877b-877c, U+877f, U+8782-8789, U+878b-878c, U+878e, U+8790, U+8793, U+8795, U+8797-8799, U+879e-87a0, U+87a2-87a3, U+87a7, U+87ab-87af, U+87b1, U+87b3, U+87b5, U+87bb, U+87bd-87c1, U+87c4, U+87c6-87cb, U+87ce, U+87d0, U+87d2, U+87d5-87d6, U+87d9-87da, U+87dc, U+87df-87e0) ); /* noto-sans-jp-[19]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-19-400-normal.woff2", $range: (U+84b4, U+84b9-84bb, U+84bd-84c2, U+84c6-84ca, U+84cc-84d1, U+84d3, U+84d6, U+84d9-84da, U+84dc, U+84e7, U+84ea, U+84ec, U+84ef-84f2, U+84f4, U+84f7, U+84fa-84fd, U+84ff-8500, U+8502-8503, U+8506-8507, U+850c, U+850e, U+8510, U+8514-8515, U+8517-8518, U+851a-851c, U+851e-851f, U+8521-8525, U+8527, U+852a-852c, U+852f, U+8532-8534, U+8536, U+853e-8541, U+8543, U+8546, U+8548, U+854a-854b, U+854f-8553, U+8555-855a, U+855c-8564, U+8569-856b, U+856d, U+856f, U+8577, U+8579-857b, U+857d-8581, U+8585-8586, U+8588-858c, U+858f-8591, U+8593, U+8597-8598, U+859b-859d, U+859f-85a0, U+85a2, U+85a4-85a5, U+85a7-85a8, U+85ad-85b0, U+85b4, U+85b6-85ba, U+85bc-85bf, U+85c1-85c2, U+85c7, U+85c9-85cb, U+85ce-85d0, U+85d5, U+85d8-85da, U+85dc, U+85df-85e1, U+85e5-85e6, U+85e8, U+85ed, U+85f3-85f4, U+85f6-85f7, U+85f9-85fa, U+85fc, U+85fe-8600, U+8602, U+8604-8606, U+860a-860b, U+860d-860e, U+8610-8613, U+8616-861b, U+861e, U+8621-8622, U+8624, U+8627, U+8629, U+862f-8630, U+8636, U+8638-863a, U+863c-863d, U+863f-8642, U+8646, U+864d, U+8652-8654) ); /* noto-sans-jp-[20]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-20-400-normal.woff2", $range: (U+82e8, U+82ea, U+82ed, U+82ef, U+82f3-82f4, U+82f6-82f7, U+82f9, U+82fb, U+82fd-82fe, U+8300-8301, U+8303, U+8306-8308, U+830a-830c, U+8316-8318, U+831b, U+831d-831f, U+8321-8323, U+832b-8335, U+8337, U+833a, U+833c-833d, U+8340, U+8342-8347, U+834a, U+834d-8351, U+8353-8357, U+835a, U+8362-8363, U+8370, U+8373, U+8375, U+8378, U+837c-837d, U+837f-8380, U+8382, U+8384-8387, U+838a, U+838d-838e, U+8392-8396, U+8398-83a0, U+83a2, U+83a6-83ad, U+83b1, U+83b5, U+83bd-83c1, U+83c7, U+83c9, U+83ce-83d1, U+83d4, U+83d6, U+83d8, U+83dd, U+83df-83e1, U+83e5, U+83e8, U+83ea-83eb, U+83f0, U+83f2, U+83f4, U+83f6-83f9, U+83fb-83fd, U+8401, U+8403-8404, U+8406-8407, U+840a-840b, U+840d, U+840f, U+8411, U+8413, U+8415, U+8417, U+8419, U+8420, U+8422, U+842a, U+842f, U+8431, U+8435, U+8438-8439, U+843c, U+8445-8448, U+844a, U+844d-844f, U+8451-8452, U+8456, U+8458-845a, U+845c, U+845f-8462, U+8464-8467, U+8469-846b, U+846d-8470, U+8473-8474, U+8476-847a, U+847c-847d, U+8481-8482, U+8484-8485, U+848b, U+8490, U+8492-8493, U+8495, U+8497, U+849c, U+849e-849f, U+84a1, U+84a6, U+84a8-84aa, U+84ad, U+84af, U+84b1) ); /* noto-sans-jp-[21]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-21-400-normal.woff2", $range: (U+814a, U+814c, U+8151-8153, U+8157, U+815f-8161, U+8165-8169, U+816d-816f, U+8171, U+8173-8174, U+8177, U+8180-8186, U+8188, U+818a-818b, U+818e, U+8190, U+8193, U+8195-8196, U+8198, U+819b, U+819e, U+81a0, U+81a2, U+81a4, U+81a9, U+81ae, U+81b0, U+81b2, U+81b4-81b5, U+81b8, U+81ba-81bb, U+81bd-81be, U+81c0-81c3, U+81c5-81c6, U+81c8-81cb, U+81cd-81cf, U+81d1, U+81d5-81db, U+81dd-81e1, U+81e4-81e5, U+81e7, U+81eb-81ec, U+81ef-81f2, U+81f5-81f6, U+81f8-81fb, U+81fd-8205, U+8209-820b, U+820d, U+820f, U+8212-8214, U+8216, U+8219-821d, U+8221-8222, U+8228-8229, U+822b, U+822e, U+8232-8235, U+8237-8238, U+823a, U+823c, U+8240, U+8243-8246, U+8249, U+824b, U+824e-824f, U+8251, U+8256-825a, U+825c-825d, U+825f-8260, U+8262-8264, U+8267-8268, U+826a-826b, U+826d-826e, U+8271, U+8274, U+8277, U+8279, U+827b, U+827d-8281, U+8283-8284, U+8287, U+8289-828a, U+828d-828e, U+8291-8294, U+8296, U+8298-829b, U+829f-82a1, U+82a3-82a4, U+82a7-82ac, U+82ae, U+82b0, U+82b2, U+82b4, U+82b7, U+82ba-82bc, U+82be-82bf, U+82c5-82c6, U+82d0, U+82d2-82d3, U+82d5, U+82d9-82da, U+82dc, U+82de-82e4, U+82e7) ); /* noto-sans-jp-[22]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-22-400-normal.woff2", $range: (U+7f77-7f79, U+7f7d-7f80, U+7f82-7f83, U+7f86-7f88, U+7f8b-7f8d, U+7f8f-7f91, U+7f94, U+7f96-7f97, U+7f9a, U+7f9c-7f9d, U+7fa1-7fa3, U+7fa6, U+7faa, U+7fad-7faf, U+7fb2, U+7fb4, U+7fb6, U+7fb8-7fb9, U+7fbc, U+7fbf-7fc0, U+7fc3, U+7fc5-7fc6, U+7fc8, U+7fca, U+7fce-7fcf, U+7fd5, U+7fdb, U+7fdf, U+7fe1, U+7fe3, U+7fe5-7fe6, U+7fe8-7fe9, U+7feb-7fec, U+7fee-7ff0, U+7ff2-7ff3, U+7ff9-7ffa, U+7ffd-7fff, U+8002, U+8004, U+8006-8008, U+800a-800f, U+8011-8014, U+8016, U+8018-8019, U+801c-8021, U+8024, U+8026, U+8028, U+802c, U+802e, U+8030, U+8034-8035, U+8037, U+8039-8040, U+8043-8044, U+8046, U+804a, U+8052, U+8058, U+805a, U+805f-8060, U+8062, U+8064, U+8066, U+8068, U+806d, U+806f-8073, U+8075-8076, U+8079, U+807b, U+807d-8081, U+8084-8088, U+808b, U+808e, U+8093, U+8099-809a, U+809c, U+809e, U+80a4, U+80a6-80a7, U+80ab-80ad, U+80b1, U+80b8-80b9, U+80c4-80c5, U+80c8, U+80ca, U+80cd, U+80cf, U+80d2, U+80d4-80db, U+80dd, U+80e0, U+80e4-80e6, U+80ed-80f3, U+80f5-80f7, U+80f9-80fc, U+80fe, U+8101, U+8103, U+8109, U+810b, U+810d, U+8116-8118, U+811b-811c, U+811e, U+8120, U+8123-8124, U+8127, U+8129, U+812b-812c, U+812f-8130, U+8135, U+8139-813a, U+813c-813e, U+8141, U+8145-8147) ); /* noto-sans-jp-[23]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-23-400-normal.woff2", $range: (U+7d57, U+7d59-7d5d, U+7d63, U+7d65, U+7d67, U+7d6a, U+7d6e, U+7d70, U+7d72-7d73, U+7d78, U+7d7a-7d7b, U+7d7d, U+7d7f, U+7d81-7d83, U+7d85-7d86, U+7d88-7d89, U+7d8b-7d8d, U+7d8f, U+7d91, U+7d93, U+7d96-7d97, U+7d9b-7da0, U+7da2-7da3, U+7da6-7da7, U+7daa-7dac, U+7dae-7db0, U+7db3, U+7db5-7db9, U+7dbd, U+7dc0, U+7dc2-7dc7, U+7dcc-7dce, U+7dd0, U+7dd5-7dd9, U+7ddc-7dde, U+7de1-7de6, U+7dea-7ded, U+7df1-7df2, U+7df5-7df6, U+7df9-7dfa, U+7e00, U+7e05, U+7e08-7e0b, U+7e10-7e12, U+7e15, U+7e17, U+7e1c-7e1d, U+7e1f-7e23, U+7e27-7e28, U+7e2c-7e2d, U+7e2f, U+7e31-7e33, U+7e35-7e37, U+7e39-7e3b, U+7e3d, U+7e3f, U+7e43-7e48, U+7e4e, U+7e50, U+7e52, U+7e56, U+7e58-7e5a, U+7e5d-7e5f, U+7e61-7e62, U+7e65-7e67, U+7e69-7e6b, U+7e6d-7e6f, U+7e73, U+7e75, U+7e78-7e79, U+7e7b-7e7f, U+7e81-7e83, U+7e86-7e8a, U+7e8c-7e8e, U+7e90-7e96, U+7e98, U+7e9a-7e9f, U+7f38, U+7f3a-7f3f, U+7f43-7f45, U+7f47, U+7f4c-7f50, U+7f52-7f55, U+7f58, U+7f5b-7f5d, U+7f5f, U+7f61, U+7f63-7f69, U+7f6b, U+7f6d, U+7f71) ); /* noto-sans-jp-[24]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-24-400-normal.woff2", $range: (U+7bc8, U+7bca-7bcc, U+7bcf, U+7bd4, U+7bd6-7bd7, U+7bd9-7bdb, U+7bdd, U+7be5-7be6, U+7be8-7bea, U+7bf0, U+7bf2-7bfa, U+7bfc, U+7bfe, U+7c00-7c04, U+7c06-7c07, U+7c09, U+7c0b-7c0f, U+7c11-7c14, U+7c17, U+7c19, U+7c1b, U+7c1e-7c20, U+7c23, U+7c25-7c28, U+7c2a-7c2c, U+7c2f, U+7c31, U+7c33-7c34, U+7c36-7c3a, U+7c3d-7c3e, U+7c40, U+7c42-7c43, U+7c45-7c46, U+7c4a, U+7c4c, U+7c4f-7c5f, U+7c61, U+7c63-7c65, U+7c67, U+7c69, U+7c6c-7c70, U+7c72, U+7c75, U+7c79, U+7c7b-7c7e, U+7c81-7c83, U+7c86-7c87, U+7c8d, U+7c8f-7c90, U+7c94, U+7c9e, U+7ca0-7ca2, U+7ca4-7ca6, U+7ca8, U+7cab, U+7cad-7cae, U+7cb0-7cb3, U+7cb6-7cb7, U+7cb9-7cbd, U+7cbf-7cc0, U+7cc2, U+7cc4-7cc5, U+7cc7-7cca, U+7ccd-7ccf, U+7cd2-7cd5, U+7cd7-7cda, U+7cdc-7cdd, U+7cdf-7ce0, U+7ce2, U+7ce6, U+7ce9, U+7ceb, U+7cef, U+7cf2, U+7cf4-7cf6, U+7cf9-7cfa, U+7cfe, U+7d02-7d03, U+7d06-7d0a, U+7d0f, U+7d11-7d13, U+7d15-7d16, U+7d1c-7d1e, U+7d23, U+7d26, U+7d2a, U+7d2c-7d2e, U+7d31-7d32, U+7d35, U+7d3c-7d41, U+7d43, U+7d45, U+7d47-7d48, U+7d4b, U+7d4d-7d4f, U+7d51, U+7d53, U+7d55-7d56) ); /* noto-sans-jp-[25]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-25-400-normal.woff2", $range: (U+7a17-7a19, U+7a1b, U+7a1e-7a21, U+7a27, U+7a2b, U+7a2d, U+7a2f-7a31, U+7a34-7a35, U+7a37-7a3b, U+7a3e, U+7a43-7a49, U+7a4c, U+7a4e, U+7a50, U+7a55-7a57, U+7a59, U+7a5c-7a5d, U+7a5f-7a63, U+7a65, U+7a67, U+7a69-7a6a, U+7a6d, U+7a70, U+7a75, U+7a78-7a79, U+7a7d-7a7e, U+7a80, U+7a82, U+7a84-7a86, U+7a88, U+7a8a-7a8b, U+7a90-7a91, U+7a94-7a98, U+7a9e, U+7aa0, U+7aa3, U+7aa9, U+7aac, U+7ab0, U+7ab3, U+7ab5-7ab6, U+7ab9-7abf, U+7ac3, U+7ac5-7aca, U+7acc-7acf, U+7ad1-7ad3, U+7ad5, U+7ada-7adb, U+7add, U+7adf, U+7ae1-7ae2, U+7ae6-7aed, U+7af0-7af1, U+7af4, U+7af8, U+7afa-7afb, U+7afd-7afe, U+7b02, U+7b04, U+7b06-7b08, U+7b0a-7b0b, U+7b0f, U+7b12, U+7b14, U+7b18-7b19, U+7b1e-7b1f, U+7b23, U+7b25, U+7b27-7b2b, U+7b2d-7b31, U+7b33-7b36, U+7b3b, U+7b3d, U+7b3f-7b41, U+7b45, U+7b47, U+7b4c-7b50, U+7b53, U+7b55, U+7b5d, U+7b60, U+7b64-7b66, U+7b69-7b6a, U+7b6c-7b75, U+7b77, U+7b79-7b7a, U+7b7f, U+7b84, U+7b86, U+7b89, U+7b8d-7b92, U+7b96, U+7b98-7ba0, U+7ba5, U+7bac-7bad, U+7baf-7bb0, U+7bb2, U+7bb4-7bb6, U+7bba-7bbd, U+7bc1-7bc2, U+7bc5-7bc6) ); /* noto-sans-jp-[26]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-26-400-normal.woff2", $range: (U+7851-7852, U+785c, U+785e, U+7860-7861, U+7863-7864, U+7868, U+786a, U+786e-786f, U+7872, U+7874, U+787a, U+787c, U+787e, U+7886-7887, U+788a, U+788c-788f, U+7893-7895, U+7898, U+789a, U+789d-789f, U+78a1, U+78a3-78a4, U+78a8-78aa, U+78ac-78ad, U+78af-78b3, U+78b5, U+78bb-78bf, U+78c5-78cc, U+78ce, U+78d1-78d6, U+78da-78db, U+78df-78e1, U+78e4, U+78e6-78e7, U+78ea, U+78ec, U+78f2-78f4, U+78f6-78f7, U+78f9-78fb, U+78fd-7901, U+7906-7907, U+790c, U+7910-7912, U+7919-791c, U+791e-7920, U+7925-792e, U+7930-7931, U+7934-7935, U+793b, U+793d, U+793f, U+7941-7942, U+7944-7946, U+794a-794b, U+794f, U+7951, U+7954-7955, U+7957-7958, U+795a-795c, U+795f-7960, U+7962, U+7967, U+7969, U+796b, U+7972, U+7977, U+7979-797c, U+797e-7980, U+798a-798e, U+7991, U+7993-7996, U+7998, U+799b-799d, U+79a1, U+79a6-79ab, U+79ae-79b1, U+79b3-79b4, U+79b8-79bb, U+79bd-79be, U+79c2, U+79c4, U+79c7-79ca, U+79cc-79cd, U+79cf, U+79d4-79d6, U+79da, U+79dd-79e3, U+79e5, U+79e7, U+79ea-79ed, U+79f1, U+79f8, U+79fc, U+7a02-7a03, U+7a05, U+7a07-7a0a, U+7a0c-7a0d, U+7a11, U+7a15) ); /* noto-sans-jp-[27]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-27-400-normal.woff2", $range: (U+768c-768e, U+7690, U+7693, U+7695-7696, U+7699-76a8, U+76aa, U+76ad, U+76af-76b0, U+76b4, U+76b6-76ba, U+76bd, U+76c1-76c3, U+76c5, U+76c8-76c9, U+76cb-76ce, U+76d2, U+76d4, U+76d6, U+76d9, U+76dc, U+76de, U+76e0-76e1, U+76e5-76e8, U+76ea-76ec, U+76f0-76f1, U+76f6, U+76f9, U+76fb-76fc, U+7700, U+7704, U+7706-7708, U+770a, U+770e, U+7712, U+7714-7715, U+7717, U+7719-771c, U+7722, U+7724-7726, U+7728, U+772d-772f, U+7734-7739, U+773d-773e, U+7742, U+7745-7747, U+774a, U+774d-774f, U+7752, U+7756-7758, U+775a-775c, U+775e-7760, U+7762, U+7764-7765, U+7767, U+776a-776c, U+7770, U+7772-7774, U+7779-777a, U+777c-7780, U+7784, U+778b-778e, U+7794-7796, U+779a, U+779e-77a0, U+77a2, U+77a4-77a5, U+77a7, U+77a9-77aa, U+77ae-77b1, U+77b5-77b7, U+77b9, U+77bb-77bf, U+77c3, U+77c7, U+77c9, U+77cd, U+77d1-77d2, U+77d5, U+77d7, U+77d9-77da, U+77dc, U+77de-77e0, U+77e3-77e4, U+77e6-77e7, U+77e9-77ea, U+77ec, U+77ee, U+77f0-77f1, U+77f4, U+77f8, U+77fb-77fc, U+7805-7806, U+7809, U+780c-780e, U+7811-7812, U+7819, U+781d, U+7820-7823, U+7826-7827, U+782c-782e, U+7830, U+7835, U+7837, U+783a, U+783f, U+7843-7845, U+7847-7848, U+784c, U+784e-784f) ); /* noto-sans-jp-[28]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-28-400-normal.woff2", $range: (U+7511-7513, U+7515-7517, U+751c, U+751e, U+7520-7522, U+7524, U+7526-7527, U+7529-752c, U+752f, U+7536, U+7538-7539, U+753c-7540, U+7543-7544, U+7546-754b, U+754d-7550, U+7552, U+7557, U+755a-755b, U+755d-755f, U+7561-7562, U+7564, U+7566-7567, U+7569, U+756b-756d, U+756f, U+7571-7572, U+7574-757e, U+7581-7582, U+7585-7587, U+7589-758c, U+758f-7590, U+7592-7595, U+7599-759a, U+759c-759d, U+75a2-75a5, U+75b0-75b1, U+75b3-75b5, U+75b7-75b8, U+75ba, U+75bd, U+75bf-75c4, U+75c6, U+75ca, U+75cc-75cf, U+75d3-75d4, U+75d7-75d8, U+75dc-75e1, U+75e3-75e4, U+75e7, U+75ec, U+75ee-75f3, U+75f9, U+75fc, U+75fe-7604, U+7607-760c, U+760f, U+7612-7613, U+7615-7616, U+7618-7619, U+761b-7629, U+762d, U+7630, U+7632-7635, U+7638-763c, U+7640-7641, U+7643-764b, U+764e, U+7655, U+7658-7659, U+765c, U+765f, U+7661-7662, U+7664-7665, U+7667-766a, U+766c-7672, U+7674, U+7676, U+7678, U+7680-7683, U+7685, U+7688, U+768b) ); /* noto-sans-jp-[29]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-29-400-normal.woff2", $range: (U+736c, U+736e-7371, U+7375, U+7377-737c, U+7380-7381, U+7383, U+7385-7386, U+738a, U+738e, U+7390, U+7393-7398, U+739c, U+739e-73a0, U+73a2, U+73a5-73a6, U+73a8, U+73aa-73ab, U+73ad, U+73b3, U+73b5, U+73b7, U+73b9-73bd, U+73bf, U+73c5-73c6, U+73c9-73cc, U+73ce-73cf, U+73d2-73d3, U+73d6, U+73d9, U+73dd-73de, U+73e1, U+73e3-73e7, U+73e9-73ea, U+73ee, U+73f1, U+73f4-73f5, U+73f7-73fb, U+73fd, U+73ff-7401, U+7404-7405, U+7407, U+740a, U+7411, U+7413, U+741a-741b, U+7421, U+7424, U+7426, U+7428-7431, U+7433, U+7439-743a, U+743f-7441, U+7443-7444, U+7446-7447, U+744b, U+744d, U+7451-7453, U+7455, U+7457, U+7459-745a, U+745c-745d, U+745f, U+7462-7464, U+7466-746b, U+746d-7473, U+7476, U+747e, U+7480-7481, U+7485-7489, U+748b, U+748f-7492, U+7497-749a, U+749c, U+749e-74a3, U+74a5-74a6, U+74a8-74ab, U+74ae-74af, U+74b1-74b2, U+74b5, U+74b9-74bb, U+74bd, U+74bf, U+74c8-74ca, U+74cc, U+74cf-74d0, U+74d3-74d4, U+74d6, U+74d8, U+74da-74db, U+74de-74e0, U+74e3-74e4, U+74e7-74eb, U+74ee-74f2, U+74f4, U+74f7-74f8, U+74fa-74fc, U+74ff, U+7501, U+7503-7506, U+750c-750e) ); /* noto-sans-jp-[30]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-30-400-normal.woff2", $range: (U+7166, U+7168, U+716c, U+7179, U+7180, U+7184-7185, U+7187-7188, U+718c, U+718f, U+7192, U+7194-7196, U+7199-719b, U+71a0, U+71a2, U+71a8, U+71ac, U+71ae-71b0, U+71b2-71b3, U+71b9-71ba, U+71be-71c1, U+71c4, U+71c9, U+71cb-71cc, U+71ce, U+71d0, U+71d2-71d4, U+71d6-71d7, U+71d9-71da, U+71dc, U+71df-71e0, U+71e6-71e7, U+71ec-71ee, U+71f4-71f5, U+71f8-71f9, U+71fc, U+71fe-7200, U+7207-7209, U+720d, U+7210, U+7213, U+7215, U+7217, U+721a, U+721d, U+721f, U+7224, U+7228, U+722b, U+722d, U+722f-7230, U+7232, U+7234, U+7238-7239, U+723b-723c, U+723e-7243, U+7245-7246, U+724b, U+724e-7250, U+7252-7253, U+7255-7258, U+725a, U+725c, U+725e, U+7260, U+7263, U+7268, U+726b, U+726e-726f, U+7271, U+7274, U+7277-7278, U+727b-727c, U+727e-7282, U+7284, U+7287, U+7289, U+728d-728e, U+7292-7293, U+7296, U+729b, U+72a2, U+72a7-72a8, U+72ad-72ae, U+72b0-72b2, U+72b4, U+72b9, U+72be, U+72c0-72c1, U+72c3-72c4, U+72c6-72c7, U+72c9, U+72cc, U+72ce, U+72d2, U+72d5-72d6, U+72d8, U+72df-72e2, U+72e5, U+72f3-72f4, U+72f7, U+72f9-72fb, U+72fd-72fe, U+7302, U+7304-7305, U+7307, U+730a-730b, U+730d, U+7312-7313, U+7316-7319, U+731c-731e, U+7322, U+7324, U+7327-7329, U+732c, U+732f, U+7331-7337, U+7339-733b, U+733d-733e, U+7343, U+734d-7350, U+7352, U+7356-7358, U+735d-7360, U+7366-736b) ); /* noto-sans-jp-[31]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-31-400-normal.woff2", $range: (U+6f58-6f5b, U+6f5d-6f5e, U+6f60-6f62, U+6f66, U+6f68, U+6f6c-6f6d, U+6f6f, U+6f74, U+6f78, U+6f7a, U+6f7c-6f7e, U+6f80, U+6f82-6f83, U+6f86-6f88, U+6f8b-6f8e, U+6f90-6f94, U+6f96-6f98, U+6f9a, U+6f9d, U+6f9f-6fa1, U+6fa3, U+6fa5-6fa8, U+6fae-6fb1, U+6fb3, U+6fb5-6fb7, U+6fb9, U+6fbc, U+6fbe, U+6fc2, U+6fc5-6fca, U+6fd4-6fd5, U+6fd8, U+6fda-6fdb, U+6fde-6fe0, U+6fe4, U+6fe8-6fe9, U+6feb-6fec, U+6fee, U+6ff0, U+6ff3, U+6ff5-6ff6, U+6ff9-6ffa, U+6ffc-6ffe, U+7000-7001, U+7005-7007, U+7009-700b, U+700d, U+700f, U+7011, U+7015, U+7017-7018, U+701a-701b, U+701d-7020, U+7023, U+7026, U+7028, U+702f-7030, U+7032, U+7034, U+7037, U+7039-703a, U+703c, U+703e, U+7043-7044, U+7047-704c, U+704e, U+7051, U+7054-7055, U+705d-705e, U+7064-7065, U+7069, U+706c, U+706e, U+7075-7076, U+707e, U+7081, U+7085-7086, U+7094-7098, U+709b, U+709f, U+70a4, U+70ab-70ac, U+70ae-70b1, U+70b3-70b4, U+70b7, U+70bb, U+70ca-70cb, U+70d1, U+70d3-70d6, U+70d8-70d9, U+70dc-70dd, U+70df, U+70e4, U+70ec, U+70f1, U+70fa, U+70fd, U+7103-7108, U+710b-710c, U+710f, U+7114, U+7119, U+711c, U+711e, U+7120, U+712b, U+712d-7131, U+7138, U+7141, U+7145-7147, U+7149-714b, U+7150-7153, U+7155-7157, U+715a, U+715c, U+715e, U+7160, U+7162, U+7164-7165) ); /* noto-sans-jp-[32]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-32-400-normal.woff2", $range: (U+6d7c, U+6d80-6d82, U+6d85, U+6d87, U+6d89-6d8a, U+6d8c-6d8e, U+6d91-6d98, U+6d9c, U+6daa-6dac, U+6dae, U+6db4-6db5, U+6db7-6db9, U+6dbd, U+6dbf, U+6dc2, U+6dc4-6dc8, U+6dca, U+6dcc, U+6dce-6dd0, U+6dd2, U+6dd5-6dd6, U+6dd8-6ddb, U+6ddd-6de0, U+6de2, U+6de4-6de6, U+6de8-6dea, U+6dec, U+6dee-6df0, U+6df2, U+6df4, U+6df6, U+6df8-6dfa, U+6dfc, U+6e00, U+6e04, U+6e0a, U+6e17, U+6e19, U+6e1d-6e20, U+6e22-6e25, U+6e27, U+6e2b, U+6e2d-6e2e, U+6e32, U+6e34, U+6e36, U+6e38-6e3c, U+6e42-6e45, U+6e48-6e49, U+6e4b-6e4f, U+6e51-6e54, U+6e57, U+6e5b-6e5f, U+6e62-6e63, U+6e68, U+6e6b, U+6e6e, U+6e72-6e73, U+6e76, U+6e7b, U+6e7d, U+6e82, U+6e89, U+6e8c-6e8d, U+6e8f, U+6e93, U+6e98-6e99, U+6e9f-6ea0, U+6ea5, U+6ea7, U+6eaa-6eab, U+6ead-6eaf, U+6eb1-6eb4, U+6eb7, U+6ebb-6ebd, U+6ebf-6ec4, U+6ec7-6eca, U+6ecc-6ecf, U+6ed3-6ed5, U+6ed9-6edb, U+6ee6, U+6eeb-6eef, U+6ef7-6ef9, U+6efb, U+6efd-6eff, U+6f04, U+6f08-6f0a, U+6f0c-6f0d, U+6f10-6f11, U+6f13, U+6f15-6f16, U+6f18, U+6f1a-6f1b, U+6f25-6f26, U+6f29-6f2a, U+6f2d, U+6f2f-6f33, U+6f35-6f36, U+6f38, U+6f3b-6f3c, U+6f3e-6f3f, U+6f41, U+6f45, U+6f4f, U+6f51-6f53, U+6f57) ); /* noto-sans-jp-[33]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-33-400-normal.woff2", $range: (U+6b85, U+6b89, U+6b8d, U+6b95, U+6b97-6b98, U+6b9b, U+6b9e-6ba0, U+6ba2-6ba4, U+6ba8-6bb3, U+6bb7-6bb9, U+6bbc-6bbe, U+6bc0, U+6bc3-6bc4, U+6bc6-6bc9, U+6bcb-6bcc, U+6bcf, U+6bd3, U+6bd6-6bd8, U+6bda, U+6bdf, U+6be1, U+6be3, U+6be6-6be7, U+6beb-6bec, U+6bee, U+6bf1, U+6bf3, U+6bf7, U+6bf9, U+6bff, U+6c02, U+6c04-6c05, U+6c08-6c0a, U+6c0d-6c0e, U+6c10, U+6c12-6c14, U+6c19, U+6c1b, U+6c1f, U+6c24, U+6c26-6c28, U+6c2c, U+6c2e, U+6c33, U+6c35-6c36, U+6c3a-6c3b, U+6c3e-6c40, U+6c4a-6c4b, U+6c4d, U+6c4f, U+6c52, U+6c54-6c55, U+6c59, U+6c5b-6c5e, U+6c62, U+6c67-6c68, U+6c6a-6c6b, U+6c6d, U+6c6f, U+6c73-6c74, U+6c76, U+6c78-6c79, U+6c7b, U+6c7e, U+6c81-6c87, U+6c89, U+6c8c-6c8d, U+6c90, U+6c92-6c95, U+6c97-6c98, U+6c9a-6c9c, U+6c9f, U+6caa-6cae, U+6cb0-6cb2, U+6cb4, U+6cba, U+6cbd-6cbe, U+6cc2, U+6cc5-6cc6, U+6ccd, U+6ccf-6cd4, U+6cd6-6cd7, U+6cd9-6cdd, U+6ce0, U+6ce7, U+6ce9-6cef, U+6cf1-6cf2, U+6cf4, U+6cfb, U+6d00-6d01, U+6d04, U+6d07, U+6d0a, U+6d0c, U+6d0e-6d0f, U+6d11, U+6d13, U+6d19-6d1a, U+6d1f, U+6d24, U+6d26-6d28, U+6d2b, U+6d2e-6d2f, U+6d31, U+6d33-6d36, U+6d38-6d39, U+6d3c-6d3d, U+6d3f, U+6d57-6d5b, U+6d5e-6d61, U+6d64-6d65, U+6d67, U+6d6c, U+6d6f-6d70, U+6d79) ); /* noto-sans-jp-[34]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-34-400-normal.woff2", $range: (U+69dd-69de, U+69e2-69e3, U+69e5, U+69e7-69eb, U+69ed-69ef, U+69f1-69f6, U+69f9, U+69fe-6a01, U+6a03, U+6a05, U+6a0a, U+6a0c, U+6a0f, U+6a11-6a15, U+6a17, U+6a1a-6a1b, U+6a1d-6a20, U+6a22-6a24, U+6a28, U+6a2e, U+6a30, U+6a32-6a38, U+6a3b, U+6a3e-6a3f, U+6a44-6a4a, U+6a4e, U+6a50-6a52, U+6a54-6a56, U+6a5b, U+6a61-6a62, U+6a64, U+6a66-6a67, U+6a6a-6a6b, U+6a71-6a73, U+6a78, U+6a7a, U+6a7e-6a7f, U+6a81, U+6a83-6a84, U+6a86-6a87, U+6a89, U+6a8b, U+6a8d, U+6a90-6a91, U+6a94, U+6a97, U+6a9b, U+6a9d-6aa3, U+6aa5, U+6aaa-6aac, U+6aae-6ab1, U+6ab3-6ab4, U+6ab8, U+6abb, U+6abd-6abf, U+6ac1-6ac3, U+6ac6, U+6ac8-6ac9, U+6acc, U+6ad0-6ad1, U+6ad3-6ad6, U+6ada-6adf, U+6ae2, U+6ae4, U+6ae7-6ae8, U+6aea, U+6aec, U+6af0-6af3, U+6af8, U+6afa, U+6afc-6afd, U+6b02-6b03, U+6b06-6b07, U+6b09-6b0b, U+6b0f-6b12, U+6b16-6b17, U+6b1b, U+6b1d-6b1f, U+6b23-6b24, U+6b28, U+6b2b-6b2c, U+6b2f, U+6b35-6b39, U+6b3b, U+6b3d, U+6b3f, U+6b43, U+6b46-6b47, U+6b49-6b4a, U+6b4d-6b4e, U+6b50, U+6b52, U+6b54, U+6b56, U+6b58-6b59, U+6b5b, U+6b5d, U+6b5f-6b61, U+6b65, U+6b67, U+6b6b-6b6c, U+6b6e, U+6b70, U+6b72, U+6b75, U+6b77-6b7a, U+6b7d-6b84) ); /* noto-sans-jp-[35]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-35-400-normal.woff2", $range: (U+6855, U+6857-6859, U+685b, U+685d, U+685f, U+6863, U+6867, U+686b, U+686e-6872, U+6874-6875, U+6877, U+6879-687c, U+687e-687f, U+6882-6884, U+6886, U+6888, U+688d-6890, U+6894, U+6896, U+6898-689c, U+689f-68a3, U+68a5-68a7, U+68a9-68ab, U+68ad-68af, U+68b2-68b5, U+68b9-68bc, U+68c3, U+68c5-68c6, U+68c8-68ca, U+68cc-68cd, U+68cf-68d1, U+68d3-68d9, U+68dc-68dd, U+68e0-68e1, U+68e3-68e5, U+68e7-68e8, U+68ea-68ed, U+68ef-68f1, U+68f5-68f7, U+68f9, U+68fb-68fd, U+6900-6901, U+6903-6904, U+6906-690c, U+690f-6911, U+6913, U+6916-6917, U+6919-691b, U+6921-6923, U+6925-6926, U+6928, U+692a, U+6930-6931, U+6933-6936, U+6938-6939, U+693b, U+693d, U+6942, U+6945-6946, U+6949, U+694e, U+6954, U+6957, U+6959, U+695b-695e, U+6961-6966, U+6968-696c, U+696e-6974, U+6977-697b, U+697e-6981, U+6986, U+698d, U+6991-6992, U+6994-6996, U+6998, U+699c, U+69a0-69a1, U+69a5-69a8, U+69ab, U+69ad, U+69af-69b2, U+69b4, U+69b7-69b8, U+69ba-69bc, U+69be-69c1, U+69c3, U+69c5, U+69c7-69c8, U+69ca, U+69ce-69d1, U+69d3, U+69d6-69d7, U+69d9) ); /* noto-sans-jp-[36]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-36-400-normal.woff2", $range: (U+667e-6680, U+6683-6684, U+6688, U+668b-668e, U+6690, U+6692, U+6698-669d, U+669f-66a0, U+66a2, U+66a4, U+66ad, U+66b1-66b3, U+66b5, U+66b8-66b9, U+66bb-66bc, U+66be-66c4, U+66c6, U+66c8-66c9, U+66cc, U+66ce-66cf, U+66d4, U+66da-66db, U+66dd, U+66df-66e0, U+66e6, U+66e8-66e9, U+66eb-66ec, U+66ee, U+66f5, U+66f7, U+66fa-66fc, U+6701, U+6705, U+6707, U+670c, U+670e-6710, U+6712-6716, U+6719, U+671c, U+671e, U+6720, U+6722, U+6725-6726, U+672e, U+6733, U+6735-6738, U+673e-673f, U+6741, U+6743, U+6745-6748, U+674c-674d, U+6753-6755, U+6759, U+675d-675e, U+6760, U+6762-6764, U+6766, U+676a, U+676c, U+676e, U+6770, U+6772-6774, U+6776-6777, U+677b-677c, U+6780-6781, U+6784-6785, U+6787, U+6789, U+678b-678c, U+678e-678f, U+6791-6793, U+6796, U+6798-6799, U+679b, U+67a1, U+67a4, U+67a6, U+67a9, U+67b0-67b5, U+67b7-67b9, U+67bb-67be, U+67c0-67c3, U+67c5-67c6, U+67c8-67c9, U+67ce, U+67d2, U+67d7-67d9, U+67db-67de, U+67e1-67e2, U+67e4, U+67e6-67e7, U+67e9, U+67ec, U+67ee-67f0, U+67f2, U+67f6-67f7, U+67f9-67fa, U+67fc, U+67fe, U+6801-6802, U+6805, U+6810, U+6814, U+6818-6819, U+681d, U+681f, U+6822, U+6827-6829, U+682b-682d, U+682f-6834, U+683b, U+683e-6840, U+6844-6846, U+6849-684a, U+684c-684e, U+6852-6854) ); /* noto-sans-jp-[37]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-37-400-normal.woff2", $range: (U+64d2, U+64d4-64d5, U+64d7-64d8, U+64da, U+64e0-64e1, U+64e3-64e5, U+64e7, U+64e9-64ea, U+64ed, U+64ef-64f2, U+64f4-64f7, U+64fa-64fb, U+64fd-6501, U+6504-6505, U+6508-650a, U+650f, U+6513-6514, U+6516, U+6518-6519, U+651b-651f, U+6522, U+6524, U+6526, U+6529-652c, U+652e, U+6531-6532, U+6534-6538, U+653a, U+653c-653d, U+6543-6544, U+6547-6549, U+654d-654e, U+6550, U+6552, U+6554-6556, U+6558, U+655d-6560, U+6567, U+656b, U+6572, U+6578, U+657a, U+657d, U+6581-6585, U+6588, U+658a, U+658c, U+6592, U+6595, U+6598, U+659b, U+659d, U+659f-65a1, U+65a3-65a6, U+65ab, U+65ae, U+65b2-65b5, U+65b7-65b8, U+65be-65bf, U+65c1-65c4, U+65c6, U+65c8-65c9, U+65cc, U+65ce, U+65d0, U+65d2, U+65d4, U+65d6, U+65d8-65d9, U+65db, U+65df-65e1, U+65e3, U+65f0-65f2, U+65f4-65f5, U+65f9, U+65fb-65fc, U+65fe-6600, U+6603-6604, U+6608-660a, U+660d, U+6611-6612, U+6615-6616, U+661c-661e, U+6621-6624, U+6626, U+6629-662c, U+662e, U+6630-6631, U+6633-6637, U+6639-663b, U+663f-6641, U+6644-6646, U+6648-664a, U+664c, U+664e-664f, U+6651, U+6657-6665, U+6667-6668, U+666a-666d, U+6670, U+6673, U+6675, U+6677-6679, U+667b-667c) ); /* noto-sans-jp-[38]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-38-400-normal.woff2", $range: (U+62cf, U+62d1, U+62d4-62d6, U+62da, U+62dc, U+62ea, U+62ee-62ef, U+62f1-62f2, U+62f4-62f5, U+62fc-62fd, U+62ff, U+6302-6304, U+6308-630d, U+6310, U+6313, U+6316, U+6318, U+631b, U+6327, U+6329-632a, U+632d, U+6332, U+6335-6336, U+6339-633c, U+633e, U+6341-6344, U+6346, U+634a-634e, U+6350, U+6352-6354, U+6358-6359, U+635b, U+6365-6366, U+6369, U+636b-636d, U+6371-6372, U+6374-6378, U+637a, U+637c-637d, U+637f-6380, U+6382, U+6384, U+6387, U+6389-638a, U+638e-6390, U+6394-6396, U+6399-639a, U+639e, U+63a0, U+63a3-63a4, U+63a6, U+63a9, U+63ab-63af, U+63b5, U+63bd-63be, U+63c0-63c1, U+63c4-63c6, U+63c8, U+63ce, U+63d1-63d6, U+63dc, U+63e0, U+63e3, U+63e5, U+63e9-63ed, U+63f2-63f3, U+63f5-63f9, U+6406, U+6409-640a, U+640f-6410, U+6412-6414, U+6416-6418, U+641e, U+6420, U+6422, U+6424-6426, U+6428-642a, U+642f-6430, U+6434-6436, U+643d, U+643f, U+644b, U+644e-644f, U+6451-6454, U+645a-645d, U+645f-6461, U+6463, U+6467, U+646d, U+6473-6474, U+6476, U+6478-6479, U+647b, U+647d, U+6485, U+6487-6488, U+648f-6491, U+6493, U+6495, U+6498-649b, U+649d-649f, U+64a1, U+64a3, U+64a6, U+64a8-64a9, U+64ac, U+64b3, U+64bb-64bf, U+64c2, U+64c4-64c5, U+64c7, U+64c9-64cc, U+64ce, U+64d0-64d1) ); /* noto-sans-jp-[39]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-39-400-normal.woff2", $range: (U+6117, U+6119, U+611c, U+611e, U+6120-6122, U+6127-6128, U+612a-612c, U+6130-6131, U+6134-6137, U+6139-613a, U+613c-613f, U+6141-6142, U+6144-6147, U+6149-614a, U+614d, U+6153, U+6158-615a, U+615d-6160, U+6164-6165, U+616b-616c, U+616f, U+6171-6175, U+6177-6178, U+617b-6181, U+6183-6184, U+6187, U+618a-618b, U+618d, U+6192-6194, U+6196-619a, U+619c-619d, U+619f-61a0, U+61a5, U+61a8, U+61aa-61ae, U+61b8-61ba, U+61bc, U+61be, U+61c0-61c3, U+61c6, U+61c8, U+61ca-61cf, U+61d5, U+61dc-61df, U+61e1-61e3, U+61e5-61e9, U+61ec-61ed, U+61ef, U+61f4-61f7, U+61fa, U+61fc-6201, U+6203-6204, U+6207-620a, U+620d-620e, U+6213-6215, U+621b-621e, U+6220-6223, U+6227, U+6229-622b, U+622e, U+6230-6233, U+6236, U+6239, U+623d-623e, U+6241-6244, U+6246, U+6248, U+624c, U+624e, U+6250-6252, U+6254, U+6256, U+6258, U+625a-625c, U+625e, U+6260-6261, U+6263-6264, U+6268, U+626d, U+626f, U+6273, U+627a-627e, U+6282-6283, U+6285, U+6289, U+628d-6290, U+6292-6294, U+6296, U+6299, U+629b, U+62a6, U+62a8, U+62ac, U+62b3, U+62b6-62b7, U+62ba-62bb, U+62be-62bf, U+62c2, U+62c4, U+62c6-62c8, U+62ca, U+62ce) ); /* noto-sans-jp-[40]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-40-400-normal.woff2", $range: (U+5f6c-5f6d, U+5f6f, U+5f72-5f75, U+5f78, U+5f7a, U+5f7d-5f7f, U+5f82-5f83, U+5f87-5f89, U+5f8d, U+5f8f, U+5f91, U+5f96, U+5f99, U+5f9c-5f9d, U+5fa0, U+5fa2, U+5fa4, U+5fa7-5fa8, U+5fab-5fad, U+5faf-5fb1, U+5fb5, U+5fb7-5fb8, U+5fbc-5fbd, U+5fc4, U+5fc7-5fc9, U+5fcb, U+5fd0-5fd4, U+5fdd-5fde, U+5fe1-5fe2, U+5fe4, U+5fe8-5fea, U+5fec-5ff3, U+5ff6, U+5ff8, U+5ffa-5ffd, U+5fff, U+6007, U+600a, U+600d-6010, U+6013-6015, U+6017-601b, U+601f, U+6021-6022, U+6024, U+6026, U+6029, U+602b, U+602d, U+6031, U+6033, U+6035, U+603a, U+6040-6043, U+6046-604a, U+604c-604d, U+6051, U+6054-6057, U+6059-605a, U+605d, U+605f-6064, U+6067, U+606a-606c, U+6070-6071, U+6077, U+607e-607f, U+6081-6086, U+6088-608e, U+6091-6093, U+6095-6098, U+609a-609b, U+609d-609e, U+60a2, U+60a4-60a5, U+60a7-60a8, U+60b0-60b1, U+60b3-60b5, U+60b7-60b8, U+60bb, U+60bd-60be, U+60c2, U+60c4, U+60c6-60cb, U+60ce-60cf, U+60d3-60d5, U+60d8-60d9, U+60db, U+60dd-60df, U+60e1-60e2, U+60e5, U+60ee, U+60f0-60f2, U+60f4-60f8, U+60fa-60fd, U+6100, U+6102-6103, U+6106-6108, U+610a, U+610c-610e, U+6110-6114, U+6116) ); /* noto-sans-jp-[41]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-41-400-normal.woff2", $range: (U+5d9b, U+5d9d, U+5d9f-5da0, U+5da2, U+5da4, U+5da7, U+5dab-5dac, U+5dae, U+5db0, U+5db2, U+5db4, U+5db7-5db9, U+5dbc-5dbd, U+5dc3, U+5dc7, U+5dc9, U+5dcb-5dce, U+5dd0-5dd3, U+5dd6-5dd9, U+5ddb, U+5de0, U+5de2, U+5de4, U+5de9, U+5df2, U+5df5, U+5df8-5df9, U+5dfd, U+5dff-5e00, U+5e07, U+5e0b, U+5e0d, U+5e11-5e12, U+5e14-5e15, U+5e18-5e1b, U+5e1f-5e20, U+5e25, U+5e28, U+5e2e, U+5e32, U+5e35-5e37, U+5e3e, U+5e40, U+5e43-5e44, U+5e47, U+5e49, U+5e4b, U+5e4e, U+5e50-5e51, U+5e54, U+5e56-5e58, U+5e5b-5e5c, U+5e5e-5e5f, U+5e62, U+5e64, U+5e68, U+5e6a-5e6e, U+5e70, U+5e75-5e77, U+5e7a, U+5e7f-5e80, U+5e87, U+5e8b, U+5e8e, U+5e96, U+5e99-5e9a, U+5ea0, U+5ea2, U+5ea4-5ea5, U+5ea8, U+5eaa, U+5eac, U+5eb1, U+5eb3, U+5eb8-5eb9, U+5ebd-5ebf, U+5ec1-5ec2, U+5ec6, U+5ec8, U+5ecb-5ecc, U+5ece-5ed6, U+5ed9-5ee2, U+5ee5, U+5ee8-5ee9, U+5eeb-5eec, U+5ef0-5ef1, U+5ef3-5ef4, U+5ef8-5ef9, U+5efc-5f00, U+5f02-5f03, U+5f06-5f09, U+5f0b-5f0e, U+5f11, U+5f16-5f17, U+5f19, U+5f1b-5f1e, U+5f21-5f24, U+5f27-5f29, U+5f2b-5f30, U+5f34, U+5f36, U+5f38, U+5f3a-5f3d, U+5f3f-5f41, U+5f44-5f45, U+5f47-5f48, U+5f4a, U+5f4c-5f4e, U+5f50-5f51, U+5f54, U+5f56-5f58, U+5f5b-5f5d, U+5f60, U+5f63-5f65, U+5f67, U+5f6a) ); /* noto-sans-jp-[42]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-42-400-normal.woff2", $range: (U+5bbc, U+5bc0-5bc1, U+5bc3, U+5bc7, U+5bc9, U+5bcd-5bd0, U+5bd3-5bd4, U+5bd6-5bda, U+5bde, U+5be0-5be2, U+5be4-5be6, U+5be8, U+5beb-5bec, U+5bef-5bf1, U+5bf3-5bf6, U+5bfd, U+5c03, U+5c05, U+5c07-5c09, U+5c0c-5c0d, U+5c12-5c14, U+5c17, U+5c19, U+5c1e-5c20, U+5c22-5c24, U+5c26, U+5c28-5c2e, U+5c30, U+5c32, U+5c35-5c36, U+5c38-5c39, U+5c46, U+5c4d-5c50, U+5c53, U+5c59-5c5c, U+5c5f-5c63, U+5c67-5c69, U+5c6c-5c70, U+5c74-5c76, U+5c79-5c7d, U+5c87-5c88, U+5c8a, U+5c8c, U+5c8f, U+5c91-5c92, U+5c94, U+5c9d, U+5c9f-5ca0, U+5ca2-5ca3, U+5ca6-5ca8, U+5caa-5cab, U+5cad, U+5cb1-5cb2, U+5cb4-5cb7, U+5cba-5cbc, U+5cbe, U+5cc5, U+5cc7, U+5cc9, U+5ccb, U+5cd0, U+5cd2, U+5cd7, U+5cd9, U+5cdd, U+5ce6, U+5ce8-5cea, U+5ced-5cee, U+5cf1-5cf2, U+5cf4-5cf5, U+5cfa-5cfb, U+5cfd, U+5d01, U+5d06, U+5d0b, U+5d0d, U+5d10-5d12, U+5d14-5d15, U+5d17-5d1b, U+5d1d, U+5d1f-5d20, U+5d22-5d24, U+5d26-5d27, U+5d2b, U+5d31, U+5d34, U+5d39, U+5d3d, U+5d3f, U+5d42-5d43, U+5d46-5d48, U+5d4a-5d4b, U+5d4e, U+5d51-5d53, U+5d55, U+5d59, U+5d5c, U+5d5f-5d62, U+5d64, U+5d69-5d6a, U+5d6c-5d6d, U+5d6f-5d70, U+5d73, U+5d76, U+5d79-5d7a, U+5d7e-5d7f, U+5d81-5d84, U+5d87-5d88, U+5d8a, U+5d8c, U+5d90, U+5d92-5d95, U+5d97, U+5d99) ); /* noto-sans-jp-[43]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-43-400-normal.woff2", $range: (U+598b-598e, U+5992, U+5995, U+5997, U+599b, U+599d, U+599f, U+59a3-59a4, U+59a7, U+59ad-59b0, U+59b2-59b3, U+59b7, U+59ba, U+59bc, U+59be, U+59c1, U+59c3-59c4, U+59c6, U+59c8, U+59ca, U+59cd, U+59d2, U+59d9-59da, U+59dd-59df, U+59e3-59e5, U+59e7-59e8, U+59ec, U+59ee-59ef, U+59f1-59f2, U+59f4, U+59f6-59f8, U+5a00, U+5a03-5a04, U+5a09, U+5a0c-5a0e, U+5a11-5a13, U+5a17, U+5a1a-5a1c, U+5a1e-5a1f, U+5a23-5a25, U+5a27-5a28, U+5a2a, U+5a2d, U+5a30, U+5a35-5a36, U+5a40-5a41, U+5a44-5a45, U+5a47-5a49, U+5a4c, U+5a50, U+5a55, U+5a5e, U+5a62-5a63, U+5a65, U+5a67, U+5a6a, U+5a6c-5a6d, U+5a77, U+5a7a-5a7b, U+5a7e, U+5a84, U+5a8b, U+5a90, U+5a93, U+5a96, U+5a99, U+5a9c, U+5a9e-5aa0, U+5aa2, U+5aa7, U+5aac, U+5ab1-5ab3, U+5ab5, U+5ab8, U+5aba-5abf, U+5ac2, U+5ac4, U+5ac6, U+5ac8, U+5acb, U+5acf-5ad0, U+5ad6-5ad7, U+5ada, U+5adc, U+5ae0-5ae1, U+5ae3, U+5ae5-5ae6, U+5ae9-5aea, U+5aee, U+5af0, U+5af5-5af6, U+5afa-5afb, U+5afd, U+5b00-5b01, U+5b08, U+5b0b, U+5b16-5b17, U+5b19, U+5b1b, U+5b1d, U+5b21, U+5b25, U+5b2a, U+5b2c-5b2d, U+5b30, U+5b32, U+5b34, U+5b36, U+5b38, U+5b3e, U+5b40-5b41, U+5b43, U+5b45, U+5b4b-5b4c, U+5b51-5b52, U+5b56, U+5b5a-5b5c, U+5b5e-5b5f, U+5b65, U+5b68-5b69, U+5b6e-5b71, U+5b73, U+5b75-5b76, U+5b7a, U+5b7c-5b84, U+5b86, U+5b8a-5b8b, U+5b8d-5b8e, U+5b90-5b91, U+5b93-5b94, U+5b96, U+5ba5-5ba6, U+5ba8-5ba9, U+5bac-5bad, U+5baf, U+5bb1-5bb2, U+5bb7-5bb8, U+5bba) ); /* noto-sans-jp-[44]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-44-400-normal.woff2", $range: (U+57b3, U+57b8, U+57bd, U+57c0, U+57c3, U+57c6-57c8, U+57cc, U+57cf, U+57d2-57d7, U+57dc-57de, U+57e0-57e1, U+57e3-57e4, U+57e6-57e7, U+57e9, U+57ed, U+57f0, U+57f4-57f6, U+57f8, U+57fb, U+57fd-57ff, U+5803-5804, U+5808-580d, U+5819, U+581b, U+581d-5821, U+5826-5827, U+582d, U+582f-5830, U+5832, U+5835, U+5839, U+583d, U+583f-5840, U+5849, U+584b-584d, U+584f-5852, U+5855, U+5858-5859, U+585f, U+5861-5862, U+5864, U+5867-5868, U+586d, U+5870, U+5872, U+5878-5879, U+587c, U+587f-5881, U+5885, U+5887-588d, U+588f-5890, U+5894, U+5896, U+5898, U+589d-589e, U+58a0-58a2, U+58a6, U+58a9-58ab, U+58ae, U+58b1-58b3, U+58b8-58bc, U+58be, U+58c2-58c5, U+58c8, U+58cd-58ce, U+58d0-58da, U+58dc-58e2, U+58e4-58e5, U+58e9, U+58ec, U+58ef, U+58f3-58f4, U+58f7, U+58f9, U+58fb-58fd, U+5902, U+5905-5906, U+590a-590d, U+5910, U+5912-5914, U+5918-5919, U+591b, U+591d, U+591f, U+5921, U+5923-5925, U+5928, U+592c-592d, U+592f-5930, U+5932-5933, U+5935-5936, U+5938-5939, U+593d-593f, U+5943, U+5946, U+594e, U+5950, U+5952-5953, U+5955, U+5957-595b, U+595d-5961, U+5963, U+5967, U+5969, U+596b-596d, U+596f, U+5972, U+5975-5976, U+5978-5979, U+597b-597c, U+5981) ); /* noto-sans-jp-[45]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-45-400-normal.woff2", $range: (U+5616-5617, U+5619, U+561b, U+5620, U+5628, U+562c, U+562f-5639, U+563b-563d, U+563f-5641, U+5643-5644, U+5646-5647, U+5649, U+564b, U+564d-5650, U+5653-5654, U+565e, U+5660-5664, U+5666, U+5669-566d, U+566f, U+5671-5672, U+5675-5676, U+5678, U+567a, U+5680, U+5684-5688, U+568a-568c, U+568f, U+5694-5695, U+5699-569a, U+569d-56a0, U+56a5-56a9, U+56ab-56ae, U+56b1-56b4, U+56b6-56b7, U+56bc, U+56be, U+56c0, U+56c2-56c3, U+56c5, U+56c8-56d1, U+56d3, U+56d7-56d9, U+56dc-56dd, U+56df, U+56e1, U+56e4-56e8, U+56eb, U+56ed-56ee, U+56f1, U+56f6-56f7, U+56f9, U+56ff-5704, U+5707-570a, U+570c-570d, U+5711, U+5713, U+5715-5716, U+5718, U+571a-571d, U+5720-5726, U+5729-572a, U+572c, U+572e-572f, U+5733-5734, U+5737-5738, U+573b, U+573d-573f, U+5745-5746, U+574c-574f, U+5751-5752, U+5759, U+575f, U+5761-5762, U+5764-5765, U+5767-5769, U+576b, U+576d-5771, U+5773-5775, U+5777, U+5779-577c, U+577e-577f, U+5781, U+5783, U+5788-5789, U+578c, U+5793-5795, U+5797, U+5799-579a, U+579c-57a1, U+57a4, U+57a7-57aa, U+57ac, U+57ae, U+57b0) ); /* noto-sans-jp-[46]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-46-400-normal.woff2", $range: (U+543f-5440, U+5443-5444, U+5447, U+544c-544f, U+5455, U+545e, U+5462, U+5464, U+5466-5467, U+5469, U+546b-546e, U+5470-5471, U+5474-5477, U+547b, U+547f-5481, U+5483-5486, U+5488-548b, U+548d-5492, U+5495-5496, U+549c, U+549f-54a2, U+54a4, U+54a6-54af, U+54b1, U+54b7-54bc, U+54be-54bf, U+54c2-54c4, U+54c6-54c8, U+54ca, U+54cd-54ce, U+54d8, U+54e0, U+54e2, U+54e5-54e6, U+54e8-54ea, U+54ec-54ef, U+54f1, U+54f3, U+54f6, U+54fc-5501, U+5505, U+5508-5509, U+550c-550f, U+5514-5516, U+5527, U+552a-552b, U+552e, U+5532-5533, U+5535-5536, U+5538-5539, U+553b-553d, U+5540-5541, U+5544-5545, U+5547, U+5549-554a, U+554c-554d, U+5550-5551, U+5556-5558, U+555a-555e, U+5560-5561, U+5563-5564, U+5566, U+557b-5583, U+5586-5588, U+558a, U+558e-558f, U+5591-5594, U+5597, U+5599, U+559e-559f, U+55a3-55a4, U+55a8-55a9, U+55ac-55ae, U+55b2, U+55bf, U+55c1, U+55c3-55c4, U+55c6-55c7, U+55c9, U+55cb-55cc, U+55ce, U+55d1-55d4, U+55d7-55d8, U+55da-55db, U+55dd-55df, U+55e2, U+55e4, U+55e9, U+55ec, U+55ee, U+55f1, U+55f6-55f9, U+55fd-55ff, U+5605, U+5607-5608, U+560a, U+560d-5612) ); /* noto-sans-jp-[47]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-47-400-normal.woff2", $range: (U+528d, U+5291-5298, U+529a, U+529c, U+52a4-52a7, U+52ab-52ad, U+52af-52b0, U+52b5-52b8, U+52ba-52be, U+52c0-52c1, U+52c4-52c6, U+52c8, U+52ca, U+52cc-52cd, U+52cf-52d2, U+52d4, U+52d6-52d7, U+52db-52dc, U+52de, U+52e0-52e1, U+52e3, U+52e5-52e6, U+52e8-52ea, U+52ec, U+52f0-52f1, U+52f3-52fb, U+5300-5301, U+5303, U+5306-5308, U+530a-530d, U+530f-5311, U+5313, U+5315, U+5318-531f, U+5321, U+5323-5325, U+5327-532d, U+532f-5333, U+5335, U+5338, U+533c-533e, U+5340, U+5342, U+5345-5346, U+5349, U+534b-534c, U+5359, U+535b, U+535e, U+5361, U+5363-5367, U+5369, U+536c-536e, U+5372, U+5377, U+5379-537b, U+537d-537f, U+5382-5383, U+5387-5389, U+538e, U+5393-5394, U+5396, U+5398-5399, U+539d, U+53a0-53a1, U+53a4-53a6, U+53a9-53ab, U+53ad-53b0, U+53b2, U+53b4-53b8, U+53ba, U+53bd, U+53c0-53c1, U+53c3-53c5, U+53cf, U+53d2-53d3, U+53d5, U+53da-53db, U+53dd-53e0, U+53e2, U+53e6-53e8, U+53ed-53ee, U+53f4-53f5, U+53fa, U+5401-5403, U+540b, U+540f, U+5412-5413, U+541a, U+541d-541e, U+5421, U+5424, U+5427-542a, U+542c-542f, U+5431, U+5433-5436, U+543c-543d) ); /* noto-sans-jp-[48]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-48-400-normal.woff2", $range: (U+50dd-50df, U+50e1-50e6, U+50e8-50e9, U+50ed-50f6, U+50f9-50fb, U+50fe, U+5101-5103, U+5106-5109, U+510b-510e, U+5110, U+5112, U+5114-511e, U+5121, U+5123, U+5127-5128, U+512c-512d, U+512f, U+5131, U+5133-5135, U+5137-513c, U+513f-5142, U+5147, U+514a, U+514c, U+514f, U+5152-5155, U+5157-5158, U+515f-5160, U+5162, U+5164, U+5166-5167, U+5169-516a, U+516e, U+5173-5174, U+5179, U+517b, U+517e, U+5180, U+5182-5184, U+5189, U+518b-518c, U+518e-5191, U+5193, U+5195-5196, U+5198, U+519d, U+51a1-51a4, U+51a6, U+51a9-51ab, U+51ad, U+51b0-51b3, U+51b5, U+51b8, U+51ba, U+51bc-51bf, U+51c2-51c3, U+51c5, U+51c8-51cb, U+51cf, U+51d1-51d6, U+51d8, U+51de-51e0, U+51e2, U+51e5, U+51e7, U+51e9, U+51ec-51ee, U+51f2-51f5, U+51f7, U+51fe, U+5201-5202, U+5204-5205, U+520b, U+520e, U+5212-5216, U+5218, U+5222, U+5226-5228, U+522a-522b, U+522e, U+5231-5233, U+5235, U+523c, U+5244-5245, U+5249, U+524b-524c, U+524f, U+5254-5255, U+5257-5258, U+525a, U+525c-5261, U+5266, U+5269, U+526c, U+526e, U+5271, U+5273-5274, U+5277-5279, U+527d, U+527f-5280, U+5282-5285, U+5288-528a, U+528c) ); /* noto-sans-jp-[49]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-49-400-normal.woff2", $range: (U+4f57-4f58, U+4f5a-4f5b, U+4f5d-4f5f, U+4f63-4f64, U+4f69-4f6a, U+4f6c, U+4f6e-4f71, U+4f76-4f7e, U+4f81-4f85, U+4f88-4f8a, U+4f8c, U+4f8e-4f90, U+4f92-4f94, U+4f96-4f9a, U+4f9e-4fa0, U+4fab, U+4fad, U+4faf, U+4fb2, U+4fb7, U+4fb9, U+4fbb-4fbe, U+4fc0-4fc1, U+4fc4-4fc6, U+4fc8-4fc9, U+4fcb-4fd4, U+4fd8, U+4fda-4fdc, U+4fdf-4fe0, U+4fe2, U+4fe4-4fe6, U+4fef-4ff2, U+4ff6, U+4ffc-5002, U+5004-5007, U+500a, U+500c, U+500e-5011, U+5013-5014, U+5016-5018, U+501a-501e, U+5021-5023, U+5025-502a, U+502c-502e, U+5030, U+5032-5033, U+5035, U+5039, U+503b, U+5040-5043, U+5045-5048, U+504a, U+504c, U+504e, U+5050-5053, U+5055-5057, U+5059-505a, U+505f-5060, U+5062-5063, U+5066-5067, U+506a, U+506c-506d, U+5070-5072, U+5077-5078, U+5080-5081, U+5083-5086, U+5088, U+508a, U+508e-5090, U+5092-5096, U+509a-509c, U+509e-50a3, U+50aa, U+50ad, U+50af-50b4, U+50b9-50bb, U+50bd, U+50c0, U+50c2-50c4, U+50c7, U+50c9-50ca, U+50cc, U+50ce, U+50d0-50d1, U+50d3-50d4, U+50d6, U+50d8-50d9, U+50dc) ); /* noto-sans-jp-[50]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-50-400-normal.woff2", $range: (U+4093, U+4103, U+4105, U+4148, U+414f, U+4163, U+41b4, U+41bf, U+41e6, U+41ee, U+41f3, U+4207, U+420e, U+4264, U+4293, U+42c6, U+42d6, U+42dd, U+4302, U+432b, U+4343, U+43ee, U+43f0, U+4408, U+440c, U+4417, U+441c, U+4422, U+4453, U+445b, U+4476, U+447a, U+4491, U+44b3, U+44be, U+44d4, U+4508, U+450d, U+4525, U+4543, U+457a, U+459d, U+45b8, U+45be, U+45e5, U+45ea, U+460f-4610, U+4641, U+4665, U+46a1, U+46ae-46af, U+470c, U+471f, U+4764, U+47e6, U+47fd, U+4816, U+481e, U+4844, U+484e, U+48b5, U+49b0, U+49e7, U+49fa, U+4a04, U+4a29, U+4abc, U+4b38, U+4b3b, U+4b7e, U+4bc2, U+4bca, U+4bd2, U+4be8, U+4c17, U+4c20, U+4c38, U+4cc4, U+4cd1, U+4ce1, U+4d07, U+4d77, U+4e02, U+4e04-4e05, U+4e0c, U+4e0f-4e12, U+4e15, U+4e17, U+4e19, U+4e1e-4e1f, U+4e23-4e24, U+4e28-4e2c, U+4e2e-4e31, U+4e35-4e37, U+4e3f-4e42, U+4e44, U+4e47-4e48, U+4e4d-4e4e, U+4e51, U+4e55-4e56, U+4e58, U+4e5a-4e5c, U+4e62-4e63, U+4e68-4e69, U+4e74-4e75, U+4e79, U+4e7f, U+4e82, U+4e85, U+4e8a, U+4e8d-4e8e, U+4e96-4e99, U+4e9d-4ea0, U+4ea2, U+4ea5-4ea6, U+4ea8, U+4eaf-4eb0, U+4eb3, U+4eb6, U+4eb9, U+4ebb-4ebc, U+4ec2-4ec4, U+4ec6-4ec8, U+4ecd, U+4ed0, U+4ed7, U+4eda-4edb, U+4edd-4ee2, U+4ee8, U+4eeb, U+4eed, U+4eef, U+4ef1, U+4ef3, U+4ef5, U+4ef7, U+4efc-4f00, U+4f02-4f03, U+4f08-4f09, U+4f0b-4f0d, U+4f12, U+4f15-4f17, U+4f19, U+4f1c, U+4f2b, U+4f2e, U+4f30-4f31, U+4f33, U+4f35-4f37, U+4f39, U+4f3b, U+4f3e, U+4f40, U+4f42-4f43, U+4f48-4f49, U+4f4b-4f4c, U+4f52, U+4f54, U+4f56) ); /* noto-sans-jp-[51]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-51-400-normal.woff2", $range: (U+3395-339b, U+339e-33a0, U+33a2-33ff, U+3402, U+3405-3406, U+3427, U+342c, U+342e, U+3468, U+346a, U+3488, U+3492, U+34b5, U+34bc, U+34c1, U+34c7, U+34db, U+351f, U+353e, U+355d-355e, U+3563, U+356e, U+35a6, U+35a8, U+35c5, U+35da, U+35de, U+35f4, U+3605, U+3614, U+364a, U+3691, U+3696, U+3699, U+36cf, U+3761-3762, U+376b-376c, U+3775, U+378d, U+37c1, U+37e2, U+37e8, U+37f4, U+37fd, U+3800, U+382f, U+3836, U+3840, U+385c, U+3861, U+38a1, U+38ad, U+38fa, U+3917, U+391a, U+396f, U+39a4, U+39b8, U+3a5c, U+3a6e, U+3a73, U+3a85, U+3ac4, U+3acb, U+3ad6-3ad7, U+3aea, U+3af3, U+3b0e, U+3b1a, U+3b1c, U+3b22, U+3b35, U+3b6d, U+3b77, U+3b87-3b88, U+3b8d, U+3ba4, U+3bb6, U+3bc3, U+3bcd, U+3bf0, U+3bf3, U+3c0f, U+3c26, U+3cc3, U+3cd2, U+3d11, U+3d1e, U+3d31, U+3d4e, U+3d64, U+3d9a, U+3dc0, U+3dcc, U+3dd4, U+3e05, U+3e3f-3e40, U+3e60, U+3e66, U+3e68, U+3e83, U+3e8a, U+3e94, U+3eda, U+3f57, U+3f72, U+3f75, U+3f77, U+3fae, U+3fb1, U+3fc9, U+3fd7, U+3fdc, U+4039, U+4058) ); /* noto-sans-jp-[52]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-52-400-normal.woff2", $range: (U+32b5-332b, U+332d-3394) ); /* noto-sans-jp-[53]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-53-400-normal.woff2", $range: (U+31c8-31e3, U+31f0-321e, U+3220-3230, U+3232-32b4) ); /* noto-sans-jp-[54]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-54-400-normal.woff2", $range: (U+3028-303f, U+3094-3096, U+309f-30a0, U+30ee, U+30f7-30fa, U+30ff, U+3105-312f, U+3131-3163, U+3165-318e, U+3190-31bb, U+31c0-31c7) ); /* noto-sans-jp-[55]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-55-400-normal.woff2", $range: (U+2f14-2fd5, U+2ff0-2ffb, U+3004, U+3013, U+3016-301b, U+301e, U+3020-3027) ); /* noto-sans-jp-[56]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-56-400-normal.woff2", $range: (U+25e4-25e6, U+2601-2603, U+2609, U+260e-260f, U+2616-2617, U+261c-261f, U+262f, U+2641, U+2660, U+2662-2664, U+2666-2668, U+266d-266e, U+2672-267d, U+26bd-26be, U+2702, U+271a, U+273d, U+2740, U+2756, U+2776-2793, U+27a1, U+2934-2935, U+29bf, U+29fa-29fb, U+2b05-2b07, U+2b1a, U+2b95, U+2e3a-2e3b, U+2e80-2e99, U+2e9b-2ef3, U+2f00-2f13) ); /* noto-sans-jp-[57]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-57-400-normal.woff2", $range: (U+24d1-24ff, U+2503-2513, U+2515-2516, U+2518-251b, U+251d-2522, U+2524-259f, U+25a2-25ab, U+25b1, U+25b7, U+25c0-25c1, U+25c9-25ca, U+25cc, U+25d0-25d3, U+25e2-25e3) ); /* noto-sans-jp-[58]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-58-400-normal.woff2", $range: (U+2105, U+2109-210a, U+210f, U+2116, U+2121, U+2126-2127, U+212b, U+212e, U+2135, U+213b, U+2194-2199, U+21b8-21b9, U+21c4-21c6, U+21cb-21cc, U+21d0, U+21e6-21e9, U+21f5, U+2202-2203, U+2205-2206, U+2208-220b, U+220f, U+2211, U+2213, U+2215, U+221a, U+221d, U+2220, U+2223, U+2225-2226, U+2228, U+222a-222e, U+2234-2237, U+223d, U+2243, U+2245, U+2248, U+224c, U+2260, U+2262, U+2264-2265, U+226e-226f, U+2272-2273, U+2276-2277, U+2283-2287, U+228a-228b, U+2295-2299, U+22a0, U+22a5, U+22bf, U+22da-22db, U+22ef, U+2305-2307, U+2318, U+2329-232a, U+23b0-23b1, U+23be-23cc, U+23ce, U+23da-23db, U+2423, U+2469-24d0) ); /* noto-sans-jp-[59]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-59-400-normal.woff2", $range: (U+a1-a4, U+a6-a7, U+aa, U+ac-ad, U+b5-b6, U+b8-ba, U+bc-c8, U+ca-cc, U+ce-d5, U+d9-db, U+dd-df, U+e6, U+ee, U+f0, U+f5, U+f7, U+f9, U+fb, U+fe-102, U+110-113, U+11a-11b, U+128-12b, U+143-144, U+147-148, U+14c, U+14e-14f, U+152-153, U+168-16d, U+192, U+1a0-1a1, U+1af, U+1cd-1dc, U+1f8-1f9, U+251, U+261, U+2bb, U+2c7, U+2c9, U+2ea-2eb, U+304, U+307, U+30c, U+1e3e-1e3f, U+1ea0-1ebe, U+1ec0-1ec6, U+1ec8-1ef9, U+2011-2012, U+2016, U+2018-201a, U+201e, U+2021, U+2030, U+2033, U+2035, U+2042, U+2047, U+2051, U+2074, U+20a9, U+20ab-20ac, U+20dd-20de, U+2100) ); /* noto-sans-jp-[60]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-60-400-normal.woff2", $range: (U+2227, U+26a0, U+2713, U+301f, U+4ff8, U+5239, U+526a, U+54fa, U+5740, U+5937, U+5993, U+59fb, U+5a3c, U+5c41, U+6028, U+626e, U+646f, U+647a, U+64b0, U+64e2, U+65a7, U+66fe, U+6727, U+6955, U+6bef, U+6f23, U+724c, U+767c, U+7a83, U+7ac4, U+7b67, U+8000, U+8471, U+8513, U+8599, U+86db, U+8718, U+87f2, U+88f3, U+8ad2, U+8e2a, U+8fa3, U+95a5, U+9798, U+9910, U+9957, U+9bab, U+9c3b, U+9daf, U+ff95) ); /* noto-sans-jp-[61]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-61-400-normal.woff2", $range: (U+a8, U+2032, U+2261, U+2282, U+3090, U+30f1, U+339c, U+535c, U+53d9, U+56a2, U+56c1, U+5806, U+589f, U+59d0, U+5a7f, U+60e0, U+639f, U+65af, U+68fa, U+69ae, U+6d1b, U+6ef2, U+71fb, U+725d, U+7262, U+75bc, U+7768, U+7940, U+79bf, U+7bed, U+7d68, U+7dfb, U+814b, U+8207, U+83e9, U+8494, U+8526, U+8568, U+85ea, U+86d9, U+87ba, U+8861, U+887f, U+8fe6, U+9059, U+9061, U+916a, U+976d, U+97ad, U+9ece) ); /* noto-sans-jp-[62]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-62-400-normal.woff2", $range: (U+2d9, U+21d4, U+301d, U+515c, U+52fe, U+5420, U+5750, U+5766, U+5954, U+5b95, U+5f8a, U+5f98, U+620c, U+621f, U+641c, U+66d9, U+676d, U+6775, U+67f5, U+694a, U+6a02, U+6a3a, U+6a80, U+6c23, U+6c72, U+6dcb, U+6faa, U+707c, U+71c8, U+7422, U+74e2, U+7791, U+7825, U+7a14, U+7a1c, U+7c95, U+7fc1, U+82a5, U+82db, U+8304, U+853d, U+8cd3, U+8de8, U+8f0c, U+8f3f, U+9091, U+91c7, U+929a, U+98af, U+9913) ); /* noto-sans-jp-[63]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-63-400-normal.woff2", $range: (U+2ca-2cb, U+2229, U+2468, U+2669, U+266f, U+273f, U+4ec0, U+4f60, U+4fb6, U+5347, U+540e, U+543b, U+5b0c, U+5d4c, U+5f14, U+5f9e, U+6155, U+62d0, U+6602, U+6666, U+66f3, U+67a2, U+67ca, U+69cc, U+6d29, U+6d9b, U+6e3e, U+6f81, U+7109, U+73c0, U+73c2, U+7425, U+7435-7436, U+7525, U+7554, U+785d, U+786b, U+7ae3, U+7b94, U+7d18, U+81bf, U+8511, U+8549, U+9075, U+9640, U+98e2, U+9e9f, U+ff96) ); /* noto-sans-jp-[64]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-64-400-normal.woff2", $range: (U+2467, U+4ece, U+4ed4, U+4f91, U+4fae, U+534d, U+53c9, U+54b3, U+586b, U+5944, U+5b78, U+5df7, U+5f77, U+6101, U+6167-6168, U+61a4, U+62d9, U+698a, U+699b, U+6a59, U+6cc4, U+6e07, U+7099, U+75d2, U+77ad, U+7953, U+7984, U+7a92, U+7baa, U+7dbb, U+817f, U+82ad, U+85e9, U+868a, U+8caa, U+8f44, U+9017, U+907c, U+908a, U+92f3, U+936e, U+9435, U+978d, U+9838, U+9a28, U+9b41, U+9ba8, U+9c57, U+9eb9) ); /* noto-sans-jp-[65]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-65-400-normal.woff2", $range: (U+b1, U+309b, U+4e5e, U+51f1, U+5506, U+55c5, U+58cc, U+59d1, U+5c51, U+5ef7, U+6284, U+62d7, U+6689, U+673d, U+6a2b, U+6a8e, U+6a9c, U+6d63, U+6dd1, U+70b8, U+7235, U+72db, U+72f8, U+7560, U+7c9b, U+7ce7, U+7e1e, U+80af, U+82eb, U+8463, U+8499, U+85dd, U+86ee, U+8a60, U+8a6e, U+8c79, U+8e87, U+8e8a, U+8f5f, U+9010, U+918d, U+9190, U+965b, U+97fb, U+9ab8, U+9bad, U+9d3b, U+9d5c, U+9dfa, U+9e93) ); /* noto-sans-jp-[66]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-66-400-normal.woff2", $range: (U+2020, U+3003, U+3231, U+4e9b, U+4f3d, U+4f47, U+51b6, U+51dc, U+53e1, U+5bc5, U+602f, U+60bc, U+61c9, U+633d, U+637b, U+6492, U+65fa, U+660f, U+66f0, U+6703, U+681e, U+6876, U+6893, U+6912, U+698e, U+6c7d, U+714c, U+7169, U+71d5, U+725f, U+72d7, U+745b, U+74dc, U+75e2, U+7891, U+7897, U+7dcb, U+810a, U+8218, U+8339, U+840e, U+852d, U+8823, U+8a0a, U+9089, U+919c, U+971c, U+9ad9, U+ff4a, U+ff5a) ); /* noto-sans-jp-[67]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-67-400-normal.woff2", $range: (U+2466, U+2600, U+4eab, U+4fe3, U+4ff5, U+51a5, U+51f0, U+536f, U+53d4, U+53f1, U+54a5, U+559d, U+55e3, U+58fa, U+5962, U+59ea, U+5c16, U+5cef, U+5d16, U+5f10, U+5fd6, U+6190, U+6216, U+634f, U+63bb, U+66d6, U+6756, U+6bc5, U+6e26, U+727d, U+731f, U+76f2, U+7729, U+7a7f, U+7aff, U+7c9f, U+818f, U+8236, U+82b9, U+8338, U+85aa, U+88b4, U+8b33, U+904d, U+93a7, U+96cc, U+96eb, U+9aed, U+9b8e, U+fa11) ); /* noto-sans-jp-[68]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-68-400-normal.woff2", $range: (U+251c, U+2523, U+4e14, U+545f, U+54bd, U+553e, U+55dc, U+56da, U+589c, U+5b55, U+5bb5, U+5ce1, U+5df4, U+5eb6, U+5ec9, U+6191, U+62f7, U+6357, U+64a5, U+6591, U+65bc, U+6897, U+6e1a, U+7063, U+711a, U+721b, U+722c, U+75b9, U+75d5, U+75fa, U+7766, U+7aae, U+7b48, U+7b8b, U+7d21, U+7e55, U+7f75, U+842c, U+8910, U+8a63, U+8b39, U+8b5a, U+8cdc, U+8d74, U+907d, U+91e7, U+9306, U+96bc, U+98f4, U+9ac4) ); /* noto-sans-jp-[69]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-69-400-normal.woff2", $range: (U+2003, U+2312, U+266c, U+4f86, U+51ea, U+5243, U+5256, U+541f, U+5841, U+59dc, U+5df3, U+601c, U+60e7, U+632b, U+638c, U+64ad, U+6881, U+697c, U+69cd, U+6c50, U+6d2a, U+6fc1, U+7027, U+7058, U+70f9, U+714e, U+7345, U+751a, U+760d, U+764c, U+77db, U+7d79, U+7e8f, U+80ce, U+814e, U+81fc, U+8247, U+8278, U+85a9, U+8a03, U+90ed, U+9784, U+9801, U+984e, U+99b3, U+9bc9, U+9bdb, U+9be8, U+9e78, U+ff6b) ); /* noto-sans-jp-[70]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-70-400-normal.woff2", $range: (U+266b, U+3006, U+5176, U+5197, U+51a8, U+51c6, U+52f2, U+5614, U+5875, U+5a2f, U+5b54, U+5ce0, U+5dba, U+5deb, U+5e63, U+5f59, U+5fcc, U+6068, U+6367, U+68b6, U+6a0b, U+6b64, U+6e15, U+6eba, U+7272, U+72a0, U+7947, U+7985, U+79e6, U+79e9, U+7a3d, U+7a9f, U+7aaf, U+7b95, U+7f60, U+7f9e, U+7fe0, U+8098, U+80ba, U+8106, U+82d4, U+831c, U+87f9, U+8a1f, U+8acf, U+90c1, U+920d, U+9756, U+fe43, U+ff94) ); /* noto-sans-jp-[71]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-71-400-normal.woff2", $range: (U+af, U+2465, U+2517, U+33a1, U+4f10, U+50c5, U+51b4, U+5384, U+5606, U+5bb0, U+5cac, U+5ee3, U+618e, U+61f2, U+62c9, U+66ab, U+66f9, U+6816, U+6960, U+6b3e, U+6f20, U+7078, U+72d0, U+73ed, U+7ad9, U+7b1b, U+7be4, U+7d62, U+7f51, U+80b4, U+80f4, U+8154, U+85fb, U+865c, U+8702, U+895f, U+8aed, U+8b90, U+8ced, U+8fbf, U+91d8, U+9418, U+9583, U+9591, U+9813, U+982c, U+9bd6, U+ff46, U+ff7f, U+ff88) ); /* noto-sans-jp-[72]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-72-400-normal.woff2", $range: (U+4e91, U+508d, U+50e7, U+514e, U+51f6, U+5446, U+5504, U+584a, U+59a8, U+59d3, U+5a46, U+5ac9, U+6020, U+60a6, U+6148, U+621a, U+6234, U+64c1, U+6523, U+675c, U+67d1, U+6953, U+6ccc, U+6df5, U+6e13, U+6f06, U+723a, U+7325, U+74e6, U+758e, U+75ab, U+75d9, U+7a40, U+8096, U+82fa, U+8587, U+8594, U+8a6b, U+8ab9, U+8b17, U+8b83, U+937c, U+963b, U+9673, U+96db, U+9ce9, U+9f4b, U+ff67, U+ff82, U+ff93) ); /* noto-sans-jp-[73]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-73-400-normal.woff2", $range: (U+221e, U+2514, U+51f9, U+5270, U+5449, U+5824, U+59a5, U+5a29, U+5d07, U+5e16, U+60e3, U+614c, U+6276, U+643e, U+64ab, U+6562, U+6681, U+670b, U+6734, U+67af, U+6a3d, U+6b05, U+6dc0, U+6e4a, U+7259, U+732a, U+7409, U+78a7, U+7a6b, U+8015, U+809b, U+817a, U+830e, U+837b, U+85ab, U+8a23, U+8a93, U+8b00, U+8b19, U+8b21, U+8cbf, U+8fb0, U+901d, U+91b8, U+9320, U+932c, U+9688, U+96f6, U+9df2, U+ff6a) ); /* noto-sans-jp-[74]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-74-400-normal.woff2", $range: (U+2002, U+2025, U+4f8d, U+51e1, U+51f8, U+5507, U+5598, U+58f1, U+5983, U+59ac, U+5c3c, U+5de7, U+5e7d, U+5eca, U+5f61, U+606d, U+60f9, U+636e, U+64ec, U+67da, U+67ff, U+6813, U+68f2, U+693f, U+6b6a, U+6bbb, U+6ef4, U+7092, U+717d, U+7261, U+73c8, U+7432, U+7483, U+76fe, U+7709, U+78d0, U+81a3, U+81b3, U+82af, U+8305, U+8309, U+8870, U+88fe, U+8cd1, U+8d66, U+906e, U+971e, U+9812, U+ff79, U+ff90) ); /* noto-sans-jp-[75]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-75-400-normal.woff2", $range: (U+2464, U+2501, U+2640, U+2642, U+339d, U+4f0e, U+5091, U+50b5, U+5132, U+51cc, U+558b, U+55aa, U+585e, U+5bee, U+5dfe, U+60b6, U+62b9, U+6349, U+6566, U+6590, U+6842, U+689d, U+6a58, U+6c70, U+6ff1, U+7815, U+7881, U+7aaa, U+7bc7, U+7def, U+7fa8, U+8017, U+8036, U+8061, U+821f, U+8429, U+8ce0, U+8e74, U+9019, U+90ca, U+9162, U+932f, U+93ae, U+9644, U+990c, U+9cf3, U+ff56, U+ff6e, U+ff7e, U+ff85) ); /* noto-sans-jp-[76]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-76-400-normal.woff2", $range: (U+2266-2267, U+4f2f, U+5208, U+5451, U+546a, U+5589, U+576a, U+5815, U+5a9a, U+5b9b, U+5c3a, U+5efb, U+5faa, U+6109, U+6643, U+6652, U+695a, U+69fd, U+6b86, U+6bb4, U+6daf, U+7089, U+70cf, U+7a00, U+7a4f, U+7b39, U+7d33, U+80e1, U+828b, U+82a6, U+86cd, U+8c8c, U+8cca, U+8df3, U+9077, U+9175, U+91dc, U+925b, U+9262, U+9271, U+92ed, U+9855, U+9905, U+9d28, U+ff3f, U+ff58, U+ff68, U+ff6d, U+ff9c) ); /* noto-sans-jp-[77]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-77-400-normal.woff2", $range: (U+2207, U+25ef, U+309c, U+4e4f, U+5146, U+51dd, U+5351, U+540a, U+5629, U+5eb5, U+5f04, U+5f13, U+60dc, U+6212, U+63b4, U+642c, U+6627, U+66a6, U+66c7, U+66fd, U+674e, U+6b96, U+6c4e, U+6df3, U+6e67, U+6f84, U+72fc, U+733f, U+7c97, U+7db1, U+7e4d, U+816b, U+82d1, U+84cb, U+854e, U+8607, U+86c7, U+871c, U+8776, U+8a89, U+8fc4, U+91a4, U+9285, U+9685, U+9903, U+9b31, U+9f13, U+ff42, U+ff74, U+ff91) ); /* noto-sans-jp-[78]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-78-400-normal.woff2", $range: (U+4e32, U+51db, U+53a8, U+53ea, U+5609, U+5674, U+5a92, U+5e7e, U+6115, U+611a, U+62cc, U+62ed, U+63c9, U+64b9, U+64e6, U+65cb, U+6606, U+6731, U+683d, U+6afb, U+7460, U+771e, U+78ef, U+7b26, U+7b51, U+7cde, U+7d10, U+7d2f, U+7d46, U+80de, U+819c, U+84b2, U+85cd, U+865a, U+8ecc, U+9022, U+90b8, U+9192, U+9675, U+96b7, U+99ff, U+ff44, U+ff55, U+ff6c, U+ff73, U+ff75, U+ff86, U+ff8d, U+ff92, U+ffe3) ); /* noto-sans-jp-[79]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-79-400-normal.woff2", $range: (U+25b3, U+30f5, U+4eae, U+4f46, U+4f51, U+5203, U+52ff, U+55a7, U+564c, U+565b, U+57f9, U+5805, U+5b64, U+5e06, U+5f70, U+5f90, U+60e8, U+6182, U+62f3, U+62fe, U+63aa, U+64a4, U+65d7, U+673a, U+6851, U+68cb, U+68df, U+6d1e, U+6e58, U+6e9d, U+77b3, U+7832, U+7c3f, U+7db4, U+7f70, U+80aa, U+80c6, U+8105, U+819d, U+8276, U+8679, U+8986, U+8c9d, U+8fc5, U+916c, U+9665, U+9699, U+96c0, U+9a19, U+ff8b) ); /* noto-sans-jp-[80]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-80-400-normal.woff2", $range: (U+2463, U+25a1, U+4ef0, U+5076, U+5098, U+51fd, U+5302, U+5448, U+54c9, U+570b, U+583a, U+5893, U+58a8, U+58ee, U+5949, U+5bdb, U+5f26, U+5f81, U+6052, U+6170, U+61c7, U+631f, U+635c, U+664b, U+69fb, U+6f01, U+7070, U+722a, U+745e, U+755c, U+76c6, U+78c1, U+79e4, U+7bb8, U+7d0b, U+81a8, U+82d7, U+8b5c, U+8f14, U+8fb1, U+8fbb, U+9283, U+9298, U+9a30, U+ff03, U+ff50, U+ff59, U+ff7b, U+ff8e-ff8f) ); /* noto-sans-jp-[81]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-81-400-normal.woff2", $range: (U+2010, U+2502, U+25b6, U+4f3a, U+514b, U+5265, U+52c3, U+5339, U+53ec, U+54c0, U+55b0, U+5854, U+5b8f, U+5cb3, U+5e84, U+60da, U+6247, U+6249, U+628a, U+62cd, U+65ac, U+6838, U+690e, U+6cf0, U+6f02, U+6f2c, U+6f70, U+708a, U+7434, U+75be, U+77ef, U+7c60, U+7c98, U+7d1b, U+7e2b, U+80a5, U+81e3, U+820c, U+8210, U+8475, U+862d, U+8650, U+8997, U+906d, U+91c8, U+9700, U+9727, U+9df9, U+ff3a, U+ff9a) ); /* noto-sans-jp-[82]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-82-400-normal.woff2", $range: (U+2103, U+5049, U+52b1, U+5320, U+5553, U+572d, U+58c7, U+5b5d, U+5bc2, U+5de3, U+5e61, U+5f80, U+61a9, U+67d0, U+67f4, U+6c88, U+6ca1, U+6ce5, U+6d78, U+6e9c, U+6f54, U+731b, U+73b2, U+74a7, U+74f6, U+75e9, U+7b20, U+7c8b, U+7f72, U+809d, U+8108, U+82b3, U+82bd, U+84b8, U+84c4, U+88c2, U+8ae6, U+8ef8, U+902e, U+9065, U+9326, U+935b, U+938c, U+9676, U+9694, U+96f7, U+9ed9, U+ff48, U+ff4c, U+ff81) ); /* noto-sans-jp-[83]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-83-400-normal.woff2", $range: (U+2500, U+3008-3009, U+4ead, U+4f0f, U+4fca, U+53eb, U+543e, U+57a2, U+5cf0, U+5e8f, U+5fe0, U+61b2, U+62d8, U+6442, U+64b2, U+6589, U+659c, U+67f1, U+68c4, U+6cb8, U+6d12, U+6de1, U+6fe1, U+70c8, U+723d, U+73e0, U+7656, U+773a, U+7948, U+7b87, U+7c92, U+7d3a, U+7e1b, U+7e4a, U+819a, U+8358, U+83c5, U+84bc, U+864e, U+8912, U+8c9e, U+8d05, U+92fc, U+9396, U+98fd, U+99d2, U+ff64, U+ff7a, U+ff83) ); /* noto-sans-jp-[84]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-84-400-normal.woff2", $range: (U+3014-3015, U+4e3c, U+5036, U+5075, U+533f, U+53e9, U+5531, U+5642, U+5984, U+59e6, U+5a01, U+5b6b, U+5c0b, U+5f25, U+6069, U+60a0, U+614e, U+62b5, U+62d2-62d3, U+6597, U+660c, U+674f, U+67cf, U+6841, U+6905, U+6cf3, U+6d32, U+6d69, U+6f64, U+716e, U+7761, U+7b52, U+7be0, U+7dbf, U+7de9, U+7f36, U+81d3, U+8302, U+8389, U+846c, U+84ee, U+8a69, U+9038, U+9d8f, U+ff47, U+ff4b, U+ff76, U+ff9b) ); /* noto-sans-jp-[85]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-85-400-normal.woff2", $range: (U+25c7, U+3007, U+504f, U+507d, U+51a0, U+52a3, U+5410, U+5510, U+559a, U+5782, U+582a, U+5c0a, U+5c3f, U+5c48, U+5f6b, U+6176, U+622f, U+6279, U+62bd, U+62dd, U+65ed, U+67b6, U+6817, U+6850, U+6d6a, U+6deb, U+6ea2, U+6edd, U+6f5c, U+72e9, U+73a9, U+7573, U+76bf, U+7950, U+7956, U+7f8a, U+7ffc, U+80a2, U+80c3, U+83ca, U+8a02, U+8a13, U+8df5, U+9375, U+983b, U+99b4, U+ff4e, U+ff71, U+ff89, U+ff97) ); /* noto-sans-jp-[86]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-86-400-normal.woff2", $range: (U+24, U+2022, U+2212, U+221f, U+2665, U+4ecf, U+5100, U+51cd, U+52d8, U+5378, U+53f6, U+574a, U+5982, U+5996, U+5c1a, U+5e1d, U+5f84, U+609f, U+61a7, U+61f8, U+6398, U+63ee, U+6676, U+6691, U+6eb6, U+7126, U+71e5, U+7687, U+7965, U+7d17, U+80a1, U+8107, U+8266, U+85a6, U+8987, U+8ca2, U+8cab, U+8e0a, U+9042, U+95c7, U+9810, U+9867, U+98fc, U+ff52-ff54, U+ff61, U+ff77, U+ff98-ff99) ); /* noto-sans-jp-[87]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-87-400-normal.woff2", $range: (U+b0, U+226a, U+2462, U+4e39, U+4fc3, U+4fd7, U+50be, U+50da, U+5200, U+5211, U+54f2, U+5618, U+596a, U+5b22, U+5bb4, U+5d50, U+60a3, U+63fa, U+658e, U+65e8, U+6669, U+6795, U+679d, U+67a0, U+6b3a, U+6e09, U+757f, U+7cd6, U+7dbe, U+7ffb, U+83cc, U+83f1, U+840c, U+845b, U+8846, U+8972, U+8a34, U+8a50, U+8a87, U+8edf, U+8ff0, U+90a6, U+9154, U+95a3, U+9663, U+9686, U+96c7, U+ff3c, U+ff7c, U+ff8a) ); /* noto-sans-jp-[88]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-88-400-normal.woff2", $range: (U+25bd, U+4e59, U+4ec1, U+4ff3, U+515a, U+518a, U+525b, U+5375, U+552f, U+57a3, U+5b9c, U+5c3d, U+5e3d, U+5e7b, U+5f0a, U+6094, U+6458, U+654f, U+67f3, U+6b8a, U+6bd2, U+6c37, U+6ce1, U+6e56, U+6e7f, U+6ed1, U+6ede, U+6f0f, U+70ad, U+7267, U+7363, U+786c, U+7a42, U+7db2, U+7f85, U+8178, U+829d, U+8896, U+8c5a, U+8cb0, U+8ce2, U+8ed2, U+9047, U+9177, U+970a, U+9ea6, U+ff1b, U+ff31, U+ff39, U+ff80) ); /* noto-sans-jp-[89]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-89-400-normal.woff2", $range: (U+a5, U+4e80, U+4f34, U+4f73, U+4f75, U+511f, U+5192, U+52aa, U+53c8, U+570f, U+57cb, U+596e, U+5d8b, U+5f66, U+5fd9, U+62db, U+62f6, U+6328, U+633f, U+63a7, U+6469, U+6bbf, U+6c41, U+6c57, U+6d44, U+6dbc, U+706f, U+72c2, U+72ed, U+7551, U+75f4, U+7949, U+7e26, U+7fd4, U+8150, U+8af8, U+8b0e, U+8b72, U+8ca7, U+934b, U+9a0e, U+9a12, U+9b42, U+ff41, U+ff43, U+ff45, U+ff49, U+ff4f, U+ff62-ff63) ); /* noto-sans-jp-[90]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-90-400-normal.woff2", $range: (U+4e18, U+4fb5, U+5104, U+52c7, U+5353, U+5374, U+53e5, U+587e, U+594f, U+5a20, U+5de1, U+5f18, U+5fcd, U+6291, U+62ab, U+6355, U+6392, U+63da, U+63e1, U+656c, U+6687, U+68b0-68b1, U+68d2, U+68da, U+6b27, U+6cbc, U+7159, U+7344, U+73cd, U+76df, U+790e, U+7cf8, U+8102, U+88c1, U+8aa0, U+8e0f, U+9178, U+92ad, U+9670, U+96c5, U+9cf4, U+9db4, U+ff3e, U+ff6f, U+ff72, U+ff78, U+ff7d, U+ff84, U+ff8c) ); /* noto-sans-jp-[91]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-91-400-normal.woff2", $range: (U+60, U+2200, U+226b, U+2461, U+517c, U+526f, U+5800, U+5b97, U+5bf8, U+5c01, U+5d29, U+5e4c, U+5e81, U+6065, U+61d0, U+667a, U+6696, U+6843, U+6c99, U+6d99, U+6ec5, U+6f22, U+6f6e, U+6fa4, U+6fef, U+71c3, U+72d9, U+7384, U+78e8, U+7a1a, U+7a32, U+7a3c, U+7adc, U+7ca7, U+7d2b, U+7dad, U+7e4b, U+80a9, U+8170, U+81ed, U+820e, U+8a17, U+8afe, U+90aa, U+914e, U+963f, U+99c4, U+9eba, U+9f3b, U+ff38) ); /* noto-sans-jp-[92]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-92-400-normal.woff2", $range: (U+2460, U+4e5f, U+4e7e, U+4ed9, U+501f, U+502b, U+5968, U+5974, U+5ac1, U+5b99, U+5ba3, U+5be7, U+5be9, U+5c64, U+5cb8, U+5ec3, U+5f1f, U+616e, U+6297, U+62e0, U+62ec, U+6368, U+642d, U+65e6, U+6717, U+676f, U+6b04, U+732e, U+7652, U+76ca, U+76d7, U+7802, U+7e70, U+7f6a, U+8133, U+81e8, U+866b, U+878d, U+88f8, U+8a5e, U+8cdb, U+8d08, U+907a, U+90e1, U+96f2, U+9f8d, U+ff35, U+ff37, U+ff40, U+ff9d) ); /* noto-sans-jp-[93]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-93-400-normal.woff2", $range: (U+21d2, U+25ce, U+300a-300b, U+4e89, U+4e9c, U+4ea1, U+5263, U+53cc, U+5426, U+5869, U+5947, U+598a, U+5999, U+5e55, U+5e72, U+5e79, U+5fae, U+5fb9, U+602a, U+6163, U+624d, U+6749, U+6c5a, U+6cbf, U+6d45, U+6dfb, U+6e7e, U+708e, U+725b, U+7763, U+79c0, U+7bc4, U+7c89, U+7e01, U+7e2e, U+8010, U+8033, U+8c6a, U+8cc3, U+8f1d, U+8f9b, U+8fb2, U+907f, U+90f7, U+9707, U+9818, U+9b3c, U+ff0a, U+ff4d) ); /* noto-sans-jp-[94]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-94-400-normal.woff2", $range: (U+2015, U+2190, U+4e43, U+5019, U+5247, U+52e7, U+5438, U+54b2, U+55ab, U+57f7, U+5bd2, U+5e8a, U+5ef6, U+6016, U+60b2, U+6162, U+6319, U+6551, U+6607, U+66b4, U+675f, U+67d4, U+6b20, U+6b53, U+6ce3, U+719f, U+75b2, U+770b, U+7720, U+77ac, U+79d2, U+7af9, U+7d05, U+7dca, U+8056, U+80f8, U+81f3, U+8352, U+885d, U+8a70, U+8aa4, U+8cbc, U+900f, U+9084, U+91e3, U+9451, U+96c4, U+99c6, U+9ad4, U+ff70) ); /* noto-sans-jp-[95]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-95-400-normal.woff2", $range: (U+2193, U+25b2, U+4e4b, U+516d, U+51c4, U+529f, U+52c9, U+5360, U+5442, U+5857, U+5915, U+59eb, U+5a9b, U+5c3b, U+6012, U+61b6, U+62b1, U+6311, U+6577, U+65e2, U+65ec, U+6613, U+6790, U+6cb9, U+7372, U+76ae, U+7d5e, U+7fcc, U+88ab, U+88d5, U+8caf, U+8ddd, U+8ecd, U+8f38, U+8f9e, U+8feb, U+9063, U+90f5, U+93e1, U+968a, U+968f, U+98fe, U+9ec4, U+ff1d, U+ff27, U+ff2a, U+ff36, U+ff3b, U+ff3d, U+ffe5) ); /* noto-sans-jp-[96]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-96-400-normal.woff2", $range: (U+4e03, U+4f38, U+50b7, U+5264, U+5348, U+5371, U+585a, U+58ca, U+5951, U+59b9, U+59d4, U+5b98, U+5f8b, U+6388, U+64cd, U+65e7, U+6803, U+6b6f, U+6d66, U+6e0b, U+6ecb, U+6fc3, U+72ac, U+773c, U+77e2, U+7968, U+7a74, U+7dba, U+7dd1, U+7e3e, U+808c, U+811a, U+8179, U+8239, U+8584, U+8a0e, U+8a72, U+8b66, U+8c46, U+8f29, U+90a3, U+9234, U+96f0, U+9769, U+9774, U+9aa8, U+ff26, U+ff28, U+ff9e-ff9f) ); /* noto-sans-jp-[97]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-97-400-normal.woff2", $range: (U+7e, U+b4, U+25c6, U+2661, U+4e92, U+4eee, U+4ffa, U+5144, U+5237, U+5287, U+52b4, U+58c1, U+5bff, U+5c04, U+5c06, U+5e95, U+5f31, U+5f93, U+63c3, U+640d, U+6557, U+6614, U+662f, U+67d3, U+690d, U+6bba, U+6e6f, U+72af, U+732b, U+7518, U+7ae0, U+7ae5, U+7af6, U+822a, U+89e6, U+8a3a, U+8a98, U+8cb8, U+8de1, U+8e8d, U+95d8, U+961c, U+96a3, U+96ea, U+9bae, U+ff20, U+ff22, U+ff29, U+ff2b-ff2c) ); /* noto-sans-jp-[98]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-98-400-normal.woff2", $range: (U+25cb, U+4e71, U+4f59, U+50d5, U+520a, U+5217, U+5230, U+523a-523b, U+541b, U+5439, U+5747, U+59c9, U+5bdf, U+5c31, U+5de8, U+5e7c, U+5f69, U+6050, U+60d1, U+63cf, U+663c, U+67c4, U+6885, U+6c38, U+6d6e, U+6db2, U+6df7, U+6e2c, U+6f5f, U+7532, U+76e3-76e4, U+7701, U+793c, U+79f0, U+7a93, U+7d00, U+7de0, U+7e54, U+8328, U+8840, U+969c, U+96e8, U+9811, U+9aea, U+9b5a, U+ff24, U+ff2e, U+ff57) ); /* noto-sans-jp-[99]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-99-400-normal.woff2", $range: (U+2191, U+505c, U+52e4, U+5305, U+535a, U+56e0, U+59bb, U+5acc, U+5b09, U+5b87, U+5c90, U+5df1, U+5e2d, U+5e33, U+5f3e, U+6298, U+6383, U+653b, U+6697, U+6804, U+6a39, U+6cca, U+6e90, U+6f2b, U+702c, U+7206, U+7236, U+7559, U+7565, U+7591, U+75c7, U+75db, U+7b4b, U+7bb1, U+7d99, U+7fbd, U+8131, U+885b, U+8b1d, U+8ff7, U+9003, U+9045, U+96a0, U+9732, U+990a, U+99d0, U+9e97, U+9f62, U+ff25, U+ff2d) ); /* noto-sans-jp-[100]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-100-400-normal.woff2", $range: (U+4e08, U+4f9d, U+5012, U+514d, U+51b7, U+5275, U+53ca, U+53f8, U+5584, U+57fc, U+5b9d, U+5bfa, U+5c3e, U+5f01, U+5fb4, U+5fd7, U+606f, U+62e1, U+6563, U+6674, U+6cb3, U+6d3e, U+6d74, U+6e1b, U+6e2f, U+718a, U+7247, U+79d8, U+7d14, U+7d66, U+7d71, U+7df4, U+7e41, U+80cc, U+8155, U+83d3, U+8a95, U+8ab2, U+8ad6, U+8ca1, U+9000, U+9006, U+9678, U+97d3, U+9808, U+98ef, U+9a5a, U+9b45, U+ff23, U+ff30) ); /* noto-sans-jp-[101]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-101-400-normal.woff2", $range: (U+25bc, U+3012, U+4ef2, U+4f0a, U+516b, U+5373, U+539a, U+53b3, U+559c, U+56f0, U+5727, U+5742, U+5965, U+59ff, U+5bc6, U+5dfb, U+5e45, U+5ead, U+5fb3, U+6211, U+6253, U+639b, U+63a8, U+6545, U+6575, U+6628, U+672d, U+68a8, U+6bdb, U+6d25, U+707d, U+767e, U+7834, U+7b46, U+7bc9, U+8074, U+82e6, U+8349, U+8a2a, U+8d70, U+8da3, U+8fce, U+91cc, U+967d, U+97ff, U+9996, U+ff1c, U+ff2f, U+ff32, U+ff34) ); /* noto-sans-jp-[102]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-102-400-normal.woff2", $range: (U+3d, U+5e, U+25cf, U+4e0e, U+4e5d, U+4e73, U+4e94, U+4f3c, U+5009, U+5145, U+51ac, U+5238, U+524a, U+53f3, U+547c, U+5802, U+5922, U+5a66, U+5c0e, U+5de6, U+5fd8, U+5feb, U+6797, U+685c, U+6b7b, U+6c5f-6c60, U+6cc9, U+6ce2, U+6d17, U+6e21, U+7167, U+7642, U+76db, U+8001, U+821e, U+8857, U+89d2, U+8b1b, U+8b70, U+8cb4, U+8cde, U+8f03, U+8f2a, U+968e, U+9b54, U+9e7f, U+9ebb, U+ff05, U+ff33) ); /* noto-sans-jp-[103]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-103-400-normal.woff2", $range: (U+500d, U+5074, U+50cd, U+5175, U+52e2, U+5352, U+5354, U+53f2, U+5409, U+56fa, U+5a18, U+5b88, U+5bdd, U+5ca9, U+5f92, U+5fa9, U+60a9, U+623f, U+6483, U+653f, U+666f, U+66ae, U+66f2, U+6a21, U+6b66, U+6bcd, U+6d5c, U+796d, U+7a4d, U+7aef, U+7b56, U+7b97, U+7c4d, U+7e04, U+7fa9, U+8377, U+83dc, U+83ef, U+8535, U+8863, U+88cf, U+88dc, U+8907, U+8acb, U+90ce, U+91dd, U+ff0b, U+ff0d, U+ff19, U+ff65) ); /* noto-sans-jp-[104]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-104-400-normal.woff2", $range: (U+4e01, U+4e21, U+4e38, U+52a9, U+547d, U+592e, U+5931, U+5b63, U+5c40, U+5dde, U+5e78, U+5efa, U+5fa1, U+604b, U+6075, U+62c5, U+632f, U+6a19, U+6c0f, U+6c11, U+6c96, U+6e05, U+70ba, U+71b1, U+7387, U+7403, U+75c5, U+77ed, U+795d, U+7b54, U+7cbe, U+7d19, U+7fa4, U+8089, U+81f4, U+8208, U+8336, U+8457, U+8a33, U+8c4a, U+8ca0, U+8ca8, U+8cc0, U+9014, U+964d, U+9803, U+983c, U+98db, U+ff17, U+ff21) ); /* noto-sans-jp-[105]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-105-400-normal.woff2", $range: (U+25, U+25a0, U+4e26, U+4f4e, U+5341, U+56f2, U+5bbf, U+5c45, U+5c55, U+5c5e, U+5dee, U+5e9c, U+5f7c, U+6255, U+627f, U+62bc, U+65cf, U+661f, U+666e, U+66dc, U+67fb, U+6975, U+6a4b, U+6b32, U+6df1, U+6e29, U+6fc0, U+738b, U+7686, U+7a76, U+7a81, U+7c73, U+7d75, U+7dd2, U+82e5, U+82f1, U+85ac, U+888b, U+899a, U+8a31, U+8a8c, U+8ab0, U+8b58, U+904a, U+9060, U+9280, U+95b2, U+984d, U+9ce5, U+ff18) ); /* noto-sans-jp-[106]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-106-400-normal.woff2", $range: (U+30f6, U+50ac, U+5178, U+51e6, U+5224, U+52dd, U+5883, U+5897, U+590f, U+5a5a, U+5bb3, U+5c65, U+5e03, U+5e2b, U+5e30, U+5eb7, U+6271, U+63f4, U+64ae, U+6574, U+672b, U+679a, U+6a29-6a2a, U+6ca2, U+6cc1, U+6d0b, U+713c, U+74b0, U+7981, U+7a0b, U+7bc0, U+7d1a, U+7d61, U+7fd2, U+822c, U+8996, U+89aa, U+8cac, U+8cbb, U+8d77, U+8def, U+9020, U+9152, U+9244, U+9662, U+967a, U+96e3, U+9759, U+ff16) ); /* noto-sans-jp-[107]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-107-400-normal.woff2", $range: (U+23, U+3c, U+2192, U+4e45, U+4efb, U+4f50, U+4f8b, U+4fc2, U+5024, U+5150, U+5272, U+5370, U+53bb, U+542b, U+56db, U+56e3, U+57ce, U+5bc4, U+5bcc, U+5f71, U+60aa, U+6238, U+6280, U+629c, U+6539, U+66ff, U+670d, U+677e-677f, U+6839, U+69cb, U+6b4c, U+6bb5, U+6e96, U+6f14, U+72ec, U+7389, U+7814, U+79cb, U+79d1, U+79fb, U+7a0e, U+7d0d, U+85e4, U+8d64, U+9632, U+96e2, U+9805, U+99ac, U+ff1e) ); /* noto-sans-jp-[108]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-108-400-normal.woff2", $range: (U+2605-2606, U+301c, U+4e57, U+4fee, U+5065, U+52df, U+533b, U+5357, U+57df, U+58eb, U+58f0, U+591c, U+592a-592b, U+5948, U+5b85, U+5d0e, U+5ea7, U+5ff5, U+6025, U+63a1, U+63a5, U+63db, U+643a, U+65bd, U+671d, U+68ee, U+6982, U+6b73, U+6bd4, U+6d88, U+7570, U+7b11, U+7d76, U+8077, U+8217, U+8c37, U+8c61, U+8cc7, U+8d85, U+901f, U+962a, U+9802, U+9806, U+9854, U+98f2, U+9928, U+99c5, U+9ed2) ); /* noto-sans-jp-[109]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-109-400-normal.woff2", $range: (U+266a, U+4f11, U+533a, U+5343, U+534a, U+53cd, U+5404, U+56f3, U+5b57-5b58, U+5bae, U+5c4a, U+5e0c, U+5e2f, U+5eab, U+5f35, U+5f79, U+614b, U+6226, U+629e, U+65c5, U+6625, U+6751, U+6821, U+6b69, U+6b8b, U+6bce, U+6c42, U+706b, U+7c21, U+7cfb, U+805e, U+80b2, U+82b8, U+843d, U+8853, U+88c5, U+8a3c, U+8a66, U+8d8a, U+8fba, U+9069, U+91cf, U+9752, U+975e, U+9999, U+ff0f-ff10, U+ff14-ff15) ); /* noto-sans-jp-[110]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-110-400-normal.woff2", $range: (U+40, U+4e86, U+4e95, U+4f01, U+4f1d, U+4fbf, U+5099, U+5171, U+5177, U+53cb, U+53ce, U+53f0, U+5668, U+5712, U+5ba4, U+5ca1, U+5f85, U+60f3, U+653e, U+65ad, U+65e9, U+6620, U+6750, U+6761, U+6b62, U+6b74, U+6e08, U+6e80, U+7248, U+7531, U+7533, U+753a, U+77f3, U+798f, U+7f6e, U+8449, U+88fd, U+89b3, U+8a55, U+8ac7, U+8b77, U+8db3, U+8efd, U+8fd4, U+9031-9032, U+9580, U+9589, U+96d1, U+985e) ); /* noto-sans-jp-[111]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-111-400-normal.woff2", $range: (U+2b, U+d7, U+300e-300f, U+4e07, U+4e8c, U+512a, U+5149, U+518d, U+5236, U+52b9, U+52d9, U+5468, U+578b, U+57fa, U+5b8c, U+5ba2, U+5c02, U+5de5, U+5f37, U+5f62, U+623b, U+63d0, U+652f, U+672a, U+6848, U+6d41, U+7136, U+7537, U+754c, U+76f4, U+79c1, U+7ba1, U+7d44, U+7d4c, U+7dcf, U+7dda, U+7de8, U+82b1, U+897f, U+8ca9, U+8cfc, U+904e, U+9664, U+982d, U+9858, U+98a8, U+9a13, U+ff13, U+ff5c) ); /* noto-sans-jp-[112]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-112-400-normal.woff2", $range: (U+4e16, U+4e3b, U+4ea4, U+4ee4, U+4f4d, U+4f4f, U+4f55, U+4f9b, U+5317, U+5358, U+53c2, U+53e4, U+548c, U+571f, U+59cb, U+5cf6, U+5e38, U+63a2, U+63b2, U+6559, U+662d, U+679c, U+6c7a, U+72b6, U+7523, U+767d, U+770c, U+7a2e, U+7a3f, U+7a7a, U+7b2c, U+7b49, U+7d20, U+7d42, U+8003, U+8272, U+8a08, U+8aac, U+8cb7, U+8eab, U+8ee2, U+9054-9055, U+90fd, U+914d, U+91cd, U+969b, U+97f3, U+984c, U+ff06) ); /* noto-sans-jp-[113]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-113-400-normal.woff2", $range: (U+26, U+5f, U+2026, U+203b, U+4e09, U+4eac, U+4ed5, U+4fa1, U+5143, U+5199, U+5207, U+539f, U+53e3, U+53f7, U+5411, U+5473, U+5546, U+55b6, U+5929, U+597d, U+5bb9, U+5c11, U+5c4b, U+5ddd, U+5f97, U+5fc5, U+6295, U+6301, U+6307, U+671b, U+76f8, U+78ba, U+795e, U+7d30, U+7d39, U+7d9a, U+89e3, U+8a00, U+8a73, U+8a8d, U+8a9e, U+8aad, U+8abf, U+8cea, U+8eca, U+8ffd, U+904b, U+9650, U+ff11-ff12) ); /* noto-sans-jp-[114]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-114-400-normal.woff2", $range: (U+3e, U+3005, U+4e0d, U+4e88, U+4ecb, U+4ee3, U+4ef6, U+4fdd, U+4fe1, U+500b, U+50cf, U+5186, U+5316, U+53d7, U+540c, U+544a, U+54e1, U+5728, U+58f2, U+5973, U+5b89, U+5c71, U+5e02, U+5e97, U+5f15, U+5fc3, U+5fdc, U+601d, U+611b, U+611f, U+671f, U+6728, U+6765, U+683c, U+6b21, U+6ce8, U+6d3b, U+6d77, U+7530, U+7740, U+7acb, U+7d50, U+826f, U+8f09, U+8fbc, U+9001, U+9053, U+91ce, U+9762, U+98df) ); /* noto-sans-jp-[115]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-115-400-normal.woff2", $range: (U+7c, U+3080, U+4ee5, U+5148, U+516c, U+521d, U+5225, U+529b, U+52a0, U+53ef, U+56de, U+56fd, U+5909, U+591a, U+5b66, U+5b9f, U+5bb6, U+5bfe, U+5e73, U+5e83, U+5ea6, U+5f53, U+6027, U+610f, U+6210, U+6240, U+660e, U+66f4, U+66f8, U+6709, U+6771, U+697d, U+69d8, U+6a5f, U+6c34, U+6cbb, U+73fe, U+756a, U+7684, U+771f, U+793a, U+7f8e, U+898f, U+8a2d, U+8a71, U+8fd1, U+9078, U+9577, U+96fb, U+ff5e) ); /* noto-sans-jp-[116]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-116-400-normal.woff2", $range: (U+a9, U+3010-3011, U+30e2, U+4e0b, U+4eca, U+4ed6, U+4ed8, U+4f53, U+4f5c, U+4f7f, U+53d6, U+540d, U+54c1, U+5730, U+5916, U+5b50, U+5c0f, U+5f8c, U+624b, U+6570, U+6587, U+6599, U+691c, U+696d, U+6cd5, U+7269, U+7279, U+7406, U+767a-767b, U+77e5, U+7d04, U+7d22, U+8005, U+80fd, U+81ea, U+8868, U+8981, U+89a7, U+901a, U+9023, U+90e8, U+91d1, U+9332, U+958b, U+96c6, U+9ad8, U+ff1a, U+ff1f) ); /* noto-sans-jp-[117]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-117-400-normal.woff2", $range: (U+4e, U+a0, U+3000, U+300c-300d, U+4e00, U+4e0a, U+4e2d, U+4e8b, U+4eba, U+4f1a, U+5165, U+5168, U+5185, U+51fa, U+5206, U+5229, U+524d, U+52d5, U+5408, U+554f, U+5831, U+5834, U+5927, U+5b9a, U+5e74, U+5f0f, U+60c5, U+65b0, U+65b9, U+6642, U+6700, U+672c, U+682a, U+6b63, U+6c17, U+7121, U+751f, U+7528, U+753b, U+76ee, U+793e, U+884c, U+898b, U+8a18, U+9593, U+95a2, U+ff01, U+ff08-ff09) ); /* noto-sans-jp-[118]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-118-400-normal.woff2", $range: (U+21-22, U+27-2a, U+2c-3b, U+3f, U+41-4d, U+4f-5d, U+61-7b, U+7d, U+ab, U+ae, U+b2-b3, U+b7, U+bb, U+c9, U+cd, U+d6, U+d8, U+dc, U+e0-e5, U+e7-ed, U+ef, U+f1-f4, U+f6, U+f8, U+fa, U+fc-fd, U+103, U+14d, U+1b0, U+300-301, U+1ebf, U+1ec7, U+2013-2014, U+201c-201d, U+2039-203a, U+203c, U+2048-2049, U+2113, U+2122, U+65e5, U+6708, U+70b9) ); /* noto-sans-jp-[119]-400-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-119-400-normal.woff2", $range: (U+20, U+2027, U+3001-3002, U+3041-307f, U+3081-308f, U+3091-3093, U+3099-309a, U+309d-309e, U+30a1-30e1, U+30e3-30ed, U+30ef-30f0, U+30f2-30f4, U+30fb-30fe, U+ff0c, U+ff0e) diff --git a/src/styles/noto-sans/jp-700-normal.scss b/src/styles/noto-sans/jp-700-normal.scss index 743b16c250..4e9c9e7baa 100644 --- a/src/styles/noto-sans/jp-700-normal.scss +++ b/src/styles/noto-sans/jp-700-normal.scss @@ -1,7 +1,9 @@ +@use "../font"; + $jpFamily: "Noto Sans JP"; /* noto-sans-jp-[0]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-0-700-normal.woff2", @@ -9,7 +11,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[1]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-1-700-normal.woff2", @@ -17,7 +19,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[2]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-2-700-normal.woff2", @@ -25,7 +27,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[3]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-3-700-normal.woff2", @@ -33,7 +35,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[4]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-4-700-normal.woff2", @@ -41,7 +43,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[5]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-5-700-normal.woff2", @@ -49,7 +51,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[6]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-6-700-normal.woff2", @@ -57,7 +59,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[7]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-7-700-normal.woff2", @@ -65,7 +67,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[8]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-8-700-normal.woff2", @@ -73,7 +75,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[9]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-9-700-normal.woff2", @@ -81,7 +83,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[10]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-10-700-normal.woff2", @@ -89,7 +91,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[11]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-11-700-normal.woff2", @@ -97,7 +99,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[12]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-12-700-normal.woff2", @@ -105,7 +107,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[13]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-13-700-normal.woff2", @@ -113,7 +115,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[14]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-14-700-normal.woff2", @@ -121,7 +123,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[15]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-15-700-normal.woff2", @@ -129,7 +131,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[16]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-16-700-normal.woff2", @@ -137,7 +139,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[17]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-17-700-normal.woff2", @@ -145,7 +147,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[18]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-18-700-normal.woff2", @@ -153,7 +155,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[19]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-19-700-normal.woff2", @@ -161,7 +163,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[20]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-20-700-normal.woff2", @@ -169,7 +171,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[21]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-21-700-normal.woff2", @@ -177,7 +179,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[22]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-22-700-normal.woff2", @@ -185,7 +187,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[23]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-23-700-normal.woff2", @@ -193,7 +195,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[24]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-24-700-normal.woff2", @@ -201,7 +203,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[25]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-25-700-normal.woff2", @@ -209,7 +211,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[26]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-26-700-normal.woff2", @@ -217,7 +219,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[27]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-27-700-normal.woff2", @@ -225,7 +227,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[28]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-28-700-normal.woff2", @@ -233,7 +235,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[29]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-29-700-normal.woff2", @@ -241,7 +243,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[30]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-30-700-normal.woff2", @@ -249,7 +251,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[31]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-31-700-normal.woff2", @@ -257,7 +259,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[32]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-32-700-normal.woff2", @@ -265,7 +267,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[33]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-33-700-normal.woff2", @@ -273,7 +275,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[34]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-34-700-normal.woff2", @@ -281,7 +283,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[35]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-35-700-normal.woff2", @@ -289,7 +291,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[36]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-36-700-normal.woff2", @@ -297,7 +299,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[37]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-37-700-normal.woff2", @@ -305,7 +307,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[38]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-38-700-normal.woff2", @@ -313,7 +315,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[39]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-39-700-normal.woff2", @@ -321,7 +323,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[40]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-40-700-normal.woff2", @@ -329,7 +331,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[41]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-41-700-normal.woff2", @@ -337,7 +339,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[42]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-42-700-normal.woff2", @@ -345,7 +347,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[43]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-43-700-normal.woff2", @@ -353,7 +355,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[44]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-44-700-normal.woff2", @@ -361,7 +363,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[45]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-45-700-normal.woff2", @@ -369,7 +371,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[46]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-46-700-normal.woff2", @@ -377,7 +379,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[47]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-47-700-normal.woff2", @@ -385,7 +387,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[48]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-48-700-normal.woff2", @@ -393,7 +395,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[49]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-49-700-normal.woff2", @@ -401,7 +403,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[50]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-50-700-normal.woff2", @@ -409,7 +411,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[51]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-51-700-normal.woff2", @@ -417,7 +419,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[52]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-52-700-normal.woff2", @@ -425,7 +427,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[53]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-53-700-normal.woff2", @@ -433,7 +435,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[54]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-54-700-normal.woff2", @@ -441,7 +443,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[55]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-55-700-normal.woff2", @@ -449,7 +451,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[56]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-56-700-normal.woff2", @@ -457,7 +459,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[57]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-57-700-normal.woff2", @@ -465,7 +467,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[58]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-58-700-normal.woff2", @@ -473,7 +475,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[59]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-59-700-normal.woff2", @@ -481,7 +483,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[60]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-60-700-normal.woff2", @@ -489,7 +491,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[61]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-61-700-normal.woff2", @@ -497,7 +499,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[62]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-62-700-normal.woff2", @@ -505,7 +507,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[63]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-63-700-normal.woff2", @@ -513,7 +515,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[64]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-64-700-normal.woff2", @@ -521,7 +523,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[65]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-65-700-normal.woff2", @@ -529,7 +531,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[66]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-66-700-normal.woff2", @@ -537,7 +539,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[67]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-67-700-normal.woff2", @@ -545,7 +547,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[68]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-68-700-normal.woff2", @@ -553,7 +555,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[69]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-69-700-normal.woff2", @@ -561,7 +563,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[70]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-70-700-normal.woff2", @@ -569,7 +571,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[71]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-71-700-normal.woff2", @@ -577,7 +579,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[72]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-72-700-normal.woff2", @@ -585,7 +587,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[73]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-73-700-normal.woff2", @@ -593,7 +595,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[74]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-74-700-normal.woff2", @@ -601,7 +603,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[75]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-75-700-normal.woff2", @@ -609,7 +611,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[76]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-76-700-normal.woff2", @@ -617,7 +619,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[77]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-77-700-normal.woff2", @@ -625,7 +627,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[78]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-78-700-normal.woff2", @@ -633,7 +635,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[79]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-79-700-normal.woff2", @@ -641,7 +643,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[80]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-80-700-normal.woff2", @@ -649,7 +651,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[81]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-81-700-normal.woff2", @@ -657,7 +659,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[82]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-82-700-normal.woff2", @@ -665,7 +667,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[83]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-83-700-normal.woff2", @@ -673,7 +675,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[84]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-84-700-normal.woff2", @@ -681,7 +683,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[85]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-85-700-normal.woff2", @@ -689,7 +691,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[86]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-86-700-normal.woff2", @@ -697,7 +699,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[87]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-87-700-normal.woff2", @@ -705,7 +707,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[88]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-88-700-normal.woff2", @@ -713,7 +715,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[89]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-89-700-normal.woff2", @@ -721,7 +723,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[90]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-90-700-normal.woff2", @@ -729,7 +731,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[91]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-91-700-normal.woff2", @@ -737,7 +739,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[92]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-92-700-normal.woff2", @@ -745,7 +747,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[93]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-93-700-normal.woff2", @@ -753,7 +755,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[94]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-94-700-normal.woff2", @@ -761,7 +763,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[95]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-95-700-normal.woff2", @@ -769,7 +771,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[96]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-96-700-normal.woff2", @@ -777,7 +779,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[97]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-97-700-normal.woff2", @@ -785,7 +787,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[98]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-98-700-normal.woff2", @@ -793,7 +795,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[99]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-99-700-normal.woff2", @@ -801,7 +803,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[100]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-100-700-normal.woff2", @@ -809,7 +811,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[101]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-101-700-normal.woff2", @@ -817,7 +819,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[102]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-102-700-normal.woff2", @@ -825,7 +827,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[103]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-103-700-normal.woff2", @@ -833,7 +835,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[104]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-104-700-normal.woff2", @@ -841,7 +843,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[105]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-105-700-normal.woff2", @@ -849,7 +851,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[106]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-106-700-normal.woff2", @@ -857,7 +859,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[107]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-107-700-normal.woff2", @@ -865,7 +867,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[108]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-108-700-normal.woff2", @@ -873,7 +875,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[109]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-109-700-normal.woff2", @@ -881,7 +883,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[110]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-110-700-normal.woff2", @@ -889,7 +891,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[111]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-111-700-normal.woff2", @@ -897,7 +899,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[112]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-112-700-normal.woff2", @@ -905,7 +907,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[113]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-113-700-normal.woff2", @@ -913,7 +915,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[114]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-114-700-normal.woff2", @@ -921,7 +923,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[115]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-115-700-normal.woff2", @@ -929,7 +931,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[116]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-116-700-normal.woff2", @@ -937,7 +939,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[117]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-117-700-normal.woff2", @@ -945,7 +947,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[118]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-118-700-normal.woff2", @@ -953,7 +955,7 @@ $jpFamily: "Noto Sans JP"; ); /* noto-sans-jp-[119]-700-normal */ -@include fontFace( +@include font.face( $family: $jpFamily, $weight: 700, $url: "~@fontsource/noto-sans-jp/files/noto-sans-jp-119-700-normal.woff2", diff --git a/src/styles/noto-sans/kr-400-normal.scss b/src/styles/noto-sans/kr-400-normal.scss index e986c0868d..a9f09de223 100644 --- a/src/styles/noto-sans/kr-400-normal.scss +++ b/src/styles/noto-sans/kr-400-normal.scss @@ -1,840 +1,842 @@ +@use "../font"; + $krFamily: "Noto Sans KR"; /* noto-sans-kr-[0]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-0-400-normal.woff2", $range: (U+f9ca-fa0b, U+ff03-ff05, U+ff07, U+ff0a-ff0b, U+ff0d-ff19, U+ff1b, U+ff1d, U+ff20-ff5b, U+ff5d, U+ffe0-ffe3, U+ffe5-ffe6) ); /* noto-sans-kr-[1]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-1-400-normal.woff2", $range: (U+f92f-f980, U+f982-f9c9) ); /* noto-sans-kr-[2]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-2-400-normal.woff2", $range: (U+d723-d728, U+d72a-d733, U+d735-d748, U+d74a-d74f, U+d752-d753, U+d755-d757, U+d75a-d75f, U+d762-d764, U+d766-d768, U+d76a-d76b, U+d76d-d76f, U+d771-d787, U+d789-d78b, U+d78d-d78f, U+d791-d797, U+d79a, U+d79c, U+d79e-d7a3, U+f900-f909, U+f90b-f92e) ); /* noto-sans-kr-[3]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-3-400-normal.woff2", $range: (U+d679-d68b, U+d68e-d69e, U+d6a0, U+d6a2-d6a7, U+d6a9-d6c3, U+d6c6-d6c7, U+d6c9-d6cb, U+d6cd-d6d3, U+d6d5-d6d6, U+d6d8-d6e3, U+d6e5-d6e7, U+d6e9-d6fb, U+d6fd-d717, U+d719-d71f, U+d721-d722) ); /* noto-sans-kr-[4]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-4-400-normal.woff2", $range: (U+d5bc-d5c7, U+d5ca-d5cb, U+d5cd-d5cf, U+d5d1-d5d7, U+d5d9-d5da, U+d5dc, U+d5de-d5e3, U+d5e6-d5e7, U+d5e9-d5eb, U+d5ed-d5f6, U+d5f8, U+d5fa-d5ff, U+d602-d603, U+d605-d607, U+d609-d60f, U+d612-d613, U+d616-d61b, U+d61d-d637, U+d63a-d63b, U+d63d-d63f, U+d641-d647, U+d64a-d64c, U+d64e-d653, U+d656-d657, U+d659-d65b, U+d65d-d666, U+d668, U+d66a-d678) ); /* noto-sans-kr-[5]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-5-400-normal.woff2", $range: (U+d507, U+d509-d50b, U+d50d-d513, U+d515-d53b, U+d53e-d53f, U+d541-d543, U+d545-d54c, U+d54e, U+d550, U+d552-d557, U+d55a-d55b, U+d55d-d55f, U+d561-d564, U+d566-d567, U+d56a, U+d56c, U+d56e-d573, U+d576-d577, U+d579-d583, U+d585-d586, U+d58a-d5a4, U+d5a6-d5bb) ); /* noto-sans-kr-[6]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-6-400-normal.woff2", $range: (U+d464-d477, U+d47a-d47b, U+d47d-d47f, U+d481-d487, U+d489-d48a, U+d48c, U+d48e-d4e7, U+d4e9-d503, U+d505-d506) ); /* noto-sans-kr-[7]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-7-400-normal.woff2", $range: (U+d3bf-d3c7, U+d3ca-d3cf, U+d3d1-d3eb, U+d3ee-d3ef, U+d3f1-d3f3, U+d3f5-d3fb, U+d3fd-d400, U+d402-d45b, U+d45d-d463) ); /* noto-sans-kr-[8]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-8-400-normal.woff2", $range: (U+d2ff, U+d302-d304, U+d306-d30b, U+d30f, U+d311-d313, U+d315-d31b, U+d31e, U+d322-d324, U+d326-d327, U+d32a-d32b, U+d32d-d32f, U+d331-d337, U+d339-d33c, U+d33e-d37b, U+d37e-d37f, U+d381-d383, U+d385-d38b, U+d38e-d390, U+d392-d397, U+d39a-d39b, U+d39d-d39f, U+d3a1-d3a7, U+d3a9-d3aa, U+d3ac, U+d3ae-d3b3, U+d3b5-d3b7, U+d3b9-d3bb, U+d3bd-d3be) ); /* noto-sans-kr-[9]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-9-400-normal.woff2", $range: (U+d257-d27f, U+d281-d29b, U+d29d-d29f, U+d2a1-d2ab, U+d2ad-d2b7, U+d2ba-d2bb, U+d2bd-d2bf, U+d2c1-d2c7, U+d2c9-d2ef, U+d2f2-d2f3, U+d2f5-d2f7, U+d2f9-d2fe) ); /* noto-sans-kr-[10]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-10-400-normal.woff2", $range: (U+d1b4, U+d1b6-d1f3, U+d1f5-d22b, U+d22e-d22f, U+d231-d233, U+d235-d23b, U+d23d-d240, U+d242-d256) ); /* noto-sans-kr-[11]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-11-400-normal.woff2", $range: (U+d105-d12f, U+d132-d133, U+d135-d137, U+d139-d13f, U+d141-d142, U+d144, U+d146-d14b, U+d14e-d14f, U+d151-d153, U+d155-d15b, U+d15e-d187, U+d189-d19f, U+d1a2-d1a3, U+d1a5-d1a7, U+d1a9-d1af, U+d1b2-d1b3) ); /* noto-sans-kr-[12]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-12-400-normal.woff2", $range: (U+d04b-d04f, U+d051-d057, U+d059-d06b, U+d06d-d06f, U+d071-d073, U+d075-d07b, U+d07e-d0a3, U+d0a6-d0a7, U+d0a9-d0ab, U+d0ad-d0b3, U+d0b6, U+d0b8, U+d0ba-d0bf, U+d0c2-d0c3, U+d0c5-d0c7, U+d0c9-d0cf, U+d0d2, U+d0d6-d0db, U+d0de-d0df, U+d0e1-d0e3, U+d0e5-d0eb, U+d0ee-d0f0, U+d0f2-d104) ); /* noto-sans-kr-[13]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-13-400-normal.woff2", $range: (U+cfa2-cfc3, U+cfc5-cfdf, U+cfe2-cfe3, U+cfe5-cfe7, U+cfe9-cff4, U+cff6-cffb, U+cffd-cfff, U+d001-d003, U+d005-d017, U+d019-d033, U+d036-d037, U+d039-d03b, U+d03d-d04a) ); /* noto-sans-kr-[14]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-14-400-normal.woff2", $range: (U+cef0-cef3, U+cef6, U+cef9-ceff, U+cf01-cf03, U+cf05-cf07, U+cf09-cf0f, U+cf11-cf12, U+cf14-cf1b, U+cf1d-cf1f, U+cf21-cf2f, U+cf31-cf53, U+cf56-cf57, U+cf59-cf5b, U+cf5d-cf63, U+cf66, U+cf68, U+cf6a-cf6f, U+cf71-cf84, U+cf86-cf8b, U+cf8d-cfa1) ); /* noto-sans-kr-[15]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-15-400-normal.woff2", $range: (U+ce3c-ce57, U+ce5a-ce5b, U+ce5d-ce5f, U+ce61-ce67, U+ce6a, U+ce6c, U+ce6e-ce73, U+ce76-ce77, U+ce79-ce7b, U+ce7d-ce83, U+ce85-ce88, U+ce8a-ce8f, U+ce91-ce93, U+ce95-ce97, U+ce99-ce9f, U+cea2, U+cea4-ceab, U+cead-cee3, U+cee6-cee7, U+cee9-ceeb, U+ceed-ceef) ); /* noto-sans-kr-[16]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-16-400-normal.woff2", $range: (U+cd92-cd93, U+cd96-cd97, U+cd99-cd9b, U+cd9d-cda3, U+cda6-cda8, U+cdaa-cdaf, U+cdb1-cdc3, U+cdc5-cdcb, U+cdcd-cde7, U+cde9-ce03, U+ce05-ce1f, U+ce22-ce34, U+ce36-ce3b) ); /* noto-sans-kr-[17]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-17-400-normal.woff2", $range: (U+ccef-cd07, U+cd0a-cd0b, U+cd0d-cd1a, U+cd1c, U+cd1e-cd2b, U+cd2d-cd5b, U+cd5d-cd77, U+cd79-cd91) ); /* noto-sans-kr-[18]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-18-400-normal.woff2", $range: (U+cc3f-cc43, U+cc46-cc47, U+cc49-cc4b, U+cc4d-cc53, U+cc55-cc58, U+cc5a-cc5f, U+cc61-cc97, U+cc9a-cc9b, U+cc9d-cc9f, U+cca1-cca7, U+ccaa, U+ccac, U+ccae-ccb3, U+ccb6-ccb7, U+ccb9-ccbb, U+ccbd-cccf, U+ccd1-cce3, U+cce5-ccee) ); /* noto-sans-kr-[19]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-19-400-normal.woff2", $range: (U+cb91-cbd3, U+cbd5-cbe3, U+cbe5-cc0b, U+cc0e-cc0f, U+cc11-cc13, U+cc15-cc1b, U+cc1d-cc20, U+cc23-cc27, U+cc2a-cc2b, U+cc2d, U+cc2f, U+cc31-cc37, U+cc3a, U+cc3c) ); /* noto-sans-kr-[20]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-20-400-normal.woff2", $range: (U+caf4-cb47, U+cb4a-cb90) ); /* noto-sans-kr-[21]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-21-400-normal.woff2", $range: (U+ca4a-ca4b, U+ca4e-ca4f, U+ca51-ca53, U+ca55-ca5b, U+ca5d-ca60, U+ca62-ca83, U+ca85-cabb, U+cabe-cabf, U+cac1-cac3, U+cac5-cacb, U+cacd-cad0, U+cad2, U+cad4-cad8, U+cada-caf3) ); /* noto-sans-kr-[22]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-22-400-normal.woff2", $range: (U+c996-c997, U+c99a-c99c, U+c99e-c9bf, U+c9c2-c9c3, U+c9c5-c9c7, U+c9c9-c9cf, U+c9d2, U+c9d4, U+c9d7-c9d8, U+c9db, U+c9de-c9df, U+c9e1-c9e3, U+c9e5-c9e6, U+c9e8-c9eb, U+c9ee-c9f0, U+c9f2-c9f7, U+c9f9-ca0b, U+ca0d-ca28, U+ca2a-ca49) ); /* noto-sans-kr-[23]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-23-400-normal.woff2", $range: (U+c8e9-c8f4, U+c8f6-c8fb, U+c8fe-c8ff, U+c901-c903, U+c905-c90b, U+c90e-c910, U+c912-c917, U+c919-c92b, U+c92d-c94f, U+c951-c953, U+c955-c96b, U+c96d-c973, U+c975-c987, U+c98a-c98b, U+c98d-c98f, U+c991-c995) ); /* noto-sans-kr-[24]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-24-400-normal.woff2", $range: (U+c841-c84b, U+c84d-c86f, U+c872-c873, U+c875-c877, U+c879-c87f, U+c882-c884, U+c887-c88a, U+c88d-c8c3, U+c8c5-c8df, U+c8e1-c8e8) ); /* noto-sans-kr-[25]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-25-400-normal.woff2", $range: (U+c779-c77b, U+c77e-c782, U+c786, U+c78b, U+c78d, U+c78f, U+c792-c793, U+c795, U+c797, U+c799-c79f, U+c7a2, U+c7a7-c7ab, U+c7ae-c7bb, U+c7bd-c7c0, U+c7c2-c7c7, U+c7c9-c7dc, U+c7de-c7ff, U+c802-c803, U+c805-c807, U+c809, U+c80b-c80f, U+c812, U+c814, U+c817-c81b, U+c81e-c81f, U+c821-c823, U+c825-c82e, U+c830-c837, U+c839-c83b, U+c83d-c840) ); /* noto-sans-kr-[26]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-26-400-normal.woff2", $range: (U+c6bb-c6bf, U+c6c2, U+c6c4, U+c6c6-c6cb, U+c6ce-c6cf, U+c6d1-c6d3, U+c6d5-c6db, U+c6dd-c6df, U+c6e1-c6e7, U+c6e9-c6eb, U+c6ed-c6ef, U+c6f1-c6f8, U+c6fa-c703, U+c705-c707, U+c709-c70b, U+c70d-c716, U+c718, U+c71a-c71f, U+c722-c723, U+c725-c727, U+c729-c734, U+c736-c73b, U+c73e-c73f, U+c741-c743, U+c745-c74b, U+c74e-c750, U+c752-c757, U+c759-c773, U+c776-c777) ); /* noto-sans-kr-[27]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-27-400-normal.woff2", $range: (U+c5f5-c5fb, U+c5fe, U+c602-c605, U+c607, U+c609-c60f, U+c611-c61a, U+c61c-c623, U+c626-c627, U+c629-c62b, U+c62d, U+c62f-c632, U+c636, U+c638, U+c63a-c63f, U+c642-c643, U+c645-c647, U+c649-c652, U+c656-c65b, U+c65d-c65f, U+c661-c663, U+c665-c677, U+c679-c67b, U+c67d-c693, U+c696-c697, U+c699-c69b, U+c69d-c6a3, U+c6a6, U+c6a8, U+c6aa-c6af, U+c6b2-c6b3, U+c6b5-c6b7, U+c6b9-c6ba) ); /* noto-sans-kr-[28]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-28-400-normal.woff2", $range: (U+c517-c527, U+c52a-c52b, U+c52d-c52f, U+c531-c538, U+c53a, U+c53c, U+c53e-c543, U+c546-c547, U+c54b, U+c54d-c552, U+c556, U+c55a-c55b, U+c55d, U+c55f, U+c562-c563, U+c565-c567, U+c569-c56f, U+c572, U+c574, U+c576-c57b, U+c57e-c57f, U+c581-c583, U+c585-c586, U+c588-c58b, U+c58e, U+c590, U+c592-c596, U+c599-c5b3, U+c5b6-c5b7, U+c5ba, U+c5be-c5c3, U+c5ca-c5cb, U+c5cd, U+c5cf, U+c5d2-c5d3, U+c5d5-c5d7, U+c5d9-c5df, U+c5e1-c5e2, U+c5e4, U+c5e6-c5eb, U+c5ef, U+c5f1-c5f3) ); /* noto-sans-kr-[29]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-29-400-normal.woff2", $range: (U+c475-c4ef, U+c4f2-c4f3, U+c4f5-c4f7, U+c4f9-c4ff, U+c502-c50b, U+c50d-c516) ); /* noto-sans-kr-[30]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-30-400-normal.woff2", $range: (U+c3d0-c3d7, U+c3da-c3db, U+c3dd-c3de, U+c3e1-c3ec, U+c3ee-c3f3, U+c3f5-c42b, U+c42d-c463, U+c466-c474) ); /* noto-sans-kr-[31]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-31-400-normal.woff2", $range: (U+c32b-c367, U+c36a-c36b, U+c36d-c36f, U+c371-c377, U+c37a-c37b, U+c37e-c383, U+c385-c387, U+c389-c3cf) ); /* noto-sans-kr-[32]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-32-400-normal.woff2", $range: (U+c26a-c26b, U+c26d-c26f, U+c271-c273, U+c275-c27b, U+c27e-c287, U+c289-c28f, U+c291-c297, U+c299-c29a, U+c29c-c2a3, U+c2a5-c2a7, U+c2a9-c2ab, U+c2ad-c2b3, U+c2b6, U+c2b8, U+c2ba-c2bb, U+c2bd-c2db, U+c2de-c2df, U+c2e1-c2e2, U+c2e5-c2ea, U+c2ee, U+c2f0, U+c2f2-c2f5, U+c2f7, U+c2fa-c2fb, U+c2fd-c2ff, U+c301-c307, U+c309-c30c, U+c30e-c312, U+c315-c323, U+c325-c328, U+c32a) ); /* noto-sans-kr-[33]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-33-400-normal.woff2", $range: (U+c1bc-c1c3, U+c1c5-c1df, U+c1e1-c1fb, U+c1fd-c203, U+c205-c20c, U+c20e, U+c210-c217, U+c21a-c21b, U+c21d-c21e, U+c221-c227, U+c229-c22a, U+c22c, U+c22e, U+c230, U+c233-c24f, U+c251-c257, U+c259-c269) ); /* noto-sans-kr-[34]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-34-400-normal.woff2", $range: (U+c101-c11b, U+c11f, U+c121-c123, U+c125-c12b, U+c12e, U+c132-c137, U+c13a-c13b, U+c13d-c13f, U+c141-c147, U+c14a, U+c14c-c153, U+c155-c157, U+c159-c15b, U+c15d-c166, U+c169-c16f, U+c171-c177, U+c179-c18b, U+c18e-c18f, U+c191-c193, U+c195-c19b, U+c19d-c19e, U+c1a0, U+c1a2-c1a4, U+c1a6-c1bb) ); /* noto-sans-kr-[35]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-35-400-normal.woff2", $range: (U+c049-c057, U+c059-c05b, U+c05d-c05f, U+c061-c067, U+c069-c08f, U+c091-c0ab, U+c0ae-c0af, U+c0b1-c0b3, U+c0b5, U+c0b7-c0bb, U+c0be, U+c0c2-c0c7, U+c0ca-c0cb, U+c0cd-c0cf, U+c0d1-c0d7, U+c0d9-c0da, U+c0dc, U+c0de-c0e3, U+c0e5-c0eb, U+c0ed-c0f3, U+c0f6, U+c0f8, U+c0fa-c0ff) ); /* noto-sans-kr-[36]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-36-400-normal.woff2", $range: (U+bfa7-bfaf, U+bfb1-bfc4, U+bfc6-bfcb, U+bfce-bfcf, U+bfd1-bfd3, U+bfd5-bfdb, U+bfdd-c048) ); /* noto-sans-kr-[37]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-37-400-normal.woff2", $range: (U+bf07, U+bf09-bf3f, U+bf41-bf4f, U+bf52-bf54, U+bf56-bfa6) ); /* noto-sans-kr-[38]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-38-400-normal.woff2", $range: (U+be56, U+be58, U+be5c-be5f, U+be62-be63, U+be65-be67, U+be69-be74, U+be76-be7b, U+be7e-be7f, U+be81-be8e, U+be90, U+be92-bea7, U+bea9-becf, U+bed2-bed3, U+bed5-bed6, U+bed9-bee3, U+bee6-bf06) ); /* noto-sans-kr-[39]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-39-400-normal.woff2", $range: (U+bdb0-bdd3, U+bdd5-bdef, U+bdf1-be0b, U+be0d-be0f, U+be11-be13, U+be15-be43, U+be46-be47, U+be49-be4b, U+be4d-be53) ); /* noto-sans-kr-[40]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-40-400-normal.woff2", $range: (U+bd03, U+bd06, U+bd08, U+bd0a-bd0f, U+bd11-bd22, U+bd25-bd47, U+bd49-bd58, U+bd5a-bd7f, U+bd82-bd83, U+bd85-bd87, U+bd8a-bd8f, U+bd91-bd92, U+bd94, U+bd96-bd98, U+bd9a-bdaf) ); /* noto-sans-kr-[41]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-41-400-normal.woff2", $range: (U+bc4e-bc83, U+bc86-bc87, U+bc89-bc8b, U+bc8d-bc93, U+bc96, U+bc98, U+bc9b-bc9f, U+bca2-bca3, U+bca5-bca7, U+bca9-bcb2, U+bcb4-bcbb, U+bcbe-bcbf, U+bcc1-bcc3, U+bcc5-bccc, U+bcce-bcd0, U+bcd2-bcd4, U+bcd6-bcf3, U+bcf7, U+bcf9-bcfb, U+bcfd-bd02) ); /* noto-sans-kr-[42]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-42-400-normal.woff2", $range: (U+bb90-bba3, U+bba5-bbab, U+bbad-bbbf, U+bbc1-bbf7, U+bbfa-bbfb, U+bbfd-bbfe, U+bc01-bc07, U+bc09-bc0a, U+bc0e, U+bc10, U+bc12-bc13, U+bc17, U+bc19-bc1a, U+bc1e, U+bc20-bc23, U+bc26, U+bc28, U+bc2a-bc2c, U+bc2e-bc2f, U+bc32-bc33, U+bc35-bc37, U+bc39-bc3f, U+bc41-bc42, U+bc44, U+bc46-bc48, U+bc4a-bc4d) ); /* noto-sans-kr-[43]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-43-400-normal.woff2", $range: (U+bae6-bafb, U+bafd-bb17, U+bb19-bb33, U+bb37, U+bb39-bb3a, U+bb3d-bb43, U+bb45-bb46, U+bb48, U+bb4a-bb4f, U+bb51-bb53, U+bb55-bb57, U+bb59-bb62, U+bb64-bb8f) ); /* noto-sans-kr-[44]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-44-400-normal.woff2", $range: (U+ba30-ba37, U+ba3a-ba3b, U+ba3d-ba3f, U+ba41-ba47, U+ba49-ba4a, U+ba4c, U+ba4e-ba53, U+ba56-ba57, U+ba59-ba5b, U+ba5d-ba63, U+ba65-ba66, U+ba68-ba6f, U+ba71-ba73, U+ba75-ba77, U+ba79-ba84, U+ba86, U+ba88-baa7, U+baaa, U+baad-baaf, U+bab1-bab7, U+baba, U+babc, U+babe-bae5) ); /* noto-sans-kr-[45]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-45-400-normal.woff2", $range: (U+b96e-b973, U+b976-b977, U+b979-b97b, U+b97d-b983, U+b986, U+b988, U+b98a-b98d, U+b98f-b9ab, U+b9ae-b9af, U+b9b1-b9b3, U+b9b5-b9bb, U+b9be, U+b9c0, U+b9c2-b9c7, U+b9ca-b9cb, U+b9cd, U+b9d2-b9d7, U+b9da, U+b9dc, U+b9df-b9e0, U+b9e2, U+b9e6-b9e7, U+b9e9-b9f3, U+b9f6, U+b9f8, U+b9fb-ba2f) ); /* noto-sans-kr-[46]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-46-400-normal.woff2", $range: (U+b8bf-b8cb, U+b8cd-b8e0, U+b8e2-b8e7, U+b8ea-b8eb, U+b8ed-b8ef, U+b8f1-b8f7, U+b8fa, U+b8fc, U+b8fe-b903, U+b905-b917, U+b919-b91f, U+b921-b93b, U+b93d-b957, U+b95a-b95b, U+b95d-b95f, U+b961-b967, U+b969-b96c) ); /* noto-sans-kr-[47]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-47-400-normal.woff2", $range: (U+b80d-b80f, U+b811-b817, U+b81a, U+b81c-b823, U+b826-b827, U+b829-b82b, U+b82d-b833, U+b836, U+b83a-b83f, U+b841-b85b, U+b85e-b85f, U+b861-b863, U+b865-b86b, U+b86e, U+b870, U+b872-b8af, U+b8b1-b8be) ); /* noto-sans-kr-[48]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-48-400-normal.woff2", $range: (U+b74d-b75f, U+b761-b763, U+b765-b774, U+b776-b77b, U+b77e-b77f, U+b781-b783, U+b785-b78b, U+b78e, U+b792-b796, U+b79a-b79b, U+b79d-b7a7, U+b7aa, U+b7ae-b7b3, U+b7b6-b7c8, U+b7ca-b7eb, U+b7ee-b7ef, U+b7f1-b7f3, U+b7f5-b7fb, U+b7fe, U+b802-b806, U+b80a-b80b) ); /* noto-sans-kr-[49]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-49-400-normal.woff2", $range: (U+b6a7-b6aa, U+b6ac-b6b0, U+b6b2-b6ef, U+b6f1-b727, U+b72a-b72b, U+b72d-b72e, U+b731-b737, U+b739-b73a, U+b73c-b743, U+b745-b74c) ); /* noto-sans-kr-[50]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-50-400-normal.woff2", $range: (U+b605-b60f, U+b612-b617, U+b619-b624, U+b626-b69b, U+b69e-b6a3, U+b6a5-b6a6) ); /* noto-sans-kr-[51]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-51-400-normal.woff2", $range: (U+b55f, U+b562-b583, U+b585-b59f, U+b5a2-b5a3, U+b5a5-b5a7, U+b5a9-b5b2, U+b5b5-b5ba, U+b5bd-b604) ); /* noto-sans-kr-[52]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-52-400-normal.woff2", $range: (U+b4a5-b4b6, U+b4b8-b4bf, U+b4c1-b4c7, U+b4c9-b4db, U+b4de-b4df, U+b4e1-b4e2, U+b4e5-b4eb, U+b4ee, U+b4f0, U+b4f2-b513, U+b516-b517, U+b519-b51a, U+b51d-b523, U+b526, U+b528, U+b52b-b52f, U+b532-b533, U+b535-b537, U+b539-b53f, U+b541-b544, U+b546-b54b, U+b54d-b54f, U+b551-b55b, U+b55d-b55e) ); /* noto-sans-kr-[53]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-53-400-normal.woff2", $range: (U+b3f8-b3fb, U+b3fd-b40f, U+b411-b417, U+b419-b41b, U+b41d-b41f, U+b421-b427, U+b42a-b42b, U+b42d-b44f, U+b452-b453, U+b455-b457, U+b459-b45f, U+b462-b464, U+b466-b46b, U+b46d-b47f, U+b481-b4a3) ); /* noto-sans-kr-[54]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-54-400-normal.woff2", $range: (U+b342-b353, U+b356-b357, U+b359-b35b, U+b35d-b35e, U+b360-b363, U+b366, U+b368, U+b36a-b36d, U+b36f, U+b372-b373, U+b375-b377, U+b379-b37f, U+b381-b382, U+b384, U+b386-b38b, U+b38d-b3c3, U+b3c6-b3c7, U+b3c9-b3ca, U+b3cd-b3d3, U+b3d6, U+b3d8, U+b3da-b3f7) ); /* noto-sans-kr-[55]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-55-400-normal.woff2", $range: (U+b27c-b283, U+b285-b28f, U+b292-b293, U+b295-b297, U+b29a-b29f, U+b2a1-b2a4, U+b2a7-b2a9, U+b2ab, U+b2ad-b2c7, U+b2ca-b2cb, U+b2cd-b2cf, U+b2d1-b2d7, U+b2da, U+b2dc, U+b2de-b2e3, U+b2e7, U+b2e9-b2ea, U+b2ef-b2f3, U+b2f6, U+b2f8, U+b2fa-b2fb, U+b2fd-b2fe, U+b302-b303, U+b305-b307, U+b309-b30f, U+b312, U+b316-b31b, U+b31d-b341) ); /* noto-sans-kr-[56]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-56-400-normal.woff2", $range: (U+b1d6-b1e7, U+b1e9-b1fc, U+b1fe-b203, U+b206-b207, U+b209-b20b, U+b20d-b213, U+b216-b21f, U+b221-b257, U+b259-b273, U+b275-b27b) ); /* noto-sans-kr-[57]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-57-400-normal.woff2", $range: (U+b120-b122, U+b126-b127, U+b129-b12b, U+b12d-b133, U+b136, U+b138, U+b13a-b13f, U+b142-b143, U+b145-b14f, U+b151-b153, U+b156-b157, U+b159-b177, U+b17a-b17b, U+b17d-b17f, U+b181-b187, U+b189-b18c, U+b18e-b191, U+b195-b1a7, U+b1a9-b1cb, U+b1cd-b1d5) ); /* noto-sans-kr-[58]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-58-400-normal.woff2", $range: (U+b05f-b07b, U+b07e-b07f, U+b081-b083, U+b085-b08b, U+b08d-b097, U+b09b, U+b09d-b09f, U+b0a2-b0a7, U+b0aa, U+b0b0, U+b0b2, U+b0b6-b0b7, U+b0b9-b0bb, U+b0bd-b0c3, U+b0c6-b0c7, U+b0ca-b0cf, U+b0d1-b0df, U+b0e1-b0e4, U+b0e6-b107, U+b10a-b10b, U+b10d-b10f, U+b111-b112, U+b114-b117, U+b119-b11a, U+b11c-b11f) ); /* noto-sans-kr-[59]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-59-400-normal.woff2", $range: (U+afac-afb7, U+afba-afbb, U+afbd-afbf, U+afc1-afc6, U+afca-afcc, U+afce-afd3, U+afd5-afe7, U+afe9-afef, U+aff1-b00b, U+b00d-b00f, U+b011-b013, U+b015-b01b, U+b01d-b027, U+b029-b043, U+b045-b047, U+b049, U+b04b, U+b04d-b052, U+b055-b056, U+b058-b05c, U+b05e) ); /* noto-sans-kr-[60]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-60-400-normal.woff2", $range: (U+af03-af07, U+af09-af2b, U+af2e-af33, U+af35-af3b, U+af3e-af40, U+af44-af47, U+af4a-af5c, U+af5e-af63, U+af65-af7f, U+af81-afab) ); /* noto-sans-kr-[61]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-61-400-normal.woff2", $range: (U+ae56-ae5b, U+ae5e-ae60, U+ae62-ae64, U+ae66-ae67, U+ae69-ae6b, U+ae6d-ae83, U+ae85-aebb, U+aebf, U+aec1-aec3, U+aec5-aecb, U+aece, U+aed0, U+aed2-aed7, U+aed9-aef3, U+aef5-af02) ); /* noto-sans-kr-[62]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-62-400-normal.woff2", $range: (U+ad9c-ada3, U+ada5-adbf, U+adc1-adc3, U+adc5-adc7, U+adc9-add2, U+add4-addb, U+addd-addf, U+ade1-ade3, U+ade5-adf7, U+adfa-adfb, U+adfd-adff, U+ae02-ae07, U+ae0a, U+ae0c, U+ae0e-ae13, U+ae15-ae2f, U+ae31-ae33, U+ae35-ae37, U+ae39-ae3f, U+ae42, U+ae44, U+ae46-ae49, U+ae4b, U+ae4f, U+ae51-ae53, U+ae55) ); /* noto-sans-kr-[63]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-63-400-normal.woff2", $range: (U+ace2-ace3, U+ace5-ace6, U+ace9-acef, U+acf2, U+acf4, U+acf7-acfb, U+acfe-acff, U+ad01-ad03, U+ad05-ad0b, U+ad0d-ad10, U+ad12-ad1b, U+ad1d-ad33, U+ad35-ad48, U+ad4a-ad4f, U+ad51-ad6b, U+ad6e-ad6f, U+ad71-ad72, U+ad77-ad7c, U+ad7e, U+ad80, U+ad82-ad87, U+ad89-ad8b, U+ad8d-ad8f, U+ad91-ad9b) ); /* noto-sans-kr-[64]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-64-400-normal.woff2", $range: (U+ac25-ac2c, U+ac2e, U+ac30, U+ac32-ac37, U+ac39-ac3f, U+ac41-ac4c, U+ac4e-ac6f, U+ac72-ac73, U+ac75-ac76, U+ac79-ac7f, U+ac82, U+ac84-ac88, U+ac8a-ac8b, U+ac8d-ac8f, U+ac91-ac93, U+ac95-ac9b, U+ac9d-ac9e, U+aca1-aca7, U+acab, U+acad-acaf, U+acb1-acb7, U+acba-acbb, U+acbe-acc0, U+acc2-acc3, U+acc5-acdf) ); /* noto-sans-kr-[65]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-65-400-normal.woff2", $range: (U+99df, U+99ed, U+99f1, U+99ff, U+9a01, U+9a08, U+9a0e-9a0f, U+9a19, U+9a2b, U+9a30, U+9a36-9a37, U+9a40, U+9a43, U+9a45, U+9a4d, U+9a55, U+9a57, U+9a5a-9a5b, U+9a5f, U+9a62, U+9a65, U+9a69-9a6a, U+9aa8, U+9ab8, U+9ad3, U+9ae5, U+9aee, U+9b1a, U+9b27, U+9b2a, U+9b31, U+9b3c, U+9b41-9b45, U+9b4f, U+9b54, U+9b5a, U+9b6f, U+9b8e, U+9b91, U+9b9f, U+9bab, U+9bae, U+9bc9, U+9bd6, U+9be4, U+9be8, U+9c0d, U+9c10, U+9c12, U+9c15, U+9c25, U+9c32, U+9c3b, U+9c47, U+9c49, U+9c57, U+9ce5, U+9ce7, U+9ce9, U+9cf3-9cf4, U+9cf6, U+9d09, U+9d1b, U+9d26, U+9d28, U+9d3b, U+9d51, U+9d5d, U+9d60-9d61, U+9d6c, U+9d72, U+9da9, U+9daf, U+9db4, U+9dc4, U+9dd7, U+9df2, U+9df8-9dfa, U+9e1a, U+9e1e, U+9e75, U+9e79, U+9e7d, U+9e7f, U+9e92-9e93, U+9e97, U+9e9d, U+9e9f, U+9ea5, U+9eb4-9eb5, U+9ebb, U+9ebe, U+9ec3, U+9ecd-9ece, U+9ed4, U+9ed8, U+9edb-9edc, U+9ede, U+9ee8, U+9ef4, U+9f07-9f08, U+9f0e, U+9f13, U+9f20, U+9f3b, U+9f4a-9f4b, U+9f4e, U+9f52, U+9f5f, U+9f61, U+9f67, U+9f6a, U+9f6c, U+9f77, U+9f8d, U+9f90, U+9f95, U+9f9c, U+ac02-ac03, U+ac05-ac06, U+ac09-ac0f, U+ac17-ac18, U+ac1b, U+ac1e-ac1f, U+ac21-ac23) ); /* noto-sans-kr-[66]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-66-400-normal.woff2", $range: (U+96a7-96a8, U+96aa, U+96b1, U+96b7, U+96bb, U+96c0-96c1, U+96c4-96c5, U+96c7, U+96c9, U+96cb-96ce, U+96d5-96d6, U+96d9, U+96db-96dc, U+96e2-96e3, U+96e8-96ea, U+96ef-96f0, U+96f2, U+96f6-96f7, U+96f9, U+96fb, U+9700, U+9706-9707, U+9711, U+9713, U+9716, U+9719, U+971c, U+971e, U+9727, U+9730, U+9732, U+9739, U+973d, U+9742, U+9744, U+9748, U+9756, U+975c, U+9761, U+9769, U+976d, U+9774, U+9777, U+977a, U+978b, U+978d, U+978f, U+97a0, U+97a8, U+97ab, U+97ad, U+97c6, U+97cb, U+97dc, U+97f6, U+97fb, U+97ff-9803, U+9805-9806, U+9808, U+980a, U+980c, U+9810-9813, U+9817-9818, U+982d, U+9830, U+9838-9839, U+983b, U+9846, U+984c-984e, U+9854, U+9858, U+985a, U+985e, U+9865, U+9867, U+986b, U+986f, U+98af, U+98b1, U+98c4, U+98c7, U+98db-98dc, U+98e1-98e2, U+98ed-98ef, U+98f4, U+98fc-98fe, U+9903, U+9909-990a, U+990c, U+9910, U+9913, U+9918, U+991e, U+9920, U+9928, U+9945, U+9949, U+994b-994d, U+9951-9952, U+9954, U+9957, U+9996, U+999d, U+99a5, U+99a8, U+99ac-99ae, U+99b1, U+99b3-99b4, U+99b9, U+99c1, U+99d0-99d2, U+99d5, U+99d9, U+99dd) ); /* noto-sans-kr-[67]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-67-400-normal.woff2", $range: (U+920d, U+9210-9212, U+9217, U+921e, U+9234, U+923a, U+923f-9240, U+9245, U+9249, U+9257, U+925b, U+925e, U+9262, U+9264-9266, U+9283, U+9285, U+9291, U+9293, U+9296, U+9298, U+929c, U+92b3, U+92b6-92b7, U+92b9, U+92cc, U+92cf, U+92d2, U+92e4, U+92ea, U+92f8, U+92fc, U+9304, U+9310, U+9318, U+931a, U+931e-9322, U+9324, U+9326, U+9328, U+932b, U+932e-932f, U+9348, U+934a-934b, U+934d, U+9354, U+935b, U+936e, U+9375, U+937c, U+937e, U+938c, U+9394, U+9396, U+939a, U+93a3, U+93a7, U+93ac-93ad, U+93b0, U+93c3, U+93d1, U+93de, U+93e1, U+93e4, U+93f6, U+9404, U+9418, U+9425, U+942b, U+9435, U+9438, U+9444, U+9451-9452, U+945b, U+947d, U+947f, U+9583, U+9589, U+958f, U+9591-9592, U+9594, U+9598, U+95a3-95a5, U+95a8, U+95ad, U+95b1, U+95bb-95bc, U+95c7, U+95ca, U+95d4-95d6, U+95dc, U+95e1-95e2, U+961c, U+9621, U+962a, U+962e, U+9632, U+963b, U+963f-9640, U+9642, U+9644, U+964b-964d, U+9650, U+965b-965f, U+9662-9664, U+966a, U+9670, U+9673, U+9675-9678, U+967d, U+9685-9686, U+968a-968b, U+968d-968e, U+9694-9695, U+9698-9699, U+969b-969c, U+96a3) ); /* noto-sans-kr-[68]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-68-400-normal.woff2", $range: (U+8fa8, U+8fad, U+8faf-8fb2, U+8fc2, U+8fc5, U+8fce, U+8fd4, U+8fe6, U+8fea-8feb, U+8fed, U+8ff0, U+8ff2, U+8ff7, U+8ff9, U+8ffd, U+9000-9003, U+9005-9006, U+9008, U+900b, U+900d, U+900f-9011, U+9014-9015, U+9017, U+9019, U+901d-9023, U+902e, U+9031-9032, U+9035, U+9038, U+903c, U+903e, U+9041-9042, U+9047, U+904a-904b, U+904d-904e, U+9050-9051, U+9054-9055, U+9059, U+905c-905e, U+9060-9061, U+9063, U+9069, U+906d-906f, U+9072, U+9075, U+9077-9078, U+907a, U+907c-907d, U+907f-9084, U+9087-9088, U+908a, U+908f, U+9091, U+9095, U+9099, U+90a2-90a3, U+90a6, U+90a8, U+90aa, U+90af-90b1, U+90b5, U+90b8, U+90c1, U+90ca, U+90de, U+90e1, U+90ed, U+90f5, U+9102, U+9112, U+9115, U+9119, U+9127, U+912d, U+9132, U+9149-914e, U+9152, U+9162, U+9169-916a, U+916c, U+9175, U+9177-9178, U+9187, U+9189, U+918b, U+918d, U+9192, U+919c, U+91ab-91ac, U+91ae-91af, U+91b1, U+91b4-91b5, U+91c0, U+91c7, U+91c9, U+91cb, U+91cf-91d0, U+91d7-91d8, U+91dc-91dd, U+91e3, U+91e7, U+91ea, U+91f5) ); /* noto-sans-kr-[69]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-69-400-normal.woff2", $range: (U+8c6a-8c6b, U+8c79-8c7a, U+8c82, U+8c8a, U+8c8c, U+8c9d-8c9e, U+8ca0-8ca2, U+8ca7-8cac, U+8caf-8cb0, U+8cb3-8cb4, U+8cb6-8cb8, U+8cbb-8cbd, U+8cbf-8cc4, U+8cc7-8cc8, U+8cca, U+8cd1, U+8cd3, U+8cda, U+8cdc, U+8cde, U+8ce0, U+8ce2-8ce4, U+8ce6, U+8cea, U+8ced, U+8cf4, U+8cfb-8cfd, U+8d04-8d05, U+8d07-8d08, U+8d0a, U+8d0d, U+8d13, U+8d16, U+8d64, U+8d66, U+8d6b, U+8d70, U+8d73-8d74, U+8d77, U+8d85, U+8d8a, U+8d99, U+8da3, U+8da8, U+8db3, U+8dba, U+8dbe, U+8dc6, U+8dcb-8dcc, U+8dcf, U+8ddb, U+8ddd, U+8de1, U+8de3, U+8de8, U+8df3, U+8e0a, U+8e0f-8e10, U+8e1e, U+8e2a, U+8e30, U+8e35, U+8e42, U+8e44, U+8e47-8e4a, U+8e59, U+8e5f-8e60, U+8e74, U+8e76, U+8e81, U+8e87, U+8e8a, U+8e8d, U+8eaa-8eac, U+8ec0, U+8ecb-8ecc, U+8ed2, U+8edf, U+8eeb, U+8ef8, U+8efb, U+8efe, U+8f03, U+8f05, U+8f09, U+8f12-8f15, U+8f1b-8f1f, U+8f26-8f27, U+8f29-8f2a, U+8f2f, U+8f33, U+8f38-8f39, U+8f3b, U+8f3e-8f3f, U+8f44-8f45, U+8f49, U+8f4d-8f4e, U+8f5d, U+8f5f, U+8f62, U+8f9b-8f9c, U+8fa3, U+8fa6) ); /* noto-sans-kr-[70]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-70-400-normal.woff2", $range: (U+8941, U+8944, U+895f, U+8964, U+896a, U+8972, U+8981, U+8983, U+8986-8987, U+898f, U+8993, U+8996, U+89a1, U+89a9-89aa, U+89b2, U+89ba, U+89bd, U+89c0, U+89d2, U+89e3, U+89f4, U+89f8, U+8a02-8a03, U+8a08, U+8a0a, U+8a0c, U+8a0e, U+8a13, U+8a16-8a17, U+8a1b, U+8a1d, U+8a1f, U+8a23, U+8a25, U+8a2a, U+8a2d, U+8a31, U+8a34, U+8a36, U+8a3a-8a3b, U+8a50, U+8a54-8a55, U+8a5b, U+8a5e, U+8a60, U+8a62-8a63, U+8a66, U+8a6d-8a6e, U+8a70, U+8a72-8a73, U+8a75, U+8a79, U+8a85, U+8a87, U+8a8c-8a8d, U+8a93, U+8a95, U+8a98, U+8aa0-8aa1, U+8aa3-8aa6, U+8aa8, U+8aaa, U+8ab0, U+8ab2, U+8ab9, U+8abc, U+8abe-8abf, U+8ac2, U+8ac4, U+8ac7, U+8acb, U+8acd, U+8acf, U+8ad2, U+8ad6, U+8adb-8adc, U+8ae1, U+8ae6-8ae7, U+8aea-8aeb, U+8aed-8aee, U+8af1, U+8af6-8af8, U+8afa, U+8afe, U+8b00-8b02, U+8b04, U+8b0e, U+8b10, U+8b14, U+8b16-8b17, U+8b19-8b1b, U+8b1d, U+8b20, U+8b28, U+8b2b-8b2c, U+8b33, U+8b39, U+8b41, U+8b49, U+8b4e-8b4f, U+8b58, U+8b5a, U+8b5c, U+8b66, U+8b6c, U+8b6f-8b70, U+8b74, U+8b77, U+8b7d, U+8b80, U+8b8a, U+8b90, U+8b92-8b93, U+8b96, U+8b9a, U+8c37, U+8c3f, U+8c41, U+8c46, U+8c48, U+8c4a, U+8c4c, U+8c55, U+8c5a, U+8c61) ); /* noto-sans-kr-[71]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-71-400-normal.woff2", $range: (U+858f, U+8591, U+8594, U+859b, U+85a6, U+85a8-85aa, U+85af-85b0, U+85ba, U+85c1, U+85c9, U+85cd-85cf, U+85d5, U+85dc-85dd, U+85e4-85e5, U+85e9-85ea, U+85f7, U+85fa-85fb, U+85ff, U+8602, U+8606-8607, U+860a, U+8616-8617, U+861a, U+862d, U+863f, U+864e, U+8650, U+8654-8655, U+865b-865c, U+865e-865f, U+8667, U+8679, U+868a, U+868c, U+8693, U+86a3-86a4, U+86a9, U+86c7, U+86cb, U+86d4, U+86d9, U+86db, U+86df, U+86e4, U+86ed, U+86fe, U+8700, U+8702-8703, U+8708, U+8718, U+871a, U+871c, U+874e, U+8755, U+8757, U+875f, U+8766, U+8768, U+8774, U+8776, U+8778, U+8782, U+878d, U+879f, U+87a2, U+87b3, U+87ba, U+87c4, U+87e0, U+87ec, U+87ef, U+87f2, U+87f9, U+87fb, U+87fe, U+8805, U+881f, U+8822-8823, U+8831, U+8836, U+883b, U+8840, U+8846, U+884d, U+8852-8853, U+8857, U+8859, U+885b, U+885d, U+8861-8863, U+8868, U+886b, U+8870, U+8872, U+8877, U+887e-887f, U+8881-8882, U+8888, U+888b, U+888d, U+8892, U+8896-8897, U+889e, U+88ab, U+88b4, U+88c1-88c2, U+88cf, U+88d4-88d5, U+88d9, U+88dc-88dd, U+88df, U+88e1, U+88e8, U+88f3-88f5, U+88f8, U+88fd, U+8907, U+8910, U+8912-8913, U+8918-8919, U+8925, U+892a, U+8936, U+8938, U+893b) ); /* noto-sans-kr-[72]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-72-400-normal.woff2", $range: (U+82a6, U+82a9, U+82ac-82af, U+82b3, U+82b7-82b9, U+82bb-82bd, U+82bf, U+82d1-82d2, U+82d4-82d5, U+82d7, U+82db, U+82de-82df, U+82e1, U+82e5-82e7, U+82fd-82fe, U+8301-8305, U+8309, U+8317, U+8328, U+832b, U+832f, U+8331, U+8334-8336, U+8338-8339, U+8340, U+8347, U+8349-834a, U+834f, U+8351-8352, U+8373, U+8377, U+837b, U+8389-838a, U+838e, U+8396, U+8398, U+839e, U+83a2, U+83a9-83ab, U+83bd, U+83c1, U+83c5, U+83c9-83ca, U+83cc, U+83d3, U+83d6, U+83dc, U+83e9, U+83eb, U+83ef-83f2, U+83f4, U+83f9, U+83fd, U+8403-8404, U+840a, U+840c-840e, U+8429, U+842c, U+8431, U+8438, U+843d, U+8449, U+8457, U+845b, U+8461, U+8463, U+8466, U+846b-846c, U+846f, U+8475, U+847a, U+8490, U+8494, U+8499, U+849c, U+84a1, U+84b2, U+84b8, U+84bb-84bc, U+84bf-84c0, U+84c2, U+84c4, U+84c6, U+84c9, U+84cb, U+84cd, U+84d1, U+84da, U+84ec, U+84ee, U+84f4, U+84fc, U+8511, U+8513-8514, U+8517-8518, U+851a, U+851e, U+8521, U+8523, U+8525, U+852c-852d, U+852f, U+853d, U+853f, U+8541, U+8543, U+8549, U+854e, U+8553, U+8559, U+8563, U+8568-856a, U+856d, U+8584, U+8587) ); /* noto-sans-kr-[73]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-73-400-normal.woff2", $range: (U+8033, U+8036, U+803d, U+803f, U+8043, U+8046, U+804a, U+8056, U+8058, U+805a, U+805e, U+806f-8070, U+8072-8073, U+8077, U+807d-807f, U+8084-8087, U+8089, U+808b-808c, U+8096, U+809b, U+809d, U+80a1-80a2, U+80a5, U+80a9-80aa, U+80af, U+80b1-80b2, U+80b4, U+80ba, U+80c3-80c4, U+80cc, U+80ce, U+80da-80db, U+80de, U+80e1, U+80e4-80e5, U+80f1, U+80f4, U+80f8, U+80fd, U+8102, U+8105-8108, U+810a, U+8118, U+811a-811b, U+8123, U+8129, U+812b, U+812f, U+8139, U+813e, U+814b, U+814e, U+8150-8151, U+8154-8155, U+8165-8166, U+816b, U+8170-8171, U+8178-817a, U+817f-8180, U+8188, U+818a, U+818f, U+819a, U+819c-819d, U+81a0, U+81a3, U+81a8, U+81b3, U+81b5, U+81ba, U+81bd-81c0, U+81c2, U+81c6, U+81cd, U+81d8, U+81df, U+81e3, U+81e5, U+81e7-81e8, U+81ed, U+81f3-81f4, U+81fa-81fc, U+81fe, U+8205, U+8208, U+820a, U+820c-820d, U+8212, U+821b-821c, U+821e-821f, U+8221, U+822a-822c, U+8235-8237, U+8239, U+8240, U+8245, U+8247, U+8259, U+8264, U+8266, U+826e-826f, U+8271, U+8276, U+8278, U+827e, U+828b, U+828d-828e, U+8292, U+8299-829a, U+829d, U+829f, U+82a5) ); /* noto-sans-kr-[74]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-74-400-normal.woff2", $range: (U+7d2f-7d30, U+7d33, U+7d35, U+7d39-7d3a, U+7d42-7d46, U+7d50, U+7d5e, U+7d61-7d62, U+7d66, U+7d68, U+7d6a, U+7d6e, U+7d71-7d73, U+7d76, U+7d79, U+7d7f, U+7d8e-7d8f, U+7d93, U+7d9c, U+7da0, U+7da2, U+7dac-7dad, U+7db1-7db2, U+7db4-7db5, U+7db8, U+7dba-7dbb, U+7dbd-7dbf, U+7dc7, U+7dca-7dcb, U+7dd6, U+7dd8, U+7dda, U+7ddd-7dde, U+7de0-7de1, U+7de3, U+7de8-7de9, U+7dec, U+7def, U+7df4, U+7dfb, U+7e09-7e0a, U+7e15, U+7e1b, U+7e1d-7e1f, U+7e21, U+7e23, U+7e2b, U+7e2e-7e2f, U+7e31, U+7e37, U+7e3d-7e3e, U+7e43, U+7e46-7e47, U+7e52, U+7e54-7e55, U+7e5e, U+7e61, U+7e69-7e6b, U+7e6d, U+7e70, U+7e79, U+7e7c, U+7e82, U+7e8c, U+7e8f, U+7e93, U+7e96, U+7e98, U+7e9b-7e9c, U+7f36, U+7f38, U+7f3a, U+7f4c, U+7f50, U+7f54-7f55, U+7f6a-7f6b, U+7f6e, U+7f70, U+7f72, U+7f75, U+7f77, U+7f79, U+7f85, U+7f88, U+7f8a, U+7f8c, U+7f94, U+7f9a, U+7f9e, U+7fa4, U+7fa8-7fa9, U+7fb2, U+7fb8-7fb9, U+7fbd, U+7fc1, U+7fc5, U+7fca, U+7fcc, U+7fce, U+7fd2, U+7fd4-7fd5, U+7fdf-7fe1, U+7fe9, U+7feb, U+7ff0, U+7ff9, U+7ffc, U+8000-8001, U+8003, U+8006, U+8009, U+800c, U+8010, U+8015, U+8017-8018, U+802d) ); /* noto-sans-kr-[75]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-75-400-normal.woff2", $range: (U+7a49, U+7a4d-7a4e, U+7a57, U+7a61-7a62, U+7a69, U+7a6b, U+7a70, U+7a74, U+7a76, U+7a79, U+7a7d, U+7a7f, U+7a81, U+7a84, U+7a88, U+7a92-7a93, U+7a95, U+7a98, U+7a9f, U+7aa9-7aaa, U+7aae-7aaf, U+7aba, U+7ac4-7ac5, U+7ac7, U+7aca, U+7ad7, U+7ad9, U+7add, U+7adf-7ae0, U+7ae3, U+7ae5, U+7aea, U+7aed, U+7aef, U+7af6, U+7af9-7afa, U+7aff, U+7b0f, U+7b11, U+7b19, U+7b1b, U+7b1e, U+7b20, U+7b26, U+7b2d, U+7b39, U+7b46, U+7b49, U+7b4b-7b4d, U+7b4f-7b52, U+7b54, U+7b56, U+7b60, U+7b6c, U+7b6e, U+7b75, U+7b7d, U+7b87, U+7b8b, U+7b8f, U+7b94-7b95, U+7b97, U+7b9a, U+7b9d, U+7ba1, U+7bad, U+7bb1, U+7bb4, U+7bb8, U+7bc0-7bc1, U+7bc4, U+7bc6-7bc7, U+7bc9, U+7bd2, U+7be0, U+7be4, U+7be9, U+7c07, U+7c12, U+7c1e, U+7c21, U+7c27, U+7c2a-7c2b, U+7c3d-7c3f, U+7c43, U+7c4c-7c4d, U+7c60, U+7c64, U+7c6c, U+7c73, U+7c83, U+7c89, U+7c92, U+7c95, U+7c97-7c98, U+7c9f, U+7ca5, U+7ca7, U+7cae, U+7cb1-7cb3, U+7cb9, U+7cbe, U+7cca, U+7cd6, U+7cde-7ce0, U+7ce7, U+7cfb, U+7cfe, U+7d00, U+7d02, U+7d04-7d08, U+7d0a-7d0b, U+7d0d, U+7d10, U+7d14, U+7d17-7d1b, U+7d20-7d21, U+7d2b-7d2c, U+7d2e) ); /* noto-sans-kr-[76]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-76-400-normal.woff2", $range: (U+7704, U+7708-7709, U+770b, U+771e, U+7720, U+7729, U+7737-7738, U+773a, U+773c, U+7740, U+774d, U+775b, U+7761, U+7763, U+7766, U+776b, U+7779, U+777e-777f, U+778b, U+7791, U+779e, U+77a5, U+77ac-77ad, U+77b0, U+77b3, U+77bb-77bc, U+77bf, U+77d7, U+77db-77dc, U+77e2-77e3, U+77e9, U+77ed-77ef, U+7802, U+7812, U+7825-7827, U+782c, U+7832, U+7834, U+7845, U+784f, U+785d, U+786b-786c, U+786f, U+787c, U+7881, U+7887, U+788c-788e, U+7891, U+7897, U+78a3, U+78a7, U+78a9, U+78ba-78bc, U+78c1, U+78c5, U+78ca-78cb, U+78ce, U+78d0, U+78e8, U+78ec, U+78ef, U+78f5, U+78fb, U+7901, U+790e, U+7916, U+792a-792c, U+793a, U+7940-7941, U+7947-7949, U+7950, U+7956-7957, U+795a-795d, U+7960, U+7965, U+7968, U+796d, U+797a, U+797f, U+7981, U+798d-798e, U+7991, U+79a6-79a7, U+79aa, U+79ae, U+79b1, U+79b3, U+79b9, U+79bd-79c1, U+79c9-79cb, U+79d2, U+79d5, U+79d8, U+79df, U+79e4, U+79e6-79e7, U+79e9, U+79fb, U+7a00, U+7a05, U+7a08, U+7a0b, U+7a0d, U+7a14, U+7a17, U+7a19-7a1a, U+7a1c, U+7a1f-7a20, U+7a2e, U+7a31, U+7a36-7a37, U+7a3b-7a3d, U+7a3f-7a40, U+7a46) ); /* noto-sans-kr-[77]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-77-400-normal.woff2", $range: (U+7482-7483, U+7487, U+7489, U+748b, U+7498, U+749c, U+749e-749f, U+74a1, U+74a3, U+74a5, U+74a7-74a8, U+74aa, U+74b0, U+74b2, U+74b5, U+74b9, U+74bd, U+74bf, U+74c6, U+74ca, U+74cf, U+74d4, U+74d8, U+74da, U+74dc, U+74e0, U+74e2-74e3, U+74e6, U+74ee, U+74f7, U+7501, U+7504, U+7511, U+7515, U+7518, U+751a-751b, U+7523, U+7525-7526, U+752b-752c, U+7531, U+7533, U+7538, U+753a, U+7547, U+754c, U+754f, U+7551, U+7553-7554, U+7559, U+755b-755d, U+7562, U+7565-7566, U+756a, U+756f-7570, U+7575-7576, U+7578, U+757a, U+757f, U+7586-7587, U+758a-758b, U+758e-758f, U+7591, U+759d, U+75a5, U+75ab, U+75b1-75b3, U+75b5, U+75b8-75b9, U+75bc-75be, U+75c2, U+75c5, U+75c7, U+75cd, U+75d2, U+75d4-75d5, U+75d8-75d9, U+75db, U+75e2, U+75f0, U+75f2, U+75f4, U+75fa, U+75fc, U+7600, U+760d, U+7619, U+761f-7622, U+7624, U+7626, U+763b, U+7642, U+764c, U+764e, U+7652, U+7656, U+7661, U+7664, U+7669, U+766c, U+7670, U+7672, U+7678, U+7686-7687, U+768e, U+7690, U+7693, U+76ae, U+76ba, U+76bf, U+76c2-76c3, U+76c6, U+76c8, U+76ca, U+76d2, U+76d6, U+76db-76dc, U+76de-76df, U+76e1, U+76e3-76e4, U+76e7, U+76f2, U+76fc, U+76fe, U+7701) ); /* noto-sans-kr-[78]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-78-400-normal.woff2", $range: (U+7230, U+7232, U+7235, U+723a-723b, U+723d-723e, U+7240, U+7246-7248, U+724c, U+7252, U+7258-7259, U+725b, U+725d, U+725f, U+7261-7262, U+7267, U+7272, U+727d, U+7280-7281, U+72a2, U+72a7, U+72ac, U+72af, U+72c0, U+72c2, U+72c4, U+72ce, U+72d0, U+72d7, U+72d9, U+72e1, U+72e9, U+72f8-72f9, U+72fc-72fd, U+730a, U+7316, U+731b-731d, U+7325, U+7329-732b, U+7336-7337, U+733e-733f, U+7344-7345, U+7350, U+7352, U+7357, U+7368, U+736a, U+7370, U+7372, U+7375, U+7378, U+737a-737b, U+7384, U+7386-7387, U+7389, U+738e, U+7394, U+7396-7398, U+739f, U+73a7, U+73a9, U+73ad, U+73b2-73b3, U+73b9, U+73c0, U+73c2, U+73c9-73ca, U+73cc-73cd, U+73cf, U+73d6, U+73d9, U+73dd-73de, U+73e0, U+73e3-73e6, U+73e9-73ea, U+73ed, U+73f7, U+73f9, U+73fd-73fe, U+7401, U+7403, U+7405, U+7407, U+7409, U+7413, U+741b, U+7420-7422, U+7425-7426, U+7428, U+742a-742c, U+742e-7430, U+7433-7436, U+7438, U+743a, U+743f-7441, U+7443-7444, U+744b, U+7455, U+7457, U+7459-745c, U+745e-7460, U+7462, U+7464-7465, U+7468-746a, U+746f, U+747e) ); /* noto-sans-kr-[79]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-79-400-normal.woff2", $range: (U+6f8d-6f8e, U+6f90, U+6f94, U+6f97, U+6fa3-6fa4, U+6fa7, U+6fae-6faf, U+6fb1, U+6fb3, U+6fb9, U+6fbe, U+6fc0-6fc3, U+6fca, U+6fd5, U+6fda, U+6fdf-6fe1, U+6fe4, U+6fe9, U+6feb-6fec, U+6fef, U+6ff1, U+6ffe, U+7001, U+7005-7006, U+7009, U+700b, U+700f, U+7011, U+7015, U+7018, U+701a-701f, U+7023, U+7027-7028, U+702f, U+7037, U+703e, U+704c, U+7050-7051, U+7058, U+705d, U+7070, U+7078, U+707c-707d, U+7085, U+708a, U+708e, U+7092, U+7098-709a, U+70a1, U+70a4, U+70ab-70ad, U+70af, U+70b3, U+70b7-70b9, U+70c8, U+70cb, U+70cf, U+70d8-70d9, U+70dd, U+70df, U+70f1, U+70f9, U+70fd, U+7104, U+7109, U+710c, U+7119-711a, U+711e, U+7126, U+7130, U+7136, U+7147, U+7149-714a, U+714c, U+714e, U+7150, U+7156, U+7159, U+715c, U+715e, U+7164-7167, U+7169, U+716c, U+716e, U+717d, U+7184, U+7189-718a, U+718f, U+7192, U+7194, U+7199, U+719f, U+71a2, U+71ac, U+71b1, U+71b9-71ba, U+71be, U+71c1, U+71c3, U+71c8-71c9, U+71ce, U+71d0, U+71d2, U+71d4-71d5, U+71df, U+71e5-71e7, U+71ed-71ee, U+71fb-71fc, U+71fe-7200, U+7206, U+7210, U+721b, U+722a, U+722c-722d) ); /* noto-sans-kr-[80]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-80-400-normal.woff2", $range: (U+6d5a, U+6d5c, U+6d63, U+6d66, U+6d69-6d6a, U+6d6c, U+6d6e, U+6d74, U+6d78-6d79, U+6d7f, U+6d85, U+6d87-6d89, U+6d8c-6d8e, U+6d91, U+6d93, U+6d95, U+6daf, U+6db2, U+6db5, U+6dc0, U+6dc3-6dc7, U+6dcb, U+6dcf, U+6dd1, U+6dd8-6dda, U+6dde, U+6de1, U+6de8, U+6dea-6deb, U+6dee, U+6df1, U+6df3, U+6df5, U+6df7-6dfb, U+6e17, U+6e19-6e1b, U+6e1f-6e21, U+6e23-6e26, U+6e2b-6e2d, U+6e32, U+6e34, U+6e36, U+6e38, U+6e3a, U+6e3c-6e3e, U+6e43-6e44, U+6e4a, U+6e4d, U+6e56, U+6e58, U+6e5b-6e5c, U+6e5e-6e5f, U+6e67, U+6e6b, U+6e6e-6e6f, U+6e72-6e73, U+6e7a, U+6e90, U+6e96, U+6e9c-6e9d, U+6e9f, U+6ea2, U+6ea5, U+6eaa-6eab, U+6eaf, U+6eb1, U+6eb6, U+6eba, U+6ec2, U+6ec4-6ec5, U+6ec9, U+6ecb-6ecc, U+6ece, U+6ed1, U+6ed3-6ed4, U+6eef, U+6ef4, U+6ef8, U+6efe-6eff, U+6f01-6f02, U+6f06, U+6f0f, U+6f11, U+6f14-6f15, U+6f20, U+6f22-6f23, U+6f2b-6f2c, U+6f31-6f32, U+6f38, U+6f3f, U+6f41, U+6f51, U+6f54, U+6f57-6f58, U+6f5a-6f5b, U+6f5e-6f5f, U+6f62, U+6f64, U+6f6d-6f6e, U+6f70, U+6f7a, U+6f7c-6f7e, U+6f81, U+6f84, U+6f88) ); /* noto-sans-kr-[81]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-81-400-normal.woff2", $range: (U+6ada-6adb, U+6af6, U+6afb, U+6b04, U+6b0a, U+6b0c, U+6b12, U+6b16, U+6b20-6b21, U+6b23, U+6b32, U+6b3a, U+6b3d-6b3e, U+6b46-6b47, U+6b4e, U+6b50, U+6b5f, U+6b61-6b62, U+6b64-6b66, U+6b6a, U+6b72, U+6b77-6b78, U+6b7b, U+6b7f, U+6b83-6b84, U+6b86, U+6b89-6b8a, U+6b96, U+6b98, U+6b9e, U+6bae-6baf, U+6bb2, U+6bb5, U+6bb7, U+6bba, U+6bbc, U+6bbf, U+6bc1, U+6bc5-6bc6, U+6bcb, U+6bcf, U+6bd2-6bd3, U+6bd6-6bd8, U+6bdb, U+6beb-6bec, U+6c08, U+6c0f, U+6c13, U+6c23, U+6c37-6c38, U+6c3e, U+6c40-6c42, U+6c4e, U+6c50, U+6c55, U+6c57, U+6c5a, U+6c5d-6c60, U+6c68, U+6c6a, U+6c6d, U+6c70, U+6c72, U+6c76, U+6c7a, U+6c7d-6c7e, U+6c81-6c83, U+6c85-6c88, U+6c8c, U+6c90, U+6c92-6c96, U+6c99-6c9b, U+6cab, U+6cae, U+6cb3, U+6cb8-6cb9, U+6cbb-6cbf, U+6cc1-6cc2, U+6cc4, U+6cc9-6cca, U+6ccc, U+6cd3, U+6cd7, U+6cdb, U+6ce1-6ce3, U+6ce5, U+6ce8, U+6ceb, U+6cee-6cf0, U+6cf3, U+6d0b-6d0c, U+6d11, U+6d17, U+6d19, U+6d1b, U+6d1e, U+6d25, U+6d27, U+6d29, U+6d32, U+6d35-6d36, U+6d38-6d39, U+6d3b, U+6d3d-6d3e, U+6d41, U+6d59) ); /* noto-sans-kr-[82]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-82-400-normal.woff2", $range: (U+67f0-67f1, U+67f3-67f6, U+67fb, U+67fe, U+6812-6813, U+6816-6817, U+6821-6822, U+682f, U+6838-6839, U+683d, U+6840-6843, U+6848, U+684e, U+6850-6851, U+6853-6854, U+686d, U+6876, U+687f, U+6881, U+6885, U+688f, U+6893-6894, U+6897, U+689d, U+689f, U+68a1-68a2, U+68a7-68a8, U+68ad, U+68af-68b1, U+68b3, U+68b5-68b6, U+68c4-68c5, U+68c9, U+68cb, U+68cd, U+68d2, U+68d5, U+68d7-68d8, U+68da, U+68df-68e0, U+68e7-68e8, U+68ee, U+68f2, U+68f9-68fa, U+6900, U+6905, U+690d-690e, U+6912, U+6927, U+6930, U+693d, U+693f, U+694a, U+6953-6955, U+6957, U+6959-695a, U+695e, U+6960-6963, U+6968, U+696b, U+696d-696f, U+6975, U+6977-6979, U+6995, U+699b-699c, U+69a5, U+69a7, U+69ae, U+69b4, U+69bb, U+69c1, U+69c3, U+69cb-69cd, U+69d0, U+69e8, U+69ea, U+69fb, U+69fd, U+69ff, U+6a02, U+6a0a, U+6a11, U+6a13, U+6a17, U+6a19, U+6a1e-6a1f, U+6a21, U+6a23, U+6a35, U+6a38-6a3a, U+6a3d, U+6a44, U+6a48, U+6a4b, U+6a52-6a53, U+6a58-6a59, U+6a5f, U+6a61, U+6a6b, U+6a80, U+6a84, U+6a89, U+6a8d-6a8e, U+6a97, U+6a9c, U+6aa3, U+6ab3, U+6abb, U+6ac2-6ac3, U+6ad3) ); /* noto-sans-kr-[83]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-83-400-normal.woff2", $range: (U+6607, U+6609-660a, U+660c, U+660f-6611, U+6613-6615, U+661e, U+6620, U+6627-6628, U+662d, U+6630-6631, U+6634, U+6636, U+663a-663b, U+6641, U+6643-6644, U+6649, U+664b, U+664f, U+6659, U+665b, U+665d-665f, U+6664-6669, U+666b, U+666e-666f, U+6673-6674, U+6676-6678, U+6684, U+6687-6689, U+668e, U+6690-6691, U+6696-6698, U+669d, U+66a0, U+66a2, U+66ab, U+66ae, U+66b2-66b4, U+66b9, U+66bb, U+66be, U+66c4, U+66c6-66c7, U+66c9, U+66d6, U+66d9, U+66dc-66dd, U+66e0, U+66e6, U+66f0, U+66f2-66f4, U+66f7, U+66f9-66fa, U+66fc, U+66fe-66ff, U+6703, U+670b, U+670d, U+6714-6715, U+6717, U+671b, U+671d-671f, U+6726-6727, U+672a-672b, U+672d-672e, U+6731, U+6736, U+673a, U+673d, U+6746, U+6749, U+674e-6751, U+6753, U+6756, U+675c, U+675e-675f, U+676d, U+676f-6770, U+6773, U+6775, U+6777, U+677b, U+677e-677f, U+6787, U+6789, U+678b, U+678f-6790, U+6793, U+6795, U+679a, U+679d, U+67af-67b0, U+67b3, U+67b6-67b8, U+67be, U+67c4, U+67cf-67d4, U+67da, U+67dd, U+67e9, U+67ec, U+67ef) ); /* noto-sans-kr-[84]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-84-400-normal.woff2", $range: (U+6392, U+6396, U+6398, U+639b, U+63a0-63a2, U+63a5, U+63a7-63aa, U+63c0, U+63c4, U+63c6, U+63cf, U+63d6, U+63da-63db, U+63e1, U+63ed-63ee, U+63f4, U+63f6-63f7, U+640d, U+640f, U+6414, U+6416-6417, U+641c, U+6422, U+642c-642d, U+643a, U+643e, U+6458, U+6460, U+6469, U+646f, U+6478-647a, U+6488, U+6491-6493, U+649a, U+649e, U+64a4-64a5, U+64ab, U+64ad-64ae, U+64b0, U+64b2, U+64bb, U+64c1, U+64c4-64c5, U+64c7, U+64ca, U+64cd-64ce, U+64d2, U+64d4, U+64d8, U+64da, U+64e1-64e2, U+64e5-64e7, U+64ec, U+64f2, U+64f4, U+64fa, U+64fe, U+6500, U+6504, U+6518, U+651d, U+6523, U+652a-652c, U+652f, U+6536-6539, U+653b, U+653e, U+6548, U+654d-654f, U+6551, U+6556-6557, U+655e, U+6562-6563, U+6566, U+656c-656d, U+6572, U+6574-6575, U+6577-6578, U+657e, U+6582-6583, U+6585, U+658c, U+6590-6591, U+6597, U+6599, U+659b-659c, U+659f, U+65a1, U+65a4-65a5, U+65a7, U+65ab-65ac, U+65af, U+65b7, U+65bc-65bd, U+65c1, U+65c5, U+65cb-65cc, U+65cf, U+65d2, U+65d7, U+65e0, U+65e3, U+65e6, U+65e8-65e9, U+65ec-65ed, U+65f1, U+65f4, U+65fa-65fd, U+65ff, U+6606) ); /* noto-sans-kr-[85]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-85-400-normal.woff2", $range: (U+614c, U+6153, U+6155, U+6158-6159, U+615d, U+615f, U+6162-6164, U+6167-6168, U+616b, U+616e, U+6170, U+6176-6177, U+617d-617e, U+6181-6182, U+618a, U+618e, U+6190-6191, U+6194, U+6198-619a, U+61a4, U+61a7, U+61a9, U+61ab-61ac, U+61ae, U+61b2, U+61b6, U+61ba, U+61be, U+61c3, U+61c7-61cb, U+61e6, U+61f2, U+61f6-61f8, U+61fa, U+61fc, U+61ff-6200, U+6207-6208, U+620a, U+620c-620e, U+6212, U+6216, U+621a, U+621f, U+6221, U+622a, U+622e, U+6230-6231, U+6234, U+6236, U+623e-623f, U+6241, U+6247-6249, U+624d, U+6253, U+6258, U+626e, U+6271, U+6276, U+6279, U+627c, U+627f-6280, U+6284, U+6289-628a, U+6291-6292, U+6295, U+6297-6298, U+629b, U+62ab, U+62b1, U+62b5, U+62b9, U+62bc-62bd, U+62c2, U+62c7-62c9, U+62cc-62cd, U+62cf-62d0, U+62d2-62d4, U+62d6-62d9, U+62db-62dc, U+62ec-62ef, U+62f1, U+62f3, U+62f7, U+62fe-62ff, U+6301, U+6307, U+6309, U+6311, U+632b, U+632f, U+633a-633b, U+633d-633e, U+6349, U+634c, U+634f-6350, U+6355, U+6367-6368, U+636e, U+6372, U+6377, U+637a-637b, U+637f, U+6383, U+6388-6389, U+638c) ); /* noto-sans-kr-[86]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-86-400-normal.woff2", $range: (U+5f11, U+5f13-5f15, U+5f17-5f18, U+5f1b, U+5f1f, U+5f26-5f27, U+5f29, U+5f31, U+5f35, U+5f3a, U+5f3c, U+5f48, U+5f4a, U+5f4c, U+5f4e, U+5f56-5f57, U+5f59, U+5f5b, U+5f62, U+5f66-5f67, U+5f69-5f6d, U+5f70-5f71, U+5f77, U+5f79, U+5f7c, U+5f7f-5f81, U+5f85, U+5f87, U+5f8a-5f8b, U+5f90-5f92, U+5f98-5f99, U+5f9e, U+5fa0-5fa1, U+5fa8-5faa, U+5fae, U+5fb5, U+5fb9, U+5fbd, U+5fc5, U+5fcc-5fcd, U+5fd6-5fd9, U+5fe0, U+5feb, U+5ff5, U+5ffd, U+5fff, U+600f, U+6012, U+6016, U+601c, U+6020-6021, U+6025, U+6028, U+602a, U+602f, U+6041-6043, U+604d, U+6050, U+6052, U+6055, U+6059, U+605d, U+6062-6065, U+6068-606a, U+606c-606d, U+606f-6070, U+6085, U+6089, U+608c-608d, U+6094, U+6096, U+609a-609b, U+609f-60a0, U+60a3-60a4, U+60a7, U+60b0, U+60b2-60b4, U+60b6, U+60b8, U+60bc-60bd, U+60c7, U+60d1, U+60da, U+60dc, U+60df-60e1, U+60f0-60f1, U+60f6, U+60f9-60fb, U+6101, U+6106, U+6108-6109, U+610d-610e, U+6115, U+611a, U+6127, U+6130, U+6134, U+6137, U+613c, U+613e-613f, U+6142, U+6144, U+6147-6148, U+614a-614b) ); /* noto-sans-kr-[87]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-87-400-normal.woff2", $range: (U+5c40, U+5c45-5c46, U+5c48, U+5c4b, U+5c4d-5c4e, U+5c51, U+5c5b, U+5c60, U+5c62, U+5c64-5c65, U+5c6c, U+5c6f, U+5c79, U+5c90-5c91, U+5ca1, U+5ca9, U+5cab-5cac, U+5cb1, U+5cb3, U+5cb5, U+5cb7-5cb8, U+5cba, U+5cbe, U+5cc0, U+5cd9, U+5ce0, U+5ce8, U+5cef-5cf0, U+5cf4, U+5cf6, U+5cfb, U+5cfd, U+5d07, U+5d0d-5d0e, U+5d11, U+5d14, U+5d16-5d17, U+5d19, U+5d27, U+5d29, U+5d4b-5d4c, U+5d50, U+5d69, U+5d6c, U+5d6f, U+5d87, U+5d8b, U+5d9d, U+5da0, U+5da2, U+5daa, U+5db8, U+5dba, U+5dbc-5dbd, U+5dcd, U+5dd2, U+5dd6, U+5de1-5de2, U+5de5-5de8, U+5deb, U+5dee, U+5df1-5df4, U+5df7, U+5dfd-5dfe, U+5e03, U+5e06, U+5e11, U+5e16, U+5e19, U+5e1b, U+5e1d, U+5e25, U+5e2b, U+5e2d, U+5e33, U+5e36, U+5e38, U+5e3d, U+5e3f-5e40, U+5e44-5e45, U+5e47, U+5e4c, U+5e55, U+5e5f, U+5e61-5e63, U+5e72, U+5e77-5e79, U+5e7b-5e7e, U+5e84, U+5e87, U+5e8a, U+5e8f, U+5e95, U+5e97, U+5e9a, U+5e9c, U+5ea0, U+5ea7, U+5eab, U+5ead, U+5eb5-5eb8, U+5ebe, U+5ec2, U+5ec8-5eca, U+5ed0, U+5ed3, U+5ed6, U+5eda-5edb, U+5edf-5ee0, U+5ee2-5ee3, U+5eec, U+5ef3, U+5ef6-5ef7, U+5efa-5efb, U+5f01, U+5f04, U+5f0a) ); /* noto-sans-kr-[88]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-88-400-normal.woff2", $range: (U+59be, U+59c3, U+59c6, U+59c9, U+59cb, U+59d0-59d1, U+59d3-59d4, U+59d9-59da, U+59dc-59dd, U+59e6, U+59e8, U+59ea, U+59ec, U+59ee, U+59f8, U+59fb, U+59ff, U+5a01, U+5a03, U+5a11, U+5a18, U+5a1b-5a1c, U+5a1f-5a20, U+5a25, U+5a29, U+5a36, U+5a3c, U+5a41, U+5a46, U+5a49, U+5a5a, U+5a62, U+5a66, U+5a92, U+5a9a-5a9b, U+5aa4, U+5ac1-5ac2, U+5ac4, U+5ac9, U+5acc, U+5ae1, U+5ae6, U+5ae9, U+5b05, U+5b09, U+5b0b-5b0c, U+5b16, U+5b2a, U+5b40, U+5b43, U+5b51, U+5b54-5b55, U+5b58, U+5b5a, U+5b5c-5b5d, U+5b5f, U+5b63-5b64, U+5b69, U+5b6b, U+5b70-5b71, U+5b75, U+5b7a, U+5b7c, U+5b85, U+5b87-5b88, U+5b8b, U+5b8f, U+5b93, U+5b95-5b99, U+5b9b-5b9c, U+5ba2-5ba6, U+5bac, U+5bae, U+5bb0, U+5bb3-5bb5, U+5bb8-5bb9, U+5bbf-5bc0, U+5bc2-5bc7, U+5bcc, U+5bd0, U+5bd2-5bd4, U+5bd7, U+5bde-5bdf, U+5be1-5be2, U+5be4-5be9, U+5beb-5bec, U+5bee-5bef, U+5bf5-5bf6, U+5bf8, U+5bfa, U+5c01, U+5c04, U+5c07-5c0b, U+5c0d-5c0e, U+5c16, U+5c19, U+5c24, U+5c28, U+5c31, U+5c38-5c3c, U+5c3e-5c3f) ); /* noto-sans-kr-[89]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-89-400-normal.woff2", $range: (U+5703-5704, U+5708, U+570d, U+5712-5713, U+5716, U+5718, U+572d, U+573b, U+5740, U+5742, U+5747, U+574a, U+574d-574e, U+5750-5751, U+5761, U+5764, U+5766, U+576a, U+576e, U+5770, U+5775, U+577c, U+5782, U+5788, U+578b, U+5793, U+57a0, U+57a2-57a3, U+57c3, U+57c7-57c8, U+57cb, U+57df-57e0, U+57f0, U+57f4, U+57f7, U+57f9-57fa, U+57fc, U+5800, U+5802, U+5805-5806, U+5808-580a, U+581e, U+5821, U+5824, U+5827, U+582a, U+582f-5831, U+5835, U+583a, U+584a-584b, U+584f, U+5851, U+5854, U+5857-5858, U+585a, U+585e, U+5861-5862, U+5864, U+5875, U+5879, U+587c, U+587e, U+5883, U+5885, U+5889, U+5893, U+589c, U+589e-589f, U+58a8-58a9, U+58ae, U+58b3, U+58ba-58bb, U+58be, U+58c1, U+58c5, U+58c7, U+58ce, U+58d1, U+58d3, U+58d5, U+58d8-58d9, U+58de-58df, U+58e4, U+58ec, U+58ef, U+58f9-58fb, U+58fd, U+590f, U+5914-5915, U+5919, U+5922, U+592d-592e, U+5931, U+5937, U+593e, U+5944, U+5947-5949, U+594e-5951, U+5954-5955, U+5957, U+595a, U+5960, U+5962, U+5967, U+596a-596e, U+5974, U+5978, U+5982-5984, U+598a, U+5993, U+5996-5997, U+5999, U+59a5, U+59a8, U+59ac, U+59b9, U+59bb) ); /* noto-sans-kr-[90]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-90-400-normal.woff2", $range: (U+539a, U+53a0, U+53a5-53a6, U+53ad, U+53bb, U+53c3, U+53c8-53cb, U+53cd, U+53d4, U+53d6-53d7, U+53db, U+53e1-53e3, U+53e5, U+53e9-53ed, U+53f1, U+53f3, U+53f8, U+5403-5404, U+540a, U+540e-5411, U+541b, U+541d, U+541f-5420, U+5426, U+5429, U+542b, U+5433, U+5438-5439, U+543b-543c, U+543e, U+5442, U+5448, U+544a, U+5451, U+5468, U+546a, U+5471, U+5473, U+5475, U+547b-547d, U+5480, U+5486, U+548e, U+5490, U+54a4, U+54a8, U+54ab-54ac, U+54b3, U+54b8, U+54bd, U+54c0, U+54c4, U+54c8-54c9, U+54e1, U+54e5, U+54e8, U+54ed-54ee, U+54f2, U+54fa, U+5504, U+5506-5507, U+550e, U+5510, U+551c, U+552f, U+5531, U+5535, U+553e, U+5544, U+5546, U+554f, U+5553, U+5556, U+555e, U+5563, U+557c, U+5580, U+5584, U+5586-5587, U+5589-558a, U+5598-559a, U+559c-559d, U+55a7, U+55a9-55ac, U+55ae, U+55c5, U+55c7, U+55d4, U+55da, U+55dc, U+55df, U+55e3-55e4, U+55fd-55fe, U+5606, U+5609, U+5614, U+5617, U+562f, U+5632, U+5634, U+5636, U+5653, U+5668, U+566b, U+5674, U+5686, U+56a5, U+56ac, U+56ae, U+56b4, U+56bc, U+56ca, U+56cd, U+56d1, U+56da-56db, U+56de, U+56e0, U+56f0, U+56f9-56fa) ); /* noto-sans-kr-[91]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-91-400-normal.woff2", $range: (U+516e, U+5175-5178, U+517c, U+5180, U+5186, U+518a, U+518d, U+5192, U+5195, U+5197, U+51a0, U+51a5, U+51aa, U+51ac, U+51b6-51b7, U+51bd, U+51c4, U+51c6, U+51c9, U+51cb-51cd, U+51dc-51de, U+51e1, U+51f0-51f1, U+51f6, U+51f8-51f9, U+51fd, U+5200, U+5203, U+5207-5208, U+520a, U+520e, U+5211, U+5217, U+521d, U+5224-5225, U+522a, U+522e, U+5230, U+5236-523b, U+5243, U+5247, U+524a-524c, U+5254, U+5256, U+525b, U+525d, U+5261, U+5269-526a, U+526f, U+5272, U+5275, U+527d, U+527f, U+5283, U+5287-5289, U+528d, U+5291-5292, U+529f, U+52a3-52a4, U+52a9-52ab, U+52be, U+52c1, U+52c3, U+52c5, U+52c7, U+52c9, U+52cd, U+52d2, U+52d6, U+52d8-52d9, U+52db, U+52dd-52df, U+52e2-52e4, U+52f3, U+52f5, U+52f8, U+52fa-52fb, U+52fe-52ff, U+5305, U+5308, U+530d, U+530f-5310, U+5315, U+5319, U+5320-5321, U+5323, U+532a, U+532f, U+5339, U+533f-5341, U+5343-5344, U+5347-534a, U+534d, U+5351-5354, U+535a, U+535c, U+535e, U+5360, U+5366, U+5368, U+536f-5371, U+5374-5375, U+5377, U+537d, U+537f, U+5384, U+5393, U+5398) ); /* noto-sans-kr-[92]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-92-400-normal.woff2", $range: (U+4f43, U+4f46-4f48, U+4f4d-4f51, U+4f55, U+4f59-4f5a, U+4f69, U+4f6f-4f70, U+4f73, U+4f76, U+4f7a, U+4f7e-4f7f, U+4f81, U+4f83-4f84, U+4f86, U+4f88, U+4f8a-4f8b, U+4f8d, U+4f8f, U+4f91, U+4f96, U+4f98, U+4f9b, U+4f9d, U+4fae-4faf, U+4fb5-4fb6, U+4fbf, U+4fc2-4fc4, U+4fc9-4fca, U+4fce, U+4fd1, U+4fd3-4fd4, U+4fd7, U+4fda, U+4fdf-4fe0, U+4fee-4fef, U+4ff1, U+4ff3, U+4ff5, U+4ff8, U+4ffa, U+5002, U+5006, U+5009, U+500b, U+500d, U+5011-5012, U+5016, U+5019-501a, U+501c, U+501e-501f, U+5021, U+5023-5024, U+5026-5028, U+502a-502d, U+503b, U+5043, U+5047-5049, U+504f, U+5055, U+505a, U+505c, U+5065, U+5074-5076, U+5078, U+5080, U+5085, U+508d, U+5091, U+5098-5099, U+50ac-50ad, U+50b2-50b3, U+50b5, U+50b7, U+50be, U+50c5, U+50c9-50ca, U+50d1, U+50d5-50d6, U+50da, U+50de, U+50e5, U+50e7, U+50ed, U+50f9, U+50fb, U+50ff-5101, U+5104, U+5106, U+5109, U+5112, U+511f, U+5121, U+512a, U+5132, U+5137, U+513a, U+513c, U+5140-5141, U+5143-5148, U+514b-514e, U+5152, U+515c, U+5162, U+5169-516b, U+516d) ); /* noto-sans-kr-[93]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-93-400-normal.woff2", $range: (U+338c-339c, U+339f-33a0, U+33a2-33cb, U+33cf-33d0, U+33d3, U+33d6, U+33d8, U+33db-33dd, U+4e01, U+4e03, U+4e07-4e08, U+4e11, U+4e14-4e15, U+4e18-4e19, U+4e1e, U+4e32, U+4e38-4e39, U+4e42-4e43, U+4e45, U+4e4d-4e4f, U+4e56, U+4e58-4e59, U+4e5d-4e5e, U+4e6b, U+4e6d, U+4e73, U+4e76-4e77, U+4e7e, U+4e82, U+4e86, U+4e88, U+4e8e, U+4e90-4e92, U+4e94-4e95, U+4e98, U+4e9b, U+4e9e, U+4ea1-4ea2, U+4ea4-4ea6, U+4ea8, U+4eab, U+4ead-4eae, U+4eb6, U+4ec0-4ec1, U+4ec4, U+4ec7, U+4ecb, U+4ecd, U+4ed4-4ed5, U+4ed7-4ed9, U+4edd, U+4edf, U+4ee4, U+4ef0, U+4ef2, U+4ef6-4ef7, U+4efb, U+4f01, U+4f09, U+4f0b, U+4f0d-4f11, U+4f2f, U+4f34, U+4f36, U+4f38, U+4f3a, U+4f3c-4f3d) ); /* noto-sans-kr-[94]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-94-400-normal.woff2", $range: (U+3136, U+3138, U+313a-3140, U+3143-3144, U+3150, U+3152, U+3154-3156, U+3158-315b, U+315d-315f, U+3162, U+3164-318c, U+318e, U+3200-321b, U+3231, U+3239, U+3251-325a, U+3260-327b, U+327e-327f, U+328a-3290, U+3294, U+329e, U+32a5, U+3380-3384, U+3388-338b) ); /* noto-sans-kr-[95]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-95-400-normal.woff2", $range: (U+2f7d, U+2f7f-2f8b, U+2f8e-2f90, U+2f92-2f97, U+2f99-2fa0, U+2fa2-2fa3, U+2fa5-2fa9, U+2fac-2fb1, U+2fb3-2fbc, U+2fc1-2fca, U+2fcd-2fd4, U+3003, U+3012-3019, U+301c, U+301e-3020, U+3036, U+3041, U+3043, U+3045, U+3047, U+3049, U+304e, U+3050, U+3052, U+3056, U+305a, U+305c, U+305e, U+3062, U+3065, U+306c, U+3070-307d, U+3080, U+3085, U+3087, U+308e, U+3090-3091, U+30a1, U+30a5, U+30a9, U+30ae, U+30b1-30b2, U+30b4, U+30b6, U+30bc-30be, U+30c2, U+30c5, U+30cc, U+30d2, U+30d4, U+30d8-30dd, U+30e4, U+30e6, U+30e8, U+30ee, U+30f0-30f2, U+30f4-30f6, U+3133, U+3135) ); /* noto-sans-kr-[96]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-96-400-normal.woff2", $range: (U+2541-254b, U+25a4-25a9, U+25b1, U+25b5, U+25b9, U+25bf, U+25c1, U+25c3, U+25c9-25ca, U+25cc, U+25ce, U+25d0-25d1, U+25e6, U+25ef, U+260f, U+261d, U+261f, U+262f, U+2660, U+2664, U+2667-2669, U+266d, U+266f, U+2716, U+271a, U+273d, U+2756, U+2776-277f, U+278a-2793, U+2963, U+2965, U+2ac5-2ac6, U+2acb-2acc, U+2f00, U+2f04, U+2f06, U+2f08, U+2f0a-2f0b, U+2f11-2f12, U+2f14, U+2f17-2f18, U+2f1c-2f1d, U+2f1f-2f20, U+2f23-2f26, U+2f28-2f29, U+2f2b, U+2f2d, U+2f2f-2f32, U+2f38, U+2f3c-2f40, U+2f42-2f4c, U+2f4f-2f52, U+2f54-2f58, U+2f5a-2f66, U+2f69-2f70, U+2f72-2f76, U+2f78, U+2f7a-2f7c) ); /* noto-sans-kr-[97]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-97-400-normal.woff2", $range: (U+2479-2487, U+249c-24d1, U+24d3-24d7, U+24d9-24e9, U+24eb-24f4, U+2500-2501, U+2503, U+250c-2513, U+2515-2516, U+2518-2540) ); /* noto-sans-kr-[98]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-98-400-normal.woff2", $range: (U+215b-215e, U+2162-2169, U+2170-2179, U+2195-2199, U+21b0-21b4, U+21bc, U+21c0, U+21c4-21c5, U+21cd, U+21cf-21d4, U+21e0-21e3, U+21e6-21e9, U+2200, U+2202-2203, U+2206-2209, U+220b-220c, U+220f, U+2211, U+2213, U+221a, U+221d-2220, U+2222, U+2225-2227, U+2229-222c, U+222e, U+2234-2237, U+223d, U+2243, U+2245, U+2248, U+2250-2253, U+225a, U+2260-2262, U+2264-2267, U+226a-226b, U+226e-2273, U+2276-2277, U+2279-227b, U+2280-2287, U+228a-228b, U+2295-2297, U+22a3-22a5, U+22bb-22bc, U+22ce-22cf, U+22da-22db, U+22ee-22ef, U+2306, U+2312, U+2314, U+2467-2478) ); /* noto-sans-kr-[99]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-99-400-normal.woff2", $range: (U+81-82, U+84, U+a2-a5, U+a7-a8, U+aa, U+ac-ad, U+b1-b3, U+b6, U+b8-ba, U+bc-be, U+c0, U+c2, U+c6-cb, U+ce-d0, U+d4, U+d8-d9, U+db-dc, U+de-df, U+e6, U+eb, U+ee-f0, U+f4, U+f7-f9, U+fb, U+fe-ff, U+111, U+126-127, U+132-133, U+138, U+13f-142, U+149-14b, U+152-153, U+166-167, U+2bc, U+2c7, U+2d0, U+2d8-2d9, U+2db-2dd, U+391-394, U+396-3a1, U+3a3-3a9, U+3b2-3b6, U+3b8, U+3bc, U+3be-3c1, U+3c3-3c9, U+2010, U+2015-2016, U+2018-2019, U+201b, U+201f-2021, U+2025, U+2030, U+2033-2036, U+203c, U+203e, U+2042, U+2074, U+207a-207f, U+2081-2084, U+2109, U+2113, U+2116, U+2121, U+2126, U+212b, U+2153-2154) ); /* noto-sans-kr-[100]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-100-400-normal.woff2", $range: (U+e8, U+2da, U+2160, U+2194, U+3054, U+3058, U+306d, U+3086, U+308d, U+30ac, U+30bb, U+30c4, U+30cd-30ce, U+30e2, U+3132, U+3146, U+3149, U+339d, U+4e3b, U+4f0a, U+4fdd, U+4fe1, U+5409, U+540c, U+5834, U+592a-592b, U+5b9a, U+5dde, U+5e0c, U+5e73, U+5f0f, U+60f3, U+653f, U+661f, U+662f, U+667a, U+683c, U+6b4c, U+6c11, U+767c, U+76ee, U+76f4, U+77f3, U+79d1, U+7a7a, U+7b2c, U+7d22, U+8207, U+8a00, U+8a71, U+9280, U+9580, U+958b, U+96c6, U+9762, U+98df, U+9ed1, U+ac2d, U+adc8, U+add3, U+af48, U+b014, U+b134-b135, U+b158, U+b2aa, U+b35f, U+b6a4, U+b9cf, U+bb63, U+bd23, U+be91, U+c29b, U+c3f4, U+c42c, U+c55c, U+c573, U+c58f, U+c78c, U+c7dd, U+c8f5, U+cad1, U+cc48, U+cf10, U+cf20, U+d03c, U+d07d, U+d2a0, U+d30e, U+d38d, U+d3a8, U+d3c8, U+d5e5, U+d5f9, U+d6e4, U+f90a, U+ff02, U+ff1c) ); /* noto-sans-kr-[101]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-101-400-normal.woff2", $range: (U+3b1, U+2466, U+25a1, U+25a3, U+261c, U+3008-3009, U+305b, U+305d, U+3069, U+30a7, U+30ba, U+30cf, U+30ef, U+3151, U+3157, U+4e4b, U+4e5f, U+4e8c, U+4eca, U+4ed6, U+4f5b, U+50cf, U+5149, U+5165, U+5171, U+5229, U+529b, U+5316, U+539f, U+53f2, U+571f, U+5728, U+58eb, U+591c, U+5b78, U+5c11, U+5c55, U+5ddd, U+5e02, U+5fb7, U+60c5, U+610f, U+611f, U+6625, U+66f8, U+6797, U+679c, U+682a, U+6d2a, U+706b, U+7406, U+767b, U+76f8, U+77e5, U+7acb, U+898b, U+8a69, U+8def, U+8fd1, U+901a, U+90e8, U+91cd, U+975e, U+ae14, U+ae6c, U+aec0, U+afc7, U+afc9, U+b01c, U+b028, U+b308, U+b311, U+b314, U+b31c, U+b524, U+b560, U+b764, U+b920, U+b9e3, U+bd48, U+be7d, U+c0db, U+c231, U+c270, U+c2e3, U+c37d, U+c3ed, U+c530, U+c6a5, U+c6dc, U+c7a4, U+c954, U+c974, U+d000, U+d565, U+d667, U+d6c5, U+d79d, U+ff1e) ); /* noto-sans-kr-[102]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-102-400-normal.woff2", $range: (U+131, U+2032, U+2465, U+2642, U+3048, U+3051, U+3083-3084, U+308f, U+30c0, U+30d1, U+30d3, U+30d6, U+30df, U+30e7, U+3153, U+4e16, U+4e8b, U+4ee5, U+5206, U+52a0, U+52d5, U+53e4, U+53ef, U+54c1, U+57ce, U+597d, U+5b8c, U+5ea6, U+5f8c, U+5f97, U+6210, U+6240, U+624b, U+6728, U+6bd4, U+7236, U+7269, U+7279, U+738b, U+7528, U+7530, U+767e, U+798f, U+8005, U+8a18, U+90fd, U+91cc, U+9577, U+9593, U+98a8, U+ac20, U+acf6, U+ad90, U+af5d, U+af80, U+afcd, U+aff0, U+b0a1, U+b0b5, U+b1fd, U+b2fc, U+b380, U+b51b, U+b584, U+b5b3, U+b8fd, U+b93c, U+b9f4, U+bb44, U+bc08, U+bc27, U+bc49, U+be55, U+be64, U+bfb0, U+bfc5, U+c178, U+c21f, U+c314, U+c4f1, U+c58d, U+c664, U+c698, U+c6a7, U+c6c1, U+c9ed, U+cac0, U+cacc, U+cad9, U+ccb5, U+cdcc, U+d0e4, U+d143, U+d320, U+d330, U+d54d, U+ff06, U+ff1f, U+ff5e) ); /* noto-sans-kr-[103]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-103-400-normal.woff2", $range: (U+b4, U+20a9, U+20ac, U+2190, U+24d8, U+2502, U+2514, U+2592, U+25c7-25c8, U+2663, U+3060, U+3064, U+3081, U+3088, U+30a3, U+30a6, U+30aa, U+30b5, U+30c7, U+30ca-30cb, U+30d0, U+30e3, U+30e5, U+339e, U+4e09, U+4eac, U+4f5c, U+5167-5168, U+516c, U+51fa, U+5408, U+540d, U+591a, U+5b57, U+6211, U+65b9, U+660e, U+6642, U+6700, U+6b63, U+6e2f, U+7063, U+7532, U+793e, U+81ea, U+8272, U+82b1, U+897f, U+8eca, U+91ce, U+ac38, U+ad76, U+ae84, U+aecc, U+b07d, U+b0b1, U+b215, U+b2a0, U+b310, U+b3d7, U+b52a, U+b618, U+b775, U+b797, U+bcd5, U+bd59, U+be80, U+bea8, U+bed1, U+bee4-bee5, U+c060, U+c2ef, U+c329, U+c3dc, U+c597, U+c5bd, U+c5e5, U+c69c, U+c9d6, U+ca29, U+ca5c, U+ca84, U+cc39, U+cc3b, U+ce89, U+cee5, U+cf65, U+cf85, U+d058, U+d145, U+d22d, U+d325, U+d37d, U+d3ad, U+d769, U+ff0c) ); /* noto-sans-kr-[104]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-104-400-normal.woff2", $range: (U+2161, U+2228, U+2299, U+2464, U+2517, U+2640, U+3042, U+304a, U+3053, U+3061, U+307f, U+3082, U+308c, U+3092, U+30a8, U+30ab, U+30ad, U+30b0, U+30b3, U+30b7, U+30c1, U+30c6, U+30c9, U+30d5, U+30d7, U+30de, U+30e0-30e1, U+30ec-30ed, U+4e0b, U+4e0d, U+4ee3, U+53f0, U+548c, U+5b89, U+5bb6, U+5c0f, U+611b, U+6771, U+6aa2, U+6bcd, U+6c34, U+6cd5, U+6d77, U+767d, U+795e, U+8ecd, U+9999, U+9ad8, U+ac07, U+ac1a, U+ac40, U+ad0c, U+ad88, U+ada4, U+ae01, U+ae65, U+aebd, U+aec4, U+afe8, U+b139, U+b205, U+b383, U+b38c, U+b42c, U+b461, U+b55c, U+b78f, U+b8fb, U+b9f7, U+bafc, U+bc99, U+bed8, U+bfcd, U+c0bf, U+c0f9, U+c167, U+c204, U+c20f, U+c22f, U+c258, U+c298, U+c2bc, U+c388, U+c501, U+c50c, U+c5b9, U+c5ce, U+c641, U+c648, U+c73d, U+ca50, U+ca61, U+cc4c, U+ceac, U+d0d4, U+d5f7, U+d6d7, U+ff1a) ); /* noto-sans-kr-[105]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-105-400-normal.woff2", $range: (U+2103, U+2463, U+25c6, U+25cb, U+266c, U+3001, U+300a, U+3046, U+304c-304d, U+304f, U+3055, U+3059, U+3063, U+3066-3068, U+306f, U+3089, U+30b8, U+30bf, U+314f, U+4e0a, U+570b, U+5730, U+5916, U+5929, U+5c71, U+5e74, U+5fc3, U+601d, U+6027, U+63d0, U+6709, U+6734, U+751f, U+7684, U+82f1, U+9053, U+91d1, U+97f3, U+ac2f, U+ac4d, U+adc4, U+ade4, U+ae41, U+ae4d-ae4e, U+aed1, U+afb9, U+b0e0, U+b299, U+b365, U+b46c, U+b480, U+b4c8, U+b7b4, U+b819, U+b918, U+baab, U+bab9, U+be8f, U+bed7, U+c0ec, U+c19f, U+c1a5, U+c3d9, U+c464, U+c53d, U+c553, U+c570, U+c5cc, U+c633, U+c6a4, U+c7a3, U+c7a6, U+c886, U+c9d9-c9da, U+c9ec, U+ca0c, U+cc21, U+cd1b, U+cd78, U+cdc4, U+cef8, U+cfe4, U+d0a5, U+d0b5, U+d0ec, U+d15d, U+d188, U+d23c, U+d2ac, U+d729, U+d79b, U+ff01, U+ff08-ff09, U+ff5c) ); /* noto-sans-kr-[106]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-106-400-normal.woff2", $range: (U+2039-203a, U+223c, U+25b3, U+25b7, U+25bd, U+25cf, U+266a, U+3002, U+300b, U+304b, U+3057, U+305f, U+306a-306b, U+307e, U+308a-308b, U+3093, U+30a2, U+30af, U+30b9, U+30c3, U+30c8, U+30e9-30eb, U+33a1, U+4e00, U+524d, U+5357, U+5b50, U+7121, U+884c, U+9751, U+ac94, U+aebe, U+aecd, U+af08, U+af41, U+af49, U+b010, U+b053, U+b109, U+b11b, U+b128, U+b154, U+b291, U+b2e6, U+b301, U+b385, U+b525, U+b5b4, U+b729, U+b72f, U+b738, U+b7ff, U+b837, U+b975, U+ba67, U+bb47, U+bc1f, U+bd90, U+bfd4, U+c27c, U+c324, U+c379, U+c3e0, U+c465, U+c53b, U+c58c, U+c610, U+c653, U+c6cd, U+c813, U+c82f, U+c999, U+c9e0, U+cac4, U+cad3, U+cbd4, U+cc10, U+cc22, U+ccb8, U+ccbc, U+cda5, U+ce84, U+cea3, U+cf67, U+cfe1, U+d241, U+d30d, U+d31c, U+d391, U+d401, U+d479, U+d5c9, U+d5db, U+d649, U+d6d4) ); /* noto-sans-kr-[107]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-107-400-normal.woff2", $range: (U+b0, U+e9, U+2193, U+2462, U+260e, U+261e, U+300e-300f, U+3044, U+30a4, U+30fb-30fc, U+314d, U+5973, U+6545, U+6708, U+7537, U+ac89, U+ac9c, U+acc1, U+ad04, U+ad75, U+ad7d, U+ae45, U+ae61, U+af42, U+b0ab, U+b0af, U+b0b3, U+b12c, U+b194, U+b1a8, U+b220, U+b258, U+b284, U+b2ff, U+b315, U+b371, U+b3d4-b3d5, U+b460, U+b527, U+b534, U+b810, U+b818, U+b98e, U+ba55, U+bbac, U+bc0b, U+bc40, U+bca1, U+bccd, U+bd93, U+be54, U+be5a, U+bf08, U+bf50, U+bf55, U+bfdc, U+c0c0, U+c0d0, U+c0f4, U+c100, U+c11e, U+c170, U+c20d, U+c274, U+c290, U+c308, U+c369, U+c539, U+c587, U+c5ff, U+c6ec, U+c70c, U+c7ad, U+c7c8, U+c83c, U+c881, U+cb48, U+cc60, U+ce69, U+ce6b, U+ce75, U+cf04, U+cf08, U+cf55, U+cf70, U+cffc, U+d0b7, U+d1a8, U+d2c8, U+d384, U+d47c, U+d48b, U+d5dd, U+d5e8, U+d720, U+d759, U+f981) ); /* noto-sans-kr-[108]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-108-400-normal.woff2", $range: (U+e0, U+e2, U+395, U+3b7, U+3ba, U+2460-2461, U+25a0, U+3010-3011, U+306e, U+30f3, U+314a, U+314c, U+5927, U+65b0, U+7e41, U+97d3, U+9ad4, U+ad49, U+ae0b, U+ae0d, U+ae43, U+ae5d, U+aecf, U+af3c, U+af64, U+afd4, U+b080, U+b084, U+b0c5, U+b10c, U+b1e8, U+b2ac, U+b36e, U+b451, U+b515, U+b540, U+b561, U+b6ab, U+b6b1, U+b72c, U+b730, U+b744, U+b800, U+b8ec, U+b8f0, U+b904, U+b968, U+b96d, U+b987, U+b9d9, U+bb36, U+bb49, U+bc2d, U+bc43, U+bcf6, U+bd89, U+be57, U+be61, U+bed4, U+c090, U+c130, U+c148, U+c19c, U+c2f9, U+c36c, U+c37c, U+c384, U+c3df, U+c575, U+c584, U+c660, U+c719, U+c816, U+ca4d, U+ca54, U+cabc, U+cb49, U+cc14, U+cff5, U+d004, U+d038, U+d0b4, U+d0d3, U+d0e0, U+d0ed, U+d131, U+d1b0, U+d31f, U+d33d, U+d3a0, U+d3ab, U+d514, U+d584, U+d6a1, U+d6cc, U+d749, U+d760, U+d799) ); /* noto-sans-kr-[109]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-109-400-normal.woff2", $range: (U+24, U+60, U+3b9, U+3bb, U+3bd, U+2191, U+2606, U+300c-300d, U+3131, U+3134, U+3139, U+3141-3142, U+3148, U+3161, U+3163, U+321c, U+4eba, U+5317, U+ac31, U+ac77, U+ac9f, U+acb9, U+acf0-acf1, U+acfd, U+ad73, U+af3d, U+b00c, U+b04a, U+b057, U+b0c4, U+b188, U+b1cc, U+b214, U+b2db, U+b2ee, U+b304, U+b4ed, U+b518, U+b5bc, U+b625, U+b69c-b69d, U+b7ac, U+b801, U+b86c, U+b959, U+b95c, U+b985, U+ba48, U+bb58, U+bc0c, U+bc38, U+bc85, U+bc9a, U+bf40, U+c068, U+c0bd, U+c0cc, U+c12f, U+c149, U+c1e0, U+c22b, U+c22d, U+c250, U+c2fc, U+c300, U+c313, U+c370, U+c3d8, U+c557, U+c580, U+c5e3, U+c62e, U+c634, U+c6f0, U+c74d, U+c783, U+c78e, U+c796, U+c7bc, U+c92c, U+ca4c, U+cc1c, U+cc54, U+cc59, U+ce04, U+cf30, U+cfc4, U+d140, U+d321, U+d38c, U+d399, U+d54f, U+d587, U+d5d0, U+d6e8, U+d770) ); /* noto-sans-kr-[110]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-110-400-normal.woff2", $range: (U+d7, U+ea, U+fc, U+2192, U+25bc, U+3000, U+3137, U+3145, U+315c, U+7f8e, U+ac13, U+ac71, U+ac90, U+acb8, U+ace7, U+ad7f, U+ae50, U+aef4, U+af34, U+afbc, U+b048, U+b09a, U+b0ad, U+b0bc, U+b113, U+b125, U+b141, U+b20c, U+b2d9, U+b2ed, U+b367, U+b369, U+b374, U+b3cb, U+b4ec, U+b611, U+b760, U+b81b, U+b834, U+b8b0, U+b8e1, U+b989, U+b9d1, U+b9e1, U+b9fa, U+ba4d, U+ba78, U+bb35, U+bb54, U+bbf9, U+bc11, U+bcb3, U+bd05, U+bd95, U+bdd4, U+be10, U+bed0, U+bf51, U+c0d8, U+c232, U+c2b7, U+c2eb, U+c378, U+c500, U+c52c, U+c549, U+c568, U+c598, U+c5c9, U+c61b, U+c639, U+c67c, U+c717, U+c78a, U+c80a, U+c90c-c90d, U+c950, U+c9e7, U+cbe4, U+cca9, U+cce4, U+cdb0, U+ce78, U+ce94, U+ce98, U+cf8c, U+d018, U+d034, U+d0f1, U+d1b1, U+d280, U+d2f8, U+d338, U+d380, U+d3b4, U+d610, U+d69f, U+d6fc, U+d758) ); /* noto-sans-kr-[111]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-111-400-normal.woff2", $range: (U+e7, U+2022, U+203b, U+25c0, U+2605, U+2661, U+3147, U+318d, U+672c, U+8a9e, U+acaa, U+acbc, U+ad1c, U+ae4a, U+ae5c, U+b044, U+b054, U+b0c8-b0c9, U+b2a6, U+b2d0, U+b35c, U+b364, U+b428, U+b454, U+b465, U+b4b7, U+b4e3, U+b51c, U+b5a1, U+b784, U+b790, U+b7ab, U+b7f4, U+b82c, U+b835, U+b8e9, U+b8f8, U+b9d8, U+b9f9, U+ba5c, U+ba64, U+babd, U+bb18, U+bb3b, U+bbff, U+bc0d, U+bc45, U+bc97, U+bcbc, U+be45, U+be75, U+be7c, U+bfcc, U+c0b6, U+c0f7, U+c14b, U+c2b4, U+c30d, U+c4f8, U+c5bb, U+c5d1, U+c5e0, U+c5ee, U+c5fd, U+c606, U+c6c5, U+c6e0, U+c708, U+c81d, U+c820, U+c824, U+c878, U+c918, U+c96c, U+c9e4, U+c9f1, U+cc2e, U+cd09, U+cea1, U+cef5, U+cef7, U+cf64, U+cf69, U+cfe8, U+d035, U+d0ac, U+d230, U+d234, U+d2f4, U+d31d, U+d575, U+d578, U+d608, U+d614, U+d718, U+d751, U+d761, U+d78c, U+d790) ); /* noto-sans-kr-[112]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-112-400-normal.woff2", $range: (U+2665, U+3160, U+4e2d, U+6587, U+65e5, U+ac12, U+ac14, U+ac16, U+ac81, U+ad34, U+ade0, U+ae54, U+aebc, U+af2c, U+afc0, U+afc8, U+b04c, U+b08c, U+b099, U+b0a9, U+b0ac, U+b0ae, U+b0b8, U+b123, U+b179, U+b2e5, U+b2f7, U+b4c0, U+b531, U+b538, U+b545, U+b550, U+b5a8, U+b6f0, U+b728, U+b73b, U+b7ad, U+b7ed, U+b809, U+b864, U+b86d, U+b871, U+b9bf, U+b9f5, U+ba40, U+ba4b, U+ba58, U+ba87, U+baac, U+bbc0, U+bc16, U+bc34, U+bd07, U+bd99, U+be59, U+bfd0, U+c058, U+c0e4, U+c0f5, U+c12d, U+c139, U+c228, U+c529, U+c5c7, U+c635, U+c637, U+c735, U+c77d, U+c787, U+c789, U+c8c4, U+c989, U+c98c, U+c9d0, U+c9d3, U+cc0c, U+cc99, U+cd0c, U+cd2c, U+cd98, U+cda4, U+ce59, U+ce60, U+ce6d, U+cea0, U+d0d0-d0d1, U+d0d5, U+d14d, U+d1a4, U+d29c, U+d2f1, U+d301, U+d39c, U+d3bc, U+d4e8, U+d540, U+d5ec, U+d640, U+d750) ); /* noto-sans-kr-[113]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-113-400-normal.woff2", $range: (U+5e, U+25b2, U+25b6, U+314e, U+ac24, U+ace1, U+ace4, U+ae68, U+af2d, U+b0d0, U+b0e5, U+b150, U+b155, U+b193, U+b2c9, U+b2dd, U+b3c8, U+b3fc, U+b410, U+b458, U+b4dd, U+b5a0, U+b5a4, U+b5bb, U+b7b5, U+b838, U+b840, U+b86f, U+b8f9, U+b960, U+b9e5, U+bab8, U+bb50, U+bc1d, U+bc24-bc25, U+bca8, U+bcbd, U+bd04, U+bd10, U+bd24, U+be48, U+be5b, U+be68, U+c05c, U+c12c, U+c140, U+c15c, U+c168, U+c194, U+c219, U+c27d, U+c2a8, U+c2f1, U+c2f8, U+c368, U+c554-c555, U+c559, U+c564, U+c5d8, U+c5fc, U+c625, U+c65c, U+c6b1, U+c728, U+c794, U+c84c, U+c88c, U+c8e0, U+c8fd, U+c998, U+c9dd, U+cc0d, U+cc30, U+ceec, U+cf13, U+cf1c, U+cf5c, U+d050, U+d07c, U+d0a8, U+d134, U+d138, U+d154, U+d1f4, U+d2bc, U+d329, U+d32c, U+d3d0, U+d3f4, U+d3fc, U+d56b, U+d5cc, U+d600-d601, U+d639, U+d6c8, U+d754, U+d765) ); /* noto-sans-kr-[114]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-114-400-normal.woff2", $range: (U+3c-3d, U+2026, U+24d2, U+314b, U+ac11, U+acf3, U+ad74, U+ad81, U+adf9, U+ae34, U+af43, U+afb8, U+b05d, U+b07c, U+b110, U+b118, U+b17c, U+b180, U+b18d, U+b192, U+b2cc, U+b355, U+b378, U+b4a4, U+b4ef, U+b78d, U+b799, U+b7a9, U+b7fd, U+b807, U+b80c, U+b839, U+b9b4, U+b9db, U+ba3c, U+bab0, U+bba4, U+bc94, U+be4c, U+c154, U+c1c4, U+c26c, U+c2ac, U+c2ed, U+c4f4, U+c55e, U+c561, U+c571, U+c5b5, U+c5c4, U+c654-c655, U+c695, U+c6e8, U+c6f9, U+c724, U+c751, U+c775, U+c7a0, U+c7c1, U+c874, U+c880, U+c9d5, U+c9f8, U+cabd, U+cc29, U+cc2c, U+cca8, U+ccab, U+ccd0, U+ce21, U+ce35, U+ce7c, U+ce90, U+cee8, U+cef4, U+cfe0, U+d070, U+d0b9, U+d0c1, U+d0c4, U+d0c8, U+d15c, U+d1a1, U+d2c0, U+d300, U+d314, U+d3ed, U+d478, U+d480, U+d48d, U+d508, U+d53d, U+d5e4, U+d611, U+d61c, U+d68d, U+d6a8, U+d798) ); /* noto-sans-kr-[115]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-115-400-normal.woff2", $range: (U+23, U+25, U+5f, U+a9, U+ac08, U+ac78, U+aca8, U+acac, U+ace8, U+ad70, U+adc0, U+addc, U+b137, U+b140, U+b208, U+b290, U+b2f5, U+b3c5, U+b3cc, U+b420, U+b429, U+b529, U+b530, U+b77d, U+b79c, U+b7a8, U+b7c9, U+b7f0, U+b7fc, U+b828, U+b860, U+b9ad, U+b9c1, U+b9c9, U+b9dd-b9de, U+b9e8, U+ba38-ba39, U+babb, U+bc00, U+bc8c, U+bca0, U+bca4, U+bcd1, U+bcfc, U+bd09, U+bdf0, U+be60, U+c0ad, U+c0b4, U+c0bc, U+c190, U+c1fc, U+c220, U+c288, U+c2b9, U+c2f6, U+c528, U+c545, U+c558, U+c5bc, U+c5d4, U+c600, U+c644, U+c6c0, U+c6c3, U+c721, U+c798, U+c7a1, U+c811, U+c838, U+c871, U+c904, U+c990, U+c9dc, U+cc38, U+cc44, U+cca0, U+cd1d, U+cd95, U+cda9, U+ce5c, U+cf00, U+cf58, U+d150, U+d22c, U+d305, U+d328, U+d37c, U+d3f0, U+d551, U+d5a5, U+d5c8, U+d5d8, U+d63c, U+d64d, U+d669, U+d734, U+d76c) ); /* noto-sans-kr-[116]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-116-400-normal.woff2", $range: (U+26, U+2b, U+3e, U+40, U+7e, U+ac01, U+ac19, U+ac1d, U+aca0, U+aca9, U+acb0, U+ad8c, U+ae09, U+ae38, U+ae40, U+aed8, U+b09c, U+b0a0, U+b108, U+b204, U+b298, U+b2d8, U+b2eb-b2ec, U+b2f4, U+b313, U+b358, U+b450, U+b4e0, U+b54c, U+b610, U+b780, U+b78c, U+b791, U+b8e8, U+b958, U+b974, U+b984, U+b9b0, U+b9bc-b9bd, U+b9ce, U+ba70, U+bbfc, U+bc0f, U+bc15, U+bc1b, U+bc31, U+bc95, U+bcc0, U+bcc4, U+bd81, U+bd88, U+c0c8, U+c11d, U+c13c, U+c158, U+c18d, U+c1a1, U+c21c, U+c4f0, U+c54a, U+c560, U+c5b8, U+c5c8, U+c5f4, U+c628, U+c62c, U+c678, U+c6cc, U+c808, U+c810, U+c885, U+c88b, U+c900, U+c988, U+c99d, U+c9c8, U+cc3d-cc3e, U+cc45, U+cd08, U+ce20, U+cee4, U+d074, U+d0a4, U+d0dd, U+d2b9, U+d3b8, U+d3c9, U+d488, U+d544, U+d559, U+d56d, U+d588, U+d615, U+d648, U+d655, U+d658, U+d65c) ); /* noto-sans-kr-[117]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-117-400-normal.woff2", $range: (U+d, U+48, U+7c, U+ac10, U+ac15, U+ac74, U+ac80, U+ac83, U+acc4, U+ad11, U+ad50, U+ad6d, U+adfc, U+ae00, U+ae08, U+ae4c, U+b0a8, U+b124, U+b144, U+b178, U+b274, U+b2a5, U+b2e8, U+b2f9, U+b354, U+b370, U+b418, U+b41c, U+b4f1, U+b514, U+b798, U+b808, U+b824-b825, U+b8cc, U+b978, U+b9d0, U+b9e4, U+baa9, U+bb3c, U+bc18, U+bc1c, U+bc30, U+bc84, U+bcf5, U+bcf8, U+bd84, U+be0c, U+be14, U+c0b0, U+c0c9, U+c0dd, U+c124, U+c2dd, U+c2e4, U+c2ec, U+c54c, U+c57c-c57d, U+c591, U+c5c5-c5c6, U+c5ed, U+c608, U+c640, U+c6b8, U+c6d4, U+c784, U+c7ac, U+c800-c801, U+c9c1, U+c9d1, U+cc28, U+cc98, U+cc9c, U+ccad, U+cd5c, U+cd94, U+cd9c, U+cde8, U+ce68, U+cf54, U+d0dc, U+d14c, U+d1a0, U+d1b5, U+d2f0, U+d30c, U+d310, U+d398, U+d45c, U+d50c, U+d53c, U+d560, U+d568, U+d589, U+d604, U+d6c4, U+d788) ); /* noto-sans-kr-[118]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-118-400-normal.woff2", $range: (U+39, U+49, U+4d-4e, U+a0, U+ac04, U+ac1c, U+ac70, U+ac8c, U+acbd, U+acf5, U+acfc, U+ad00, U+ad6c, U+adf8, U+b098, U+b0b4, U+b294, U+b2c8, U+b300, U+b3c4, U+b3d9, U+b4dc, U+b4e4, U+b77c, U+b7ec, U+b85d, U+b97c, U+b9c8, U+b9cc, U+ba54, U+ba74, U+ba85, U+baa8, U+bb34, U+bb38, U+bbf8, U+bc14, U+bc29, U+bc88, U+bcf4, U+bd80, U+be44, U+c0c1, U+c11c, U+c120, U+c131, U+c138, U+c18c, U+c218, U+c2b5, U+c2e0, U+c544, U+c548, U+c5b4, U+c5d0, U+c5ec, U+c5f0, U+c601, U+c624, U+c694, U+c6a9, U+c6b0, U+c6b4, U+c6d0, U+c704, U+c720, U+c73c, U+c740, U+c744, U+c74c, U+c758, U+c77c, U+c785, U+c788, U+c790-c791, U+c7a5, U+c804, U+c815, U+c81c, U+c870, U+c8fc, U+c911, U+c9c4, U+ccb4, U+ce58, U+ce74, U+d06c, U+d0c0, U+d130, U+d2b8, U+d3ec, U+d504, U+d55c, U+d569, U+d574, U+d638, U+d654, U+d68c) ); /* noto-sans-kr-[119]-400-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-119-400-normal.woff2", $range: (U+20-22, U+27-2a, U+2c-38, U+3a-3b, U+3f, U+41-47, U+4a-4c, U+4f-5d, U+61-7b, U+7d, U+a1, U+ab, U+ae, U+b7, U+bb, U+bf, U+2013-2014, U+201c-201d, U+2122, U+ac00, U+ace0, U+ae30, U+b2e4, U+b85c, U+b9ac, U+c0ac, U+c2a4, U+c2dc, U+c774, U+c778, U+c9c0, U+d558) diff --git a/src/styles/noto-sans/kr-700-normal.scss b/src/styles/noto-sans/kr-700-normal.scss index 4b84476a02..18fc30f886 100644 --- a/src/styles/noto-sans/kr-700-normal.scss +++ b/src/styles/noto-sans/kr-700-normal.scss @@ -1,7 +1,9 @@ +@use "../font"; + $krFamily: "Noto Sans KR"; /* noto-sans-kr-[0]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-0-700-normal.woff2", @@ -9,7 +11,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[1]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-1-700-normal.woff2", @@ -17,7 +19,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[2]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-2-700-normal.woff2", @@ -25,7 +27,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[3]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-3-700-normal.woff2", @@ -33,7 +35,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[4]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-4-700-normal.woff2", @@ -41,7 +43,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[5]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-5-700-normal.woff2", @@ -49,7 +51,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[6]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-6-700-normal.woff2", @@ -57,7 +59,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[7]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-7-700-normal.woff2", @@ -65,7 +67,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[8]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-8-700-normal.woff2", @@ -73,7 +75,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[9]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-9-700-normal.woff2", @@ -81,7 +83,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[10]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-10-700-normal.woff2", @@ -89,7 +91,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[11]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-11-700-normal.woff2", @@ -97,7 +99,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[12]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-12-700-normal.woff2", @@ -105,7 +107,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[13]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-13-700-normal.woff2", @@ -113,7 +115,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[14]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-14-700-normal.woff2", @@ -121,7 +123,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[15]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-15-700-normal.woff2", @@ -129,7 +131,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[16]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-16-700-normal.woff2", @@ -137,7 +139,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[17]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-17-700-normal.woff2", @@ -145,7 +147,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[18]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-18-700-normal.woff2", @@ -153,7 +155,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[19]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-19-700-normal.woff2", @@ -161,7 +163,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[20]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-20-700-normal.woff2", @@ -169,7 +171,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[21]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-21-700-normal.woff2", @@ -177,7 +179,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[22]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-22-700-normal.woff2", @@ -185,7 +187,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[23]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-23-700-normal.woff2", @@ -193,7 +195,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[24]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-24-700-normal.woff2", @@ -201,7 +203,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[25]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-25-700-normal.woff2", @@ -209,7 +211,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[26]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-26-700-normal.woff2", @@ -217,7 +219,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[27]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-27-700-normal.woff2", @@ -225,7 +227,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[28]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-28-700-normal.woff2", @@ -233,7 +235,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[29]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-29-700-normal.woff2", @@ -241,7 +243,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[30]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-30-700-normal.woff2", @@ -249,7 +251,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[31]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-31-700-normal.woff2", @@ -257,7 +259,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[32]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-32-700-normal.woff2", @@ -265,7 +267,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[33]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-33-700-normal.woff2", @@ -273,7 +275,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[34]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-34-700-normal.woff2", @@ -281,7 +283,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[35]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-35-700-normal.woff2", @@ -289,7 +291,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[36]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-36-700-normal.woff2", @@ -297,7 +299,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[37]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-37-700-normal.woff2", @@ -305,7 +307,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[38]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-38-700-normal.woff2", @@ -313,7 +315,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[39]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-39-700-normal.woff2", @@ -321,7 +323,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[40]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-40-700-normal.woff2", @@ -329,7 +331,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[41]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-41-700-normal.woff2", @@ -337,7 +339,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[42]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-42-700-normal.woff2", @@ -345,7 +347,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[43]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-43-700-normal.woff2", @@ -353,7 +355,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[44]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-44-700-normal.woff2", @@ -361,7 +363,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[45]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-45-700-normal.woff2", @@ -369,7 +371,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[46]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-46-700-normal.woff2", @@ -377,7 +379,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[47]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-47-700-normal.woff2", @@ -385,7 +387,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[48]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-48-700-normal.woff2", @@ -393,7 +395,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[49]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-49-700-normal.woff2", @@ -401,7 +403,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[50]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-50-700-normal.woff2", @@ -409,7 +411,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[51]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-51-700-normal.woff2", @@ -417,7 +419,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[52]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-52-700-normal.woff2", @@ -425,7 +427,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[53]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-53-700-normal.woff2", @@ -433,7 +435,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[54]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-54-700-normal.woff2", @@ -441,7 +443,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[55]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-55-700-normal.woff2", @@ -449,7 +451,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[56]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-56-700-normal.woff2", @@ -457,7 +459,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[57]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-57-700-normal.woff2", @@ -465,7 +467,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[58]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-58-700-normal.woff2", @@ -473,7 +475,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[59]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-59-700-normal.woff2", @@ -481,7 +483,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[60]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-60-700-normal.woff2", @@ -489,7 +491,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[61]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-61-700-normal.woff2", @@ -497,7 +499,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[62]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-62-700-normal.woff2", @@ -505,7 +507,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[63]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-63-700-normal.woff2", @@ -513,7 +515,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[64]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-64-700-normal.woff2", @@ -521,7 +523,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[65]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-65-700-normal.woff2", @@ -529,7 +531,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[66]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-66-700-normal.woff2", @@ -537,7 +539,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[67]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-67-700-normal.woff2", @@ -545,7 +547,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[68]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-68-700-normal.woff2", @@ -553,7 +555,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[69]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-69-700-normal.woff2", @@ -561,7 +563,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[70]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-70-700-normal.woff2", @@ -569,7 +571,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[71]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-71-700-normal.woff2", @@ -577,7 +579,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[72]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-72-700-normal.woff2", @@ -585,7 +587,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[73]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-73-700-normal.woff2", @@ -593,7 +595,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[74]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-74-700-normal.woff2", @@ -601,7 +603,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[75]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-75-700-normal.woff2", @@ -609,7 +611,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[76]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-76-700-normal.woff2", @@ -617,7 +619,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[77]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-77-700-normal.woff2", @@ -625,7 +627,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[78]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-78-700-normal.woff2", @@ -633,7 +635,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[79]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-79-700-normal.woff2", @@ -641,7 +643,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[80]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-80-700-normal.woff2", @@ -649,7 +651,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[81]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-81-700-normal.woff2", @@ -657,7 +659,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[82]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-82-700-normal.woff2", @@ -665,7 +667,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[83]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-83-700-normal.woff2", @@ -673,7 +675,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[84]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-84-700-normal.woff2", @@ -681,7 +683,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[85]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-85-700-normal.woff2", @@ -689,7 +691,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[86]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-86-700-normal.woff2", @@ -697,7 +699,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[87]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-87-700-normal.woff2", @@ -705,7 +707,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[88]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-88-700-normal.woff2", @@ -713,7 +715,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[89]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-89-700-normal.woff2", @@ -721,7 +723,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[90]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-90-700-normal.woff2", @@ -729,7 +731,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[91]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-91-700-normal.woff2", @@ -737,7 +739,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[92]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-92-700-normal.woff2", @@ -745,7 +747,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[93]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-93-700-normal.woff2", @@ -753,7 +755,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[94]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-94-700-normal.woff2", @@ -761,7 +763,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[95]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-95-700-normal.woff2", @@ -769,7 +771,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[96]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-96-700-normal.woff2", @@ -777,7 +779,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[97]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-97-700-normal.woff2", @@ -785,7 +787,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[98]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-98-700-normal.woff2", @@ -793,7 +795,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[99]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-99-700-normal.woff2", @@ -801,7 +803,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[100]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-100-700-normal.woff2", @@ -809,7 +811,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[101]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-101-700-normal.woff2", @@ -817,7 +819,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[102]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-102-700-normal.woff2", @@ -825,7 +827,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[103]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-103-700-normal.woff2", @@ -833,7 +835,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[104]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-104-700-normal.woff2", @@ -841,7 +843,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[105]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-105-700-normal.woff2", @@ -849,7 +851,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[106]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-106-700-normal.woff2", @@ -857,7 +859,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[107]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-107-700-normal.woff2", @@ -865,7 +867,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[108]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-108-700-normal.woff2", @@ -873,7 +875,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[109]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-109-700-normal.woff2", @@ -881,7 +883,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[110]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-110-700-normal.woff2", @@ -889,7 +891,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[111]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-111-700-normal.woff2", @@ -897,7 +899,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[112]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-112-700-normal.woff2", @@ -905,7 +907,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[113]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-113-700-normal.woff2", @@ -913,7 +915,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[114]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-114-700-normal.woff2", @@ -921,7 +923,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[115]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-115-700-normal.woff2", @@ -929,7 +931,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[116]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-116-700-normal.woff2", @@ -937,7 +939,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[117]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-117-700-normal.woff2", @@ -945,7 +947,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[118]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-118-700-normal.woff2", @@ -953,7 +955,7 @@ $krFamily: "Noto Sans KR"; ); /* noto-sans-kr-[119]-700-normal */ -@include fontFace( +@include font.face( $family: $krFamily, $weight: 700, $url: "~@fontsource/noto-sans-kr/files/noto-sans-kr-119-700-normal.woff2", diff --git a/src/styles/noto-sans/sc-400-normal.scss b/src/styles/noto-sans/sc-400-normal.scss index 802216e8b2..4f033fabfd 100644 --- a/src/styles/noto-sans/sc-400-normal.scss +++ b/src/styles/noto-sans/sc-400-normal.scss @@ -1,679 +1,681 @@ +@use "../font"; + $scFamily: "Noto Sans SC"; /* noto-sans-sc-[4]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-4-400-normal.woff2", $range: (U+1f1e9-1f1f5, U+1f1f7-1f1ff, U+1f21a, U+1f232, U+1f234-1f237, U+1f250-1f251, U+1f300, U+1f302-1f308, U+1f30a-1f311, U+1f315, U+1f319-1f320, U+1f324, U+1f327, U+1f32a, U+1f32c-1f32d, U+1f330-1f357, U+1f359-1f37e) ); /* noto-sans-sc-[5]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-5-400-normal.woff2", $range: (U+fee3, U+fef3, U+ff03-ff04, U+ff07, U+ff0a, U+ff17-ff19, U+ff1c-ff1d, U+ff20-ff3a, U+ff3c, U+ff3e-ff5b, U+ff5d, U+ff61-ff65, U+ff67-ff6a, U+ff6c, U+ff6f-ff78, U+ff7a-ff7d, U+ff80-ff84, U+ff86, U+ff89-ff8e, U+ff92, U+ff97-ff9b, U+ff9d-ff9f, U+ffe0-ffe4, U+ffe6, U+ffe9, U+ffeb, U+ffed, U+fffc, U+1f004, U+1f170-1f171, U+1f192-1f195, U+1f198-1f19a, U+1f1e6-1f1e8) ); /* noto-sans-sc-[6]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-6-400-normal.woff2", $range: (U+f0a7, U+f0b2, U+f0b7, U+f0c9, U+f0d8, U+f0da, U+f0dc-f0dd, U+f0e0, U+f0e6, U+f0eb, U+f0fc, U+f101, U+f104-f105, U+f107, U+f10b, U+f11b, U+f14b, U+f18a, U+f193, U+f1d6-f1d7, U+f244, U+f27a, U+f296, U+f2ae, U+f471, U+f4b3, U+f610-f611, U+f880-f881, U+f8ec, U+f8f5, U+f8ff, U+f901, U+f90a, U+f92c-f92d, U+f934, U+f937, U+f941, U+f965, U+f967, U+f969, U+f96b, U+f96f, U+f974, U+f978-f979, U+f97e, U+f981, U+f98a, U+f98e, U+f997, U+f99c, U+f9b2, U+f9b5, U+f9ba, U+f9be, U+f9ca, U+f9d0-f9d1, U+f9dd, U+f9e0-f9e1, U+f9e4, U+f9f7, U+fa00-fa01, U+fa08, U+fa0a, U+fa11, U+fb01-fb02, U+fdfc, U+fe0e, U+fe30-fe31, U+fe33-fe44, U+fe49-fe52, U+fe54-fe57, U+fe59-fe66, U+fe68-fe6b, U+fe8e, U+fe92-fe93, U+feae, U+feb8, U+fecb-fecc, U+fee0) ); /* noto-sans-sc-[21]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-21-400-normal.woff2", $range: (U+9f3d-9f3e, U+9f41, U+9f4a-9f4b, U+9f51-9f52, U+9f61-9f63, U+9f66-9f67, U+9f80-9f81, U+9f83, U+9f85-9f8d, U+9f90-9f91, U+9f94-9f96, U+9f98, U+9f9b-9f9c, U+9f9e, U+9fa0, U+9fa2, U+9ff4, U+a001, U+a007, U+a025, U+a046-a047, U+a057, U+a072, U+a078-a079, U+a083, U+a085, U+a100, U+a118, U+a132, U+a134, U+a1f4, U+a242, U+a4a6, U+a4aa, U+a4b0-a4b1, U+a4b3, U+a9c1-a9c2, U+ac00-ac01, U+ac04, U+ac08, U+ac10-ac11, U+ac13-ac16, U+ac19, U+ac1c-ac1d, U+ac24, U+ac70-ac71, U+ac74, U+ac77-ac78, U+ac80-ac81, U+ac83, U+ac8c, U+ac90, U+ac9f-aca0, U+aca8-aca9, U+acac, U+acb0, U+acbd, U+acc1, U+acc4, U+ace0-ace1, U+ace4, U+ace8, U+acf3, U+acf5, U+acfc-acfd, U+ad00, U+ad0c, U+ad11, U+ad1c, U+ad34, U+ad50, U+ad64, U+ad6c, U+ad70, U+ad74, U+ad7f, U+ad81, U+ad8c, U+adc0, U+adc8, U+addc, U+ade0, U+adf8-adf9, U+adfc, U+ae00, U+ae08-ae09, U+ae0b, U+ae30, U+ae34, U+ae38, U+ae40, U+ae4a, U+ae4c, U+ae54, U+ae68, U+aebc, U+aed8, U+af2c-af2d, U+af34) ); /* noto-sans-sc-[22]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-22-400-normal.woff2", $range: (U+9dfa, U+9e0a, U+9e11, U+9e1a, U+9e1e, U+9e20, U+9e22, U+9e28-9e2c, U+9e2e-9e33, U+9e35-9e3b, U+9e3e, U+9e40-9e44, U+9e46-9e4e, U+9e51, U+9e53, U+9e55-9e58, U+9e5a-9e5c, U+9e5e-9e63, U+9e66-9e6e, U+9e71, U+9e73, U+9e75, U+9e78-9e79, U+9e7c-9e7e, U+9e82, U+9e86-9e88, U+9e8b-9e8c, U+9e90-9e91, U+9e93, U+9e95, U+9e97, U+9e9d, U+9ea4-9ea5, U+9ea9-9eaa, U+9eb4-9eb5, U+9eb8-9eba, U+9ebc-9ebf, U+9ec3, U+9ec9, U+9ecd, U+9ed0, U+9ed2-9ed3, U+9ed5-9ed6, U+9ed9, U+9edc-9edd, U+9edf-9ee0, U+9ee2, U+9ee5, U+9ee7-9eea, U+9eef, U+9ef1, U+9ef3-9ef4, U+9ef6, U+9ef9, U+9efb-9efc, U+9efe, U+9f0b, U+9f0d, U+9f10, U+9f14, U+9f17, U+9f19, U+9f22, U+9f29, U+9f2c, U+9f2f, U+9f31, U+9f37, U+9f39) ); /* noto-sans-sc-[23]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-23-400-normal.woff2", $range: (U+9c3b, U+9c40, U+9c47-9c49, U+9c53, U+9c57, U+9c64, U+9c72, U+9c77-9c78, U+9c7b, U+9c7f-9c80, U+9c82-9c83, U+9c85-9c8c, U+9c8e-9c92, U+9c94-9c9b, U+9c9e-9ca3, U+9ca5-9ca7, U+9ca9, U+9cab, U+9cad-9cae, U+9cb1-9cb7, U+9cb9-9cbd, U+9cbf-9cc0, U+9cc3, U+9cc5-9cc7, U+9cc9-9cd1, U+9cd3-9cda, U+9cdc-9cdd, U+9cdf, U+9ce1-9ce3, U+9ce5, U+9ce9, U+9cee-9cef, U+9cf3-9cf4, U+9cf6, U+9cfc-9cfd, U+9d02, U+9d08-9d09, U+9d12, U+9d1b, U+9d1e, U+9d26, U+9d28, U+9d37, U+9d3b, U+9d3f, U+9d51, U+9d59, U+9d5c-9d5d, U+9d5f-9d61, U+9d6c, U+9d70, U+9d72, U+9d7a, U+9d7e, U+9d84, U+9d89, U+9d8f, U+9d92, U+9daf, U+9db4, U+9db8, U+9dbc, U+9dc4, U+9dc7, U+9dc9, U+9dd7, U+9ddf, U+9df2, U+9df9) ); /* noto-sans-sc-[24]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-24-400-normal.woff2", $range: (U+9a5f, U+9a62, U+9a65, U+9a69, U+9a6b, U+9a6e, U+9a75, U+9a77-9a7a, U+9a7d, U+9a80, U+9a83, U+9a85, U+9a87-9a8a, U+9a8d-9a8e, U+9a90, U+9a92-9a93, U+9a95-9a96, U+9a98-9a99, U+9a9b-9aa2, U+9aa5, U+9aa7, U+9aaf-9ab1, U+9ab5-9ab6, U+9ab9-9aba, U+9abc, U+9ac0-9ac4, U+9ac8, U+9acb-9acc, U+9ace-9acf, U+9ad1-9ad2, U+9ad9, U+9adf, U+9ae1, U+9ae3, U+9aea-9aeb, U+9aed-9aef, U+9af4, U+9af9, U+9afb, U+9b03-9b04, U+9b06, U+9b08, U+9b0d, U+9b0f-9b10, U+9b13, U+9b18, U+9b1a, U+9b1f, U+9b22-9b23, U+9b25, U+9b27-9b28, U+9b2a, U+9b2f, U+9b31-9b32, U+9b3b, U+9b43, U+9b46-9b49, U+9b4d-9b4e, U+9b51, U+9b56, U+9b58, U+9b5a, U+9b5c, U+9b5f, U+9b61-9b62, U+9b6f, U+9b77, U+9b80, U+9b88, U+9b8b, U+9b8e, U+9b91, U+9b9f-9ba0, U+9ba8, U+9baa-9bab, U+9bad-9bae, U+9bb0-9bb1, U+9bb8, U+9bc9-9bca, U+9bd3, U+9bd6, U+9bdb, U+9be8, U+9bf0-9bf1, U+9c02, U+9c10, U+9c15, U+9c24, U+9c2d, U+9c32, U+9c39) ); /* noto-sans-sc-[25]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-25-400-normal.woff2", $range: (U+98c8, U+98cf-98d6, U+98da-98db, U+98dd, U+98e1-98e2, U+98e7-98ea, U+98ec, U+98ee-98ef, U+98f2, U+98f4, U+98fc-98fe, U+9903, U+9905, U+9908, U+990a, U+990c-990d, U+9913-9914, U+9918, U+991a-991b, U+991e, U+9921, U+9928, U+992c, U+992e, U+9935, U+9938-9939, U+993d-993e, U+9945, U+994b-994c, U+9951-9952, U+9954-9955, U+9957, U+995e, U+9963, U+9966-9969, U+996b-996c, U+996f, U+9974-9975, U+9977-9979, U+997d-997e, U+9980-9981, U+9983-9984, U+9987, U+998a-998b, U+998d-9991, U+9993-9995, U+9997-9998, U+99a5, U+99ab-99ae, U+99b1, U+99b3-99b4, U+99bc, U+99bf, U+99c1, U+99c3-99c6, U+99cc, U+99d0, U+99d2, U+99d5, U+99db, U+99dd, U+99e1, U+99ed, U+99f1, U+99ff, U+9a01, U+9a03-9a04, U+9a0e-9a0f, U+9a11-9a13, U+9a19, U+9a1b, U+9a28, U+9a2b, U+9a30, U+9a32, U+9a37, U+9a40, U+9a45, U+9a4a, U+9a4d-9a4e, U+9a52, U+9a55, U+9a57, U+9a5a-9a5b) ); /* noto-sans-sc-[26]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-26-400-normal.woff2", $range: (U+972a, U+972d, U+9730, U+973d, U+9742, U+9744, U+9748-9749, U+9750-9751, U+975a-975c, U+9763, U+9765-9766, U+976c-976d, U+9773, U+9776, U+977a, U+977c, U+9784-9785, U+978e-978f, U+9791-9792, U+9794-9795, U+9798, U+979a, U+979e, U+97a3, U+97a5-97a6, U+97a8, U+97ab-97ac, U+97ae-97af, U+97b2, U+97b4, U+97c6, U+97cb-97cc, U+97d3, U+97d8, U+97dc, U+97e1, U+97ea-97eb, U+97ee, U+97fb, U+97fe-97ff, U+9801-9803, U+9805-9806, U+9808, U+980c, U+9810-9814, U+9817-9818, U+981e, U+9820-9821, U+9824, U+9828, U+982b-982d, U+9830, U+9834, U+9838-9839, U+983c, U+9846, U+984d-984f, U+9851-9852, U+9854-9855, U+9857-9858, U+985a-985b, U+9862-9863, U+9865, U+9867, U+986b, U+986f-9871, U+9877-9878, U+987c, U+9880, U+9883, U+9885, U+9889, U+988b-988f, U+9893-9895, U+9899-989b, U+989e-989f, U+98a1-98a2, U+98a5-98a7, U+98a9, U+98af, U+98b1, U+98b6, U+98ba, U+98be, U+98c3-98c4, U+98c6-98c7) ); /* noto-sans-sc-[27]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-27-400-normal.woff2", $range: (U+95b9-95ca, U+95cc-95cd, U+95d4-95d6, U+95d8, U+95e1-95e2, U+95e9, U+95f0-95f1, U+95f3, U+95f6, U+95fc, U+95fe-95ff, U+9602-9604, U+9606-960d, U+960f, U+9611-9613, U+9615-9617, U+9619-961b, U+961d, U+9621, U+9628, U+962f, U+963c-963e, U+9641-9642, U+9649, U+9654, U+965b-965f, U+9661, U+9663, U+9665, U+9667-9668, U+966c, U+9670, U+9672-9674, U+9678, U+967a, U+967d, U+9682, U+9685, U+9688, U+968a, U+968d-968e, U+9695, U+9697-9698, U+969e, U+96a0, U+96a3-96a4, U+96a8, U+96aa, U+96b0-96b1, U+96b3-96b4, U+96b7-96b9, U+96bb-96bd, U+96c9, U+96cb, U+96ce, U+96d1-96d2, U+96d6, U+96d9, U+96db-96dc, U+96de, U+96e0, U+96e3, U+96e9, U+96eb, U+96f0-96f2, U+96f9, U+96ff, U+9701-9702, U+9705, U+9708, U+970a, U+970e-970f, U+9711, U+9719, U+9727) ); /* noto-sans-sc-[28]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-28-400-normal.woff2", $range: (U+94e7-94ec, U+94ee-94f1, U+94f3, U+94f5, U+94f7, U+94f9, U+94fb-94fd, U+94ff, U+9503-9504, U+9506-9507, U+9509-950a, U+950d-950f, U+9511-9518, U+951a-9520, U+9522, U+9528-952d, U+9530-953a, U+953c-953f, U+9543-9546, U+9548-9550, U+9552-9555, U+9557-955b, U+955d-9568, U+956a-956d, U+9570-9574, U+9583, U+9586, U+9589, U+958e-958f, U+9591-9592, U+9594, U+9598-9599, U+959e-95a0, U+95a2-95a6, U+95a8-95b2, U+95b4, U+95b8) ); /* noto-sans-sc-[29]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-29-400-normal.woff2", $range: (U+9410-941a, U+941c-942b, U+942d-942e, U+9432-9433, U+9435, U+9438, U+943a, U+943e, U+9444, U+944a, U+9451-9452, U+945a, U+9462-9463, U+9465, U+9470-9487, U+948a-9492, U+9494-9498, U+949a, U+949c-949d, U+94a1, U+94a3-94a4, U+94a8, U+94aa-94ad, U+94af, U+94b2, U+94b4-94ba, U+94bc-94c0, U+94c4, U+94c6-94db, U+94de-94e6) ); /* noto-sans-sc-[30]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-30-400-normal.woff2", $range: (U+92b7, U+92b9, U+92c1, U+92c5-92c6, U+92c8, U+92cc, U+92d0, U+92d2, U+92e4, U+92ea, U+92ec-92ed, U+92f0, U+92f3, U+92f8, U+92fc, U+9304, U+9306, U+9310, U+9312, U+9315, U+9318, U+931a, U+931e, U+9320-9322, U+9324, U+9326-9329, U+932b-932c, U+932f, U+9331-9332, U+9335-9336, U+933e, U+9340-9341, U+934a-9360, U+9362-9363, U+9365-936b, U+936e, U+9375, U+937e, U+9382, U+938a, U+938c, U+938f, U+9393-9394, U+9396-9397, U+939a, U+93a2, U+93a7, U+93ac-93cd, U+93d0-93d1, U+93d6-93d8, U+93de-93df, U+93e1-93e2, U+93e4, U+93f8, U+93fb, U+93fd, U+940e-940f) ); /* noto-sans-sc-[31]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-31-400-normal.woff2", $range: (U+914c, U+914e-9150, U+9154, U+9157, U+915a, U+915d-915e, U+9161-9164, U+9169, U+9170, U+9172, U+9174, U+9179-917a, U+917d-917e, U+9182-9183, U+9185, U+918c-918d, U+9190-9191, U+919a, U+919c, U+91a1-91a4, U+91a8, U+91aa-91af, U+91b4-91b5, U+91b8, U+91ba, U+91be, U+91c0-91c1, U+91c6, U+91c8, U+91cb, U+91d0, U+91d2, U+91d7-91d8, U+91dd, U+91e3, U+91e6-91e7, U+91ed, U+91f0, U+91f5, U+91f9, U+9200, U+9205, U+9207-920a, U+920d-920e, U+9210, U+9214-9215, U+921c, U+921e, U+9221, U+9223-9227, U+9229-922a, U+922d, U+9234-9235, U+9237, U+9239-923a, U+923c-9240, U+9244-9246, U+9249, U+924e-924f, U+9251, U+9253, U+9257, U+925b, U+925e, U+9262, U+9264-9266, U+9268, U+926c, U+926f, U+9271, U+927b, U+927e, U+9280, U+9283, U+9285-928a, U+928e, U+9291, U+9293, U+9296, U+9298, U+929c-929d, U+92a8, U+92ab-92ae, U+92b3, U+92b6) ); /* noto-sans-sc-[32]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-32-400-normal.woff2", $range: (U+8fe2-8fe5, U+8fe8-8fe9, U+8fee, U+8ff3-8ff4, U+8ff8, U+8ffa, U+9004, U+900b, U+9011, U+9015-9016, U+901e, U+9021, U+9026, U+902d, U+902f, U+9031, U+9035-9036, U+9039-903a, U+9041, U+9044-9046, U+904a, U+904f-9052, U+9054-9055, U+9058-9059, U+905b-905e, U+9060-9062, U+9068-9069, U+906f, U+9072, U+9074, U+9076-907a, U+907c-907d, U+9081, U+9083, U+9085, U+9087-908b, U+908f, U+9095, U+9097, U+9099-909b, U+909d, U+90a0-90a1, U+90a8-90a9, U+90ac, U+90b0, U+90b2-90b4, U+90b6, U+90b8, U+90ba, U+90bd-90be, U+90c3-90c5, U+90c7-90c8, U+90cf-90d0, U+90d3, U+90d5, U+90d7, U+90da-90dc, U+90de, U+90e2, U+90e4, U+90e6-90e7, U+90ea-90eb, U+90ef, U+90f4-90f5, U+90f7, U+90fe-9100, U+9104, U+9109, U+910c, U+9112, U+9114-9115, U+9118, U+911c, U+911e, U+9120, U+9122-9123, U+9127, U+912d, U+912f-9132, U+9139-913a, U+9143, U+9146, U+9149-914a) ); /* noto-sans-sc-[33]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-33-400-normal.woff2", $range: (U+8e2d-8e31, U+8e34-8e35, U+8e39-8e3a, U+8e3d, U+8e40-8e42, U+8e47, U+8e49-8e4b, U+8e50-8e53, U+8e59-8e5a, U+8e5f-8e60, U+8e64, U+8e69, U+8e6c, U+8e70, U+8e74, U+8e76, U+8e7a-8e7c, U+8e7f, U+8e84-8e85, U+8e87, U+8e89, U+8e8b, U+8e8d, U+8e8f-8e90, U+8e94, U+8e99, U+8e9c, U+8e9e, U+8eaa, U+8eac, U+8eb0, U+8eb6, U+8ec0, U+8ec6, U+8eca-8ece, U+8ed2, U+8eda, U+8edf, U+8ee2, U+8eeb, U+8ef8, U+8efb-8efe, U+8f03, U+8f09, U+8f0b, U+8f12-8f15, U+8f1b, U+8f1d, U+8f1f, U+8f29-8f2a, U+8f2f, U+8f36, U+8f38, U+8f3b, U+8f3e-8f3f, U+8f44-8f45, U+8f49, U+8f4d-8f4e, U+8f5f, U+8f6b, U+8f6d, U+8f71-8f73, U+8f75-8f76, U+8f78-8f7a, U+8f7c, U+8f7e, U+8f81-8f82, U+8f84, U+8f87, U+8f8a-8f8b, U+8f8d-8f8f, U+8f94-8f95, U+8f97-8f9a, U+8fa6, U+8fad-8faf, U+8fb2, U+8fb5-8fb7, U+8fba-8fbc, U+8fbf, U+8fc2, U+8fcb, U+8fcd, U+8fd3, U+8fd5, U+8fd7, U+8fda) ); /* noto-sans-sc-[34]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-34-400-normal.woff2", $range: (U+8caf-8cb0, U+8cb3-8cb4, U+8cb6-8cb9, U+8cbb-8cbd, U+8cbf-8cc4, U+8cc7-8cc8, U+8cca, U+8ccd, U+8cd1, U+8cd3, U+8cdb-8cdc, U+8cde, U+8ce0, U+8ce2-8ce4, U+8ce6-8ce8, U+8cea, U+8ced, U+8cf4, U+8cf8, U+8cfa, U+8cfc-8cfd, U+8d04-8d05, U+8d07-8d08, U+8d0a, U+8d0d, U+8d0f, U+8d13-8d14, U+8d16, U+8d1b, U+8d20, U+8d2e, U+8d30, U+8d32-8d33, U+8d36, U+8d3b, U+8d3d, U+8d40, U+8d42-8d43, U+8d45-8d46, U+8d48-8d4a, U+8d4d, U+8d51, U+8d53, U+8d55, U+8d59, U+8d5c-8d5d, U+8d5f, U+8d61, U+8d66-8d67, U+8d6a, U+8d6d, U+8d71, U+8d73, U+8d84, U+8d90-8d91, U+8d94-8d95, U+8d99, U+8da8, U+8daf, U+8db1, U+8db5, U+8db8, U+8dba, U+8dbc, U+8dbf, U+8dc2, U+8dc4, U+8dc6, U+8dcb, U+8dce-8dcf, U+8dd6-8dd7, U+8dda-8ddb, U+8dde, U+8de1, U+8de3-8de4, U+8de9, U+8deb-8dec, U+8df0-8df1, U+8df6-8dfd, U+8e05, U+8e07, U+8e09-8e0a, U+8e0c, U+8e0e, U+8e10, U+8e14, U+8e1d-8e1f, U+8e23, U+8e26, U+8e2b-8e2c) ); /* noto-sans-sc-[35]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-35-400-normal.woff2", $range: (U+8b5e, U+8b60, U+8b6c, U+8b6f-8b70, U+8b72, U+8b74, U+8b77, U+8b7d, U+8b80, U+8b83, U+8b8a, U+8b8c, U+8b90, U+8b93, U+8b99-8b9a, U+8ba0, U+8ba3, U+8ba5-8ba7, U+8baa-8bac, U+8bb3-8bb5, U+8bb7, U+8bb9, U+8bc2-8bc3, U+8bc5, U+8bcb-8bcc, U+8bce-8bd0, U+8bd2-8bd4, U+8bd6, U+8bd8-8bd9, U+8bdc, U+8bdf, U+8be3-8be4, U+8be7-8be9, U+8beb-8bec, U+8bee, U+8bf0, U+8bf2-8bf3, U+8bf6, U+8bf9, U+8bfc-8bfd, U+8bff-8c00, U+8c02, U+8c04, U+8c06-8c07, U+8c0c, U+8c0f, U+8c11-8c12, U+8c14-8c1b, U+8c1d-8c21, U+8c24-8c25, U+8c27, U+8c2a-8c2c, U+8c2e-8c30, U+8c32-8c36, U+8c3f, U+8c47-8c4c, U+8c4e-8c50, U+8c54-8c56, U+8c62, U+8c68, U+8c6c, U+8c73, U+8c78, U+8c7a, U+8c82, U+8c85, U+8c89-8c8a, U+8c8d-8c8e, U+8c90, U+8c93-8c94, U+8c98, U+8c9d-8c9e, U+8ca0-8ca2, U+8ca7-8cac) ); /* noto-sans-sc-[36]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-36-400-normal.woff2", $range: (U+8a02-8a03, U+8a07-8a0a, U+8a0e-8a0f, U+8a13, U+8a15-8a18, U+8a1a-8a1b, U+8a1d, U+8a1f, U+8a22-8a23, U+8a25, U+8a2b, U+8a2d, U+8a31, U+8a33-8a34, U+8a36-8a38, U+8a3a, U+8a3c, U+8a3e, U+8a40-8a41, U+8a46, U+8a48, U+8a50, U+8a52, U+8a54-8a55, U+8a58, U+8a5b, U+8a5d-8a63, U+8a66, U+8a69-8a6b, U+8a6d-8a6e, U+8a70, U+8a72-8a73, U+8a7a, U+8a85, U+8a87, U+8a8a, U+8a8c-8a8d, U+8a90-8a92, U+8a95, U+8a98, U+8aa0-8aa1, U+8aa3-8aa6, U+8aa8-8aa9, U+8aac-8aae, U+8ab0, U+8ab2, U+8ab8-8ab9, U+8abc, U+8abe-8abf, U+8ac7, U+8acf, U+8ad2, U+8ad6-8ad7, U+8adb-8adc, U+8adf, U+8ae1, U+8ae6-8ae8, U+8aeb, U+8aed-8aee, U+8af1, U+8af3-8af4, U+8af7-8af8, U+8afa, U+8afe, U+8b00-8b02, U+8b07, U+8b0a, U+8b0c, U+8b0e, U+8b10, U+8b17, U+8b19, U+8b1b, U+8b1d, U+8b20-8b21, U+8b26, U+8b28, U+8b2c, U+8b33, U+8b39, U+8b3e-8b3f, U+8b41, U+8b45, U+8b49, U+8b4c, U+8b4f, U+8b57-8b58, U+8b5a, U+8b5c) ); /* noto-sans-sc-[37]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-37-400-normal.woff2", $range: (U+8869-886a, U+886e-886f, U+8872, U+8879, U+887d-887f, U+8882, U+8884-8886, U+8888, U+888f, U+8892-8893, U+889b, U+88a2, U+88a4, U+88a6, U+88a8, U+88aa, U+88ae, U+88b1, U+88b4, U+88b7, U+88bc, U+88c0, U+88c6-88c9, U+88ce-88cf, U+88d1-88d3, U+88d8, U+88db-88dd, U+88df, U+88e1-88e3, U+88e5, U+88e8, U+88ec, U+88f0-88f1, U+88f3-88f4, U+88fc-88fe, U+8900, U+8902, U+8906-8907, U+8909-890c, U+8912-8915, U+8918-891b, U+8921, U+8925, U+892b, U+8930, U+8932, U+8934, U+8936, U+893b, U+893d, U+8941, U+894c, U+8955-8956, U+8959, U+895c, U+895e-8960, U+8966, U+896a, U+896c, U+896f-8970, U+8972, U+897b, U+897e, U+8980, U+8983, U+8985, U+8987-8988, U+898c, U+898f, U+8993, U+8997, U+899a, U+89a1, U+89a7, U+89a9-89aa, U+89b2-89b3, U+89b7, U+89c0, U+89c7, U+89ca-89cc, U+89ce-89d1, U+89d6, U+89da, U+89dc, U+89de, U+89e5, U+89e7, U+89eb, U+89ef, U+89f1, U+89f3-89f4, U+89f8, U+89ff, U+8a01) ); /* noto-sans-sc-[38]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-38-400-normal.woff2", $range: (U+86e4, U+86e6, U+86e9, U+86ed, U+86ef-86f4, U+86f8-86f9, U+86fb, U+86fe, U+8703, U+8706-870a, U+870d, U+8711-8713, U+871a, U+871e, U+8722-8723, U+8725, U+8729, U+872e, U+8731, U+8734, U+8737, U+873a-873b, U+873e-8740, U+8742, U+8747-8748, U+8753, U+8755, U+8757-8758, U+875d, U+875f, U+8762-8766, U+8768, U+876e, U+8770, U+8772, U+8775, U+8778, U+877b-877e, U+8782, U+8785, U+8788, U+878b, U+8793, U+8797, U+879a, U+879e-87a0, U+87a2-87a3, U+87a8, U+87ab-87ad, U+87af, U+87b3, U+87b5, U+87bd, U+87c0, U+87c4, U+87c6, U+87ca-87cb, U+87d1-87d2, U+87db-87dc, U+87de, U+87e0, U+87e5, U+87ea, U+87ec, U+87ee, U+87f2-87f3, U+87fb, U+87fd-87fe, U+8802-8803, U+8805, U+880a-880b, U+880d, U+8813-8816, U+8819, U+881b, U+881f, U+8821, U+8823, U+8831-8832, U+8835-8836, U+8839, U+883b-883c, U+8844, U+8846, U+884a, U+884e, U+8852-8853, U+8855, U+8859, U+885b, U+885d-885e, U+8862, U+8864) ); /* noto-sans-sc-[39]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-39-400-normal.woff2", $range: (U+8532, U+8534-8535, U+8538-853a, U+853c, U+8543, U+8545, U+8548, U+854e, U+8553, U+8556-8557, U+8559, U+855e, U+8561, U+8564-8565, U+8568-856a, U+856d, U+856f-8570, U+8572, U+8576, U+8579-857b, U+8580, U+8585-8586, U+8588, U+858a, U+858f, U+8591, U+8594, U+8599, U+859c, U+85a2, U+85a4, U+85a6, U+85a8-85a9, U+85ab-85ac, U+85ae, U+85b7-85b9, U+85be, U+85c1, U+85c7, U+85cd, U+85d0, U+85d3, U+85d5, U+85dc-85dd, U+85df-85e0, U+85e5-85e6, U+85e8-85ea, U+85f4, U+85f9, U+85fe-85ff, U+8602, U+8605-8607, U+860a-860b, U+8616, U+8618, U+861a, U+8627, U+8629, U+862d, U+8638, U+863c, U+863f, U+864d, U+864f, U+8652-8655, U+865b-865c, U+865f, U+8662, U+8667, U+866c, U+866e, U+8671, U+8675, U+867a-867c, U+867f, U+868b, U+868d, U+8693, U+869c-869d, U+86a1, U+86a3-86a4, U+86a7-86a9, U+86ac, U+86af-86b1, U+86b4-86b6, U+86ba, U+86c0, U+86c4, U+86c6, U+86c9-86ca, U+86cd-86d1, U+86d4, U+86d8, U+86de-86df) ); /* noto-sans-sc-[40]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-40-400-normal.woff2", $range: (U+83b4, U+83b6, U+83b8, U+83ba, U+83bc-83bd, U+83bf-83c0, U+83c2, U+83c5, U+83c8-83c9, U+83cb, U+83d1, U+83d3-83d6, U+83d8, U+83db, U+83dd, U+83df, U+83e1, U+83e5, U+83ea-83eb, U+83f0, U+83f4, U+83f8-83f9, U+83fb, U+83fd, U+83ff, U+8401, U+8406, U+840a-840b, U+840f, U+8411, U+8418, U+841c, U+8420, U+8422-8424, U+8426, U+8429, U+842c, U+8438-8439, U+843b-843c, U+843f, U+8446-8447, U+8449, U+844e, U+8451-8452, U+8456, U+8459-845a, U+845c, U+8462, U+8466, U+846d, U+846f-8470, U+8473, U+8476-8478, U+847a, U+847d, U+8484-8485, U+8487, U+8489, U+848c, U+848e, U+8490, U+8493-8494, U+8497, U+849b, U+849e-849f, U+84a1, U+84a5, U+84a8, U+84af, U+84b4, U+84b9-84bf, U+84c1-84c2, U+84c5-84c7, U+84ca-84cb, U+84cd, U+84d0-84d1, U+84d3, U+84d6, U+84df-84e0, U+84e2-84e3, U+84e5-84e7, U+84ee, U+84f3, U+84f6, U+84fa, U+84fc, U+84ff-8500, U+850c, U+8511, U+8514-8515, U+8517-8518, U+851f, U+8523, U+8525-8526, U+8529, U+852b, U+852d) ); /* noto-sans-sc-[41]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-41-400-normal.woff2", $range: (U+82a9-82ab, U+82ae, U+82b0, U+82b2, U+82b4-82b6, U+82bc, U+82be, U+82c0-82c2, U+82c4-82c8, U+82ca-82cc, U+82ce, U+82d0, U+82d2-82d3, U+82d5-82d6, U+82d8-82d9, U+82dc-82de, U+82e0-82e4, U+82e7, U+82e9-82eb, U+82ed-82ee, U+82f3-82f4, U+82f7-82f8, U+82fa-8301, U+8306-8308, U+830c-830d, U+830f, U+8311, U+8313-8315, U+8318, U+831a-831b, U+831d, U+8324, U+8327, U+832a, U+832c-832d, U+832f, U+8331-8334, U+833a-833c, U+8340, U+8343-8345, U+8347-8348, U+834a, U+834c, U+834f, U+8351, U+8356, U+8358-835c, U+835e, U+8360, U+8364-8366, U+8368-836a, U+836c-836e, U+8373, U+8378, U+837b-837d, U+837f-8380, U+8382, U+8388, U+838a-838b, U+8392, U+8394, U+8396, U+8398-8399, U+839b-839c, U+83a0, U+83a2-83a3, U+83a8-83aa, U+83ae-83b0, U+83b3) ); /* noto-sans-sc-[42]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-42-400-normal.woff2", $range: (U+814d-814e, U+8151, U+8153, U+8158-815a, U+815e, U+8160, U+8166-8169, U+816b, U+816d, U+8171, U+8173-8174, U+8178, U+817c-817d, U+8182, U+8188, U+8191, U+8198-819b, U+81a0, U+81a3, U+81a5-81a6, U+81a9, U+81b6, U+81ba-81bb, U+81bd, U+81bf, U+81c1, U+81c3, U+81c6, U+81c9-81ca, U+81cc-81cd, U+81d1, U+81d3-81d4, U+81d8, U+81db-81dc, U+81de-81df, U+81e5, U+81e7-81e9, U+81eb-81ec, U+81ee-81ef, U+81f5, U+81f8, U+81fa, U+81fc, U+81fe, U+8200-8202, U+8204, U+8208-820a, U+820e-8210, U+8216-8218, U+821b-821c, U+8221-8224, U+8226-8228, U+822b, U+822d, U+822f, U+8232-8234, U+8237-8238, U+823a-823b, U+823e, U+8244, U+8249, U+824b, U+824f, U+8259-825a, U+825f, U+8266, U+8268, U+826e, U+8271, U+8276-8279, U+827d, U+827f, U+8283-8284, U+8288-828a, U+828d-8291, U+8293-8294, U+8296-8298, U+829f-82a1, U+82a3-82a4, U+82a7-82a8) ); /* noto-sans-sc-[43]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-43-400-normal.woff2", $range: (U+7ffa, U+7ffe, U+8004, U+8006, U+800b, U+800e, U+8011-8012, U+8014, U+8016, U+8018-8019, U+801c, U+801e, U+8026-802a, U+8031, U+8034-8035, U+8037, U+8043, U+804b, U+804d, U+8052, U+8056, U+8059, U+805e, U+8061, U+8068-8069, U+806e-8074, U+8076-8078, U+807c-8080, U+8082, U+8084-8085, U+8088, U+808f, U+8093, U+809c, U+809f, U+80ab, U+80ad-80ae, U+80b1, U+80b6-80b8, U+80bc-80bd, U+80c2, U+80c4, U+80ca, U+80cd, U+80d1, U+80d4, U+80d7, U+80d9-80db, U+80dd, U+80e0, U+80e4-80e5, U+80e7-80ed, U+80ef-80f1, U+80f3-80f4, U+80fc, U+8101, U+8104-8105, U+8107-8108, U+810c-810e, U+8112-8115, U+8117-8119, U+811b-811f, U+8121-8130, U+8132-8134, U+8137, U+8139, U+813f-8140, U+8142, U+8146, U+8148) ); /* noto-sans-sc-[44]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-44-400-normal.woff2", $range: (U+7ed7, U+7edb, U+7ee0-7ee2, U+7ee5-7ee6, U+7ee8, U+7eeb, U+7ef0-7ef2, U+7ef6, U+7efa-7efb, U+7efe, U+7f01-7f04, U+7f08, U+7f0a-7f12, U+7f17, U+7f19, U+7f1b-7f1c, U+7f1f, U+7f21-7f23, U+7f25-7f28, U+7f2a-7f33, U+7f35-7f37, U+7f3d, U+7f42, U+7f44-7f45, U+7f4c-7f4d, U+7f52, U+7f54, U+7f58-7f59, U+7f5d, U+7f5f-7f61, U+7f63, U+7f65, U+7f68, U+7f70-7f71, U+7f73-7f75, U+7f77, U+7f79, U+7f7d-7f7e, U+7f85-7f86, U+7f88-7f89, U+7f8b-7f8c, U+7f90-7f91, U+7f94-7f96, U+7f98-7f9b, U+7f9d, U+7f9f, U+7fa3, U+7fa7-7fa9, U+7fac-7fb2, U+7fb4, U+7fb6, U+7fb8, U+7fbc, U+7fbf-7fc0, U+7fc3, U+7fca, U+7fcc, U+7fce, U+7fd2, U+7fd5, U+7fd9-7fdb, U+7fdf, U+7fe3, U+7fe5-7fe7, U+7fe9, U+7feb-7fec, U+7fee-7fef, U+7ff1, U+7ff3-7ff4, U+7ff9) ); /* noto-sans-sc-[45]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-45-400-normal.woff2", $range: (U+7dc4, U+7dc7-7dc8, U+7dca-7dcd, U+7dcf, U+7dd1-7dd2, U+7dd4, U+7dd6-7dd8, U+7dda-7de0, U+7de2-7de6, U+7de8-7ded, U+7def, U+7df1-7df5, U+7df7, U+7df9, U+7dfb-7dfc, U+7dfe-7e02, U+7e04, U+7e08-7e0b, U+7e12, U+7e1b, U+7e1e, U+7e20, U+7e22-7e23, U+7e26, U+7e29, U+7e2b, U+7e2e-7e2f, U+7e31, U+7e37, U+7e39-7e3e, U+7e40, U+7e43-7e44, U+7e46-7e47, U+7e4a-7e4b, U+7e4d-7e4e, U+7e51, U+7e54-7e56, U+7e58-7e5b, U+7e5d-7e5e, U+7e61, U+7e66-7e67, U+7e69-7e6b, U+7e6d, U+7e70, U+7e73, U+7e77, U+7e79, U+7e7b-7e7d, U+7e81-7e82, U+7e8c-7e8d, U+7e8f, U+7e92-7e94, U+7e96, U+7e98, U+7e9a-7e9c, U+7e9e-7e9f, U+7ea1, U+7ea3, U+7ea5, U+7ea8-7ea9, U+7eab, U+7ead-7eae, U+7eb0, U+7ebb, U+7ebe, U+7ec0-7ec2, U+7ec9, U+7ecb-7ecc, U+7ed0, U+7ed4) ); /* noto-sans-sc-[46]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-46-400-normal.woff2", $range: (U+7ccc-7ccd, U+7cd7, U+7cdc, U+7cde, U+7ce0, U+7ce4-7ce5, U+7ce7-7ce8, U+7cec, U+7cf0, U+7cf5-7cf9, U+7cfc, U+7cfe, U+7d00, U+7d04-7d0b, U+7d0d, U+7d10-7d14, U+7d17-7d19, U+7d1b-7d1f, U+7d21, U+7d24-7d26, U+7d28-7d2a, U+7d2c-7d2e, U+7d30-7d31, U+7d33, U+7d35-7d36, U+7d38-7d3a, U+7d40, U+7d42-7d44, U+7d46, U+7d4b-7d4c, U+7d4f, U+7d51, U+7d54-7d56, U+7d58, U+7d5b-7d5c, U+7d5e, U+7d61-7d63, U+7d66, U+7d68, U+7d6a-7d6c, U+7d6f, U+7d71-7d73, U+7d75-7d77, U+7d79-7d7a, U+7d7e, U+7d81, U+7d84-7d8b, U+7d8d, U+7d8f, U+7d91, U+7d94, U+7d96, U+7d98-7d9a, U+7d9c-7da0, U+7da2, U+7da6, U+7daa-7db1, U+7db4-7db8, U+7dba-7dbf, U+7dc1) ); /* noto-sans-sc-[47]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-47-400-normal.woff2", $range: (U+7bc3-7bc4, U+7bc6, U+7bc8-7bcc, U+7bd1, U+7bd3-7bd4, U+7bd9-7bda, U+7bdd, U+7be0-7be1, U+7be4-7be6, U+7be9-7bea, U+7bef, U+7bf4, U+7bf6, U+7bfc, U+7bfe, U+7c01, U+7c03, U+7c07-7c08, U+7c0a-7c0d, U+7c0f, U+7c11, U+7c15-7c16, U+7c19, U+7c1e-7c21, U+7c23-7c24, U+7c26, U+7c28-7c33, U+7c35, U+7c37-7c3b, U+7c3d-7c3e, U+7c40-7c41, U+7c43, U+7c47-7c48, U+7c4c, U+7c50, U+7c53-7c54, U+7c59, U+7c5f-7c60, U+7c63-7c65, U+7c6c, U+7c6e, U+7c72, U+7c74, U+7c79-7c7a, U+7c7c, U+7c81-7c82, U+7c84-7c85, U+7c88, U+7c8a-7c91, U+7c93-7c96, U+7c99, U+7c9b-7c9e, U+7ca0-7ca2, U+7ca6-7ca9, U+7cac, U+7caf-7cb3, U+7cb5-7cb7, U+7cba-7cbd, U+7cbf-7cc2, U+7cc5, U+7cc7-7cc9) ); /* noto-sans-sc-[48]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-48-400-normal.woff2", $range: (U+7aca, U+7ad1-7ad2, U+7ada-7add, U+7ae1, U+7ae4, U+7ae6, U+7af4-7af7, U+7afa-7afb, U+7afd-7b0a, U+7b0c, U+7b0e-7b0f, U+7b13, U+7b15-7b16, U+7b18-7b19, U+7b1e-7b20, U+7b22-7b25, U+7b29-7b2b, U+7b2d-7b2e, U+7b30-7b3b, U+7b3e-7b3f, U+7b41-7b42, U+7b44-7b47, U+7b4a, U+7b4c-7b50, U+7b58, U+7b5a, U+7b5c, U+7b60, U+7b66-7b67, U+7b69, U+7b6c-7b6f, U+7b72-7b76, U+7b7b-7b7d, U+7b7f, U+7b82, U+7b85, U+7b87, U+7b8b-7b96, U+7b98-7b99, U+7b9b-7b9f, U+7ba2-7ba4, U+7ba6-7bac, U+7bae-7bb0, U+7bb4, U+7bb7-7bb9, U+7bbb, U+7bc0-7bc1) ); /* noto-sans-sc-[49]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-49-400-normal.woff2", $range: (U+797c, U+797e-7980, U+7982, U+7986-7987, U+7989-798e, U+7992, U+7994-7995, U+7997-7998, U+799a-799c, U+799f, U+79a3-79a6, U+79a8-79ac, U+79ae-79b1, U+79b3-79b5, U+79b8, U+79ba, U+79bf, U+79c2, U+79c6, U+79c8, U+79cf, U+79d5-79d6, U+79dd-79de, U+79e3, U+79e7-79e8, U+79eb, U+79ed, U+79f4, U+79f7-79f8, U+79fa, U+79fe, U+7a02-7a03, U+7a05, U+7a0a, U+7a14, U+7a17, U+7a19, U+7a1c, U+7a1e-7a1f, U+7a23, U+7a25-7a26, U+7a2c, U+7a2e, U+7a30-7a32, U+7a36-7a37, U+7a39, U+7a3c, U+7a40, U+7a42, U+7a47, U+7a49, U+7a4c-7a4f, U+7a51, U+7a55, U+7a5b, U+7a5d-7a5e, U+7a62-7a63, U+7a66, U+7a68-7a69, U+7a6b, U+7a70, U+7a78, U+7a80, U+7a85-7a88, U+7a8a, U+7a90, U+7a93-7a96, U+7a98, U+7a9b-7a9c, U+7a9e, U+7aa0-7aa1, U+7aa3, U+7aa8-7aaa, U+7aac-7ab0, U+7ab3, U+7ab8, U+7aba, U+7abd-7abf, U+7ac4-7ac5, U+7ac7-7ac8) ); /* noto-sans-sc-[50]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-50-400-normal.woff2", $range: (U+783e, U+7841-7844, U+7847-7849, U+784b-784c, U+784e-7854, U+7856-7857, U+7859-785a, U+7865, U+7869-786a, U+786d, U+786f, U+7876-7877, U+787c, U+787e-787f, U+7881, U+7887-7889, U+7893-7894, U+7898-789e, U+78a1, U+78a3, U+78a5, U+78a9, U+78ad, U+78b2, U+78b4, U+78b6, U+78b9-78ba, U+78bc, U+78bf, U+78c3, U+78c9, U+78cb, U+78d0-78d2, U+78d4, U+78d9-78da, U+78dc, U+78de, U+78e1, U+78e5-78e6, U+78ea, U+78ec, U+78ef, U+78f1-78f2, U+78f4, U+78fa-78fb, U+78fe, U+7901-7902, U+7905, U+7907, U+7909, U+790b-790c, U+790e, U+7910, U+7913, U+7919-791b, U+791e-791f, U+7921, U+7924, U+7926, U+792a-792b, U+7934, U+7936, U+7939, U+793b, U+793d, U+7940, U+7942-7943, U+7945-7947, U+7949-794a, U+794c, U+794e-7951, U+7953-7955, U+7957-795a, U+795c, U+795f-7960, U+7962, U+7964, U+7966-7967, U+7969, U+796b, U+796f, U+7972, U+7974, U+7979, U+797b) ); /* noto-sans-sc-[51]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-51-400-normal.woff2", $range: (U+770f, U+7712, U+7714, U+7716, U+7719-771b, U+771e, U+7721-7722, U+7726, U+7728, U+772b-7730, U+7732-7736, U+7739-773a, U+773d-773f, U+7743, U+7746-7747, U+774c-774f, U+7751-7752, U+7758-775a, U+775c-775e, U+7762, U+7765-7766, U+7768-776a, U+776c-776d, U+7771-7772, U+777a, U+777c-777e, U+7780, U+7785, U+7787, U+778b-778d, U+778f-7791, U+7793, U+779e-77a0, U+77a2, U+77a5, U+77ad, U+77af, U+77b4-77b7, U+77bd-77c0, U+77c2, U+77c5, U+77c7, U+77cd, U+77d6-77d7, U+77d9-77da, U+77dd-77de, U+77e7, U+77ea, U+77ec, U+77ef, U+77f8, U+77fb, U+77fd-77fe, U+7800, U+7803, U+7806, U+7809, U+780f-7812, U+7815, U+7817-7818, U+781a-781f, U+7821-7823, U+7825-7827, U+7829, U+782b-7830, U+7832-7833, U+7835, U+7837, U+7839-783c) ); /* noto-sans-sc-[52]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-52-400-normal.woff2", $range: (U+760a-760e, U+7610-7619, U+761b-761d, U+761f-7622, U+7625, U+7627-762a, U+762e-7630, U+7632-7635, U+7638-763a, U+763c-763d, U+763f-7640, U+7642-7643, U+7647-7648, U+764d-764e, U+7652, U+7654, U+7658, U+765a, U+765c, U+765e-765f, U+7661-7663, U+7665, U+7669, U+766c, U+766e-766f, U+7671-7673, U+7675-7676, U+7678-767a, U+767f, U+7681, U+7683, U+7688, U+768a-768c, U+768e, U+7690-7692, U+7695, U+7698, U+769a-769b, U+769d-76a0, U+76a2, U+76a4-76a7, U+76ab-76ac, U+76af-76b0, U+76b2, U+76b4-76b5, U+76ba-76bb, U+76bf, U+76c2-76c3, U+76c5, U+76c9, U+76cc-76ce, U+76dc-76de, U+76e1-76ea, U+76f1, U+76f9-76fb, U+76fd, U+76ff-7700, U+7703-7704, U+7707-7708, U+770c-770e) ); /* noto-sans-sc-[53]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-53-400-normal.woff2", $range: (U+74ef, U+74f4, U+74ff, U+7501, U+7503, U+7505, U+7508, U+750d, U+750f, U+7511, U+7513, U+7515, U+7517, U+7519, U+7521-7527, U+752a, U+752c-752d, U+752f, U+7534, U+7536, U+753a, U+753e, U+7540, U+7544, U+7547-754b, U+754d-754e, U+7550-7553, U+7556-7557, U+755a-755b, U+755d-755e, U+7560, U+7562, U+7564, U+7566-7568, U+756b-756c, U+756f-7573, U+7575, U+7579-757c, U+757e-757f, U+7581-7584, U+7587, U+7589-758e, U+7590, U+7592, U+7594, U+7596, U+7599-759a, U+759d, U+759f-75a0, U+75a3, U+75a5, U+75a8, U+75ac-75ad, U+75b0-75b1, U+75b3-75b5, U+75b8, U+75bd, U+75c1-75c4, U+75c8-75ca, U+75cc-75cd, U+75d4, U+75d6, U+75d9, U+75de, U+75e0, U+75e2-75e4, U+75e6-75ea, U+75f1-75f3, U+75f7, U+75f9-75fa, U+75fc, U+75fe-7601, U+7603, U+7605-7606, U+7608-7609) ); /* noto-sans-sc-[54]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-54-400-normal.woff2", $range: (U+73e7-73ea, U+73ee-73f0, U+73f2, U+73f4-73f5, U+73f7, U+73f9-73fa, U+73fc-73fd, U+73ff-7402, U+7404, U+7407-7408, U+740a-740f, U+7418, U+741a-741c, U+741e, U+7424-7425, U+7428-7429, U+742c-7430, U+7432, U+7435-7436, U+7438-743b, U+743e-7441, U+7443-7446, U+7448, U+744a-744b, U+7452, U+7457, U+745b, U+745d, U+7460, U+7462-7465, U+7467-746a, U+746d, U+746f, U+7471, U+7473-7474, U+7477, U+747a, U+747e, U+7481-7482, U+7484, U+7486, U+7488-748b, U+748e-748f, U+7493, U+7498, U+749a, U+749c-74a0, U+74a3, U+74a6, U+74a9-74aa, U+74ae, U+74b0-74b2, U+74b6, U+74b8-74ba, U+74bd, U+74bf, U+74c1, U+74c3, U+74c5, U+74c8, U+74ca, U+74cc, U+74cf, U+74d1-74d2, U+74d4-74d5, U+74d8-74db, U+74de-74e0, U+74e2, U+74e4-74e5, U+74e7-74e9, U+74ee) ); /* noto-sans-sc-[55]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-55-400-normal.woff2", $range: (U+72dd-72df, U+72e1, U+72e5-72e6, U+72e8, U+72ef-72f0, U+72f2-72f4, U+72f6-72f7, U+72f9-72fb, U+72fd, U+7300-7304, U+7307, U+730a-730c, U+7313-7317, U+731d-7322, U+7327, U+7329, U+732c-732d, U+7330-7331, U+7333, U+7335-7337, U+7339, U+733d-733e, U+7340, U+7342, U+7344-7345, U+734a, U+734d-7350, U+7352, U+7355, U+7357, U+7359, U+735f-7360, U+7362-7363, U+7365, U+7368, U+736c-736d, U+736f-7370, U+7372, U+7374-7376, U+7378, U+737a-737b, U+737d-737e, U+7382-7383, U+7386, U+7388, U+738a, U+738c-7393, U+7395, U+7397-739a, U+739c, U+739e, U+73a0-73a3, U+73a5-73a8, U+73aa, U+73ad, U+73b1, U+73b3, U+73b6-73b7, U+73b9, U+73c2, U+73c5-73c9, U+73cc, U+73ce-73d0, U+73d2, U+73d6, U+73d9, U+73db-73de, U+73e3, U+73e5-73e6) ); /* noto-sans-sc-[56]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-56-400-normal.woff2", $range: (U+719c, U+71a0, U+71a4-71a5, U+71a8, U+71af, U+71b1-71bc, U+71be, U+71c1-71c2, U+71c4, U+71c8-71cb, U+71ce-71d0, U+71d2, U+71d4, U+71d9-71da, U+71dc, U+71df-71e0, U+71e6-71e8, U+71ea, U+71ed-71ee, U+71f4, U+71f6, U+71f9, U+71fb-71fc, U+71ff-7200, U+7207, U+720c-720d, U+7210, U+7216, U+721a-721e, U+7223, U+7228, U+722b, U+722d-722e, U+7230, U+7232, U+723a-723c, U+723e-7242, U+7246, U+724b, U+724d-724e, U+7252, U+7256, U+7258, U+725a, U+725c-725d, U+7260, U+7264-7266, U+726a, U+726c, U+726e-726f, U+7271, U+7273-7274, U+7278, U+727b, U+727d-727e, U+7281-7282, U+7284, U+7287, U+728a, U+728d, U+728f, U+7292, U+729b, U+729f-72a0, U+72a7, U+72ad-72ae, U+72b0-72b5, U+72b7-72b8, U+72ba-72be, U+72c0-72c1, U+72c3, U+72c5-72c6, U+72c8, U+72cc-72ce, U+72d2, U+72d6, U+72db) ); /* noto-sans-sc-[57]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-57-400-normal.woff2", $range: (U+7005-7006, U+7009, U+700b, U+700d, U+7015, U+7018, U+701b, U+701d-701f, U+7023, U+7026-7028, U+702c, U+702e-7030, U+7035, U+7037, U+7039-703a, U+703c-703e, U+7044, U+7049-704b, U+704f, U+7051, U+7058, U+705a, U+705c-705e, U+7061, U+7064, U+7066, U+706c, U+707d, U+7080-7081, U+7085-7086, U+708a, U+708f, U+7091, U+7094-7095, U+7098-7099, U+709c-709d, U+709f, U+70a4, U+70a9-70aa, U+70af-70b2, U+70b4-70b7, U+70bb, U+70c0, U+70c3, U+70c7, U+70cb, U+70ce-70cf, U+70d4, U+70d9-70da, U+70dc-70dd, U+70e0, U+70e9, U+70ec, U+70f7, U+70fa, U+70fd, U+70ff, U+7104, U+7108-7109, U+710c, U+7110, U+7113-7114, U+7116-7118, U+711c, U+711e, U+7120, U+712e-712f, U+7131, U+713c, U+7142, U+7144-7147, U+7149-714b, U+7150, U+7152, U+7155-7156, U+7159-715a, U+715c, U+7161, U+7165-7166, U+7168-7169, U+716d, U+7173-7174, U+7176, U+7178, U+717a, U+717d, U+717f-7180, U+7184, U+7186-7188, U+7192, U+7198) ); /* noto-sans-sc-[58]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-58-400-normal.woff2", $range: (U+6ed8-6ed9, U+6edb, U+6edd, U+6edf-6ee0, U+6ee2, U+6ee6, U+6eea, U+6eec, U+6eee-6eef, U+6ef2-6ef3, U+6ef7-6efa, U+6efe, U+6f01, U+6f03, U+6f08-6f09, U+6f15-6f16, U+6f19, U+6f22-6f25, U+6f28-6f2a, U+6f2c-6f2d, U+6f2f, U+6f31-6f32, U+6f36-6f38, U+6f3f, U+6f43-6f46, U+6f48, U+6f4b, U+6f4e-6f4f, U+6f51, U+6f54-6f57, U+6f59-6f5b, U+6f5e-6f5f, U+6f61, U+6f64-6f67, U+6f69-6f6c, U+6f6f-6f72, U+6f74-6f76, U+6f78-6f7e, U+6f80-6f83, U+6f86, U+6f89, U+6f8b-6f8d, U+6f90, U+6f92, U+6f94, U+6f97-6f98, U+6f9b, U+6fa3-6fa5, U+6fa7, U+6faa, U+6faf, U+6fb1, U+6fb4, U+6fb6, U+6fb9, U+6fc1-6fcb, U+6fd1-6fd3, U+6fd5, U+6fdb, U+6fde-6fe1, U+6fe4, U+6fe9, U+6feb-6fec, U+6fee-6ff1, U+6ffa, U+6ffe) ); /* noto-sans-sc-[59]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-59-400-normal.woff2", $range: (U+6dc3, U+6dc5-6dc6, U+6dc9, U+6dcc, U+6dcf, U+6dd2-6dd3, U+6dd6, U+6dd9-6dde, U+6de0, U+6de4, U+6de6, U+6de8-6dea, U+6dec, U+6def-6df0, U+6df5-6df6, U+6df8, U+6dfa, U+6dfc, U+6e03-6e04, U+6e07-6e09, U+6e0b-6e0c, U+6e0e, U+6e11, U+6e13, U+6e15-6e16, U+6e19-6e1b, U+6e1e-6e1f, U+6e22, U+6e25-6e27, U+6e2b-6e2c, U+6e36-6e37, U+6e39-6e3a, U+6e3c-6e41, U+6e44-6e45, U+6e47, U+6e49-6e4b, U+6e4d-6e4e, U+6e51, U+6e53-6e55, U+6e5c-6e5f, U+6e61-6e63, U+6e65-6e67, U+6e6a-6e6b, U+6e6d-6e70, U+6e72-6e74, U+6e76-6e78, U+6e7c, U+6e80-6e82, U+6e86-6e87, U+6e89, U+6e8d, U+6e8f, U+6e96, U+6e98, U+6e9d-6e9f, U+6ea1, U+6ea5-6ea7, U+6eab, U+6eb1-6eb2, U+6eb4, U+6eb7, U+6ebb-6ebd, U+6ebf-6ec6, U+6ec8-6ec9, U+6ecc, U+6ecf-6ed0, U+6ed3-6ed4, U+6ed7) ); /* noto-sans-sc-[60]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-60-400-normal.woff2", $range: (U+6cb2, U+6cb4-6cb5, U+6cb7, U+6cba, U+6cbc-6cbd, U+6cc1-6cc3, U+6cc5-6cc7, U+6cd0-6cd4, U+6cd6-6cd7, U+6cd9-6cda, U+6cde-6ce0, U+6ce4, U+6ce6, U+6ce9, U+6ceb-6cef, U+6cf1-6cf2, U+6cf6-6cf7, U+6cfa, U+6cfe, U+6d03-6d05, U+6d07-6d08, U+6d0a, U+6d0c, U+6d0e-6d11, U+6d13-6d14, U+6d16, U+6d18-6d1a, U+6d1c, U+6d1f, U+6d22-6d23, U+6d26-6d29, U+6d2b, U+6d2e-6d30, U+6d33, U+6d35-6d36, U+6d38-6d3a, U+6d3c, U+6d3f, U+6d42-6d44, U+6d48-6d49, U+6d4d, U+6d50, U+6d52, U+6d54, U+6d56-6d58, U+6d5a-6d5c, U+6d5e, U+6d60-6d61, U+6d63-6d65, U+6d67, U+6d6c-6d6d, U+6d6f, U+6d75, U+6d7b-6d7d, U+6d87, U+6d8a, U+6d8e, U+6d90-6d9a, U+6d9c-6da0, U+6da2-6da3, U+6da7, U+6daa-6dac, U+6dae, U+6db3-6db4, U+6db6, U+6db8, U+6dbc, U+6dbf, U+6dc2) ); /* noto-sans-sc-[61]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-61-400-normal.woff2", $range: (U+6b85-6b86, U+6b89, U+6b8d, U+6b91-6b93, U+6b95, U+6b97-6b98, U+6b9a-6b9b, U+6b9e, U+6ba1-6ba4, U+6ba9-6baa, U+6bad, U+6baf-6bb0, U+6bb2-6bb3, U+6bba-6bbd, U+6bc0, U+6bc2, U+6bc6, U+6bca-6bcc, U+6bce, U+6bd0-6bd1, U+6bd3, U+6bd6-6bd8, U+6bda, U+6be1, U+6be6, U+6bec, U+6bf1, U+6bf3-6bf5, U+6bf9, U+6bfd, U+6c05-6c08, U+6c0d, U+6c10, U+6c15-6c1a, U+6c21, U+6c23-6c26, U+6c29-6c2d, U+6c30-6c33, U+6c35-6c37, U+6c39-6c3a, U+6c3c-6c3f, U+6c46, U+6c4a-6c4c, U+6c4e-6c50, U+6c54, U+6c56, U+6c59-6c5c, U+6c5e, U+6c63, U+6c67-6c69, U+6c6b, U+6c6d, U+6c6f, U+6c72-6c74, U+6c78-6c7a, U+6c7c, U+6c84-6c87, U+6c8b-6c8c, U+6c8f, U+6c91, U+6c93-6c96, U+6c98, U+6c9a, U+6c9d, U+6ca2-6ca4, U+6ca8-6ca9, U+6cac-6cae, U+6cb1) ); /* noto-sans-sc-[62]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-62-400-normal.woff2", $range: (U+6a01, U+6a06, U+6a09, U+6a0b, U+6a11, U+6a13, U+6a17-6a19, U+6a1b, U+6a1e, U+6a23, U+6a28-6a29, U+6a2b, U+6a2f-6a30, U+6a35, U+6a38-6a40, U+6a46-6a48, U+6a4a-6a4b, U+6a4e, U+6a50, U+6a52, U+6a5b, U+6a5e, U+6a62, U+6a65-6a67, U+6a6b, U+6a79, U+6a7c, U+6a7e-6a7f, U+6a84, U+6a86, U+6a8e, U+6a90-6a91, U+6a94, U+6a97, U+6a9c, U+6a9e, U+6aa0, U+6aa2, U+6aa4, U+6aa9, U+6aab, U+6aae-6ab0, U+6ab2-6ab3, U+6ab5, U+6ab7-6ab8, U+6aba-6abb, U+6abd, U+6abf, U+6ac2-6ac4, U+6ac6, U+6ac8, U+6acc, U+6ace, U+6ad2-6ad3, U+6ad8-6adc, U+6adf-6ae0, U+6ae4-6ae5, U+6ae7-6ae8, U+6afb, U+6b04-6b05, U+6b0d-6b13, U+6b16-6b17, U+6b19, U+6b24-6b25, U+6b2c, U+6b37-6b39, U+6b3b, U+6b3d, U+6b43, U+6b46, U+6b4e, U+6b50, U+6b53-6b54, U+6b58-6b59, U+6b5b, U+6b60, U+6b69, U+6b6d, U+6b6f-6b70, U+6b73-6b74, U+6b77-6b7a, U+6b80-6b84) ); /* noto-sans-sc-[63]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-63-400-normal.woff2", $range: (U+68e1, U+68e3-68e4, U+68e6-68ed, U+68ef-68f0, U+68f2, U+68f4, U+68f6-68f7, U+68f9, U+68fb-68fd, U+68ff-6902, U+6906-6908, U+690b, U+6910, U+691a-691c, U+691f-6920, U+6924-6925, U+692a, U+692d, U+6934, U+6939, U+693c-6945, U+694a-694b, U+6952-6954, U+6957, U+6959, U+695b, U+695d, U+695f, U+6962-6964, U+6966, U+6968-696c, U+696e-696f, U+6971, U+6973-6974, U+6978-6979, U+697d, U+697f-6980, U+6985, U+6987-698a, U+698d-698e, U+6994-6999, U+699b, U+69a3-69a4, U+69a6-69a7, U+69ab, U+69ad-69ae, U+69b1, U+69b7, U+69bb-69bc, U+69c1, U+69c3-69c5, U+69c7, U+69ca-69ce, U+69d0-69d1, U+69d3-69d4, U+69d7-69da, U+69e0, U+69e4, U+69e6, U+69ec-69ed, U+69f1-69f3, U+69f8, U+69fa-69fc, U+69fe-6a00) ); /* noto-sans-sc-[64]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-64-400-normal.woff2", $range: (U+6792-6793, U+6796, U+6798, U+679e-67a1, U+67a5, U+67a7-67a9, U+67ac-67ad, U+67b0-67b1, U+67b3, U+67b5, U+67b7, U+67b9, U+67bb-67bc, U+67c0-67c1, U+67c3, U+67c5-67ca, U+67d1-67d2, U+67d7-67d9, U+67dd-67df, U+67e2-67e4, U+67e6-67e9, U+67f0, U+67f5, U+67f7-67f8, U+67fa-67fb, U+67fd-67fe, U+6800-6801, U+6803-6804, U+6806, U+6809-680a, U+680c, U+680e, U+6812, U+681d-681f, U+6822, U+6824-6829, U+682b-682d, U+6831-6835, U+683b, U+683e, U+6840-6841, U+6844-6845, U+6849, U+684e, U+6853, U+6855-6856, U+685c-685d, U+685f-6862, U+6864, U+6866-6868, U+686b, U+686f, U+6872, U+6874, U+6877, U+687f, U+6883, U+6886, U+688f, U+689b, U+689f-68a0, U+68a2-68a3, U+68b1, U+68b6, U+68b9-68ba, U+68bc-68bf, U+68c1-68c4, U+68c6, U+68c8, U+68ca, U+68cc, U+68d0-68d1, U+68d3, U+68d7, U+68dd, U+68df) ); /* noto-sans-sc-[65]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-65-400-normal.woff2", $range: (U+663a-663b, U+663d, U+6641, U+6644-6645, U+6649, U+664c, U+664f, U+6654, U+6659, U+665b, U+665d-665e, U+6660-6667, U+6669, U+666b-666c, U+6671, U+6673, U+6677-6679, U+667c, U+6680-6681, U+6684-6685, U+6688-6689, U+668b-668e, U+6690, U+6692, U+6695, U+6698, U+669a, U+669d, U+669f-66a0, U+66a2-66a3, U+66a6, U+66aa-66ab, U+66b1-66b2, U+66b5, U+66b8-66b9, U+66bb, U+66be, U+66c1, U+66c6-66c9, U+66cc, U+66d5-66d8, U+66da-66dc, U+66de-66e2, U+66e8-66ea, U+66ec, U+66f1, U+66f3, U+66f7, U+66fa, U+66fd, U+6702, U+6705, U+670a, U+670f-6710, U+6713, U+6715, U+6719, U+6722-6723, U+6725-6727, U+6729, U+672d-672e, U+6732-6733, U+6736, U+6739, U+673b, U+673f, U+6744, U+6748, U+674c-674d, U+6753, U+6755, U+6762, U+6767, U+6769-676c, U+676e, U+6772-6773, U+6775, U+6777, U+677a-677d, U+6782-6783, U+6787, U+678a-678d, U+678f) ); /* noto-sans-sc-[66]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-66-400-normal.woff2", $range: (U+64f8, U+64fa, U+64fc, U+64fe-64ff, U+6503, U+6509, U+650f, U+6514, U+6518, U+651c-651e, U+6522-6525, U+652a-652c, U+652e, U+6530-6532, U+6534-6535, U+6537-6538, U+653a, U+653c-653d, U+6542, U+6549-654b, U+654d-654e, U+6553-6555, U+6557-6558, U+655d, U+6564, U+6569, U+656b, U+656d-656f, U+6571, U+6573, U+6575-6576, U+6578-657e, U+6581-6583, U+6585-6586, U+6589, U+658e-658f, U+6592-6593, U+6595-6596, U+659b, U+659d, U+659f-65a1, U+65a3, U+65ab-65ac, U+65b2, U+65b6-65b7, U+65ba-65bb, U+65be-65c0, U+65c2-65c4, U+65c6-65c8, U+65cc, U+65ce, U+65d0, U+65d2-65d3, U+65d6, U+65db, U+65dd, U+65e1, U+65e3, U+65ee-65f0, U+65f3-65f5, U+65f8, U+65fb-65fc, U+65fe-6600, U+6603, U+6607, U+6609, U+660b, U+6610-6611, U+6619-661a, U+661c-661e, U+6621, U+6624, U+6626, U+662a-662c, U+662e, U+6630-6631, U+6633-6634, U+6636) ); /* noto-sans-sc-[67]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-67-400-normal.woff2", $range: (U+63bc, U+63be, U+63c0, U+63c3-63c4, U+63c6, U+63c8, U+63cd-63ce, U+63d1, U+63d6, U+63da-63db, U+63de, U+63e0, U+63e3, U+63e9-63ea, U+63ee, U+63f2, U+63f5-63fa, U+63fc, U+63fe-6400, U+6406, U+640b-640d, U+6410, U+6414, U+6416-6417, U+641b, U+6420-6423, U+6425-6428, U+642a, U+6431-6432, U+6434-6437, U+643d-6442, U+6445, U+6448, U+6450-6452, U+645b-645f, U+6462, U+6465, U+6468, U+646d, U+646f-6471, U+6473, U+6477, U+6479-647d, U+6482-6485, U+6487-6488, U+648c, U+6490, U+6493, U+6496-649a, U+649d, U+64a0, U+64a5, U+64ab-64ac, U+64b1-64b7, U+64b9-64bb, U+64be-64c1, U+64c4, U+64c7, U+64c9-64cb, U+64d0, U+64d4, U+64d7-64d8, U+64da, U+64de, U+64e0-64e2, U+64e4, U+64e9, U+64ec, U+64f0-64f2, U+64f4, U+64f7) ); /* noto-sans-sc-[68]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-68-400-normal.woff2", $range: (U+623b, U+623d-623e, U+6243, U+6246, U+6248-6249, U+624c, U+6255, U+6259, U+625e, U+6260-6261, U+6265-6266, U+626a, U+6271, U+627a, U+627c-627d, U+6283, U+6286, U+6289, U+628e, U+6294, U+629c, U+629e-629f, U+62a1, U+62a8, U+62ba-62bb, U+62bf, U+62c2, U+62c4, U+62c8, U+62ca-62cb, U+62ce-62cf, U+62d1, U+62d7, U+62d9-62da, U+62dd, U+62e0-62e1, U+62e3-62e4, U+62e7, U+62eb, U+62ee, U+62f0, U+62f4-62f6, U+6308, U+630a-630e, U+6310, U+6312-6313, U+6317, U+6319, U+631b, U+631d-631f, U+6322, U+6326, U+6329, U+6331-6332, U+6334-6337, U+6339, U+633b-633c, U+633e-6340, U+6343, U+6347, U+634b-634e, U+6354, U+635c-635d, U+6368-6369, U+636d, U+636f-6372, U+6376, U+637a-637b, U+637d, U+6382-6383, U+6387, U+638a-638b, U+638d-638e, U+6391, U+6393-6397, U+6399, U+639b, U+639e-639f, U+63a1, U+63a3-63a4, U+63ac-63ae, U+63b1-63b5, U+63b7-63bb) ); /* noto-sans-sc-[69]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-69-400-normal.woff2", $range: (U+60fa, U+6100, U+6106, U+610d-610e, U+6112, U+6114-6115, U+6119, U+611c, U+6120, U+6122-6123, U+6126, U+6128-6130, U+6136-6137, U+613a, U+613d-613e, U+6144, U+6146-6147, U+614a-614b, U+6151, U+6153, U+6158, U+615a, U+615c-615d, U+615f, U+6161, U+6163-6165, U+616b-616c, U+616e, U+6171, U+6173-6177, U+617e, U+6182, U+6187, U+618a, U+618d-618e, U+6190-6191, U+6194, U+6199-619a, U+619c, U+619f, U+61a1, U+61a3-61a4, U+61a7-61a9, U+61ab-61ad, U+61b2-61b3, U+61b5-61b7, U+61ba-61bb, U+61bf, U+61c3-61c4, U+61c6-61c7, U+61c9-61cb, U+61d0-61d1, U+61d3-61d4, U+61d7, U+61da, U+61df-61e1, U+61e6, U+61ee, U+61f0, U+61f2, U+61f6-61f8, U+61fa, U+61fc-61fe, U+6200, U+6206-6207, U+6209, U+620b, U+620d-620e, U+6213-6215, U+6217, U+6219, U+621b-6223, U+6225-6226, U+622c, U+622e-6230, U+6232, U+6238) ); /* noto-sans-sc-[70]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-70-400-normal.woff2", $range: (U+5fd1-5fd6, U+5fda-5fde, U+5fe1-5fe2, U+5fe4-5fe5, U+5fea, U+5fed-5fee, U+5ff1-5ff3, U+5ff6, U+5ff8, U+5ffb, U+5ffe-5fff, U+6002-6006, U+600a, U+600d, U+600f, U+6014, U+6019, U+601b, U+6020, U+6023, U+6026, U+6029, U+602b, U+602e-602f, U+6031, U+6033, U+6035, U+6039, U+603f, U+6041-6043, U+6046, U+604f, U+6053-6054, U+6058-605b, U+605d-605e, U+6060, U+6063, U+6065, U+6067, U+606a-606c, U+6075, U+6078-6079, U+607b, U+607d, U+607f, U+6083, U+6085-6087, U+608a, U+608c, U+608e-608f, U+6092-6093, U+6095-6097, U+609b-609d, U+60a2, U+60a7, U+60a9-60ab, U+60ad, U+60af-60b1, U+60b3-60b6, U+60b8, U+60bb, U+60bd-60be, U+60c0-60c3, U+60c6-60c9, U+60cb, U+60ce, U+60d3-60d4, U+60d7-60db, U+60dd, U+60e1-60e4, U+60e6, U+60ea, U+60ec-60ee, U+60f0-60f1, U+60f4, U+60f6) ); /* noto-sans-sc-[71]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-71-400-normal.woff2", $range: (U+5ea3-5ea5, U+5ea8, U+5eab, U+5eaf, U+5eb3, U+5eb5-5eb6, U+5eb9, U+5ebe, U+5ec1-5ec3, U+5ec6, U+5ec8, U+5ecb-5ecc, U+5ed1-5ed2, U+5ed4, U+5ed9-5edb, U+5edd, U+5edf-5ee0, U+5ee2-5ee3, U+5ee8, U+5eea, U+5eec, U+5eef-5ef0, U+5ef3-5ef4, U+5ef8, U+5efb-5efc, U+5efe-5eff, U+5f01, U+5f07, U+5f0b-5f0e, U+5f10-5f12, U+5f14, U+5f1a, U+5f22, U+5f28-5f29, U+5f2c-5f2d, U+5f35-5f36, U+5f38, U+5f3b-5f43, U+5f45-5f4a, U+5f4c-5f4e, U+5f50, U+5f54, U+5f56-5f59, U+5f5b-5f5f, U+5f61, U+5f63, U+5f65, U+5f67-5f68, U+5f6b, U+5f6e-5f6f, U+5f72-5f78, U+5f7a, U+5f7e-5f7f, U+5f82-5f83, U+5f87, U+5f89-5f8a, U+5f8d, U+5f91, U+5f93, U+5f95, U+5f98-5f99, U+5f9c, U+5f9e, U+5fa0, U+5fa6-5fa9, U+5fac-5fad, U+5faf, U+5fb3-5fb5, U+5fb9, U+5fbc, U+5fc4, U+5fc9, U+5fcb, U+5fce-5fd0) ); /* noto-sans-sc-[72]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-72-400-normal.woff2", $range: (U+5d32-5d34, U+5d3c-5d3e, U+5d41-5d44, U+5d46-5d48, U+5d4a-5d4b, U+5d4e, U+5d50, U+5d52, U+5d55-5d58, U+5d5a-5d5d, U+5d68-5d69, U+5d6b-5d6c, U+5d6f, U+5d74, U+5d7f, U+5d82-5d89, U+5d8b-5d8c, U+5d8f, U+5d92-5d93, U+5d99, U+5d9d, U+5db2, U+5db6-5db7, U+5dba, U+5dbc-5dbd, U+5dc2-5dc3, U+5dc6-5dc7, U+5dc9, U+5dcc, U+5dd2, U+5dd4, U+5dd6-5dd8, U+5ddb-5ddc, U+5de3, U+5ded, U+5def, U+5df3, U+5df6, U+5dfa-5dfd, U+5dff-5e00, U+5e07, U+5e0f, U+5e11, U+5e13-5e14, U+5e19-5e1b, U+5e22, U+5e25, U+5e28, U+5e2a, U+5e2f-5e31, U+5e33-5e34, U+5e36, U+5e39-5e3c, U+5e3e, U+5e40, U+5e44, U+5e46-5e48, U+5e4c, U+5e4f, U+5e53-5e54, U+5e57, U+5e59, U+5e5b, U+5e5e-5e5f, U+5e61, U+5e63, U+5e6a-5e6b, U+5e75, U+5e77, U+5e79-5e7a, U+5e7e, U+5e80-5e81, U+5e83, U+5e85, U+5e87, U+5e8b, U+5e91-5e92, U+5e96, U+5e98, U+5e9b, U+5e9d, U+5ea0-5ea2) ); /* noto-sans-sc-[73]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-73-400-normal.woff2", $range: (U+5bf5-5bf6, U+5bfe, U+5c02-5c03, U+5c05, U+5c07-5c09, U+5c0b-5c0c, U+5c0e, U+5c10, U+5c12-5c13, U+5c15, U+5c17, U+5c19, U+5c1b-5c1c, U+5c1e-5c1f, U+5c22, U+5c25, U+5c28, U+5c2a-5c2b, U+5c2f-5c30, U+5c37, U+5c3b, U+5c43-5c44, U+5c46-5c47, U+5c4d, U+5c50, U+5c59, U+5c5b-5c5c, U+5c62-5c64, U+5c66, U+5c6c, U+5c6e, U+5c74, U+5c78-5c7e, U+5c80, U+5c83-5c84, U+5c88, U+5c8b-5c8d, U+5c91, U+5c94-5c96, U+5c98-5c99, U+5c9c, U+5c9e, U+5ca1-5ca3, U+5cab-5cac, U+5cb1, U+5cb5, U+5cb7, U+5cba, U+5cbd-5cbf, U+5cc1, U+5cc3-5cc4, U+5cc7, U+5ccb, U+5cd2, U+5cd8-5cd9, U+5cdf-5ce0, U+5ce3-5ce6, U+5ce8-5cea, U+5ced, U+5cef, U+5cf3-5cf4, U+5cf6, U+5cf8, U+5cfd, U+5d00-5d04, U+5d06, U+5d08, U+5d0b-5d0d, U+5d0f-5d13, U+5d15, U+5d17-5d1a, U+5d1d-5d22, U+5d24-5d27, U+5d2e-5d31) ); /* noto-sans-sc-[74]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-74-400-normal.woff2", $range: (U+5ab2, U+5ab4-5ab5, U+5ab7-5aba, U+5abd-5abf, U+5ac3-5ac4, U+5ac6-5ac8, U+5aca-5acb, U+5acd, U+5acf-5ad2, U+5ad4, U+5ad8-5ada, U+5adc, U+5adf-5ae2, U+5ae4, U+5ae6, U+5ae8, U+5aea-5aed, U+5af0-5af3, U+5af5, U+5af9-5afb, U+5afd, U+5b01, U+5b05, U+5b08, U+5b0b-5b0c, U+5b11, U+5b16-5b17, U+5b1b, U+5b21-5b22, U+5b24, U+5b27-5b2e, U+5b30, U+5b32, U+5b34, U+5b36-5b38, U+5b3e-5b40, U+5b43, U+5b45, U+5b4a-5b4b, U+5b51-5b53, U+5b56, U+5b5a-5b5b, U+5b62, U+5b65, U+5b67, U+5b6a-5b6e, U+5b70-5b71, U+5b73, U+5b7a-5b7b, U+5b7f-5b80, U+5b84, U+5b8d, U+5b91, U+5b93-5b95, U+5b9f, U+5ba5-5ba6, U+5bac, U+5bae, U+5bb8, U+5bc0, U+5bc3, U+5bcb, U+5bd0-5bd1, U+5bd4-5bd8, U+5bda-5bdc, U+5be2, U+5be4-5be7, U+5be9, U+5beb-5bec, U+5bee-5bf0, U+5bf2-5bf3) ); /* noto-sans-sc-[75]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-75-400-normal.woff2", $range: (U+5981, U+598f, U+5997-5998, U+599a, U+599c-599d, U+59a0-59a1, U+59a3-59a4, U+59a7, U+59aa-59ad, U+59af, U+59b2-59b3, U+59b5-59b6, U+59b8, U+59ba, U+59bd-59be, U+59c0-59c1, U+59c3-59c4, U+59c7-59ca, U+59cc-59cd, U+59cf, U+59d2, U+59d5-59d6, U+59d8-59d9, U+59db, U+59dd-59e0, U+59e2-59e7, U+59e9-59eb, U+59ee, U+59f1, U+59f3, U+59f5, U+59f7-59f9, U+59fd, U+5a06, U+5a08-5a0a, U+5a0c-5a0d, U+5a11-5a13, U+5a15-5a16, U+5a1a-5a1b, U+5a21-5a23, U+5a2d-5a2f, U+5a32, U+5a38, U+5a3c, U+5a3e-5a45, U+5a47, U+5a4a, U+5a4c-5a4d, U+5a4f-5a51, U+5a53, U+5a55-5a57, U+5a5e, U+5a60, U+5a62, U+5a65-5a67, U+5a6a, U+5a6c-5a6d, U+5a72-5a73, U+5a75-5a76, U+5a79-5a7c, U+5a81-5a84, U+5a8c, U+5a8e, U+5a93, U+5a96-5a97, U+5a9c, U+5a9e, U+5aa0, U+5aa3-5aa4, U+5aaa, U+5aae-5aaf, U+5ab1) ); /* noto-sans-sc-[76]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-76-400-normal.woff2", $range: (U+5831, U+583a, U+583d, U+583f-5842, U+5844-5846, U+5848, U+584a, U+584d, U+5852, U+5857, U+5859-585a, U+585c-585d, U+5862, U+5868-5869, U+586c-586d, U+586f-5873, U+5875, U+5879, U+587d-587e, U+5880-5881, U+5888-588a, U+588d, U+5892, U+5896-5898, U+589a, U+589c-589d, U+58a0-58a1, U+58a3, U+58a6, U+58a9, U+58ab-58ae, U+58b0, U+58b3, U+58bb-58bf, U+58c2-58c3, U+58c5-58c8, U+58ca, U+58cc, U+58ce, U+58d1-58d3, U+58d5, U+58d8-58d9, U+58de-58df, U+58e2, U+58e9, U+58ec, U+58ef, U+58f1-58f2, U+58f5, U+58f7-58f8, U+58fa, U+58fd, U+5900, U+5902, U+5906, U+5908-590c, U+590e, U+5910, U+5914, U+5919, U+591b, U+591d-591e, U+5920, U+5922-5925, U+5928, U+592c-592d, U+592f, U+5932, U+5936, U+593c, U+593e, U+5940-5942, U+5944, U+594c-594d, U+5950, U+5953, U+5958, U+595a, U+5961, U+5966-5968, U+596a, U+596c-596e, U+5977, U+597b-597c) ); /* noto-sans-sc-[77]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-77-400-normal.woff2", $range: (U+570a, U+570c-570d, U+570f, U+5712-5713, U+5718-5719, U+571c, U+571e, U+5725, U+5727, U+5729-572a, U+572c, U+572e-572f, U+5734-5735, U+5739, U+573b, U+5741, U+5743, U+5745, U+5749, U+574c-574d, U+575c, U+5763, U+5768-5769, U+576b, U+576d-576e, U+5770, U+5773, U+5775, U+5777, U+577b-577c, U+5785-5786, U+5788, U+578c, U+578e-578f, U+5793-5795, U+5799-57a1, U+57a3-57a4, U+57a6-57aa, U+57ac-57ad, U+57af-57b2, U+57b4-57b6, U+57b8-57b9, U+57bd-57bf, U+57c2, U+57c4-57c8, U+57cc-57cd, U+57cf, U+57d2, U+57d5-57de, U+57e1-57e2, U+57e4-57e5, U+57e7, U+57eb, U+57ed, U+57ef, U+57f4-57f8, U+57fc-57fd, U+5800-5801, U+5803, U+5805, U+5807, U+5809, U+580b-580e, U+5811, U+5814, U+5819, U+581b-5820, U+5822-5823, U+5825-5826, U+582c, U+582f) ); /* noto-sans-sc-[78]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-78-400-normal.woff2", $range: (U+5605-5606, U+5608, U+560c-560d, U+560f, U+5614, U+5616-5617, U+561a, U+561c, U+561e, U+5621-5625, U+5627, U+5629, U+562b-5630, U+5636, U+5638-563a, U+563c, U+5640-5642, U+5649, U+564c-5650, U+5653-5655, U+5657-565b, U+5660, U+5663-5664, U+5666, U+566b, U+566f-5671, U+5673-567c, U+567e, U+5684-5687, U+568c, U+568e-5693, U+5695, U+5697, U+569b-569c, U+569e-569f, U+56a1-56a2, U+56a4-56a9, U+56ac-56af, U+56b1, U+56b4, U+56b6-56b8, U+56bf, U+56c1-56c3, U+56c9, U+56cd, U+56d1, U+56d4, U+56d6-56d9, U+56dd, U+56df, U+56e1, U+56e3-56e6, U+56e8-56ec, U+56ee-56ef, U+56f1-56f3, U+56f5, U+56f7-56f9, U+56fc, U+56ff-5700, U+5703-5704, U+5709) ); /* noto-sans-sc-[79]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-79-400-normal.woff2", $range: (U+5519, U+551b, U+551d-551e, U+5520, U+5522-5523, U+5526-5527, U+552a-552c, U+5530, U+5532-5535, U+5537-5538, U+553b-5541, U+5543-5544, U+5547-5549, U+554b, U+554d, U+5550, U+5553, U+5555-5558, U+555b-555f, U+5567-5569, U+556b-5572, U+5574-5577, U+557b-557c, U+557e-557f, U+5581, U+5583, U+5585-5586, U+5588, U+558b-558c, U+558e-5591, U+5593, U+5599-559a, U+559f, U+55a5-55a6, U+55a8-55ac, U+55ae, U+55b0-55b3, U+55b6, U+55b9-55ba, U+55bc-55be, U+55c4, U+55c6-55c7, U+55c9, U+55cc-55d2, U+55d4-55db, U+55dd-55df, U+55e1, U+55e3-55e6, U+55ea-55ee, U+55f0-55f3, U+55f5-55f7, U+55fb, U+55fe, U+5600-5601) ); /* noto-sans-sc-[80]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-80-400-normal.woff2", $range: (U+53fb-5400, U+5402, U+5405-5407, U+540b, U+540f, U+5412, U+5414, U+5416, U+5418-541a, U+541d, U+5420-5423, U+5425, U+5429-542a, U+542d-542e, U+5431-5433, U+5436, U+543d, U+543f, U+5442-5443, U+5449, U+544b-544c, U+544e, U+5451-5454, U+5456, U+5459, U+545b-545c, U+5461, U+5463-5464, U+546a-5472, U+5474, U+5476-5478, U+547a, U+547e-5484, U+5486, U+548a, U+548d-548e, U+5490-5491, U+5494, U+5497-5499, U+549b, U+549d, U+54a1-54a7, U+54a9, U+54ab, U+54ad, U+54b4-54b5, U+54b9, U+54bb, U+54be-54bf, U+54c2-54c3, U+54c9-54cc, U+54cf-54d0, U+54d3, U+54d5-54d6, U+54d9-54da, U+54dc-54de, U+54e2, U+54e7, U+54f3-54f4, U+54f8-54f9, U+54fd-54ff, U+5501, U+5504-5506, U+550c-550f, U+5511-5514, U+5516-5517) ); /* noto-sans-sc-[81]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-81-400-normal.woff2", $range: (U+52a2, U+52a6-52a7, U+52ac-52ad, U+52af, U+52b4-52b5, U+52b9, U+52bb-52bc, U+52be, U+52c1, U+52c5, U+52ca, U+52cd, U+52d0, U+52d6-52d7, U+52d9, U+52db, U+52dd-52de, U+52e0, U+52e2-52e3, U+52e5, U+52e7-52f0, U+52f2-52f3, U+52f5-52f9, U+52fb-52fc, U+5302, U+5304, U+530b, U+530d, U+530f-5310, U+5315, U+531a, U+531c-531d, U+5321, U+5323, U+5326, U+532e-5331, U+5338, U+533c-533e, U+5340, U+5344-5345, U+534b-534d, U+5350, U+5354, U+5358, U+535d-535f, U+5363, U+5368-5369, U+536c, U+536e-536f, U+5372, U+5379-537b, U+537d, U+538d-538e, U+5390, U+5393-5394, U+5396, U+539b-539d, U+53a0-53a1, U+53a3-53a5, U+53a9, U+53ad-53ae, U+53b0, U+53b2-53b3, U+53b5-53b8, U+53bc, U+53be, U+53c1, U+53c3-53c7, U+53ce-53cf, U+53d2-53d3, U+53d5, U+53da, U+53de-53df, U+53e1-53e2, U+53e7-53e9, U+53f1, U+53f4-53f5, U+53fa) ); /* noto-sans-sc-[82]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-82-400-normal.woff2", $range: (U+5110, U+5113, U+5115, U+5117-5118, U+511a-511c, U+511e-511f, U+5121, U+5128, U+512b-512d, U+5131-5135, U+5137-5139, U+513c, U+5140, U+5142, U+5147, U+514c, U+514e-5150, U+5155-5158, U+5162, U+5169, U+5172, U+517f, U+5181-5184, U+5186-5187, U+518b, U+518f, U+5191, U+5195-5197, U+519a, U+51a2-51a3, U+51a6-51ab, U+51ad-51ae, U+51b1, U+51b4, U+51bc-51bd, U+51bf, U+51c3, U+51c7-51c8, U+51ca-51cb, U+51cd-51ce, U+51d4, U+51d6, U+51db-51dc, U+51e6, U+51e8-51eb, U+51f1, U+51f5, U+51fc, U+51ff, U+5202, U+5205, U+5208, U+520b, U+520d-520e, U+5215-5216, U+5228, U+522a, U+522c-522d, U+5233, U+523c-523d, U+523f-5240, U+5245, U+5247, U+5249, U+524b-524c, U+524e, U+5250, U+525b-525f, U+5261, U+5263-5264, U+5270, U+5273, U+5275, U+5277, U+527d, U+527f, U+5281-5285, U+5287, U+5289, U+528b, U+528d, U+528f, U+5291-5293, U+529a) ); /* noto-sans-sc-[83]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-83-400-normal.woff2", $range: (U+4fe3-4fe4, U+4fe6, U+4fe8, U+4feb-4fed, U+4ff3, U+4ff5-4ff6, U+4ff8, U+4ffe, U+5001, U+5005-5006, U+5009, U+500c, U+500f, U+5013-5018, U+501b-501e, U+5022-5025, U+5027-5028, U+502b-502e, U+5030, U+5033-5034, U+5036-5039, U+503b, U+5041-5043, U+5045-5046, U+5048-504a, U+504c-504e, U+5051, U+5053, U+5055-5057, U+505b, U+505e, U+5060, U+5062-5063, U+5067, U+506a, U+506c, U+5070-5072, U+5074-5075, U+5078, U+507b, U+507d-507e, U+5080, U+5088-5089, U+5091-5092, U+5095, U+5097-509e, U+50a2-50a3, U+50a5-50a7, U+50a9, U+50ad, U+50b3, U+50b5, U+50b7, U+50ba, U+50be, U+50c4-50c5, U+50c7, U+50ca, U+50cd, U+50d1, U+50d5-50d6, U+50da, U+50de, U+50e5-50e6, U+50ec-50ee, U+50f0-50f1, U+50f3, U+50f9-50fb, U+50fe-5102, U+5104, U+5106-5107, U+5109-510b, U+510d, U+510f) ); /* noto-sans-sc-[84]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-84-400-normal.woff2", $range: (U+4eb8-4eb9, U+4ebb-4ebe, U+4ec2-4ec4, U+4ec8-4ec9, U+4ecc, U+4ecf-4ed0, U+4ed2, U+4eda-4edb, U+4edd-4ee1, U+4ee6-4ee9, U+4eeb, U+4eee-4eef, U+4ef3-4ef5, U+4ef8-4efa, U+4efc, U+4f00, U+4f03-4f05, U+4f08-4f09, U+4f0b, U+4f0e, U+4f12-4f13, U+4f15, U+4f1b, U+4f1d, U+4f21-4f22, U+4f25, U+4f27-4f29, U+4f2b-4f2e, U+4f31-4f33, U+4f36-4f37, U+4f39, U+4f3e, U+4f40-4f41, U+4f43, U+4f47-4f49, U+4f54, U+4f57-4f58, U+4f5d-4f5e, U+4f61-4f62, U+4f64-4f65, U+4f67, U+4f6a, U+4f6e-4f6f, U+4f72, U+4f74-4f7e, U+4f80-4f82, U+4f84, U+4f89-4f8a, U+4f8e-4f98, U+4f9e, U+4fa1, U+4fa5, U+4fa9-4faa, U+4fac, U+4fb3, U+4fb6-4fb8, U+4fbd, U+4fc2, U+4fc5-4fc6, U+4fcd-4fce, U+4fd0-4fd1, U+4fd3, U+4fda-4fdc, U+4fdf-4fe0, U+4fe2) ); /* noto-sans-sc-[85]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-85-400-normal.woff2", $range: (U+3127-3129, U+3131, U+3134, U+3137, U+3139, U+3141-3142, U+3145, U+3147-3148, U+314b, U+314d-314e, U+315c, U+3160-3161, U+3163-3164, U+3186, U+318d, U+3192, U+3196-3198, U+319e-319f, U+3220-3229, U+3231, U+3268, U+3297, U+3299, U+32a3, U+338e-338f, U+3395, U+339c-339e, U+33c4, U+33d1-33d2, U+33d5, U+3434, U+34dc, U+34ee, U+353e, U+355d, U+3566, U+3575, U+3592, U+35a0-35a1, U+35ad, U+35ce, U+36a2, U+36ab, U+38a8, U+3dab, U+3de7, U+3deb, U+3e1a, U+3f1b, U+3f6d, U+4495, U+4723, U+48fa, U+4ca3, U+4e02, U+4e04-4e06, U+4e0c, U+4e0f, U+4e15, U+4e17, U+4e1f-4e21, U+4e26, U+4e29, U+4e2c, U+4e2f, U+4e31, U+4e35, U+4e37, U+4e3c, U+4e3f-4e42, U+4e44, U+4e46-4e47, U+4e57, U+4e5a-4e5c, U+4e64-4e65, U+4e67, U+4e69, U+4e6d, U+4e78, U+4e7f-4e82, U+4e85, U+4e87, U+4e8a, U+4e8d, U+4e93, U+4e96, U+4e98-4e99, U+4e9c, U+4e9e-4ea0, U+4ea2-4ea3, U+4ea5, U+4eb0-4eb1, U+4eb3-4eb6) ); /* noto-sans-sc-[86]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-86-400-normal.woff2", $range: (U+279c, U+279f-27a2, U+27a4-27a5, U+27a8, U+27b0, U+27b2-27b3, U+27b9, U+27e8-27e9, U+27f6, U+2800, U+28ec, U+2913, U+2921-2922, U+2934-2935, U+2a2f, U+2b05-2b07, U+2b50, U+2b55, U+2bc5-2bc6, U+2e1c-2e1d, U+2ebb, U+2f00, U+2f08, U+2f24, U+2f2d, U+2f2f-2f30, U+2f3c, U+2f45, U+2f63-2f64, U+2f74, U+2f83, U+2f8f, U+2fbc, U+3003, U+3005-3007, U+3012-3013, U+301c-301e, U+3021, U+3023-3024, U+3030, U+3034-3035, U+3041, U+3043, U+3045, U+3047, U+3049, U+3056, U+3058, U+305c, U+305e, U+3062, U+306c, U+3074, U+3077, U+307a, U+307c-307d, U+3080, U+308e, U+3090-3091, U+3099-309b, U+309d-309e, U+30a5, U+30bc, U+30be, U+30c2, U+30c5, U+30cc, U+30d8, U+30e2, U+30e8, U+30ee, U+30f0-30f2, U+30f4-30f6, U+30fd-30fe, U+3105-3126) ); /* noto-sans-sc-[87]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-87-400-normal.woff2", $range: (U+2650-2655, U+2658, U+265a-265b, U+265d-265e, U+2660-266d, U+266f, U+267b, U+2688, U+2693-2696, U+2698-2699, U+269c, U+26a0-26a1, U+26a4, U+26aa-26ab, U+26bd-26be, U+26c4-26c5, U+26d4, U+26e9, U+26f0-26f1, U+26f3, U+26f5, U+26fd, U+2702, U+2704-2706, U+2708-270f, U+2712-2718, U+271a-271b, U+271d, U+271f, U+2721, U+2724-2730, U+2732-2734, U+273a, U+273d-2744, U+2747-2749, U+274c, U+274e-274f, U+2753-2757, U+275b, U+275d-275e, U+2763, U+2765-2767, U+276e-276f, U+2776-277e, U+2780-2782, U+278a-278c, U+278e, U+2794-2796) ); /* noto-sans-sc-[88]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-88-400-normal.woff2", $range: (U+254b, U+2550-2551, U+2554, U+2557, U+255a-255b, U+255d, U+255f-2560, U+2562-2563, U+2565-2567, U+2569-256a, U+256c-2572, U+2579, U+2580-2595, U+25a1, U+25a3, U+25a9-25ad, U+25b0, U+25b3-25bb, U+25bd-25c2, U+25c4, U+25c8-25cb, U+25cd, U+25d0-25d1, U+25d4-25d5, U+25d8, U+25dc-25e6, U+25ea-25eb, U+25ef, U+25fe, U+2600-2604, U+2609, U+260e-260f, U+2611, U+2614-2615, U+2618, U+261a-2620, U+2622-2623, U+262a, U+262d-2630, U+2639-2640, U+2642, U+2648-264f) ); /* noto-sans-sc-[89]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-89-400-normal.woff2", $range: (U+23e9, U+23f0, U+23f3, U+2445, U+2449, U+2465-2471, U+2474-249b, U+24b8, U+24c2, U+24c7, U+24c9, U+24d0, U+24d2, U+24d4, U+24d8, U+24dd-24de, U+24e3, U+24e6, U+24e8, U+2500-2509, U+250b-2526, U+2528-2534, U+2536-2537, U+253b-2548, U+254a) ); /* noto-sans-sc-[90]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-90-400-normal.woff2", $range: (U+207b-2083, U+208c-208e, U+2092, U+20a6, U+20a8-20ad, U+20af, U+20b1, U+20b4-20b5, U+20b8-20ba, U+20bd, U+20db, U+20dd, U+20e0, U+20e3, U+2105, U+2109, U+2113, U+2116-2117, U+2120-2121, U+2126, U+212b, U+2133, U+2139, U+2194, U+2196-2199, U+21a0, U+21a9-21aa, U+21af, U+21b3, U+21b5, U+21ba-21bb, U+21c4, U+21ca, U+21cc, U+21d0-21d4, U+21e1, U+21e6-21e9, U+2200, U+2202, U+2205-2208, U+220f, U+2211-2212, U+2215, U+2217-2219, U+221d-2220, U+2223, U+2225, U+2227-222b, U+222e, U+2234-2237, U+223c-223d, U+2248, U+224c, U+2252, U+2256, U+2260-2261, U+2266-2267, U+226a-226b, U+226e-226f, U+2282-2283, U+2295, U+2297, U+2299, U+22a5, U+22b0-22b1, U+22b9, U+22bf, U+22c5-22c6, U+22ef, U+2304, U+2307, U+230b, U+2312-2314, U+2318, U+231a-231b, U+2323, U+239b, U+239d-239e, U+23a0) ); /* noto-sans-sc-[91]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-91-400-normal.woff2", $range: (U+1d34-1d35, U+1d38-1d3a, U+1d3c, U+1d3f-1d40, U+1d49, U+1d4e-1d4f, U+1d52, U+1d55, U+1d5b, U+1d5e, U+1d9c, U+1da0, U+1dc4-1dc5, U+1e69, U+1e73, U+1ea0-1ea9, U+1eab-1ead, U+1eaf, U+1eb1, U+1eb3, U+1eb5, U+1eb7, U+1eb9, U+1ebb, U+1ebd-1ebe, U+1ec0-1ec3, U+1ec5-1ec6, U+1ec9-1ecd, U+1ecf-1ed3, U+1ed5, U+1ed7-1edf, U+1ee1, U+1ee3, U+1ee5-1eeb, U+1eed, U+1eef-1ef1, U+1ef3, U+1ef7, U+1ef9, U+1f62, U+1f7b, U+2001-2002, U+2004-2006, U+2009-200a, U+200c-2012, U+2015-2016, U+201a, U+201e-2021, U+2023, U+2025, U+2027-2028, U+202a-202d, U+202f-2030, U+2032-2033, U+2035, U+2038, U+203c, U+203e-203f, U+2043-2044, U+2049, U+204d-204e, U+2060-2061, U+2070, U+2074-2078, U+207a) ); /* noto-sans-sc-[97]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-97-400-normal.woff2", $range: (U+2ae-2b3, U+2b5-2bf, U+2c2-2c3, U+2c6-2d1, U+2d8-2da, U+2dc, U+2e1-2e3, U+2e5, U+2eb, U+2ee-2f0, U+2f2-2f7, U+2f9-2ff, U+302-30d, U+311, U+31b, U+321-325, U+327-329, U+32b-32c, U+32e-32f, U+331-339, U+33c-33d, U+33f, U+348, U+352, U+35c, U+35e-35f, U+361, U+363, U+368, U+36c, U+36f, U+530-540, U+55d-55e, U+561, U+563, U+565, U+56b, U+56e-579) ); /* noto-sans-sc-[98]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-98-400-normal.woff2", $range: (U+176-17f, U+192, U+194, U+19a-19b, U+19d, U+1a0-1a1, U+1a3-1a4, U+1aa, U+1ac-1ad, U+1af-1bf, U+1d2, U+1d4, U+1d6, U+1d8, U+1da, U+1dc, U+1e3, U+1e7, U+1e9, U+1ee, U+1f0-1f1, U+1f3, U+1f5-1ff, U+219-21b, U+221, U+223-226, U+228, U+22b, U+22f, U+231, U+234-237, U+23a-23b, U+23d, U+250-252, U+254-255, U+259-25e, U+261-263, U+265, U+268, U+26a-26b, U+26f-277, U+279, U+27b-280, U+282-283, U+285, U+28a, U+28c, U+28f, U+292, U+294-296, U+298-29a, U+29c, U+29f, U+2a1-2a4, U+2a6-2a7, U+2a9, U+2ab) ); /* noto-sans-sc-[99]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-99-400-normal.woff2", $range: (U+a1-a4, U+a6-a8, U+aa, U+ac, U+af, U+b1, U+b3-b6, U+b8-ba, U+bc-d6, U+d8-de, U+e6, U+eb, U+ee-f0, U+f5, U+f7-f8, U+fb, U+fd-100, U+102, U+104-107, U+10d, U+10f-112, U+115, U+117, U+119, U+11b, U+11e-11f, U+121, U+123, U+125-127, U+129-12a, U+12d, U+12f-13f, U+141-142, U+144, U+146, U+14b-14c, U+14f-153, U+158-15b, U+15e-160, U+163-165, U+168-16a, U+16d-175) ); /* noto-sans-sc-[100]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-100-400-normal.woff2", $range: (U+221a, U+2264, U+2464, U+25a0, U+3008, U+4e10, U+512a, U+5152, U+5201, U+5241, U+5352, U+549a, U+54b2, U+54c6, U+54d7, U+54e1, U+5509, U+55c5, U+560e, U+5618, U+565c, U+56bc, U+5716, U+576f, U+5784, U+57a2, U+589f, U+5a20, U+5a25, U+5a29, U+5a34, U+5a7f, U+5ac9, U+5ad6, U+5b09, U+5b5c, U+5bc7, U+5c27, U+5d2d, U+5dcd, U+5f1b, U+5f37, U+604d, U+6055, U+6073, U+60eb, U+61ff, U+620c, U+62c7, U+62ed, U+6320, U+6345, U+6390, U+63b0, U+64ae, U+64c2, U+64d2, U+6556, U+663c, U+667e, U+66d9, U+66f8, U+6756, U+6789, U+689d, U+68f1, U+695e, U+6975, U+6a1f, U+6b0a, U+6b61, U+6b87, U+6c5d, U+6c7e, U+6c92, U+6d31, U+6df9, U+6e0d, U+6e2d, U+6f3e, U+70b3, U+70bd, U+70ca, U+70e8, U+725f, U+72e9, U+733f, U+7396, U+739f, U+7459-745a, U+74a7, U+75a1, U+75f0, U+76cf, U+76d4, U+7729, U+77aa, U+77b0, U+77e3, U+780c, U+78d5, U+7941, U+7977, U+797a, U+79c3, U+7a20, U+7a92, U+7b71, U+7bf1, U+7c9f, U+7eb6, U+7eca, U+7ef7, U+7f07, U+7f09, U+7f15, U+7f81, U+7fb9, U+8038, U+8098, U+80b4, U+8110, U+814b-814c, U+816e, U+818a, U+8205, U+8235, U+828b, U+82a5, U+82b7, U+82d4, U+82db, U+82df, U+8317, U+8338, U+8385-8386, U+83c1, U+83cf, U+8537, U+853b, U+854a, U+8715, U+8783, U+892a, U+8a71, U+8aaa, U+8d58, U+8dbe, U+8f67, U+8fab, U+8fc4, U+8fe6, U+9023, U+9084, U+9091, U+916a, U+91c9, U+91dc, U+94b3, U+9502, U+9523, U+9551, U+956f, U+960e, U+962a, U+962e, U+9647, U+96f3, U+9739, U+97a0, U+97ed, U+983b, U+985e, U+988a, U+9a6f, U+9a8b, U+9ab7, U+9ac5, U+9e25, U+e608, U+ff06, U+ff14-ff16) ); /* noto-sans-sc-[101]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-101-400-normal.woff2", $range: (U+161, U+926, U+928, U+939, U+93f-940, U+94d, U+e17, U+e22, U+e44, U+2463, U+25c7, U+25ce, U+2764, U+3009, U+3016-3017, U+4e4d, U+4e53, U+4f5a, U+4f70, U+4fae, U+4fd8, U+4ffa, U+5011, U+501a, U+516e, U+51c4, U+5225, U+5364, U+547b, U+5495, U+54e8, U+54ee, U+5594, U+55d3, U+55dc, U+55fd, U+5662, U+5669, U+566c, U+5742, U+5824, U+5834, U+598a, U+5992, U+59a9, U+5a04, U+5b75, U+5b7d, U+5bc5, U+5c49, U+5c90, U+5e1c, U+5e27, U+5e2b, U+5e37, U+5e90, U+618b, U+61f5, U+620a, U+6273, U+62f7, U+6342, U+6401-6402, U+6413, U+6512, U+655b, U+65a7, U+65f1, U+65f7, U+665f, U+6687, U+66a7, U+673d, U+67b8, U+6854, U+68d8, U+68fa, U+696d, U+6a02, U+6a0a, U+6a80, U+6b7c, U+6bd9, U+6c2e, U+6c76, U+6cf8, U+6d4a, U+6d85, U+6e24, U+6e32, U+6ec7, U+6ed5, U+6f88, U+700f, U+701a, U+7078, U+707c, U+70ac, U+70c1, U+7409, U+7422, U+7480, U+74a8, U+752b, U+7574, U+7656, U+7699, U+7737, U+785d, U+78be, U+79b9, U+7a3d, U+7a91, U+7a9f, U+7ae3, U+7b77, U+7c3f, U+7d1a, U+7d50, U+7d93, U+803f, U+8042, U+808b, U+8236, U+82b8-82b9, U+82ef, U+8309, U+836b, U+83ef, U+8431, U+85c9, U+865e, U+868c, U+8759, U+8760, U+8845, U+89ba, U+8a2a, U+8c41, U+8cec, U+8d2c, U+8d4e, U+8e66, U+8e6d, U+8eaf, U+902e, U+914b, U+916e, U+919b, U+949b, U+94a0, U+94b0, U+9541-9542, U+9556, U+95eb, U+95f5, U+964b, U+968b, U+96cc-96cd, U+96cf, U+9704, U+9713, U+9890, U+98a8, U+9985, U+9992, U+9a6d, U+9a81, U+9a86, U+9ab8, U+9ca4, U+9f9a, U+e606-e607, U+e60a, U+e60c, U+e60e, U+fe0f, U+ff02, U+ff1e, U+ff3d) ); /* noto-sans-sc-[102]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-102-400-normal.woff2", $range: (U+10c, U+627-629, U+639, U+644, U+64a, U+203b, U+2265, U+2573, U+25b2, U+3448-3449, U+4e1e, U+4e5e, U+4f3a, U+4f5f, U+4fea, U+5026, U+508d, U+5189, U+5254, U+5288, U+52d8, U+52fa, U+5306, U+5308, U+5384, U+53ed, U+543c, U+5450, U+5455, U+5466, U+54c4, U+5578, U+55a7, U+561f, U+5631, U+572d, U+575f, U+57ae, U+57e0, U+5830, U+594e, U+5984, U+5993, U+5bdd, U+5c0d, U+5c7f, U+5c82, U+5e62, U+5ed3, U+5f08, U+607a, U+60bc, U+60df, U+625b, U+6292, U+62e2, U+6363, U+6467, U+6714, U+675e, U+6771, U+67a2, U+67ff, U+6805, U+6813, U+6869, U+68a7, U+68e0, U+6930, U+6986, U+69a8, U+69df, U+6a44, U+6a5f, U+6c13, U+6c1f, U+6c22, U+6c2f, U+6c40, U+6c81, U+6c9b, U+6ca5, U+6da4, U+6df3, U+6e85, U+6eba, U+6f13, U+6f33, U+6f62, U+715e, U+72c4, U+73d1, U+73fe, U+7405, U+7455, U+7487, U+7578, U+75a4, U+75eb, U+7693, U+7738, U+7741, U+776b, U+7792, U+77a7, U+77a9, U+77b3, U+788c, U+7984, U+79a7, U+79e4, U+7a1a, U+7a57, U+7aa6, U+7b0b, U+7b5d, U+7c27, U+7c7d, U+7caa, U+7cd9, U+7cef, U+7eda, U+7ede, U+7f24, U+8046, U+80fa, U+81b3, U+81fb, U+8207, U+8258, U+8335, U+8339, U+8354, U+840e, U+85b0, U+85fb, U+8695, U+86aa, U+8717, U+8749, U+874c, U+8996, U+89bd, U+89c5, U+8bdb, U+8bf5, U+8c5a, U+8d3f, U+8d9f, U+8e44, U+8fed, U+9005, U+9019, U+904e, U+9082, U+90af, U+90dd, U+90e1, U+90f8, U+9119, U+916f, U+9176, U+949e, U+94a7, U+94c2, U+9525, U+9580, U+95dc, U+96e2, U+96fb, U+9a7c, U+9a7f, U+9b41, U+9ca8, U+9cc4, U+9cde, U+9e92, U+9ede, U+e60b, U+e610, U+ff10, U+ff13, U+ff3b, U+f012b) ); /* noto-sans-sc-[103]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-103-400-normal.woff2", $range: (U+60, U+631, U+2606, U+3014-3015, U+309c, U+33a1, U+4e52, U+4ec6, U+4f86, U+4f8d, U+4fde, U+4fef, U+500b, U+502a, U+515c, U+518a, U+51a5, U+51f3, U+5243, U+52c9, U+52d5, U+53a2, U+53ee, U+54ce, U+54fa, U+54fc, U+5580, U+5587, U+563f, U+56da, U+5792, U+5815, U+5960, U+59d7, U+5a1f, U+5b78, U+5b9b, U+5be1, U+5c4e, U+5c51, U+5c6f, U+5c9a, U+5cfb, U+5d16, U+5ed6, U+5f27, U+5f6a, U+5f6c, U+603c, U+609a, U+6168, U+61c8, U+6236, U+62d0, U+62f1, U+62fd, U+631a, U+6328, U+632b, U+6346, U+638f, U+63a0, U+63c9, U+655e, U+6590, U+6615, U+6627, U+66ae, U+66e6, U+66f0, U+6703, U+67da, U+67ec, U+6816, U+6893, U+68ad, U+68f5, U+6977, U+6984, U+69db, U+6b72, U+6bb7, U+6ce3, U+6cfb, U+6d47, U+6da1, U+6dc4, U+6e43, U+6eaf, U+6eff, U+6f8e, U+7011, U+7063, U+7076, U+7096, U+70ba, U+70db, U+70ef, U+7119-711a, U+7172, U+718f, U+7194, U+727a, U+72d9, U+72ed, U+7325, U+73ae, U+73ba, U+73c0, U+7410, U+7426, U+7554, U+7576, U+75ae, U+75b9, U+762b, U+766b, U+7682, U+7750, U+7779, U+7784, U+77eb, U+77ee, U+78f7, U+79e9, U+7a79, U+7b1b, U+7b28, U+7bf7, U+7db2, U+7ec5, U+7eee, U+7f14, U+7f1a, U+7fe1, U+8087, U+809b, U+8231, U+830e, U+835f, U+83e9, U+849c, U+851a, U+868a, U+8718, U+874e, U+8822, U+8910, U+8944, U+8a3b, U+8bb6, U+8bbc, U+8d50, U+8e72, U+8f9c, U+900d, U+904b, U+9063, U+90a2, U+90b9, U+94f2, U+952f, U+9576-9577, U+9593, U+95f8, U+961c, U+9631, U+969b, U+96a7, U+96c1, U+9716, U+9761, U+97ad, U+97e7, U+98a4, U+997a, U+9a73, U+9b44, U+9e3d, U+9ecf, U+9ed4, U+ff11-ff12, U+fffd) ); /* noto-sans-sc-[104]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-104-400-normal.woff2", $range: (U+2003, U+2193, U+2462, U+4e19, U+4e2b, U+4e36, U+4ea8, U+4ed1, U+4ed7, U+4f51, U+4f63, U+4f83, U+50e7, U+5112, U+5167, U+51a4, U+51b6, U+5239, U+5265, U+532a, U+5351, U+537f, U+5401, U+548f, U+5492, U+54af, U+54b3, U+54bd, U+54d1, U+54df, U+554f, U+5564, U+5598, U+5632, U+56a3, U+56e7, U+574e, U+575d-575e, U+57d4, U+584c, U+58e4, U+5937, U+5955, U+5a05, U+5a49, U+5ac2, U+5bb0, U+5c39, U+5c61, U+5d0e, U+5de9, U+5e9a, U+5eb8, U+5f0a, U+5f13, U+5f8c, U+608d, U+611b, U+6127, U+62a0, U+634f, U+635e, U+63fd, U+6577, U+658b, U+65bc, U+660a, U+6643, U+6656, U+6760, U+67af, U+67c4, U+67e0, U+6817, U+68cd, U+690e, U+6960, U+69b4, U+6a71, U+6aac, U+6b67, U+6bb4, U+6c55, U+6c70, U+6c82, U+6ca6, U+6cb8, U+6cbe, U+6e9c, U+6ede, U+6ee5, U+6f4d, U+6f84, U+6f9c, U+7115, U+7121, U+722a, U+7261, U+7272, U+7280, U+72f8, U+7504, U+754f, U+75d8, U+767c, U+76ef, U+778e, U+77bb, U+77f6, U+786b, U+78b1, U+7948, U+7985, U+79be, U+7a83, U+7a8d, U+7eac, U+7eef, U+7ef8, U+7efd, U+7f00, U+803d, U+8086, U+810a, U+8165, U+819d, U+81a8, U+8214, U+829c, U+831c, U+8328, U+832b, U+8367, U+83e0, U+83f1, U+8403, U+846b, U+8475, U+84b2, U+8513, U+8574, U+85af, U+86d9, U+86db, U+8acb, U+8bbd, U+8be0-8be1, U+8c0e, U+8d29, U+8d63, U+8e81, U+8f7f, U+9032, U+9042, U+90b1, U+90b5, U+9165, U+9175, U+94a6, U+94c5, U+950c, U+9540, U+9610, U+9699, U+96c7, U+973e, U+978d, U+97ec, U+97f6, U+984c, U+987d, U+9882, U+9965, U+996a, U+9972, U+9a8f, U+9ad3, U+9ae6, U+9cb8, U+9edb, U+e600, U+e60f, U+e611, U+ff05, U+ff0b) ); /* noto-sans-sc-[105]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-105-400-normal.woff2", $range: (U+5e, U+2190, U+250a, U+25bc, U+25cf, U+300f, U+4e56, U+4ea9, U+4f3d, U+4f6c, U+4f88, U+4fa8, U+4fcf, U+5029, U+5188, U+51f9, U+5203, U+524a, U+5256, U+529d, U+5375, U+53db, U+541f, U+5435, U+5457, U+548b, U+54b1, U+54c7, U+54d4, U+54e9, U+556a, U+5589, U+55bb, U+55e8, U+55ef, U+563b, U+566a, U+576a, U+58f9, U+598d, U+599e, U+59a8, U+5a9b, U+5ae3, U+5bde, U+5c4c, U+5c60, U+5d1b, U+5deb, U+5df7, U+5e18, U+5f26, U+5f64, U+601c, U+6084, U+60e9, U+614c, U+61be, U+6208, U+621a, U+6233, U+6254, U+62d8, U+62e6, U+62ef, U+6323, U+632a, U+633d, U+6361, U+6380, U+6405, U+640f, U+6614, U+6642, U+6657, U+67a3, U+6808, U+683d, U+6850, U+6897, U+68b3, U+68b5, U+68d5, U+6a58, U+6b47, U+6b6a, U+6c28, U+6c90, U+6ca7, U+6cf5, U+6d51, U+6da9, U+6dc7, U+6dd1, U+6e0a, U+6e5b, U+6f47, U+6f6d, U+70ad, U+70f9, U+710a, U+7130, U+71ac, U+745f, U+7476, U+7490, U+7529, U+7538, U+75d2, U+7696, U+76b1, U+76fc, U+777f, U+77dc, U+789f, U+795b, U+79bd, U+79c9, U+7a3b, U+7a46, U+7aa5, U+7ad6, U+7ca5, U+7cb9, U+7cdf, U+7d6e, U+7f06, U+7f38, U+7fa1, U+7fc1, U+8015, U+803b, U+80a2, U+80aa, U+8116, U+813e, U+82ad, U+82bd, U+8305, U+8346, U+846c, U+8549, U+859b, U+8611, U+8680, U+87f9, U+884d, U+8877, U+888d, U+88d4, U+898b, U+8a79, U+8a93, U+8c05, U+8c0d, U+8c26, U+8d1e, U+8d31, U+8d81, U+8e22, U+8f90, U+8f96, U+90ca, U+916c, U+917f, U+9187, U+918b, U+9499, U+94a9, U+9524, U+958b, U+9600, U+9640, U+96b6, U+96ef, U+98d9, U+9976, U+997f, U+9a74, U+9a84, U+9c8d, U+9e26, U+9e9f, U+ad6d, U+c5b4, U+d55c, U+ff0f) ); /* noto-sans-sc-[106]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-106-400-normal.woff2", $range: (U+b0, U+2191, U+2460-2461, U+25c6, U+300e, U+4e1b, U+4e7e, U+4ed5, U+4ef2, U+4f10, U+4f1e, U+4f50, U+4fa6, U+4faf, U+5021, U+50f5, U+5179, U+5180, U+51d1, U+522e, U+52a3, U+52c3, U+52cb, U+5300, U+5319, U+5320, U+5349, U+5395, U+53d9, U+541e, U+5428, U+543e, U+54c0, U+54d2, U+570b, U+5858, U+58f6, U+5974, U+59a5, U+59e8, U+59ec, U+5a36, U+5a9a, U+5ab3, U+5b99, U+5baa, U+5ce1, U+5d14, U+5d4c, U+5dc5, U+5de2, U+5e99, U+5e9e, U+5f18, U+5f66, U+5f70, U+6070, U+60d5, U+60e7, U+6101, U+611a, U+6241, U+6252, U+626f, U+6296, U+62bc, U+62cc, U+63a9, U+644a, U+6454, U+64a9, U+64b8, U+6500, U+6572, U+65a5, U+65a9, U+65ec, U+660f, U+6749, U+6795, U+67ab, U+68da, U+6912, U+6bbf, U+6bef, U+6cab, U+6cca, U+6ccc, U+6cfc, U+6d3d, U+6d78, U+6dee, U+6e17, U+6e34, U+6e83, U+6ea2, U+6eb6, U+6f20, U+6fa1, U+707f, U+70d8, U+70eb, U+714c, U+714e, U+7235, U+7239, U+73ca, U+743c, U+745c, U+7624, U+763e, U+76f2, U+77db, U+77e9, U+780d, U+7838, U+7845, U+78ca, U+796d, U+7a84, U+7aed, U+7b3c, U+7eb2, U+7f05, U+7f20, U+7f34, U+7f62, U+7fc5, U+7fd8, U+7ff0, U+800d, U+8036, U+80ba, U+80be, U+80c0-80c1, U+8155, U+817a, U+8180, U+81e3, U+8206, U+8247, U+8270, U+8299, U+8304, U+8393, U+83b9, U+83ca, U+840d, U+8427, U+8469, U+8471, U+84c4, U+84ec, U+853d, U+8681-8682, U+8721, U+8854, U+88d5, U+88f9, U+8bc0, U+8c0a, U+8c29, U+8c2d, U+8d41, U+8dea, U+8eb2, U+8f9f, U+903b, U+903e, U+9102, U+9493, U+94a5, U+94f8, U+95ef, U+95f7, U+9706, U+9709, U+9774, U+9887, U+98a0, U+9e64, U+9f9f, U+e601, U+e603) ); /* noto-sans-sc-[107]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-107-400-normal.woff2", $range: (U+200b, U+2103, U+4e18, U+4e27-4e28, U+4e38, U+4e59, U+4e8f, U+4ead, U+4ec7, U+4fe9, U+503a, U+5085, U+5146, U+51af, U+51f8, U+52ab, U+5339, U+535c, U+5378, U+538c, U+5398, U+53f9, U+5415, U+5475, U+54aa, U+54ac, U+54b8, U+5582, U+5760, U+5764, U+57cb, U+5835, U+5885, U+5951, U+5983, U+59da, U+5a77, U+5b5d, U+5b5f, U+5bb5, U+5bc2, U+5be8, U+5bfa, U+5c2c, U+5c34, U+5c41, U+5c48, U+5c65, U+5cad, U+5e06, U+5e42, U+5ef7, U+5f17, U+5f25, U+5f6d, U+5f79, U+6028, U+6064, U+6068, U+606d, U+607c, U+6094, U+6109, U+6124, U+6247, U+626d, U+6291, U+629a, U+62ac, U+62b9, U+62fe, U+6324, U+6349, U+6367, U+6398, U+6495, U+64a4, U+64b0, U+64bc, U+64ce, U+658c, U+65ed, U+6602, U+6674, U+6691, U+66a8, U+674f, U+679a, U+67ef, U+67f4, U+680b, U+6876, U+68a8, U+6a59, U+6a61, U+6b20, U+6bc5, U+6d12, U+6d46, U+6d8c, U+6dc0, U+6e14, U+6e23, U+6f06, U+7164, U+716e, U+7199, U+71e5, U+72ac, U+742a, U+755c, U+75ab, U+75b2, U+75f4, U+7897, U+78b3, U+78c5, U+7978, U+79fd, U+7a74, U+7b4b, U+7b5b, U+7ece, U+7ed2, U+7ee3, U+7ef3, U+7f50, U+7f55, U+7f9e, U+7fe0, U+809d, U+8106, U+814a, U+8154, U+817b, U+818f, U+81c2, U+81ed, U+821f, U+82a6, U+82d1, U+8302, U+83c7, U+845b, U+848b, U+84c9, U+85e4, U+86ee, U+8700, U+8774, U+886c, U+8881, U+8c1c, U+8c79, U+8d2a, U+8d3c, U+8eba, U+8f70, U+8fa9, U+8fb1, U+900a, U+9017, U+901d, U+9022, U+906e, U+946b, U+94dd, U+94ed, U+953b, U+95fa, U+95fd, U+964c, U+96c0, U+971c, U+971e, U+9753, U+9756, U+97e6, U+9881, U+9b4f, U+9e2d, U+9f0e, U+e602, U+e604-e605, U+ff5c) ); /* noto-sans-sc-[108]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-108-400-normal.woff2", $range: (U+24, U+4e08, U+4e43, U+4e4f, U+4ef0, U+4f2a, U+507f, U+50ac, U+50bb, U+5151, U+51bb, U+51f6, U+51fd, U+5272, U+52fe, U+5362, U+53c9, U+53d4, U+53e0, U+543b, U+54f2, U+5507, U+5524, U+558a, U+55b5, U+561b, U+56ca, U+5782, U+57c3, U+5893, U+5915, U+5949, U+5962, U+59ae, U+59dc, U+59fb, U+5bd3, U+5c38, U+5cb3, U+5d07, U+5d29, U+5de1, U+5dfe, U+5e15, U+5eca, U+5f2f, U+5f7c, U+5fcc, U+6021, U+609f, U+60f9, U+6108, U+6148, U+6155, U+6170, U+61d2, U+6251, U+629b, U+62ab, U+62e8, U+62f3, U+6321, U+6350, U+6566, U+659c, U+65e8, U+6635, U+6655, U+6670, U+66f9, U+6734, U+679d, U+6851, U+6905, U+6b49, U+6b96, U+6c1b, U+6c41, U+6c6a, U+6c83, U+6cf3, U+6d9b, U+6dcb, U+6e1d, U+6e20-6e21, U+6eaa, U+6ee4, U+6ee9, U+6f58, U+70e4, U+722c, U+7262, U+7267, U+72b9, U+72e0, U+72ee, U+72f1, U+7334, U+73ab, U+7433, U+7470, U+758f, U+75d5, U+764c, U+7686, U+76c6, U+76fe, U+7720, U+77e2, U+7802, U+7816, U+788d, U+7891, U+7a00, U+7a9d, U+7b52, U+7bad, U+7c98, U+7cca, U+7eba, U+7eea, U+7ef5, U+7f1d, U+7f69, U+806a, U+809a, U+80bf, U+80c3, U+81c0, U+820c, U+82ac, U+82af, U+82cd, U+82d7, U+838e, U+839e, U+8404, U+84b8, U+852c, U+8587, U+85aa, U+8650, U+8679, U+86c7, U+8702, U+87ba, U+886b, U+8870, U+8c10, U+8c23, U+8c6b, U+8d3e, U+8d4b-8d4c, U+8d64, U+8d6b, U+8d74, U+8e29, U+8f69, U+8f74, U+8fb0, U+8fdf, U+901b, U+9038, U+9093, U+90aa, U+9171, U+9489, U+94ae, U+94c3, U+9508, U+9510, U+9601, U+9614, U+9675, U+97f5, U+9888, U+98d8, U+9971, U+9aa4, U+9e3f, U+9e45, U+9e4f, U+9e70, U+9f7f, U+e715) ); /* noto-sans-sc-[109]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-109-400-normal.woff2", $range: (U+a5, U+2022, U+2192, U+2605, U+4e11, U+4e22, U+4e32, U+4f0d, U+4f0f, U+4f69, U+4ff1, U+50b2, U+5154, U+51dd, U+51f0, U+5211, U+5269, U+533f, U+5366-5367, U+5389, U+5413, U+5440, U+5446, U+5561, U+574a, U+5751, U+57ab, U+5806, U+5821, U+582a, U+58f3, U+5938, U+5948, U+5978, U+59d1, U+5a03, U+5a07, U+5ac1, U+5acc, U+5ae9, U+5bb4, U+5bc4, U+5c3f, U+5e3d, U+5e7d, U+5f92, U+5faa, U+5fe0, U+5ffd, U+6016, U+60a0, U+60dc, U+60e8, U+614e, U+6212, U+6284, U+62c6, U+62d3-62d4, U+63f4, U+642c, U+6478, U+6491-6492, U+64e6, U+6591, U+65a4, U+664b, U+6735, U+6746, U+67f1, U+67f3, U+6842, U+68af, U+68c9, U+68cb, U+6a31, U+6b3a, U+6bc1, U+6c0f, U+6c27, U+6c57, U+6cc4, U+6ce5, U+6d2a, U+6d66, U+6d69, U+6daf, U+6e58, U+6ecb, U+6ef4, U+707e, U+7092, U+70ab, U+71d5, U+7275, U+7384, U+73b2, U+7434, U+74e6, U+74f7, U+75bc, U+76c8, U+76d0, U+7709, U+77ac, U+7855, U+78a7, U+78c1, U+7a77, U+7b79, U+7c92, U+7cae, U+7cd5, U+7ea4, U+7eb5, U+7ebd, U+7f5a, U+7fd4, U+7ffc, U+8083, U+8096, U+80a0, U+80d6, U+80de, U+8102, U+8109, U+810f, U+8179, U+8292, U+82b3, U+8352, U+8361, U+83cc, U+841d, U+8461, U+8482, U+8521, U+857e, U+866b, U+8776, U+8896, U+889c, U+88f8, U+8a9e, U+8bc8, U+8bf8, U+8c0b, U+8c28, U+8d2b, U+8d2f, U+8d37, U+8d3a, U+8d54, U+8dc3, U+8dcc, U+8df5, U+8e0f, U+8e48, U+8f86, U+8f88, U+8f9e, U+8fc1, U+8fc8, U+8feb, U+9065, U+90a6, U+90bb, U+90c1, U+94dc, U+9521, U+9676, U+96d5, U+970d, U+9897, U+997c, U+9a70, U+9a76, U+9a9a, U+9ad4, U+9e23, U+9e7f, U+9f3b, U+e675, U+e6b9, U+ffe5) ); /* noto-sans-sc-[110]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-110-400-normal.woff2", $range: (U+300c-300d, U+4e54, U+4e58, U+4e95, U+4ec1, U+4f2f, U+4f38, U+4fa3, U+4fca, U+503e, U+5141, U+5144, U+517c, U+51cc, U+51ed, U+5242, U+52b2, U+52d2, U+52e4, U+540a, U+5439, U+5448, U+5496, U+54ed, U+5565, U+5761, U+5766, U+58ee, U+593a, U+594b, U+594f, U+5954, U+5996, U+59c6, U+59ff, U+5b64, U+5bff, U+5c18, U+5c1d, U+5c97, U+5ca9, U+5cb8, U+5e9f, U+5ec9, U+5f04, U+5f7b, U+5fa1, U+5fcd, U+6012, U+60a6, U+60ac, U+60b2, U+60ef, U+626e, U+6270, U+6276, U+62d6, U+62dc, U+6316, U+632f, U+633a, U+6355, U+63aa, U+6447, U+649e, U+64c5, U+654c, U+65c1, U+65cb, U+65e6, U+6606, U+6731, U+675c, U+67cf, U+67dc, U+6846, U+6b8b, U+6beb, U+6c61, U+6c88, U+6cbf, U+6cdb, U+6cea, U+6d45, U+6d53, U+6d74, U+6d82, U+6da8, U+6db5, U+6deb, U+6eda, U+6ee8, U+6f0f, U+706d, U+708e, U+70ae, U+70bc, U+70c2, U+70e6, U+7237-7238, U+72fc, U+730e, U+731b, U+739b, U+73bb, U+7483, U+74dc, U+74f6, U+7586, U+7626, U+775b, U+77ff, U+788e, U+78b0, U+7956, U+7965, U+79e6, U+7af9, U+7bee, U+7c97, U+7eb1, U+7eb7, U+7ed1, U+7ed5, U+7f6a, U+7f72, U+7fbd, U+8017, U+808c, U+80a9, U+80c6, U+80ce, U+8150, U+8170, U+819c, U+820d, U+8230, U+8239, U+827e, U+8377, U+8389, U+83b2, U+8428, U+8463, U+867e, U+88c2, U+88d9, U+8986, U+8bca, U+8bde, U+8c13, U+8c8c, U+8d21, U+8d24, U+8d56, U+8d60, U+8d8b, U+8db4, U+8e2a, U+8f68, U+8f89, U+8f9b, U+8fa8, U+8fbd, U+9003, U+90ce, U+90ed, U+9189, U+94bb, U+9505, U+95f9, U+963b, U+9655, U+966a, U+9677, U+96fe, U+9896, U+99a8, U+9a71, U+9a82, U+9a91, U+9b45, U+9ece, U+9f20, U+feff, U+ff0d) ); /* noto-sans-sc-[111]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-111-400-normal.woff2", $range: (U+4e4c, U+4e88, U+4ea1, U+4ea6, U+4ed3-4ed4, U+4eff, U+4f30, U+4fa7, U+4fc4, U+4fd7, U+500d, U+504f, U+5076-5077, U+517d, U+5192, U+51c9, U+51ef, U+5238, U+5251, U+526a, U+52c7, U+52df, U+52ff, U+53a6, U+53a8, U+53ec, U+5410, U+559d, U+55b7, U+5634, U+573e, U+5783, U+585e, U+586b, U+58a8, U+5999, U+59d3, U+5a1c, U+5a46, U+5b54-5b55, U+5b85, U+5b8b, U+5b8f, U+5bbf, U+5bd2, U+5c16, U+5c24, U+5e05, U+5e45, U+5e7c, U+5e84, U+5f03, U+5f1f, U+5f31, U+5f84, U+5f90, U+5fbd, U+5fc6, U+5fd9, U+5fe7, U+6052, U+6062, U+6089, U+60a3, U+60d1, U+6167, U+622a, U+6234, U+624e, U+6269, U+626c, U+62b5, U+62d2, U+6325, U+63e1, U+643a, U+6446, U+6562, U+656c, U+65e2, U+65fa, U+660c, U+6628, U+6652, U+6668, U+6676, U+66fc, U+66ff, U+6717, U+676d, U+67aa, U+67d4, U+6843, U+6881, U+68d2, U+695a, U+69fd, U+6a2a, U+6b8a, U+6c60, U+6c64, U+6c9f, U+6caa, U+6cc9, U+6ce1, U+6cfd, U+6d1b, U+6d1e, U+6d6e, U+6de1, U+6e10, U+6e7f, U+6f5c, U+704c, U+7070, U+7089, U+70b8, U+718a, U+71c3, U+723d, U+732a, U+73cd, U+7518, U+756a, U+75af, U+75be, U+75c7, U+76d2, U+76d7, U+7763, U+78e8, U+795d, U+79df, U+7c4d, U+7d2f, U+7ee9, U+7f13, U+7f8a, U+8000, U+8010, U+80af, U+80f6, U+80f8, U+8212, U+8273, U+82f9, U+83ab, U+83b1, U+83f2, U+8584, U+871c, U+8861, U+888b, U+88c1, U+88e4, U+8bd1, U+8bf1, U+8c31, U+8d5a, U+8d75-8d76, U+8de8, U+8f85, U+8fa3, U+8fc5, U+9006, U+903c, U+904d, U+9075, U+9178, U+9274, U+950b, U+9526, U+95ea, U+9636, U+9686, U+978b, U+987f, U+9a7e, U+9b42, U+9e1f, U+9ea6, U+9f13, U+9f84, U+ff5e) ); /* noto-sans-sc-[112]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-112-400-normal.woff2", $range: (U+23, U+3d, U+4e01, U+4e39, U+4e73, U+4ecd, U+4ed9, U+4eea, U+4f0a, U+4f1f, U+4f5b, U+4fa0, U+4fc3, U+501f, U+50a8, U+515a, U+5175, U+51a0, U+51c0, U+51e1, U+51e4, U+5200, U+520a, U+5224, U+523a, U+52aa, U+52b1, U+52b3, U+5348, U+5353, U+5360, U+5371, U+5377, U+539a, U+541b, U+5434, U+547c, U+54e6, U+5510, U+5531, U+5609, U+56f0, U+56fa, U+5733, U+574f, U+5851, U+5854, U+5899, U+58c1, U+592e, U+5939, U+5976, U+5986, U+59bb, U+5a18, U+5a74, U+5b59, U+5b87, U+5b97, U+5ba0, U+5bab, U+5bbd-5bbe, U+5bf8, U+5c0a, U+5c3a, U+5c4a, U+5e16, U+5e1d, U+5e2d, U+5e8a, U+6015, U+602a, U+6050, U+6069, U+6162, U+61c2, U+6293, U+6297, U+62b1, U+62bd, U+62df, U+62fc, U+6302, U+635f, U+638c, U+63ed, U+6458, U+6469, U+6563, U+6620, U+6653, U+6696-6697, U+66dd, U+675f, U+676f-6770, U+67d0, U+67d3, U+684c, U+6865, U+6885, U+68b0, U+68ee, U+690d, U+6b23, U+6b32, U+6bd5, U+6c89, U+6d01, U+6d25, U+6d89, U+6da6, U+6db2, U+6df7, U+6ed1, U+6f02, U+70c8, U+70df, U+70e7, U+7126, U+7236, U+7259, U+731c, U+745e, U+74e3, U+751a, U+751c, U+7532, U+7545, U+75db, U+7761, U+7a0d, U+7b51, U+7ca4, U+7cd6, U+7d2b, U+7ea0, U+7eb9, U+7ed8, U+7f18, U+7f29, U+8033, U+804a, U+80a4-80a5, U+80e1, U+817f, U+829d, U+82e6, U+8336, U+840c, U+8499, U+864e, U+8651, U+865a, U+88ad, U+89e6, U+8bd7, U+8bfa, U+8c37, U+8d25, U+8d38, U+8ddd, U+8fea, U+9010, U+9012, U+906d, U+907f-9080, U+90d1, U+9177, U+91ca, U+94fa, U+9501, U+9634-9635, U+9694, U+9707, U+9738, U+9769, U+9a7b, U+9a97, U+9aa8, U+9b3c, U+9c81, U+9ed8) ); /* noto-sans-sc-[113]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-113-400-normal.woff2", $range: (U+26, U+3c, U+d7, U+4e4e, U+4e61, U+4e71, U+4ebf, U+4ee4, U+4f26, U+5012, U+51ac, U+51b0, U+51b2, U+51b7, U+5218, U+521a, U+5220, U+5237, U+523b, U+526f, U+5385, U+53bf, U+53e5, U+53eb, U+53f3, U+53f6, U+5409, U+5438, U+54c8, U+54e5, U+552f, U+5584, U+5706, U+5723, U+5750, U+575a, U+5987-5988, U+59b9, U+59d0, U+59d4, U+5b88, U+5b9c, U+5bdf, U+5bfb, U+5c01, U+5c04, U+5c3e, U+5c4b, U+5c4f, U+5c9b, U+5cf0, U+5ddd, U+5de6, U+5de8, U+5e01, U+5e78, U+5e7b, U+5e9c, U+5ead, U+5ef6, U+5f39, U+5fd8, U+6000, U+6025, U+604b, U+6076, U+613f, U+6258, U+6263, U+6267, U+6298, U+62a2, U+62e5, U+62ec, U+6311, U+6377, U+6388-6389, U+63a2, U+63d2, U+641e, U+642d, U+654f, U+6551, U+6597, U+65cf, U+65d7, U+65e7, U+6682, U+66f2, U+671d, U+672b, U+6751, U+6768, U+6811, U+6863, U+6982, U+6bd2, U+6cf0, U+6d0b, U+6d17, U+6d59, U+6dd8, U+6dfb, U+6e7e, U+6f6e, U+6fb3, U+706f, U+719f, U+72af, U+72d0, U+72d7, U+732b, U+732e, U+7389, U+73e0, U+7530, U+7687, U+76d6, U+76db, U+7840, U+786c, U+79cb, U+79d2, U+7a0e, U+7a33, U+7a3f, U+7a97, U+7ade-7adf, U+7b26, U+7e41, U+7ec3, U+7f3a, U+8089, U+80dc, U+811a, U+8131, U+8138, U+821e, U+8349, U+83dc, U+8457, U+867d, U+86cb, U+8a89, U+8ba8, U+8bad, U+8bef, U+8bfe, U+8c6a, U+8d1d, U+8d4f, U+8d62, U+8dd1, U+8df3, U+8f6e, U+8ff9, U+900f, U+9014, U+9057, U+9192, U+91ce, U+9488, U+94a2, U+9547, U+955c, U+95f2, U+9644, U+964d, U+96c4-96c5, U+96e8, U+96f6-96f7, U+9732, U+9759, U+9760, U+987a, U+989c, U+9910, U+996d-996e, U+9b54, U+9e21, U+9ebb, U+9f50) ); /* noto-sans-sc-[114]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-114-400-normal.woff2", $range: (U+7e, U+2026, U+4e03, U+4e25, U+4e30, U+4e34, U+4e45, U+4e5d, U+4e89, U+4eae, U+4ed8, U+4f11, U+4f19, U+4f24, U+4f34, U+4f59, U+4f73, U+4f9d, U+4fb5, U+5047, U+505c, U+5170, U+519c, U+51cf, U+5267, U+5356, U+5374, U+5382, U+538b, U+53e6, U+5426, U+542b, U+542f, U+5462, U+5473, U+554a, U+5566, U+5708, U+571f, U+5757, U+57df, U+57f9, U+5802, U+590f, U+591c, U+591f, U+592b, U+5965, U+5979, U+5a01, U+5a5a, U+5b69, U+5b81, U+5ba1, U+5ba3, U+5c3c, U+5c42, U+5c81, U+5de7, U+5dee, U+5e0c, U+5e10, U+5e55, U+5e86, U+5e8f, U+5ea7, U+5f02, U+5f52, U+5f81, U+5ff5, U+60ca, U+60e0, U+6279, U+62c5, U+62ff, U+63cf, U+6444, U+64cd, U+653b, U+65bd, U+65e9, U+665a, U+66b4, U+66fe, U+6728, U+6740, U+6742, U+677e, U+67b6, U+680f, U+68a6, U+68c0, U+699c, U+6b4c, U+6b66, U+6b7b, U+6bcd, U+6bdb, U+6c38, U+6c47, U+6c49, U+6cb3, U+6cb9, U+6ce2, U+6d32, U+6d3e, U+6d4f, U+6e56, U+6fc0, U+7075, U+7206, U+725b, U+72c2, U+73ed, U+7565, U+7591, U+7597, U+75c5, U+76ae, U+76d1, U+76df, U+7834, U+7968, U+7981, U+79c0, U+7a7f, U+7a81, U+7ae5, U+7b14, U+7c89, U+7d27, U+7eaf, U+7eb3, U+7eb8, U+7ec7, U+7ee7, U+7eff, U+7f57, U+7ffb, U+805a, U+80a1, U+822c, U+82cf, U+82e5, U+8363, U+836f, U+84dd, U+878d, U+8840, U+8857, U+8863, U+8865, U+8b66, U+8bb2, U+8bda, U+8c01, U+8c08, U+8c46, U+8d1f, U+8d35, U+8d5b, U+8d5e, U+8da3, U+8ddf, U+8f93, U+8fdd, U+8ff0, U+8ff7, U+8ffd, U+9000, U+9047, U+9152, U+949f, U+94c1, U+94f6, U+9646, U+9648, U+9669, U+969c, U+96ea, U+97e9, U+987b, U+987e, U+989d, U+9970, U+9986, U+9c7c, U+9c9c) ); /* noto-sans-sc-[115]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-115-400-normal.woff2", $range: (U+25, U+4e14, U+4e1d, U+4e3d, U+4e49, U+4e60, U+4e9a, U+4eb2, U+4ec5, U+4efd, U+4f3c, U+4f4f, U+4f8b, U+4fbf, U+5019, U+5145, U+514b, U+516b, U+516d, U+5174, U+5178, U+517b, U+5199, U+519b, U+51b3, U+51b5, U+5207, U+5212, U+5219, U+521d, U+52bf, U+533b, U+5343, U+5347, U+534a, U+536b, U+5370, U+53e4, U+53f2, U+5403, U+542c, U+547d, U+54a8, U+54cd, U+54ea, U+552e, U+56f4, U+5747, U+575b, U+5883, U+589e, U+5931, U+5947, U+5956-5957, U+5a92, U+5b63, U+5b83, U+5ba4, U+5bb3, U+5bcc, U+5c14, U+5c1a, U+5c3d, U+5c40, U+5c45, U+5c5e, U+5df4, U+5e72, U+5e95, U+5f80, U+5f85, U+5fb7, U+5fd7, U+601d, U+626b, U+627f, U+62c9, U+62cd, U+6309, U+63a7, U+6545, U+65ad, U+65af, U+65c5, U+666e, U+667a, U+670b, U+671b, U+674e, U+677f, U+6781, U+6790, U+6797, U+6821, U+6838-6839, U+697c, U+6b27, U+6b62, U+6bb5, U+6c7d, U+6c99, U+6d4e, U+6d6a, U+6e29, U+6e2f, U+6ee1, U+6f14, U+6f2b, U+72b6, U+72ec, U+7387, U+7533, U+753b, U+76ca, U+76d8, U+7701, U+773c, U+77ed, U+77f3, U+7814, U+793c, U+79bb, U+79c1, U+79d8, U+79ef, U+79fb, U+7a76, U+7b11, U+7b54, U+7b56, U+7b97, U+7bc7, U+7c73, U+7d20, U+7eaa, U+7ec8, U+7edd, U+7eed, U+7efc, U+7fa4, U+804c, U+8058, U+80cc, U+8111, U+817e, U+826f, U+8303, U+843d, U+89c9, U+89d2, U+8ba2, U+8bbf, U+8bc9, U+8bcd, U+8be6, U+8c22, U+8c61, U+8d22, U+8d26-8d27, U+8d8a, U+8f6f, U+8f7b, U+8f83, U+8f91, U+8fb9, U+8fd4, U+8fdc, U+9002, U+94b1, U+9519, U+95ed, U+961f, U+9632-9633, U+963f, U+968f-9690, U+96be, U+9876, U+9884, U+98de, U+9988, U+9999, U+9ec4, U+ff1b) ); /* noto-sans-sc-[116]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-116-400-normal.woff2", $range: (U+2b, U+40, U+3000, U+300a-300b, U+4e16, U+4e66, U+4e70, U+4e91-4e92, U+4e94, U+4e9b, U+4ec0, U+4eca, U+4f01, U+4f17-4f18, U+4f46, U+4f4e, U+4f9b, U+4fee, U+503c, U+5065, U+50cf, U+513f, U+5148, U+518d, U+51c6, U+51e0, U+5217, U+529e-529f, U+5341, U+534f, U+5361, U+5386, U+53c2, U+53c8, U+53cc, U+53d7-53d8, U+5404, U+5411, U+5417, U+5427, U+5468, U+559c, U+5668, U+56e0, U+56e2, U+56ed, U+5740, U+57fa, U+58eb, U+5904, U+592a, U+59cb, U+5a31, U+5b58, U+5b9d, U+5bc6, U+5c71, U+5dde, U+5df1, U+5e08, U+5e26, U+5e2e, U+5e93, U+5e97, U+5eb7, U+5f15, U+5f20, U+5f3a, U+5f62, U+5f69, U+5f88, U+5f8b, U+5fc5, U+600e, U+620f, U+6218, U+623f, U+627e, U+628a, U+62a4, U+62db, U+62e9, U+6307, U+6362, U+636e, U+64ad, U+6539, U+653f, U+6548, U+6574, U+6613, U+6625, U+663e, U+666f, U+672a, U+6750, U+6784, U+6a21, U+6b3e, U+6b65, U+6bcf, U+6c11, U+6c5f, U+6d4b, U+6df1, U+706b, U+7167, U+724c, U+738b, U+73a9, U+73af, U+7403, U+7537, U+754c, U+7559, U+767d, U+7740, U+786e, U+795e, U+798f, U+79f0, U+7aef, U+7b7e, U+7bb1, U+7ea2, U+7ea6, U+7ec4, U+7ec6, U+7ecd, U+7edc, U+7ef4, U+8003, U+80b2, U+81f3-81f4, U+822a, U+827a, U+82f1, U+83b7, U+8425, U+89c2, U+89c8, U+8ba9, U+8bb8, U+8bc6, U+8bd5, U+8be2, U+8be5, U+8bed, U+8c03, U+8d23, U+8d2d, U+8d34, U+8d70, U+8db3, U+8fbe, U+8fce, U+8fd1, U+8fde, U+9001, U+901f-9020, U+90a3, U+914d, U+91c7, U+94fe, U+9500, U+952e, U+9605, U+9645, U+9662, U+9664, U+9700, U+9752, U+975e, U+97f3, U+9879, U+9886, U+98df, U+9a6c, U+9a8c, U+9ed1, U+9f99) ); /* noto-sans-sc-[117]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-117-400-normal.woff2", $range: (U+4e, U+201c-201d, U+3010-3011, U+4e07, U+4e1c, U+4e24, U+4e3e, U+4e48, U+4e50, U+4e5f, U+4e8b-4e8c, U+4ea4, U+4eab-4eac, U+4ecb, U+4ece, U+4ed6, U+4ee3, U+4ef6-4ef7, U+4efb, U+4f20, U+4f55, U+4f7f, U+4fdd, U+505a, U+5143, U+5149, U+514d, U+5171, U+5177, U+518c, U+51fb, U+521b, U+5229, U+522b, U+52a9, U+5305, U+5317, U+534e, U+5355, U+5357, U+535a, U+5373, U+539f, U+53bb, U+53ca, U+53cd, U+53d6, U+53e3, U+53ea, U+53f0, U+5458, U+5546, U+56db, U+573a, U+578b, U+57ce, U+58f0, U+590d, U+5934, U+5973, U+5b57, U+5b8c, U+5b98, U+5bb9, U+5bfc, U+5c06, U+5c11, U+5c31, U+5c55, U+5df2, U+5e03, U+5e76, U+5e94, U+5efa, U+5f71, U+5f97, U+5feb, U+6001, U+603b, U+60f3, U+611f, U+6216, U+624d, U+6253, U+6295, U+6301, U+6392, U+641c, U+652f, U+653e, U+6559, U+6599, U+661f, U+671f, U+672f, U+6761, U+67e5, U+6807, U+6837, U+683c, U+6848, U+6b22, U+6b64, U+6bd4, U+6c14, U+6c34, U+6c42, U+6ca1, U+6d41, U+6d77, U+6d88, U+6e05, U+6e38, U+6e90, U+7136, U+7231, U+7531, U+767e, U+76ee, U+76f4, U+771f, U+7801, U+793a, U+79cd, U+7a0b, U+7a7a, U+7acb, U+7ae0, U+7b2c, U+7b80, U+7ba1, U+7cbe, U+7d22, U+7ea7, U+7ed3, U+7ed9, U+7edf, U+7f16, U+7f6e, U+8001, U+800c, U+8272, U+8282, U+82b1, U+8350, U+88ab, U+88c5, U+897f, U+89c1, U+89c4, U+89e3, U+8a00, U+8ba1, U+8ba4, U+8bae-8bb0, U+8bbe, U+8bc1, U+8bc4, U+8bfb, U+8d28, U+8d39, U+8d77, U+8d85, U+8def, U+8eab, U+8f66, U+8f6c, U+8f7d, U+8fd0, U+9009, U+90ae, U+90fd, U+91cc-91cd, U+91cf, U+95fb, U+9650, U+96c6, U+9891, U+98ce, U+ff1f) ); /* noto-sans-sc-[118]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-118-400-normal.woff2", $range: (U+d, U+3e, U+5f, U+7c, U+a0, U+a9, U+4e09-4e0b, U+4e0d-4e0e, U+4e13, U+4e1a, U+4e2a, U+4e3a-4e3b, U+4e4b, U+4e86, U+4e8e, U+4ea7, U+4eba, U+4ee5, U+4eec, U+4f1a, U+4f4d, U+4f53, U+4f5c, U+4f60, U+4fe1, U+5165, U+5168, U+516c, U+5173, U+5176, U+5185, U+51fa, U+5206, U+5230, U+5236, U+524d, U+529b, U+52a0-52a1, U+52a8, U+5316, U+533a, U+53cb, U+53d1, U+53ef, U+53f7-53f8, U+5408, U+540c-540e, U+544a, U+548c, U+54c1, U+56de, U+56fd-56fe, U+5728, U+5730, U+5907, U+5916, U+591a, U+5927, U+5929, U+597d, U+5982, U+5b50, U+5b66, U+5b89, U+5b9a, U+5b9e, U+5ba2, U+5bb6, U+5bf9, U+5c0f, U+5de5, U+5e02, U+5e38, U+5e73-5e74, U+5e7f, U+5ea6, U+5f00, U+5f0f, U+5f53, U+5f55, U+5fae, U+5fc3, U+6027, U+606f, U+60a8, U+60c5, U+610f, U+6210-6211, U+6237, U+6240, U+624b, U+6280, U+62a5, U+63a5, U+63a8, U+63d0, U+6536, U+6570, U+6587, U+65b9, U+65e0, U+65f6, U+660e, U+662d, U+662f, U+66f4, U+6700, U+670d, U+672c, U+673a, U+6743, U+6765, U+679c, U+682a, U+6b21, U+6b63, U+6cbb, U+6cd5, U+6ce8, U+6d3b, U+70ed, U+7247-7248, U+7269, U+7279, U+73b0, U+7406, U+751f, U+7528, U+7535, U+767b, U+76f8, U+770b, U+77e5, U+793e, U+79d1, U+7ad9, U+7b49, U+7c7b, U+7cfb, U+7ebf, U+7ecf, U+7f8e, U+8005, U+8054, U+80fd, U+81ea, U+85cf, U+884c, U+8868, U+8981, U+89c6, U+8bba, U+8bdd, U+8bf4, U+8bf7, U+8d44, U+8fc7, U+8fd8-8fd9, U+8fdb, U+901a, U+9053, U+90e8, U+91d1, U+957f, U+95e8, U+95ee, U+95f4, U+9762, U+9875, U+9898, U+9996, U+9ad8, U+ff01, U+ff08-ff09) ); /* noto-sans-sc-[119]-400-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-119-400-normal.woff2", $range: (U+20-22, U+27-2a, U+2c-3b, U+3f, U+41-4d, U+4f-5d, U+61-7b, U+7d, U+ab, U+ae, U+b2, U+b7, U+bb, U+df-e5, U+e7-ea, U+ec-ed, U+f1-f4, U+f6, U+f9-fa, U+fc, U+101, U+103, U+113, U+12b, U+148, U+14d, U+16b, U+1ce, U+1d0, U+300-301, U+1ebf, U+1ec7, U+2013-2014, U+2039-203a, U+2122, U+3001-3002, U+3042, U+3044, U+3046, U+3048, U+304a-3055, U+3057, U+3059-305b, U+305d, U+305f-3061, U+3063-306b, U+306d-3073, U+3075-3076, U+3078-3079, U+307b, U+307e-307f, U+3081-308d, U+308f, U+3092-3093, U+30a1-30a4, U+30a6-30bb, U+30bd, U+30bf-30c1, U+30c3-30c4, U+30c6-30cb, U+30cd-30d7, U+30d9-30e1, U+30e3-30e7, U+30e9-30ed, U+30ef, U+30f3, U+30fb-30fc, U+4e00, U+4e2d, U+65b0, U+65e5, U+6708-6709, U+70b9, U+7684, U+7f51, U+ff0c, U+ff0e, U+ff1a) diff --git a/src/styles/noto-sans/sc-700-normal.scss b/src/styles/noto-sans/sc-700-normal.scss index 0958183dda..b6a822a234 100644 --- a/src/styles/noto-sans/sc-700-normal.scss +++ b/src/styles/noto-sans/sc-700-normal.scss @@ -1,7 +1,9 @@ +@use "../font"; + $scFamily: "Noto Sans SC"; /* noto-sans-sc-[4]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-4-700-normal.woff2", @@ -9,7 +11,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[5]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-5-700-normal.woff2", @@ -17,7 +19,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[6]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-6-700-normal.woff2", @@ -25,7 +27,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[21]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-21-700-normal.woff2", @@ -33,7 +35,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[22]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-22-700-normal.woff2", @@ -41,7 +43,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[23]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-23-700-normal.woff2", @@ -49,7 +51,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[24]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-24-700-normal.woff2", @@ -57,7 +59,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[25]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-25-700-normal.woff2", @@ -65,7 +67,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[26]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-26-700-normal.woff2", @@ -73,7 +75,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[27]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-27-700-normal.woff2", @@ -81,7 +83,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[28]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-28-700-normal.woff2", @@ -89,7 +91,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[29]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-29-700-normal.woff2", @@ -97,7 +99,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[30]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-30-700-normal.woff2", @@ -105,7 +107,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[31]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-31-700-normal.woff2", @@ -113,7 +115,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[32]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-32-700-normal.woff2", @@ -121,7 +123,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[33]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-33-700-normal.woff2", @@ -129,7 +131,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[34]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-34-700-normal.woff2", @@ -137,7 +139,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[35]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-35-700-normal.woff2", @@ -145,7 +147,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[36]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-36-700-normal.woff2", @@ -153,7 +155,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[37]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-37-700-normal.woff2", @@ -161,7 +163,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[38]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-38-700-normal.woff2", @@ -169,7 +171,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[39]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-39-700-normal.woff2", @@ -177,7 +179,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[40]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-40-700-normal.woff2", @@ -185,7 +187,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[41]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-41-700-normal.woff2", @@ -193,7 +195,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[42]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-42-700-normal.woff2", @@ -201,7 +203,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[43]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-43-700-normal.woff2", @@ -209,7 +211,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[44]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-44-700-normal.woff2", @@ -217,7 +219,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[45]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-45-700-normal.woff2", @@ -225,7 +227,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[46]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-46-700-normal.woff2", @@ -233,7 +235,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[47]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-47-700-normal.woff2", @@ -241,7 +243,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[48]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-48-700-normal.woff2", @@ -249,7 +251,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[49]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-49-700-normal.woff2", @@ -257,7 +259,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[50]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-50-700-normal.woff2", @@ -265,7 +267,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[51]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-51-700-normal.woff2", @@ -273,7 +275,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[52]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-52-700-normal.woff2", @@ -281,7 +283,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[53]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-53-700-normal.woff2", @@ -289,7 +291,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[54]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-54-700-normal.woff2", @@ -297,7 +299,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[55]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-55-700-normal.woff2", @@ -305,7 +307,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[56]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-56-700-normal.woff2", @@ -313,7 +315,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[57]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-57-700-normal.woff2", @@ -321,7 +323,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[58]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-58-700-normal.woff2", @@ -329,7 +331,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[59]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-59-700-normal.woff2", @@ -337,7 +339,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[60]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-60-700-normal.woff2", @@ -345,7 +347,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[61]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-61-700-normal.woff2", @@ -353,7 +355,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[62]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-62-700-normal.woff2", @@ -361,7 +363,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[63]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-63-700-normal.woff2", @@ -369,7 +371,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[64]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-64-700-normal.woff2", @@ -377,7 +379,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[65]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-65-700-normal.woff2", @@ -385,7 +387,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[66]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-66-700-normal.woff2", @@ -393,7 +395,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[67]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-67-700-normal.woff2", @@ -401,7 +403,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[68]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-68-700-normal.woff2", @@ -409,7 +411,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[69]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-69-700-normal.woff2", @@ -417,7 +419,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[70]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-70-700-normal.woff2", @@ -425,7 +427,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[71]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-71-700-normal.woff2", @@ -433,7 +435,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[72]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-72-700-normal.woff2", @@ -441,7 +443,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[73]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-73-700-normal.woff2", @@ -449,7 +451,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[74]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-74-700-normal.woff2", @@ -457,7 +459,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[75]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-75-700-normal.woff2", @@ -465,7 +467,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[76]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-76-700-normal.woff2", @@ -473,7 +475,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[77]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-77-700-normal.woff2", @@ -481,7 +483,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[78]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-78-700-normal.woff2", @@ -489,7 +491,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[79]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-79-700-normal.woff2", @@ -497,7 +499,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[80]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-80-700-normal.woff2", @@ -505,7 +507,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[81]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-81-700-normal.woff2", @@ -513,7 +515,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[82]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-82-700-normal.woff2", @@ -521,7 +523,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[83]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-83-700-normal.woff2", @@ -529,7 +531,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[84]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-84-700-normal.woff2", @@ -537,7 +539,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[85]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-85-700-normal.woff2", @@ -545,7 +547,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[86]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-86-700-normal.woff2", @@ -553,7 +555,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[87]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-87-700-normal.woff2", @@ -561,7 +563,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[88]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-88-700-normal.woff2", @@ -569,7 +571,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[89]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-89-700-normal.woff2", @@ -577,7 +579,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[90]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-90-700-normal.woff2", @@ -585,7 +587,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[91]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-91-700-normal.woff2", @@ -593,7 +595,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[97]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-97-700-normal.woff2", @@ -601,7 +603,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[98]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-98-700-normal.woff2", @@ -609,7 +611,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[99]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-99-700-normal.woff2", @@ -617,7 +619,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[100]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-100-700-normal.woff2", @@ -625,7 +627,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[101]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-101-700-normal.woff2", @@ -633,7 +635,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[102]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-102-700-normal.woff2", @@ -641,7 +643,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[103]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-103-700-normal.woff2", @@ -649,7 +651,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[104]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-104-700-normal.woff2", @@ -657,7 +659,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[105]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-105-700-normal.woff2", @@ -665,7 +667,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[106]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-106-700-normal.woff2", @@ -673,7 +675,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[107]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-107-700-normal.woff2", @@ -681,7 +683,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[108]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-108-700-normal.woff2", @@ -689,7 +691,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[109]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-109-700-normal.woff2", @@ -697,7 +699,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[110]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-110-700-normal.woff2", @@ -705,7 +707,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[111]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-111-700-normal.woff2", @@ -713,7 +715,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[112]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-112-700-normal.woff2", @@ -721,7 +723,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[113]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-113-700-normal.woff2", @@ -729,7 +731,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[114]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-114-700-normal.woff2", @@ -737,7 +739,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[115]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-115-700-normal.woff2", @@ -745,7 +747,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[116]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-116-700-normal.woff2", @@ -753,7 +755,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[117]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-117-700-normal.woff2", @@ -761,7 +763,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[118]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-118-700-normal.woff2", @@ -769,7 +771,7 @@ $scFamily: "Noto Sans SC"; ); /* noto-sans-sc-[119]-700-normal */ -@include fontFace( +@include font.face( $family: $scFamily, $weight: 700, $url: "~@fontsource/noto-sans-sc/files/noto-sans-sc-119-700-normal.woff2", diff --git a/src/styles/noto-sans/tc-400-normal.scss b/src/styles/noto-sans/tc-400-normal.scss index 5d1e9e76db..25f118adb3 100644 --- a/src/styles/noto-sans/tc-400-normal.scss +++ b/src/styles/noto-sans/tc-400-normal.scss @@ -1,707 +1,709 @@ +@use "../font"; + $tcFamily: "Noto Sans TC"; /* noto-sans-tc-[0]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-0-400-normal.woff2", $range: (U+1f921-1f930, U+1f932-1f935, U+1f937-1f939, U+1f940-1f944, U+1f947-1f94a, U+1f950-1f95f, U+1f962-1f967, U+1f969-1f96a, U+1f980-1f981, U+1f984-1f98d, U+1f990-1f992, U+1f994-1f996, U+1f9c0, U+1f9d0, U+1f9d2, U+1f9d4, U+1f9d6, U+1f9d8, U+1f9da, U+1f9dc-1f9dd, U+1f9df-1f9e2, U+1f9e5-1f9e6, U+20024, U+20487, U+20779, U+20c41, U+20c78, U+20d71, U+20e98, U+20ef9, U+2107b, U+210c1, U+22c51, U+233b4, U+24a12, U+2512b, U+2546e, U+25683, U+267cc, U+269f2, U+27657, U+282e2, U+2898d, U+29d5a, U+f0001-f0005, U+f0019, U+f009b, U+f0101-f0104, U+f012b, U+f01ba, U+f01d6, U+f0209, U+f0217, U+f0223-f0224, U+fc355, U+fe327, U+fe517, U+feb97, U+fffb4) ); /* noto-sans-tc-[6]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-6-400-normal.woff2", $range: (U+ff78-ff7e, U+ff80-ff86, U+ff89-ff94, U+ff97-ff9e, U+ffb9, U+ffe0-ffe3, U+ffe9, U+ffeb, U+ffed, U+fffc, U+1d7c7, U+1f004, U+1f0cf, U+1f141-1f142, U+1f150, U+1f154, U+1f158, U+1f15b, U+1f15d-1f15e, U+1f162-1f163, U+1f170-1f171, U+1f174, U+1f177-1f178, U+1f17d-1f17f, U+1f192-1f195, U+1f197-1f19a, U+1f1e6-1f1f5, U+1f1f7-1f1ff, U+1f21a, U+1f22f, U+1f232-1f237, U+1f239-1f23a, U+1f250-1f251, U+1f300, U+1f302-1f319) ); /* noto-sans-tc-[7]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-7-400-normal.woff2", $range: (U+fa0a, U+fa0c, U+fa11, U+fa17, U+fa19, U+fa1b, U+fa1d, U+fa26, U+fa2c, U+fb01, U+fdfc, U+fe0e, U+fe33-fe36, U+fe38-fe44, U+fe49-fe51, U+fe54, U+fe56-fe57, U+fe59-fe5c, U+fe5f-fe6a, U+fe8e, U+fe92-fe93, U+feae, U+fecb-fecc, U+fee0, U+feec, U+fef3, U+ff04, U+ff07, U+ff26-ff2c, U+ff31-ff32, U+ff35-ff37, U+ff39-ff3a, U+ff3c, U+ff3e-ff5b, U+ff5d, U+ff61-ff65, U+ff67-ff68, U+ff6a, U+ff6c-ff77) ); /* noto-sans-tc-[8]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-8-400-normal.woff2", $range: (U+f78a-f78c, U+f78e, U+f792-f796, U+f798, U+f79c, U+f7f5, U+f812, U+f815, U+f876, U+f8f5, U+f8f8, U+f8ff, U+f901-f902, U+f904, U+f906, U+f909-f90a, U+f90f, U+f914, U+f918-f919, U+f91b, U+f91d, U+f91f, U+f923, U+f925, U+f92d-f92f, U+f934, U+f937-f938, U+f93d, U+f93f, U+f941, U+f949, U+f94c, U+f94e-f94f, U+f95a, U+f95d-f95e, U+f961-f963, U+f965-f970, U+f974, U+f976-f97a, U+f97c, U+f97e-f97f, U+f981, U+f983, U+f988, U+f98a, U+f98c, U+f98e, U+f996-f997, U+f999-f99a, U+f99c, U+f99f-f9a0, U+f9a3, U+f9a8, U+f9ad, U+f9b2-f9b6, U+f9b9-f9ba, U+f9bd-f9be, U+f9c1, U+f9c4, U+f9c7, U+f9ca, U+f9cd, U+f9d0-f9d1, U+f9d3-f9d4, U+f9d7-f9d8, U+f9dc-f9dd, U+f9df-f9e1, U+f9e4, U+f9e8-f9ea, U+f9f4, U+f9f6-f9f7, U+f9f9-f9fa, U+f9fc-fa01, U+fa03-fa04, U+fa06, U+fa08-fa09) ); /* noto-sans-tc-[19]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-19-400-normal.woff2", $range: (U+9eb9-9eba, U+9ebe-9ebf, U+9ecc-9ecd, U+9ed0, U+9ed2, U+9ed4, U+9ed9-9eda, U+9edc-9edd, U+9edf-9ee0, U+9ee2, U+9ee5, U+9ee7, U+9eee, U+9ef3-9ef4, U+9ef6-9ef7, U+9ef9, U+9efb-9efd, U+9eff, U+9f07-9f09, U+9f10, U+9f14-9f15, U+9f19, U+9f22, U+9f29, U+9f2c, U+9f2f, U+9f31, U+9f34, U+9f37, U+9f39, U+9f3d-9f3e, U+9f41, U+9f4c-9f50, U+9f54, U+9f57, U+9f59, U+9f5c, U+9f5f-9f60, U+9f62-9f63, U+9f66-9f67, U+9f6a, U+9f6c, U+9f72, U+9f76-9f77, U+9f7f, U+9f84-9f85, U+9f88, U+9f8e, U+9f91, U+9f94-9f96, U+9f98, U+9f9a-9f9b, U+9f9f-9fa0, U+9fa2, U+9fa4, U+a1f4, U+a4b0-a4b1, U+a4b3, U+a9c1-a9c2, U+aa31, U+ab34, U+ac00-ac01, U+ac04, U+ac08, U+ac10-ac11, U+ac13-ac16, U+ac19, U+ac1c-ac1d, U+ac24, U+ac70-ac71, U+ac74, U+ac77-ac78, U+ac80-ac81, U+ac83, U+ac8c, U+ac90, U+aca0, U+aca8-aca9, U+acac, U+acb0, U+acb8-acb9, U+acbc-acbd, U+acc1, U+acc4, U+ace0-ace1, U+ace4, U+ace8, U+acf0-acf1, U+acf3, U+acf5, U+acfc) ); /* noto-sans-tc-[20]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-20-400-normal.woff2", $range: (U+9d34, U+9d37, U+9d3d, U+9d42, U+9d50, U+9d52-9d53, U+9d59, U+9d5c, U+9d5e-9d61, U+9d6a, U+9d6f-9d70, U+9d77, U+9d7a, U+9d7e, U+9d87, U+9d89, U+9d8f, U+9d91-9d93, U+9d96, U+9d98, U+9d9a, U+9da1-9da2, U+9da5, U+9da9, U+9dab-9dac, U+9db1-9db2, U+9db5, U+9db9-9dbc, U+9dbf-9dc2, U+9dc4, U+9dc7-9dc9, U+9dd3, U+9dd6, U+9dd9-9dda, U+9dde-9ddf, U+9de2, U+9de5-9de6, U+9de8, U+9def-9df0, U+9df2-9df4, U+9df8, U+9dfa, U+9dfd, U+9dff, U+9e02, U+9e07, U+9e0a, U+9e11, U+9e15, U+9e18, U+9e1a-9e1b, U+9e1d-9e1e, U+9e20-9e23, U+9e25-9e26, U+9e2d, U+9e2f, U+9e33, U+9e35, U+9e3d-9e3f, U+9e42-9e43, U+9e45, U+9e48-9e4a, U+9e4c, U+9e4f, U+9e51, U+9e55, U+9e64, U+9e66, U+9e6b, U+9e6d-9e6e, U+9e70, U+9e73, U+9e75, U+9e78, U+9e80-9e83, U+9e87-9e88, U+9e8b-9e8c, U+9e90-9e91, U+9e93, U+9e96, U+9e9d, U+9ea1, U+9ea4, U+9ea6, U+9ea9-9eab, U+9ead, U+9eaf, U+9eb4, U+9eb7-9eb8) ); /* noto-sans-tc-[21]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-21-400-normal.woff2", $range: (U+9bd3-9bd7, U+9bd9, U+9bdb, U+9bdd, U+9be1-9be2, U+9be4-9be5, U+9be7, U+9bea, U+9bed-9bee, U+9bf0-9bf1, U+9bf5, U+9bf7, U+9bf9, U+9bfd, U+9bff, U+9c02, U+9c06, U+9c08-9c0a, U+9c0d, U+9c10, U+9c12-9c13, U+9c15, U+9c1c, U+9c1f, U+9c21, U+9c23-9c25, U+9c28-9c29, U+9c2d-9c2e, U+9c31-9c33, U+9c35-9c37, U+9c39-9c3b, U+9c3d-9c3e, U+9c40, U+9c42, U+9c45-9c49, U+9c52, U+9c54, U+9c56, U+9c58-9c5a, U+9c5d, U+9c5f-9c60, U+9c63, U+9c67-9c68, U+9c72, U+9c75, U+9c78, U+9c7a-9c7c, U+9c7f-9c81, U+9c87-9c88, U+9c8d, U+9c91, U+9c94, U+9c97, U+9c9b, U+9ca4, U+9ca8, U+9cab, U+9cad, U+9cb1-9cb3, U+9cb6-9cb8, U+9cc4-9cc5, U+9ccc-9ccd, U+9cd5-9cd7, U+9cdd-9cdf, U+9ce7, U+9ce9, U+9cee-9cf0, U+9cf2, U+9cfc-9cfe, U+9d03, U+9d06-9d08, U+9d0e, U+9d10, U+9d12, U+9d15, U+9d17, U+9d1d-9d1f, U+9d23, U+9d2b, U+9d2f-9d30) ); /* noto-sans-tc-[22]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-22-400-normal.woff2", $range: (U+9a6f-9a71, U+9a73-9a74, U+9a76, U+9a78-9a79, U+9a7b-9a7c, U+9a7e-9a7f, U+9a81-9a82, U+9a84-9a87, U+9a8a-9a8b, U+9a8f-9a91, U+9a97, U+9a9a, U+9a9e, U+9aa0-9aa1, U+9aa4-9aa5, U+9aaf-9ab1, U+9ab6, U+9ab9-9aba, U+9abe, U+9ac0-9ac5, U+9ac8, U+9acb-9acc, U+9ace-9acf, U+9ad1, U+9ad5-9ad7, U+9ad9, U+9adf, U+9ae1, U+9ae3, U+9aea-9aeb, U+9aed, U+9aef, U+9af2, U+9af4, U+9af9, U+9afb, U+9afd, U+9b03-9b04, U+9b08, U+9b13, U+9b18, U+9b1f, U+9b22-9b23, U+9b28-9b2a, U+9b2c-9b30, U+9b32, U+9b3b, U+9b43, U+9b46-9b49, U+9b4b-9b4e, U+9b51, U+9b55, U+9b58, U+9b5b, U+9b5e-9b60, U+9b63, U+9b68-9b69, U+9b74, U+9b7d, U+9b80-9b81, U+9b83-9b84, U+9b87-9b88, U+9b8a-9b8b, U+9b8d-9b8e, U+9b90, U+9b92-9b95, U+9b97, U+9b9f-9ba0, U+9ba2-9ba3, U+9ba8, U+9bab, U+9bb0, U+9bb8, U+9bc0-9bc1, U+9bc3, U+9bc6-9bc8) ); /* noto-sans-tc-[23]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-23-400-normal.woff2", $range: (U+9912, U+9914, U+9916-9917, U+991b-991c, U+991e, U+9920, U+9927, U+992b-992c, U+992e, U+9931-9933, U+9938, U+993a, U+993c-9940, U+9943-9944, U+9948-994a, U+994c-994e, U+9951, U+9954, U+995c, U+995e-995f, U+9961-9962, U+9965, U+9968, U+996a, U+996d-9972, U+9975-9976, U+997a, U+997c, U+997f-9980, U+9984-9985, U+9988, U+998b, U+998d, U+998f, U+9992, U+9994-9995, U+9997-9998, U+999c, U+999e, U+99a0-99a1, U+99ab, U+99af, U+99b1, U+99b4, U+99b9, U+99c4-99c6, U+99cf, U+99d1-99d2, U+99d4, U+99d6, U+99d8-99d9, U+99df, U+99e1-99e2, U+99e9, U+99ee, U+99f0, U+99f8, U+99fb, U+9a01-9a05, U+9a0c, U+9a0f-9a13, U+9a16, U+9a1b-9a1c, U+9a20, U+9a24, U+9a28, U+9a2b, U+9a2d-9a2e, U+9a34-9a36, U+9a38, U+9a3e, U+9a40-9a44, U+9a4a, U+9a4c-9a4e, U+9a52, U+9a56, U+9a62-9a65, U+9a69-9a6b, U+9a6d) ); /* noto-sans-tc-[24]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-24-400-normal.woff2", $range: (U+97c6, U+97c9, U+97cd, U+97d6, U+97d8-97d9, U+97dc-97de, U+97e1, U+97e6-97e7, U+97ec-97ee, U+97f0-97f1, U+97f5, U+97f9-97fa, U+97fe, U+9804, U+9807, U+980a, U+980e-980f, U+9814, U+9816, U+981a, U+981c, U+981e, U+9820-9821, U+9823, U+9826, U+9828, U+982a-982c, U+9832, U+9834-9835, U+9837, U+9839, U+983c-983d, U+9845, U+9848-9849, U+984e, U+9852-9857, U+9859-985a, U+9862-9863, U+9865, U+9870-9871, U+9873-9874, U+9877, U+987a-987f, U+9881-9882, U+9885, U+9887-988a, U+988c-988d, U+9890, U+9893, U+9896-9897, U+989a, U+989c-989e, U+98a0, U+98a4, U+98a6-98a7, U+98a9, U+98ae-98af, U+98b2-98b3, U+98b6-98b8, U+98ba-98bd, U+98bf, U+98c7-98c8, U+98ca, U+98d2-98d3, U+98d8-98da, U+98dc, U+98de, U+98e0-98e1, U+98e3, U+98e5, U+98e7-98e9, U+98eb-98ee, U+98f1, U+98f4, U+9901, U+9908-9909, U+990c, U+9911) ); /* noto-sans-tc-[25]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-25-400-normal.woff2", $range: (U+964e-964f, U+9651, U+9653-9655, U+9658, U+965b-965f, U+9661, U+9665, U+9668-9669, U+966c, U+9672, U+9674, U+967a, U+9682-9685, U+9688-9689, U+968b, U+968d, U+9695, U+9697-9698, U+969e, U+96a0-96a4, U+96a9, U+96ac, U+96ae, U+96b0, U+96b2-96b4, U+96b6-96b7, U+96b9, U+96bc-96be, U+96c3, U+96c9-96cb, U+96ce-96cf, U+96d1-96d2, U+96d8, U+96dd, U+96e9, U+96eb, U+96f0-96f1, U+96f3-96f4, U+96f9, U+96fe-96ff, U+9701-9702, U+9705, U+9708, U+970a, U+970e-9711, U+9719, U+971d, U+971f-9720, U+9728, U+972a, U+972d, U+9730, U+9733, U+973a, U+973d, U+9744, U+9746-9747, U+9749, U+9750-9751, U+9753, U+9758-9759, U+975b, U+975d, U+9763, U+9765-9766, U+9768, U+976c-976d, U+9771, U+9773, U+9776, U+977a, U+977c, U+9780, U+9784-9786, U+9788, U+978e-978f, U+9798, U+979d-979e, U+97a3, U+97a5-97a6, U+97a8, U+97ab-97ac, U+97ae, U+97b6-97b7, U+97b9, U+97bf, U+97c1, U+97c3) ); /* noto-sans-tc-[26]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-26-400-normal.woff2", $range: (U+950c, U+950f-9510, U+9519-951b, U+951d, U+951f, U+9521-9526, U+952d-9530, U+9535, U+953a-953b, U+9540-9542, U+9547, U+9549-954a, U+954d, U+9550-9551, U+9554-9556, U+955c, U+956c-956d, U+956f-9570, U+9573, U+9576, U+9578, U+9582, U+9586, U+9588, U+958e-958f, U+9599, U+959c, U+959e-959f, U+95a1-95a2, U+95a4, U+95a6-95a7, U+95aa-95ae, U+95b0, U+95b2, U+95b6, U+95b9-95bf, U+95c2-95c4, U+95c7-95c9, U+95cb-95cd, U+95d0, U+95d3-95d5, U+95d7-95d8, U+95da, U+95de, U+95e0-95e1, U+95e4-95e5, U+95ea-95eb, U+95ef-95f0, U+95f2-95f3, U+95f5, U+95f7-95fa, U+95fd, U+9600-9602, U+9607-9609, U+960e, U+9610-9611, U+9614, U+9616, U+9619-961a, U+961c-961d, U+961f, U+9621, U+9624, U+9628, U+962f, U+9633-9636, U+963c, U+9641-9643, U+9645, U+9647-9648) ); /* noto-sans-tc-[27]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-27-400-normal.woff2", $range: (U+93e4, U+93e8, U+93ee, U+93f0, U+93f5, U+93f7-93f9, U+93fb, U+9403, U+9407, U+940f-9410, U+9413-9414, U+9417, U+9419-941a, U+941c, U+941e, U+9420-9425, U+9427-942b, U+942e, U+9432-9433, U+9436, U+9438, U+943a, U+943d, U+943f-9440, U+9445, U+944a, U+944c, U+9454-9455, U+945a-945b, U+945e, U+9460, U+9462-9463, U+9468, U+946a, U+946d, U+946f, U+9471, U+9474-9477, U+9479, U+947e-9481, U+9488-948a, U+948e, U+9492-9493, U+9497, U+9499, U+949b-94a3, U+94a5-94a9, U+94ac, U+94ae-94b1, U+94b3-94b5, U+94bb-94bc, U+94be-94c3, U+94c5-94c6, U+94c9, U+94ce-94d0, U+94db-94dd, U+94e0, U+94e2-94e3, U+94e8, U+94ec-94ee, U+94f0, U+94f2, U+94f5-94f6, U+94f8, U+94fa, U+94ff-9502, U+9504-9506, U+9508, U+950b) ); /* noto-sans-tc-[28]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-28-400-normal.woff2", $range: (U+92e5-92e6, U+92e8-92e9, U+92ed-92ef, U+92f1-92f3, U+92f6, U+92f9, U+92fb, U+9300-9302, U+9306, U+930b, U+930f, U+9312, U+9315, U+9319-931b, U+931d-931f, U+9321, U+9323-9325, U+9327-932a, U+932c-932e, U+9331-9333, U+9335, U+9338, U+933c, U+9340-9341, U+9345-9349, U+934f-9352, U+9354, U+9356-935a, U+935c-9360, U+9363-9367, U+9369-936a, U+936c, U+936e, U+9370-9371, U+9373, U+9376, U+9379-937a, U+937c, U+9385, U+9387, U+938c, U+938f, U+9394, U+9397-9398, U+939a-939b, U+939d-939e, U+93a1-93a3, U+93a6-93a7, U+93a9-93aa, U+93ac-93ad, U+93af-93b0, U+93b3-93bb, U+93bd-93be, U+93c0-93c4, U+93c7, U+93ca-93cd, U+93d0-93d1, U+93d6-93d8, U+93dc-93de, U+93e0) ); /* noto-sans-tc-[29]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-29-400-normal.woff2", $range: (U+91f0-91f1, U+91f5-91fa, U+91fd, U+91ff-9201, U+9203-920a, U+920d-920e, U+9210-9211, U+9217, U+9219, U+921c, U+9221, U+9224-9225, U+9227, U+922a, U+922d-922e, U+9230-9231, U+9233, U+9235-9239, U+923b, U+923d-9241, U+9244, U+9246, U+9248-9249, U+924b-9251, U+9253, U+925a, U+925d-925e, U+9262, U+9265-9267, U+926b-926d, U+926f, U+9271-9272, U+9274, U+9276, U+9278, U+927a-927c, U+927e-927f, U+9282-9283, U+9286, U+9288, U+928a, U+928d-928e, U+9291, U+9295-9296, U+9299-929b, U+929d, U+92a0-92ae, U+92b2, U+92b5-92b6, U+92bb-92bc, U+92c2-92c3, U+92c6-92cd, U+92cf-92d1, U+92d5, U+92d7, U+92d9, U+92dd, U+92df, U+92e4) ); /* noto-sans-tc-[30]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-30-400-normal.woff2", $range: (U+90bb, U+90bd-90be, U+90c3-90c5, U+90c7, U+90d1, U+90d4-90d5, U+90d7, U+90db-90df, U+90e2-90e4, U+90ea-90eb, U+90ef, U+90f4, U+90f7-90f8, U+90fc, U+90fe-9100, U+9102, U+9104, U+9106, U+9112, U+9114-911a, U+911c, U+911e, U+9120, U+9122-9123, U+9129, U+912b, U+912f, U+9131-9132, U+9134, U+9136, U+9139-913a, U+9143, U+9146, U+9148-914a, U+914e-9150, U+9154, U+9156-9157, U+9159-915a, U+915d-915e, U+9161-9164, U+916b, U+916e, U+9170-9172, U+9174, U+9176, U+9179-917a, U+917f, U+9181-9182, U+9184-9186, U+918c-918e, U+9190-9191, U+9196, U+919a-919b, U+919e, U+91a1-91a4, U+91a7, U+91aa, U+91ae-91b2, U+91b4-91b5, U+91b8, U+91bd-91be, U+91c1, U+91c3, U+91c5-91c6, U+91c8-91ca, U+91d2-91d5, U+91d7, U+91d9, U+91e1, U+91e4, U+91e6-91e9, U+91ec-91ed) ); /* noto-sans-tc-[31]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-31-400-normal.woff2", $range: (U+8f68-8f69, U+8f6d-8f72, U+8f74, U+8f76, U+8f7b-8f7c, U+8f7f, U+8f83-8f86, U+8f88-8f8a, U+8f8d, U+8f90, U+8f93, U+8f95-8f97, U+8f99, U+8f9e-8f9f, U+8fa2, U+8fa7, U+8fa9, U+8fab, U+8fae, U+8fb3, U+8fb5-8fb6, U+8fba-8fbd, U+8fbf, U+8fc1-8fc2, U+8fc6, U+8fc8, U+8fcc-8fcd, U+8fd2-8fd3, U+8fd5, U+8fdc-8fdd, U+8fdf, U+8fe2-8fe5, U+8fe8-8fe9, U+8fed-8fee, U+8ff3, U+8ff5, U+8ff8, U+8ffa-8ffc, U+8ffe, U+9002, U+9004, U+9008, U+900a-900b, U+9011-9013, U+9016, U+901e, U+9021, U+9024, U+902d, U+902f-9030, U+9034-9036, U+9039-903b, U+9041, U+9044-9045, U+904f-9052, U+9057-9058, U+905b, U+905d, U+9061-9062, U+9065, U+9068, U+906f, U+9074, U+9079, U+907d, U+9083, U+9085, U+9087-9089, U+908b, U+9090, U+9093, U+9095, U+9097, U+9099, U+909b, U+909d-909e, U+90a0-90a2, U+90ac, U+90af-90b0, U+90b2-90b4, U+90b6, U+90b9) ); /* noto-sans-tc-[32]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-32-400-normal.woff2", $range: (U+8e18, U+8e1d-8e21, U+8e23, U+8e26-8e28, U+8e2a-8e2b, U+8e2d-8e2e, U+8e30-8e31, U+8e35, U+8e39, U+8e3c-8e3d, U+8e40-8e42, U+8e47, U+8e49-8e4e, U+8e50, U+8e53-8e55, U+8e59-8e5b, U+8e60, U+8e62-8e63, U+8e67, U+8e69, U+8e6c-8e6d, U+8e6f, U+8e74, U+8e76, U+8e7a-8e7c, U+8e82, U+8e84-8e85, U+8e87, U+8e89-8e8b, U+8e8f-8e95, U+8e99-8e9a, U+8e9d-8e9e, U+8ea1, U+8ea3, U+8ea5-8ea6, U+8eaa, U+8eac-8ead, U+8eaf-8eb1, U+8eb9, U+8ebc, U+8ebe, U+8ec6, U+8ecb, U+8ecf, U+8ed1, U+8ed4, U+8ed7, U+8eda-8edb, U+8ee2, U+8ee8, U+8eeb, U+8ef2, U+8ef9-8efe, U+8f05, U+8f07-8f08, U+8f0a-8f0c, U+8f12-8f13, U+8f17, U+8f19-8f1a, U+8f1c, U+8f1e-8f1f, U+8f25-8f26, U+8f2d, U+8f30, U+8f33, U+8f36, U+8f3e, U+8f40-8f42, U+8f45-8f47, U+8f4d, U+8f54-8f55, U+8f5d, U+8f61-8f62, U+8f64, U+8f67) ); /* noto-sans-tc-[33]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-33-400-normal.woff2", $range: (U+8cc1-8cc2, U+8cc4-8cc5, U+8ccf-8cd2, U+8cd4-8cd5, U+8cd9-8cdb, U+8ce1, U+8ce8, U+8ceb, U+8cf0, U+8cf8, U+8cfb, U+8cfe, U+8d04, U+8d07, U+8d0b, U+8d0d, U+8d10, U+8d12-8d14, U+8d17, U+8d1b-8d1f, U+8d21-8d26, U+8d29-8d2c, U+8d2e-8d32, U+8d34-8d35, U+8d37-8d38, U+8d3a-8d3c, U+8d3e-8d3f, U+8d41-8d43, U+8d48, U+8d4b-8d4c, U+8d4e-8d50, U+8d54, U+8d56, U+8d58, U+8d5a-8d5b, U+8d5f-8d60, U+8d62-8d63, U+8d66-8d69, U+8d6c-8d6e, U+8d73, U+8d75-8d76, U+8d7b, U+8d7d, U+8d84, U+8d8b, U+8d90-8d91, U+8d94, U+8d96, U+8d9c, U+8dab, U+8daf, U+8db2, U+8db5, U+8db7, U+8dba, U+8dbc, U+8dbf, U+8dc2-8dc3, U+8dc6, U+8dcb, U+8dce-8dd0, U+8dd6-8dd7, U+8dda-8ddb, U+8de3-8de4, U+8de9, U+8deb-8dec, U+8df1, U+8df5-8df7, U+8dfa-8dfd, U+8e05, U+8e08-8e0a, U+8e0e, U+8e14, U+8e16) ); /* noto-sans-tc-[34]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-34-400-normal.woff2", $range: (U+8b6c-8b6d, U+8b72, U+8b7e, U+8b83, U+8b89, U+8b8c, U+8b8e, U+8b90, U+8b92, U+8b95-8b96, U+8b99, U+8b9c, U+8b9e-8b9f, U+8ba3, U+8ba5, U+8ba7, U+8baa, U+8bad, U+8bb2-8bb4, U+8bb6-8bb9, U+8bbc-8bbd, U+8bbf-8bc0, U+8bc3, U+8bc5, U+8bc8-8bcb, U+8bcf, U+8bd1, U+8bd7-8bdc, U+8bde-8be1, U+8be3, U+8be7, U+8be9, U+8beb-8bec, U+8bef, U+8bf1-8bf2, U+8bf5-8bf6, U+8bf8, U+8bfa, U+8bfd-8bfe, U+8c01-8c02, U+8c05, U+8c08, U+8c0a-8c11, U+8c13-8c15, U+8c18-8c1c, U+8c1f, U+8c23-8c29, U+8c2c-8c2d, U+8c31, U+8c34, U+8c36, U+8c39, U+8c3f, U+8c47, U+8c49-8c4c, U+8c4f, U+8c51, U+8c55, U+8c62, U+8c68, U+8c73, U+8c78, U+8c7a-8c7c, U+8c82, U+8c85, U+8c89-8c8a, U+8c8d-8c8e, U+8c90, U+8c94, U+8c98-8c99, U+8ca3-8ca4, U+8cad-8cb0, U+8cb2, U+8cb9-8cba, U+8cbd) ); /* noto-sans-tc-[35]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-35-400-normal.woff2", $range: (U+89f6, U+89ff, U+8a01, U+8a03, U+8a07, U+8a09, U+8a0c, U+8a0f-8a12, U+8a16, U+8a1b, U+8a22, U+8a25, U+8a27, U+8a2b, U+8a33, U+8a36, U+8a38, U+8a3d-8a3e, U+8a41, U+8a45-8a46, U+8a48, U+8a4e, U+8a51-8a52, U+8a54, U+8a56-8a58, U+8a5b, U+8a5d, U+8a61, U+8a63, U+8a67, U+8a6a-8a6c, U+8a70, U+8a74-8a76, U+8a7a-8a7c, U+8a82, U+8a84-8a86, U+8a89, U+8a8f-8a92, U+8a94, U+8a9a, U+8aa1, U+8aa3, U+8aa5, U+8aa7-8aa8, U+8aad, U+8ab1, U+8ab6, U+8abe, U+8ac2, U+8ac4, U+8ac6, U+8ac9, U+8acc-8acf, U+8ad1, U+8adb, U+8add-8ae2, U+8ae4, U+8ae6, U+8aea-8aeb, U+8aed, U+8af1-8af6, U+8afa, U+8afc, U+8b01, U+8b04-8b05, U+8b07, U+8b0b-8b0d, U+8b0f-8b10, U+8b13-8b14, U+8b16, U+8b1a, U+8b1c, U+8b21-8b22, U+8b26, U+8b28, U+8b2b, U+8b2e, U+8b33, U+8b41, U+8b46, U+8b4c-8b4f, U+8b53-8b54, U+8b56, U+8b59, U+8b5e-8b60, U+8b64, U+8b6a-8b6b) ); /* noto-sans-tc-[36]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-36-400-normal.woff2", $range: (U+889b-889c, U+889e, U+88a2, U+88a4, U+88a8, U+88aa, U+88ad-88ae, U+88b1, U+88b4, U+88b7-88b8, U+88bc-88be, U+88c0, U+88c4, U+88c6-88c7, U+88c9-88cc, U+88ce, U+88d2, U+88d6, U+88d8, U+88db, U+88df, U+88e4, U+88e8-88e9, U+88ec, U+88ef-88f1, U+88f3-88f5, U+88fc, U+88fe, U+8900, U+8902, U+8906, U+890a-890c, U+8912-8915, U+8918-891a, U+891f, U+8921, U+8923, U+8925, U+892a-892b, U+892d, U+8930, U+8933, U+8935-8936, U+8938, U+893d, U+8941-8943, U+8946-8947, U+8949, U+894c-894d, U+8956-8957, U+8959, U+895c, U+895e-8960, U+8964, U+8966, U+896c, U+8971, U+8974, U+897b, U+897e, U+8980, U+8982-8983, U+8987-8988, U+898a, U+898c, U+8991, U+8994-8995, U+8997-8998, U+899a, U+899c, U+89a1, U+89a4-89a7, U+89a9, U+89ac, U+89af, U+89b2-89b3, U+89b7, U+89bb, U+89bf, U+89c5, U+89c9-89ca, U+89d1, U+89d4-89d5, U+89da, U+89dc-89de, U+89e5-89e7, U+89ed, U+89f1, U+89f3-89f4) ); /* noto-sans-tc-[37]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-37-400-normal.woff2", $range: (U+874c, U+874e-874f, U+8753, U+8757-8758, U+875d, U+875f, U+8761-8765, U+8768, U+876a, U+876c-8770, U+8772, U+8777, U+877a-877b, U+877d, U+8781, U+8784-8785, U+8788, U+878b, U+8793, U+8797-8798, U+879f, U+87a3, U+87a8, U+87ab-87ad, U+87af, U+87b3, U+87b5, U+87b9, U+87bb, U+87bd-87c0, U+87c4-87c8, U+87ca-87cc, U+87ce, U+87d2, U+87db-87dc, U+87e0-87e1, U+87e3, U+87e5, U+87e7, U+87ea-87eb, U+87ee-87ef, U+87f3-87f4, U+87f6-87f7, U+87fe, U+8802-8806, U+880a-880b, U+880e, U+8810-8811, U+8813, U+8815-8816, U+881b, U+8821, U+8823, U+8827, U+8831-8832, U+8835, U+8839-883a, U+883c, U+8844-8846, U+884a, U+884e, U+8852, U+8854-8856, U+8859-885a, U+885e, U+8862, U+8864-8865, U+8869-886a, U+886c-886e, U+8871-8872, U+8875, U+8879, U+887d-887f, U+8882, U+8884-8885, U+8888, U+8890, U+8892-8893, U+8897-8898, U+889a) ); /* noto-sans-tc-[38]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-38-400-normal.woff2", $range: (U+8602, U+8604-8605, U+8610, U+8616-8618, U+861a, U+861e, U+8621-8622, U+8627, U+8629-862a, U+8634-8636, U+8638, U+863a, U+863c, U+8640, U+8642, U+8646, U+864c-864d, U+864f, U+8651-8654, U+8657, U+8659-865a, U+865c, U+8662, U+866b-866c, U+866f-8671, U+8673, U+8677, U+867a-867b, U+867d-867e, U+8680-8682, U+868b-868d, U+8693-8696, U+869a, U+869c-869d, U+86a1, U+86a3-86a4, U+86a7-86aa, U+86af-86b1, U+86b3-86b4, U+86b6, U+86b9-86ba, U+86c0-86c2, U+86c4, U+86c6, U+86c9-86ca, U+86cc-86ce, U+86d0, U+86d3-86d4, U+86de-86df, U+86e9, U+86ed-86f0, U+86f3, U+86f8-86fc, U+86fe, U+8703, U+8706-870a, U+870d-870e, U+8711-8712, U+8715, U+8717, U+8719-871a, U+871e, U+8721-8723, U+8725, U+8728-8729, U+872e, U+8731, U+8734, U+8737, U+873a, U+873e-8740, U+8742, U+8747, U+8749, U+874b) ); /* noto-sans-tc-[39]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-39-400-normal.woff2", $range: (U+84b1, U+84b4, U+84b9-84bb, U+84bd-84c0, U+84c2, U+84c6-84c7, U+84ca, U+84cd-84d2, U+84d6, U+84dd, U+84df, U+84e2, U+84e6-84e8, U+84ea, U+84ef-84f0, U+84f3-84f4, U+84f7, U+84fa, U+84fc-84fd, U+84ff-8500, U+8506, U+850c, U+8511, U+8515, U+8517, U+851d-851f, U+8524, U+852b, U+852f, U+8532, U+8534-8535, U+8537-8538, U+853a, U+853c, U+853e, U+8541-8542, U+8545, U+8548, U+854b, U+854d-854e, U+8552-8553, U+8555-8558, U+855a, U+855e, U+8561-8565, U+8568, U+856a-856c, U+856f, U+8574, U+8577-857b, U+8580-8581, U+8585-8586, U+858a, U+858c, U+858f-8590, U+8594, U+8597-8599, U+859c, U+859f, U+85a1-85a2, U+85a4, U+85a8, U+85ab-85ac, U+85ae, U+85b3-85b4, U+85b7, U+85b9-85ba, U+85bd-85be, U+85c1-85c2, U+85cb, U+85ce, U+85d0, U+85d3, U+85d5, U+85dc, U+85e0, U+85e6, U+85e8, U+85ea, U+85ed, U+85f4, U+85f6-85f7, U+85f9-85fa, U+85ff) ); /* noto-sans-tc-[40]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-40-400-normal.woff2", $range: (U+8378, U+837a-8380, U+8383, U+8385-8386, U+8392, U+8394-8395, U+8398-8399, U+839b-839c, U+83a0, U+83a2, U+83a4, U+83a7-83aa, U+83af-83b5, U+83b7, U+83b9-83ba, U+83bc-83c0, U+83c2, U+83c4-83c5, U+83c8-83c9, U+83cb, U+83ce-83cf, U+83d1, U+83d4-83d6, U+83d8, U+83dd, U+83df, U+83e1-83e2, U+83e5, U+83ea-83eb, U+83f0, U+83f3-83f4, U+83f9, U+83fb-83fe, U+8406-8407, U+840b, U+840f, U+8411, U+8413, U+8418, U+841b-841d, U+8420-8421, U+8423-8424, U+8426-8429, U+842b, U+842d-842e, U+8432-8433, U+8435, U+8437-8439, U+843b-843c, U+843e, U+8445-8447, U+844e, U+8451-8452, U+8456, U+8459-845a, U+845c, U+845f, U+8462, U+8466-8467, U+846d, U+846f-8471, U+8473-8474, U+8476-8478, U+847a, U+8484, U+848b, U+848d-848e, U+8493-8494, U+8497, U+849d, U+849f, U+84a1, U+84a8, U+84af) ); /* noto-sans-tc-[41]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-41-400-normal.woff2", $range: (U+826e, U+8270, U+8273, U+8276, U+8278-8279, U+827d, U+827f, U+8283-8284, U+8288-828a, U+828d-8291, U+8293-8294, U+8298, U+829a-829c, U+829e-82a4, U+82a6-82ab, U+82ae, U+82b0, U+82b4, U+82b6, U+82ba-82bc, U+82be, U+82c1, U+82c4-82c5, U+82c7, U+82cb, U+82cd, U+82cf-82d0, U+82d2, U+82d5-82d6, U+82d9, U+82db-82dc, U+82de-82e1, U+82e3-82e4, U+82e7, U+82ea-82eb, U+82ef-82f0, U+82f3-82f4, U+82f6-82f7, U+82f9-82fc, U+82fe-8301, U+8306-8308, U+830b-830e, U+8316, U+8318, U+831a-831b, U+831d-831e, U+8327, U+832a, U+832c-832d, U+832f, U+8331, U+8333-8334, U+8337, U+833a-833c, U+833f-8340, U+8342, U+8344-8347, U+834b-834c, U+834f, U+8351, U+8356-8358, U+835a, U+835e-8361, U+8363-8364, U+8367-8368, U+836b, U+836f, U+8373, U+8375) ); /* noto-sans-tc-[42]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-42-400-normal.woff2", $range: (U+8113, U+8115, U+8117-8118, U+811a-811b, U+811e, U+8121-8127, U+8129, U+812c, U+812f-8134, U+8137-8138, U+813a, U+813d, U+8144, U+8146, U+8148, U+814a, U+814c-814d, U+8151, U+8153, U+8156, U+8158, U+815a, U+8160, U+8167, U+8169, U+816d, U+816f, U+8171, U+8174, U+817b-817c, U+817e, U+8182, U+8188, U+818a, U+8194-8195, U+8198, U+819b, U+819e, U+81a3, U+81a6-81a7, U+81ab, U+81af-81b0, U+81b5-81b6, U+81b8, U+81ba-81bb, U+81be-81bf, U+81c3, U+81c6, U+81ca, U+81cc, U+81cf, U+81d1-81d3, U+81d6-81d7, U+81d9-81da, U+81dd-81de, U+81e0-81e2, U+81e7, U+81ec, U+81ef, U+81fc, U+81fe, U+8200-8202, U+8204-8206, U+820b, U+820e, U+8210, U+8215, U+8217-8218, U+821b, U+821d, U+8221-8222, U+8224, U+8228-8229, U+822b, U+822f-8234, U+8236-8238, U+823a, U+823e, U+8240, U+8244-8245, U+8249, U+824b, U+824e-824f, U+8257, U+825a, U+825f, U+8264, U+8268, U+826b) ); /* noto-sans-tc-[43]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-43-400-normal.woff2", $range: (U+7fb1-7fb2, U+7fb4, U+7fb6, U+7fb8, U+7fbc, U+7fbf-7fc0, U+7fc3, U+7fcb-7fcc, U+7fce-7fcf, U+7fd1, U+7fd5, U+7fd8, U+7fdb, U+7fde-7fdf, U+7fe5-7fe6, U+7fe9, U+7feb-7fec, U+7fee, U+7ff2-7ff3, U+7ffa, U+7ffd-7ffe, U+8002, U+8004, U+8006, U+800b, U+800e, U+8011-8012, U+8014, U+8016, U+8018-8019, U+801c, U+8024, U+8026, U+8028, U+802c, U+8030, U+8035, U+8037-8039, U+803b, U+8042-8043, U+804b-804c, U+8052, U+8061, U+8068, U+806a, U+806e, U+8071, U+8073-8076, U+8079, U+807c, U+807e-807f, U+8083-8084, U+808f, U+8093, U+8095, U+8098, U+809c, U+809f-80a0, U+80a4, U+80a7, U+80ab, U+80ad-80ae, U+80b0-80b1, U+80b4-80b6, U+80b8, U+80bc-80c2, U+80c4, U+80c6-80c7, U+80cb, U+80cd, U+80cf, U+80d4, U+80d7, U+80d9, U+80db-80dd, U+80e0, U+80e3-80e5, U+80e7, U+80eb-80ed, U+80ef-80f1, U+80f3-80f4, U+80f6-80f7, U+80fc, U+80fe-80ff, U+8101, U+8107, U+8109, U+810f-8112) ); /* noto-sans-tc-[44]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-44-400-normal.woff2", $range: (U+7eaf, U+7eb1-7eb3, U+7eb5-7eba, U+7ebd-7ebe, U+7ec0-7ec1, U+7ec3, U+7ec5, U+7ec7-7eca, U+7ecd-7ece, U+7ed1-7ed2, U+7ed4-7ed5, U+7ed7-7ed8, U+7eda-7edb, U+7edd-7ede, U+7ee2-7ee3, U+7ee5, U+7ee7, U+7ee9-7eeb, U+7eee-7ef0, U+7ef3, U+7ef5, U+7ef7-7ef8, U+7efd-7f01, U+7f03, U+7f05-7f09, U+7f0e, U+7f10, U+7f13-7f15, U+7f18-7f1a, U+7f1c-7f1d, U+7f20, U+7f24-7f25, U+7f28-7f2a, U+7f2d-7f2e, U+7f30, U+7f34, U+7f36-7f37, U+7f3d, U+7f42-7f45, U+7f47-7f4e, U+7f52, U+7f54, U+7f58, U+7f5a, U+7f5d, U+7f5f-7f63, U+7f65, U+7f68, U+7f6b, U+7f78, U+7f7d-7f7e, U+7f81-7f83, U+7f86-7f87, U+7f8b-7f8d, U+7f91, U+7f93-7f95, U+7f97, U+7f99-7f9a, U+7f9d, U+7f9f, U+7fa1-7fa3, U+7fa5, U+7fa7, U+7fad-7fb0) ); /* noto-sans-tc-[45]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-45-400-normal.woff2", $range: (U+7d89, U+7d8b-7d8f, U+7d91, U+7d95-7d96, U+7d98-7d9a, U+7d9d-7d9e, U+7da2-7da3, U+7da6, U+7daa, U+7dac, U+7dae-7db0, U+7db3, U+7db5, U+7db7, U+7db9, U+7dbd, U+7dc1, U+7dc3-7dc7, U+7dcc-7dcf, U+7dd1, U+7dd6-7dd9, U+7ddb-7ddc, U+7de1-7de2, U+7de6, U+7df0-7df3, U+7df6, U+7dfe, U+7e01-7e02, U+7e04, U+7e08-7e0b, U+7e10-7e11, U+7e13, U+7e15, U+7e1d-7e20, U+7e22, U+7e25-7e27, U+7e29, U+7e2d, U+7e2f-7e30, U+7e32-7e37, U+7e39, U+7e3b, U+7e44-7e45, U+7e47-7e48, U+7e4a-7e4b, U+7e4d, U+7e50-7e52, U+7e56, U+7e58-7e5b, U+7e62, U+7e68, U+7e6d-7e70, U+7e76, U+7e78, U+7e7b, U+7e7e, U+7e81-7e82, U+7e86-7e88, U+7e8a, U+7e8d-7e8e, U+7e92-7e94, U+7e98-7e9b, U+7e9e, U+7ea0, U+7ea3-7ea4, U+7ea8, U+7eaa-7eae) ); /* noto-sans-tc-[46]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-46-400-normal.woff2", $range: (U+7c20, U+7c23, U+7c25-7c26, U+7c2a-7c2b, U+7c37-7c39, U+7c40-7c41, U+7c48-7c49, U+7c50, U+7c53-7c54, U+7c56-7c57, U+7c59-7c5c, U+7c5f, U+7c63, U+7c65, U+7c69, U+7c6c-7c6e, U+7c74-7c75, U+7c79, U+7c7c, U+7c7e, U+7c84, U+7c8b, U+7c8d, U+7c91, U+7c94-7c95, U+7c9b, U+7c9f, U+7ca2, U+7ca4, U+7ca6, U+7ca8-7caa, U+7cae, U+7cb1-7cb3, U+7cba, U+7cbc, U+7cbf-7cc0, U+7cc5, U+7cc8-7cc9, U+7ccc-7cce, U+7cd7, U+7cdc-7cdd, U+7ce0, U+7ce2, U+7ce8, U+7cea, U+7ced, U+7cf2, U+7cf4, U+7cf6, U+7cf8-7cfa, U+7cfc, U+7d02, U+7d06-7d0a, U+7d0f, U+7d11-7d12, U+7d15, U+7d18, U+7d1c-7d1e, U+7d25, U+7d27, U+7d29, U+7d2c, U+7d31-7d32, U+7d35, U+7d38, U+7d3a, U+7d3c, U+7d3e-7d41, U+7d43, U+7d45, U+7d4c, U+7d4e-7d4f, U+7d53-7d54, U+7d56, U+7d5b-7d5d, U+7d5f, U+7d63, U+7d67, U+7d6a, U+7d6d, U+7d70, U+7d73, U+7d75, U+7d79-7d7b, U+7d7d, U+7d80, U+7d83-7d84, U+7d86-7d88) ); /* noto-sans-tc-[47]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-47-400-normal.woff2", $range: (U+7afb, U+7afd-7afe, U+7b01-7b06, U+7b09-7b0b, U+7b0e-7b10, U+7b14, U+7b18, U+7b1a, U+7b1e-7b1f, U+7b22-7b25, U+7b29-7b2b, U+7b2d-7b2e, U+7b31-7b35, U+7b38-7b3c, U+7b45, U+7b47-7b48, U+7b4a, U+7b4c, U+7b4e-7b50, U+7b58, U+7b5b, U+7b5d, U+7b60, U+7b62, U+7b65-7b67, U+7b69, U+7b6d-7b6f, U+7b72-7b76, U+7b79, U+7b7e, U+7b82, U+7b84-7b85, U+7b87, U+7b8b, U+7b8d-7b93, U+7b95-7b96, U+7b98, U+7b9c-7b9d, U+7ba0, U+7ba7, U+7ba9-7bac, U+7bb0, U+7bb4, U+7bb6, U+7bb8-7bb9, U+7bc1, U+7bc3, U+7bc6, U+7bcb-7bcc, U+7bcf, U+7bd4, U+7bd9-7bdb, U+7bdd, U+7be0-7be1, U+7be5-7be6, U+7bea, U+7bed-7bee, U+7bf1-7bf3, U+7bf8-7bf9, U+7bfc-7c01, U+7c03, U+7c07, U+7c0a-7c0d, U+7c0f, U+7c11-7c12, U+7c15, U+7c1e-7c1f) ); /* noto-sans-tc-[48]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-48-400-normal.woff2", $range: (U+7988, U+798a-798b, U+7991, U+7993-7996, U+7998, U+799a-799b, U+799f-79a2, U+79a4, U+79a8-79a9, U+79af-79b0, U+79b3, U+79b5, U+79b8, U+79ba, U+79c3, U+79c6, U+79c8, U+79cf, U+79d5-79d6, U+79dc-79de, U+79e3, U+79e7, U+79ea-79ed, U+79ef-79f0, U+79f4, U+79f6-79f8, U+79fd, U+7a02-7a03, U+7a08-7a0a, U+7a0c, U+7a0e, U+7a10-7a11, U+7a14, U+7a17-7a19, U+7a1c, U+7a1e-7a1f, U+7a23, U+7a26, U+7a2d, U+7a32-7a33, U+7a37, U+7a39, U+7a3c, U+7a42, U+7a45, U+7a49, U+7a4f, U+7a56, U+7a5a, U+7a5c, U+7a60-7a61, U+7a63, U+7a68, U+7a6d-7a6e, U+7a70-7a71, U+7a77-7a79, U+7a80, U+7a83, U+7a85-7a86, U+7a88, U+7a8d, U+7a90-7a91, U+7a93-7a96, U+7a98, U+7a9c-7a9d, U+7aa0, U+7aa3, U+7aa5-7aa6, U+7aa8, U+7aaa, U+7aac, U+7ab0, U+7ab3, U+7ab6, U+7ab8, U+7abb, U+7abe-7abf, U+7ac2, U+7ac8-7ac9, U+7ad1-7ad2, U+7ad6, U+7ada, U+7adc-7ade, U+7ae4, U+7ae6, U+7ae9-7aeb, U+7af4, U+7af8, U+7afa) ); /* noto-sans-tc-[49]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-49-400-normal.woff2", $range: (U+7840, U+7842-7843, U+7845, U+7847, U+784a, U+784c-7850, U+7852-7853, U+7855, U+7858, U+785a, U+785c-785d, U+7864, U+7866, U+7868, U+786a, U+786f, U+7874, U+7876, U+787c, U+787f, U+7886-7887, U+7889, U+788d, U+788f, U+7893, U+7895-7896, U+7898, U+789a, U+789e, U+78a1, U+78a3, U+78a5, U+78aa, U+78ad, U+78b1-78b2, U+78b4, U+78b6, U+78b8, U+78be, U+78c8-78c9, U+78cb, U+78ce, U+78d0-78d1, U+78d4-78d5, U+78d7-78d8, U+78de, U+78e3, U+78e6-78e7, U+78ea, U+78ec, U+78f2-78f4, U+78fa-78fb, U+78fd-7900, U+7904-7906, U+790a, U+790c, U+7910-7912, U+791c, U+791e, U+7920-7921, U+792a-792c, U+792e, U+7931, U+7934, U+7938, U+793b, U+793d, U+793f, U+7941-7942, U+7945-7947, U+7949, U+794c, U+794e, U+7953-7954, U+7957-795c, U+795f, U+7961-7962, U+7964, U+7967, U+7969, U+796b-796c, U+796f, U+7972-7973, U+7977-7979, U+797b-797c, U+797e, U+7980, U+7982, U+7984-7987) ); /* noto-sans-tc-[50]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-50-400-normal.woff2", $range: (U+7705, U+7707-7708, U+770a, U+770c, U+770f, U+7715, U+7719-771b, U+771d-771e, U+7722, U+7725-7726, U+7728, U+772d, U+772f, U+7733-7736, U+7738, U+773b, U+773d, U+7741, U+7744, U+7746, U+774c, U+774e-7752, U+7755, U+7759-775a, U+775f-7760, U+7762, U+7765-7766, U+7768-776a, U+776c-776e, U+7771, U+7778, U+777a, U+777d-777e, U+7780, U+7785, U+7787, U+7789, U+778b-778d, U+7791-7793, U+779c, U+779f-77a0, U+77a2, U+77a5, U+77a9, U+77b0-77b1, U+77b4, U+77b6-77b7, U+77b9, U+77bc-77bf, U+77c5, U+77c7, U+77cc-77cd, U+77d3, U+77d6-77d7, U+77dc, U+77de, U+77e3, U+77e7, U+77eb-77ec, U+77f0, U+77f2, U+77f6, U+77f8, U+77fa-77fc, U+77fe-7800, U+7803, U+7805-7806, U+7809, U+7810-7812, U+7815-7816, U+781a, U+781c-781d, U+781f-7823, U+7825-7827, U+7829, U+782c-7830, U+7833, U+7835, U+7837, U+7839-783a, U+783c, U+783e) ); /* noto-sans-tc-[51]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-51-400-normal.woff2", $range: (U+75cc-75cd, U+75d2, U+75d4, U+75d9, U+75df, U+75e2-75e4, U+75e6-75e7, U+75e9-75ec, U+75f0-75f3, U+75f7, U+75f9-75fa, U+75fc, U+75fe-7602, U+7608-760a, U+760c-760d, U+7610, U+7615-7616, U+7618-7620, U+7622-7623, U+7625, U+7627, U+7629, U+762b, U+762e, U+7630, U+7632-7635, U+7638, U+763a-763c, U+763e, U+7640, U+7643, U+7646, U+7648-7649, U+764d-764e, U+7654, U+7658, U+765c, U+765f, U+7663-7667, U+7669, U+766b-766d, U+766f-7670, U+7676, U+7678-767a, U+767f-7681, U+7683, U+7688, U+768a-768b, U+768e, U+7690, U+7695-7696, U+769a-769e, U+76a3-76a4, U+76aa, U+76b0-76b1, U+76b4, U+76b7-76b8, U+76c2, U+76c5, U+76c9, U+76cc-76cd, U+76cf-76d1, U+76d6-76d8, U+76e5-76e6, U+76e9, U+76ec, U+76f1, U+76f7, U+76f9-76fb, U+76ff-7700, U+7704) ); /* noto-sans-tc-[52]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-52-400-normal.woff2", $range: (U+749a, U+749c-74a1, U+74a3, U+74a5-74a7, U+74a9-74ab, U+74ae, U+74b1-74b2, U+74b5, U+74b8, U+74ba, U+74bf, U+74c5, U+74c8, U+74cc-74cd, U+74d2, U+74d4, U+74d6, U+74d8, U+74da, U+74de-74e0, U+74e2, U+74e4, U+74e8-74e9, U+74ee-74ef, U+74f4, U+74f9, U+74fb, U+74ff-7501, U+7503, U+7507, U+750c-750d, U+7511, U+7513, U+7515-7517, U+7519, U+751e, U+7521, U+7525, U+752a, U+752c-752f, U+7534, U+753e, U+7542, U+7545, U+7547-7548, U+754a-754b, U+754e, U+7551, U+755a-755b, U+755d, U+7560, U+7563-7564, U+7566-7568, U+756c-756f, U+7572-7575, U+7577-757a, U+757c, U+757e-757f, U+7583-7584, U+7587, U+7589, U+758b-758e, U+7590, U+7592, U+7594-7595, U+7597, U+7599-759a, U+759d, U+759f, U+75a1-75a3, U+75a5, U+75a7, U+75aa, U+75ac, U+75ae-75b1, U+75b3-75b4, U+75b8, U+75bd, U+75c0, U+75c2-75c4, U+75c9-75ca) ); /* noto-sans-tc-[53]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-53-400-normal.woff2", $range: (U+73b3-73ba, U+73bc, U+73bf, U+73c2, U+73c4-73c6, U+73c9, U+73cb-73cc, U+73ce-73d2, U+73d6-73d7, U+73d9, U+73db-73de, U+73e3, U+73e5-73eb, U+73ef, U+73f5-73f7, U+73f9-73fa, U+73fc-73fd, U+7400-7401, U+7404-7405, U+7407-7408, U+740a-740d, U+740f-7410, U+7416, U+741a-741b, U+741d-741e, U+7420-7425, U+7428-7429, U+742c-7432, U+7435-7436, U+7438-743a, U+743c-7442, U+7445-7446, U+7448-744a, U+7451-7452, U+7454, U+7457, U+7459, U+745d, U+7460-7462, U+7465, U+7467-7468, U+746c-746e, U+7471-7477, U+7479-747a, U+747c-747f, U+7481-7482, U+7484-7486, U+7488-748a, U+748e-7490, U+7492, U+7498) ); /* noto-sans-tc-[54]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-54-400-normal.woff2", $range: (U+727f, U+7281-7282, U+7284, U+7287, U+728a, U+728d, U+7292, U+7296, U+7298, U+729b, U+729f-72a2, U+72ad-72ae, U+72b0-72b5, U+72b8-72b9, U+72bc-72bd, U+72c1, U+72c3, U+72c5-72c6, U+72c8, U+72cc-72ce, U+72d2, U+72d4, U+72db, U+72dd, U+72df, U+72e1, U+72e8, U+72ec-72ee, U+72f1, U+72f3-72f4, U+72f7, U+72fa-72fb, U+72fd, U+7300-7301, U+7304, U+7307, U+730a-730b, U+730e, U+7313, U+7315-7317, U+7319, U+731e-731f, U+7322, U+7328-732e, U+7330-7331, U+7337, U+733a-733c, U+733e, U+7340-7341, U+7343, U+734c-734d, U+734f-7350, U+7352, U+7355, U+7357, U+7359-735a, U+7360-7363, U+7365, U+7369-7370, U+7373-7374, U+7377, U+737a, U+737c, U+737e, U+7380, U+7385-7386, U+738a, U+738e-738f, U+7391-7395, U+7397-7398, U+739b, U+73a0-73a2, U+73a5-73a8, U+73ad-73ae) ); /* noto-sans-tc-[55]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-55-400-normal.woff2", $range: (U+7113-7116, U+7118, U+711c, U+711e, U+7120, U+7122, U+712e-712f, U+7131, U+7134, U+713c, U+713f, U+7143, U+7145-7147, U+714a-714b, U+7150-7153, U+7155-7156, U+715a, U+7160, U+7162, U+7166, U+7168, U+716c, U+7171, U+7173, U+7178, U+717a-717b, U+717d, U+7180-7181, U+7185, U+7187-7188, U+718b, U+718f-7190, U+7192, U+7196-7198, U+719a-719c, U+71a0, U+71a4, U+71a8, U+71af, U+71b2-71b3, U+71b5, U+71b7-71ba, U+71be, U+71c1, U+71c4, U+71ca-71cb, U+71ce-71d0, U+71d4, U+71d7-71d8, U+71da, U+71dc, U+71e0-71e1, U+71e7, U+71ec, U+71f4-71f6, U+71f9, U+71fc, U+71fe-7201, U+7203, U+7207, U+7209, U+720c, U+7213-7215, U+7217, U+721a, U+721d, U+7222-7223, U+7228, U+722b, U+7230, U+7237, U+723b, U+723f-7242, U+724b, U+724d, U+7252-7253, U+7256, U+7258, U+725d, U+7263-7266, U+726a-726b, U+726e-7270, U+7273-7275, U+7277, U+727a-727b, U+727e) ); /* noto-sans-tc-[56]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-56-400-normal.woff2", $range: (U+6fe8-6fe9, U+6fec, U+6fee, U+6ff0, U+6ff3, U+6ff5-6ff6, U+6ffa, U+6ffc, U+6fff-7001, U+7003, U+7005-7007, U+700b, U+700d, U+7015, U+7018, U+701b, U+701e, U+7020-7021, U+7023, U+7026-7027, U+702c, U+702f-7032, U+7034-7035, U+7037-703c, U+7040, U+7042-7044, U+7046, U+7049, U+704b, U+704f, U+7052, U+7054-7055, U+705c-7061, U+7064-7069, U+706c-706d, U+706f, U+7073-7075, U+7078, U+707a, U+707e-7081, U+7085-7086, U+7089, U+7090-7091, U+7094-7096, U+7098, U+709c, U+709f, U+70a1, U+70a4, U+70a9, U+70ac, U+70af-70b2, U+70b4-70b5, U+70b7, U+70bb-70be, U+70c0-70c3, U+70ca-70cb, U+70d2, U+70d4-70d5, U+70d9-70dd, U+70df, U+70e6-70e9, U+70eb-70ec, U+70ef, U+70f1, U+70f4, U+70f7, U+70fa, U+70fd, U+70ff, U+7104, U+7106, U+7109, U+710c, U+7110) ); /* noto-sans-tc-[57]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-57-400-normal.woff2", $range: (U+6ed6, U+6ed8, U+6eda-6edb, U+6edd-6ede, U+6ee2, U+6ee4-6ee5, U+6ee8-6ee9, U+6eeb, U+6eee, U+6ef3, U+6ef8-6efb, U+6f00, U+6f08-6f0a, U+6f0d-6f0e, U+6f11-6f13, U+6f15, U+6f19-6f1a, U+6f23, U+6f25-6f2a, U+6f2d-6f31, U+6f33-6f36, U+6f3a-6f3c, U+6f40-6f41, U+6f43-6f44, U+6f47, U+6f4d-6f4f, U+6f53, U+6f57, U+6f59-6f5a, U+6f5c, U+6f5e-6f61, U+6f63, U+6f66-6f67, U+6f69-6f6c, U+6f6f, U+6f72-6f78, U+6f7a-6f7f, U+6f81-6f82, U+6f87, U+6f89, U+6f8b-6f8d, U+6f90, U+6f92, U+6f94-6f97, U+6f9c, U+6f9f-6fa0, U+6fa2-6fa3, U+6fa5-6fa8, U+6faa-6fab, U+6fae-6faf, U+6fb4, U+6fb6, U+6fb9-6fba, U+6fbc, U+6fc2, U+6fc6-6fcb, U+6fce, U+6fd1-6fd2, U+6fd4, U+6fd8, U+6fda, U+6fde, U+6fe0-6fe2) ); /* noto-sans-tc-[58]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-58-400-normal.woff2", $range: (U+6dd3, U+6dd5-6dd6, U+6dd9, U+6ddb-6de0, U+6de2-6de6, U+6de9, U+6dec, U+6def-6df0, U+6df2, U+6df4, U+6df6, U+6df8, U+6dfc-6dfd, U+6e00, U+6e02-6e03, U+6e07-6e0b, U+6e0d-6e0e, U+6e10, U+6e13-6e15, U+6e17, U+6e19-6e1a, U+6e1d, U+6e1f, U+6e22, U+6e24-6e25, U+6e27, U+6e2b, U+6e2d-6e2e, U+6e30-6e31, U+6e36, U+6e39-6e3a, U+6e3c-6e3d, U+6e40-6e41, U+6e44-6e45, U+6e47, U+6e49, U+6e4b, U+6e4d-6e4f, U+6e51, U+6e53-6e54, U+6e59, U+6e5c, U+6e5e-6e61, U+6e63-6e66, U+6e69-6e6b, U+6e6e, U+6e70-6e76, U+6e78, U+6e7c, U+6e7f-6e80, U+6e83, U+6e85-6e86, U+6e88-6e89, U+6e8b, U+6e8d-6e8f, U+6e93, U+6e98-6e9a, U+6e9f, U+6ea1, U+6ea4-6ea7, U+6eae, U+6eb1-6eb2, U+6eb4-6eb5, U+6eb7, U+6ebd, U+6ec1-6ec3, U+6ec7-6ec9, U+6ecd-6ed0, U+6ed3-6ed5) ); /* noto-sans-tc-[59]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-59-400-normal.woff2", $range: (U+6cda, U+6cdc-6cde, U+6ce0, U+6ce7, U+6ce9-6cec, U+6cee-6cef, U+6cf1, U+6cf7-6cf8, U+6cfb-6cfe, U+6d00-6d02, U+6d04, U+6d06-6d07, U+6d09-6d0a, U+6d0c, U+6d0e-6d12, U+6d18-6d1a, U+6d1f, U+6d22-6d24, U+6d27-6d28, U+6d2b, U+6d2d-6d31, U+6d33-6d3a, U+6d3c, U+6d3f, U+6d43-6d47, U+6d4a-6d4b, U+6d4e-6d4f, U+6d51-6d53, U+6d57-6d58, U+6d5a, U+6d5c, U+6d5e-6d65, U+6d67, U+6d6c-6d6d, U+6d6f-6d70, U+6d72, U+6d75, U+6d79, U+6d7c, U+6d7f, U+6d82, U+6d85, U+6d87, U+6d8e-6d8f, U+6d91-6d95, U+6d97-6d99, U+6d9b, U+6d9d, U+6d9f, U+6da1, U+6da4, U+6da6-6dac, U+6db3-6db4, U+6db7-6db8, U+6dbe-6dc0, U+6dc2, U+6dc4-6dc5, U+6dc8-6dca, U+6dcc-6dcd, U+6dcf-6dd0, U+6dd2) ); /* noto-sans-tc-[60]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-60-400-normal.woff2", $range: (U+6bbb, U+6bbd, U+6bc1-6bc2, U+6bcc, U+6bce, U+6bd0-6bd1, U+6bd5-6bd9, U+6bde, U+6be1, U+6bec, U+6bf3, U+6bf9, U+6bfd, U+6bff-6c00, U+6c02, U+6c05-6c06, U+6c0a, U+6c0c-6c0d, U+6c10, U+6c13, U+6c16, U+6c18-6c1a, U+6c1f, U+6c21-6c22, U+6c24, U+6c26, U+6c28-6c2a, U+6c2c, U+6c2e-6c33, U+6c35-6c37, U+6c39-6c3a, U+6c3d-6c3f, U+6c43, U+6c46, U+6c49-6c4f, U+6c54-6c55, U+6c58, U+6c5a-6c5c, U+6c5e, U+6c64-6c69, U+6c6b-6c6f, U+6c71-6c75, U+6c78-6c79, U+6c7c, U+6c7e, U+6c82, U+6c84-6c87, U+6c8c-6c8d, U+6c8f, U+6c93-6c94, U+6c98, U+6c9a, U+6c9d, U+6c9f, U+6ca2, U+6ca5-6ca8, U+6caa, U+6cac-6cb2, U+6cb4-6cb5, U+6cba, U+6cbc, U+6cc2-6cc3, U+6cc5-6cc7, U+6cd0-6cd2, U+6cd4, U+6cd6-6cd7, U+6cd9) ); /* noto-sans-tc-[61]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-61-400-normal.woff2", $range: (U+6a31-6a32, U+6a35, U+6a3b, U+6a3e-6a40, U+6a47-6a48, U+6a50, U+6a52, U+6a55-6a57, U+6a5a-6a5b, U+6a5e, U+6a62, U+6a66, U+6a6a, U+6a71, U+6a79, U+6a7c, U+6a7e-6a81, U+6a84, U+6a87, U+6a89, U+6a8d-6a8e, U+6a90-6a92, U+6a97, U+6a9c, U+6a9e-6aa1, U+6aa3-6aa5, U+6aa8, U+6aab, U+6aae, U+6ab5, U+6aba, U+6abe, U+6ac2, U+6ac5-6ac6, U+6ac8-6ac9, U+6acc, U+6ad3, U+6ada-6adb, U+6add-6adf, U+6ae3, U+6ae7-6ae8, U+6aea-6aec, U+6af1, U+6af3, U+6af8, U+6afa, U+6afc, U+6b05, U+6b09, U+6b0e-6b13, U+6b17, U+6b1d-6b1e, U+6b25, U+6b2c, U+6b31, U+6b35-6b37, U+6b39, U+6b3b, U+6b40, U+6b43, U+6b46, U+6b48, U+6b53-6b55, U+6b59, U+6b5b, U+6b5f-6b60, U+6b68-6b69, U+6b6f, U+6b74, U+6b7a, U+6b7c, U+6b7f-6b84, U+6b86-6b87, U+6b89, U+6b8b, U+6b8d, U+6b91-6b93, U+6b9b, U+6b9e, U+6ba1-6ba2, U+6ba4, U+6baa-6bab, U+6bad-6bae, U+6bb2-6bb4) ); /* noto-sans-tc-[62]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-62-400-normal.woff2", $range: (U+6900, U+6902, U+6904, U+6906-6907, U+6909, U+690b, U+690f-6910, U+6917, U+691a-691c, U+6925, U+692a, U+692c-692d, U+6932, U+6934, U+6939, U+693c-6940, U+6942, U+6949, U+6952, U+6954-6957, U+6959, U+695b-695f, U+6961-696c, U+696e-6970, U+6973-6974, U+6976, U+6978-697a, U+697c, U+6980, U+6984-6986, U+6988-698a, U+698d-698e, U+6990-6991, U+6994, U+6996-699b, U+699e, U+69a3-69a7, U+69ab, U+69ad, U+69af, U+69b1, U+69b3, U+69b6-69b7, U+69bb-69bc, U+69bf, U+69c1, U+69c3-69c5, U+69c7, U+69ca, U+69cc, U+69ce, U+69d0-69d1, U+69d4, U+69d8-69d9, U+69db, U+69df, U+69e4, U+69e8-69ea, U+69ed-69ee, U+69f1-69f4, U+69f6, U+69f8, U+69fa-69fb, U+69ff-6a00, U+6a05, U+6a0a-6a0b, U+6a17-6a18, U+6a1b, U+6a28-6a2b) ); /* noto-sans-tc-[63]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-63-400-normal.woff2", $range: (U+67d9, U+67db-67e0, U+67e2, U+67e4, U+67e9-67ea, U+67f0, U+67f2, U+67f6-67f8, U+67fa-67fb, U+67fe, U+6800-6805, U+6808-6809, U+680b, U+680e-680f, U+6811-6812, U+6814, U+6816, U+6818, U+681c-681e, U+6820, U+6822, U+6825, U+6827-6829, U+682b, U+682e-682f, U+6831-6834, U+683a-683b, U+683e, U+6840-6841, U+6844-6845, U+6849, U+684e, U+6853, U+6855-6856, U+685c-685d, U+685f, U+6861-6863, U+6865-6869, U+686b, U+686d, U+686f, U+6871-6872, U+6874-6875, U+6877, U+6879, U+687b-687c, U+687e, U+6880, U+6882-6883, U+6886, U+688f, U+6891-6892, U+6894, U+6896, U+6898, U+689b-689c, U+689f-68a0, U+68a2-68a3, U+68a6, U+68a9, U+68b1-68b2, U+68b4, U+68b6, U+68c0, U+68c3, U+68c6, U+68c8, U+68ca, U+68d0-68d1, U+68d3, U+68d6, U+68e1, U+68e3, U+68e6, U+68e8-68ec, U+68ef-68f1, U+68f3, U+68f6-68f7, U+68f9, U+68fb-68fd) ); /* noto-sans-tc-[64]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-64-400-normal.woff2", $range: (U+66a7, U+66aa, U+66b2-66b3, U+66b5, U+66b8-66bc, U+66be, U+66c1, U+66c4, U+66c7-66c8, U+66cc, U+66cf, U+66d5, U+66d8-66db, U+66df, U+66e1-66e2, U+66e8-66e9, U+66ef, U+66f1, U+66f5, U+66f7, U+66fa, U+66fd, U+6705, U+670a, U+670f-6710, U+6713-6715, U+6718-6719, U+6720, U+6722-6727, U+6729, U+672e, U+6733, U+6736, U+6738-6739, U+673f-6740, U+6742, U+6745, U+6747-6748, U+674b-674d, U+6753, U+6755, U+6759, U+675d-675e, U+6760, U+6762-6763, U+6767-676a, U+676c, U+676e, U+6772-6777, U+677a-677c, U+6782, U+6786-6787, U+678a-678c, U+678e-678f, U+6791-6793, U+6796, U+6798-6799, U+679f-67a3, U+67a5, U+67aa-67ae, U+67b0, U+67b2-67b5, U+67b7-67bc, U+67c0-67c3, U+67c5-67c6, U+67c8-67ca, U+67ce, U+67d2, U+67d8) ); /* noto-sans-tc-[65]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-65-400-normal.woff2", $range: (U+655d, U+6561, U+6564-6565, U+6567, U+656b, U+656d-656e, U+6573, U+6576, U+6579-657b, U+6581, U+6586, U+6588-6589, U+658b, U+658e, U+6593, U+6595, U+659b, U+659d, U+659f-65a1, U+65a9, U+65ab, U+65ad, U+65b2-65b3, U+65b5, U+65bb, U+65be-65bf, U+65c2-65c4, U+65c6, U+65cc, U+65ce, U+65d2, U+65d6, U+65db, U+65e1, U+65e3, U+65e7, U+65ee-65f0, U+65f2-65f4, U+65f7-65f8, U+65fc-65fd, U+6600, U+6603-6605, U+6609, U+660d, U+6610-6611, U+6619, U+661c-661e, U+6621-6622, U+6624, U+6626, U+6629, U+662b, U+6630, U+6633-6636, U+6639-663d, U+6640-6641, U+6644-6645, U+664a-664c, U+6653-6657, U+6659, U+665b, U+665d-665e, U+6661-6667, U+6669, U+666c, U+6672-6673, U+6677-6679, U+667b-667e, U+6681-6684, U+668b-6690, U+6692, U+6698, U+669d, U+669f-66a0, U+66a6) ); /* noto-sans-tc-[66]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-66-400-normal.woff2", $range: (U+6427-6428, U+642a-642b, U+642f-6430, U+6432, U+6434, U+6437, U+643a, U+643d-6444, U+6446-6447, U+644a-644b, U+644e, U+6450-6453, U+6456, U+6459, U+645b-645c, U+645e, U+6460-6461, U+6463-6465, U+6468, U+646c-646e, U+6470, U+6472-6477, U+6479, U+647b, U+647d, U+6480, U+6482, U+6485, U+648b-648c, U+6491, U+6493, U+6496-649a, U+649d, U+649f-64a0, U+64a2-64a3, U+64ac, U+64b1, U+64b3-64b4, U+64b7-64b9, U+64bb, U+64be, U+64c0, U+64c3-64c4, U+64d0, U+64d2, U+64d5, U+64d7-64d8, U+64e1-64e4, U+64e7, U+64e9, U+64ed, U+64ef-64f0, U+64f3, U+64f8, U+64fb-64fc, U+64ff, U+6504-6506, U+6509, U+6511-6512, U+6516, U+6518-6519, U+651b, U+6520-6523, U+6525-6526, U+6529, U+652b, U+652e, U+6530, U+6532, U+6534-6535, U+6537-6538, U+653a, U+653d, U+6542-6543, U+6549, U+654c-654e, U+6554-6555, U+655b) ); /* noto-sans-tc-[67]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-67-400-normal.woff2", $range: (U+630d-630e, U+6310, U+6312-6313, U+6319-631b, U+631d-6321, U+6323-6325, U+632d-632e, U+6332, U+6334-6339, U+633b-633c, U+633e-6340, U+6342-6346, U+634b-634c, U+634e, U+6352, U+6357, U+635a, U+635c, U+635e-635f, U+6361, U+6363, U+6365, U+6369, U+636b-636d, U+636f-6370, U+6373, U+6375-6376, U+637a-637b, U+637d, U+6381, U+6384, U+6387, U+638a, U+638d-638e, U+6390, U+6394-6397, U+639e-639f, U+63a3-63a4, U+63a6, U+63ac-63af, U+63b1-63b4, U+63b7, U+63b9-63bb, U+63bd-63be, U+63c3-63c4, U+63c8, U+63cd-63ce, U+63d1, U+63d6, U+63dc, U+63de, U+63e0, U+63e3-63e4, U+63e6, U+63e9, U+63f0, U+63f2-63f3, U+63f5-63f8, U+63fa, U+63fc-63fe, U+6400-6402, U+6405-6406, U+6409-640c, U+6410, U+6414-6415, U+6418, U+641b, U+641f-6423, U+6425-6426) ); /* noto-sans-tc-[68]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-68-400-normal.woff2", $range: (U+61c6, U+61ca-61cd, U+61d0, U+61d2, U+61de-61e0, U+61e3, U+61e6, U+61e8, U+61ed-61ee, U+61f5, U+61f9-61fa, U+61fd-61fe, U+6207, U+6209, U+620d-620e, U+6213-6215, U+6219, U+621b, U+621d-6223, U+6225-6227, U+6229, U+622b-622c, U+622e-622f, U+6231, U+6238, U+623b, U+623d-623e, U+6242-6243, U+6246, U+6248-6249, U+624c, U+6251, U+6255, U+6259-625a, U+625e, U+6260-6262, U+6265-6267, U+6269, U+626b-626c, U+6270-6273, U+6275, U+627a-627d, U+6283, U+6285-6286, U+6289, U+628c, U+628e, U+6294, U+629a-629e, U+62a0, U+62a2, U+62a6, U+62a8, U+62af, U+62b3, U+62b6, U+62ba-62bb, U+62be-62bf, U+62c2, U+62c4-62c5, U+62c8, U+62ca, U+62cf, U+62d1, U+62d5, U+62d7, U+62d9, U+62dd, U+62df-62e3, U+62e5-62e8, U+62ee, U+62f4-62fb, U+62fd, U+6300, U+6302, U+6308, U+630c) ); /* noto-sans-tc-[69]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-69-400-normal.woff2", $range: (U+60ac-60ad, U+60af-60b1, U+60b3-60b5, U+60b8, U+60bb, U+60bd-60be, U+60c0, U+60c6-60c7, U+60ca-60cb, U+60d3-60d5, U+60d7-60db, U+60dd, U+60e2-60e3, U+60e6-60f0, U+60f2, U+60f4, U+60f6, U+60fa-60fb, U+60ff-6100, U+6103, U+6106, U+610a-610b, U+610d-610e, U+6110, U+6112-6116, U+6120, U+6123-6124, U+6128-6130, U+6134, U+6136, U+613c-613f, U+6144, U+6146-6147, U+6149-614a, U+614d, U+6151-6153, U+6159-615a, U+615c-615f, U+6164-6165, U+6169-616d, U+616f, U+6171-6175, U+6177, U+617a, U+617c, U+617f-6180, U+6187, U+618a-618e, U+6192-6194, U+6199-619b, U+619f, U+61a1, U+61a7-61a8, U+61aa-61af, U+61b8, U+61ba, U+61bf, U+61c3) ); /* noto-sans-tc-[70]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-70-400-normal.woff2", $range: (U+5f78, U+5f7b, U+5f7d, U+5f82-5f84, U+5f87, U+5f89-5f8a, U+5f8d, U+5f93, U+5f95, U+5f98-5f99, U+5f9b-5f9c, U+5fa0, U+5fa4, U+5fa6-5fa8, U+5fab-5fad, U+5fb3-5fb4, U+5fbc, U+5fc4, U+5fc6, U+5fc9, U+5fcb, U+5fce-5fd6, U+5fdc-5fdf, U+5fe1, U+5fe4, U+5fe7, U+5fea, U+5fec-5fee, U+5ff1, U+5ff3, U+5ff8, U+5ffa-5ffc, U+5fff-6000, U+6002, U+6005, U+600a, U+600d, U+600f-6010, U+6014, U+6017, U+6019-601c, U+601e, U+6020, U+6022, U+6026, U+6029, U+602b-602c, U+602e-602f, U+6031, U+6033-6035, U+6039, U+603c, U+6040-6043, U+6045, U+6047, U+604a-604c, U+604f, U+6053, U+6059-605b, U+605d, U+6060, U+6063, U+6067, U+606a-606b, U+606e, U+6072-6076, U+6078, U+607a, U+607c, U+607f-6081, U+6083, U+6086, U+608a, U+608c, U+608e, U+6092-6093, U+6095-6097, U+609b, U+609d, U+60a2, U+60a6-60a7, U+60a9-60aa) ); /* noto-sans-tc-[71]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-71-400-normal.woff2", $range: (U+5e34, U+5e37, U+5e3a, U+5e3c, U+5e40, U+5e42-5e44, U+5e47, U+5e54, U+5e57-5e5b, U+5e5e-5e5f, U+5e61-5e62, U+5e64, U+5e6a, U+5e6c, U+5e6e, U+5e75, U+5e77, U+5e7a, U+5e80-5e81, U+5e83, U+5e86, U+5e88, U+5e8b, U+5e90, U+5e92, U+5e96, U+5e99, U+5e9b, U+5e9d-5ea2, U+5ea4-5ea5, U+5eb3-5eb6, U+5eb9, U+5ebe, U+5ec3-5ec4, U+5ec6, U+5ecb-5ecd, U+5ed0-5ed2, U+5ed4-5ed5, U+5ed8-5ed9, U+5edb, U+5edd, U+5ee1, U+5ee8-5ee9, U+5eec, U+5eef-5ef0, U+5ef4-5ef5, U+5ef8, U+5efb-5efc, U+5efe, U+5f01-5f03, U+5f05, U+5f07-5f09, U+5f0b-5f0e, U+5f10-5f12, U+5f14, U+5f16, U+5f1b, U+5f1d, U+5f22, U+5f25, U+5f28-5f29, U+5f2d, U+5f2f-5f30, U+5f36, U+5f38-5f39, U+5f3c, U+5f3e, U+5f40-5f42, U+5f45-5f46, U+5f4a, U+5f50-5f52, U+5f54, U+5f56-5f58, U+5f5a-5f5e, U+5f61, U+5f63, U+5f66-5f67, U+5f6b, U+5f72-5f74, U+5f76) ); /* noto-sans-tc-[72]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-72-400-normal.woff2", $range: (U+5ce0-5ce1, U+5ce5-5ce6, U+5ce8-5cea, U+5ced-5cee, U+5cf1, U+5cf4-5cf5, U+5cf8, U+5cfe-5d00, U+5d06, U+5d08, U+5d0a-5d0d, U+5d15, U+5d18, U+5d1a, U+5d1d, U+5d1f-5d22, U+5d24, U+5d26-5d28, U+5d2c-5d2e, U+5d33-5d35, U+5d3d, U+5d3f, U+5d42-5d43, U+5d46-5d47, U+5d49-5d4b, U+5d4e, U+5d52-5d53, U+5d57-5d59, U+5d5b-5d5c, U+5d65, U+5d68-5d69, U+5d6b-5d6c, U+5d6f, U+5d74-5d75, U+5d7e-5d7f, U+5d81-5d82, U+5d85-5d88, U+5d8b-5d8c, U+5d92, U+5d94, U+5d97, U+5d99, U+5d9d, U+5da0-5da2, U+5da7, U+5da9-5daa, U+5dae, U+5db2, U+5db4, U+5db7-5db8, U+5dbd, U+5dc2-5dc5, U+5dc9, U+5dcb-5dcd, U+5dd2, U+5dd6, U+5dd8, U+5ddb-5ddc, U+5de0, U+5de3, U+5de9, U+5df0, U+5df3, U+5df5, U+5df9, U+5dfb-5dfd, U+5e00-5e01, U+5e04-5e05, U+5e0a, U+5e11, U+5e14, U+5e18-5e1c, U+5e1f-5e22, U+5e27-5e28, U+5e2f-5e30) ); /* noto-sans-tc-[73]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-73-400-normal.woff2", $range: (U+5b80-5b82, U+5b84, U+5b8d, U+5b92-5b93, U+5b95-5b96, U+5b9f-5ba1, U+5ba6-5ba8, U+5baa-5bad, U+5bbd-5bbe, U+5bc0-5bc1, U+5bc3, U+5bd0-5bd1, U+5bd4-5bd8, U+5bdb-5bdd, U+5be4-5be5, U+5bef, U+5bf3, U+5bfb, U+5bfe-5bff, U+5c02-5c03, U+5c05, U+5c09, U+5c0c, U+5c10, U+5c12-5c13, U+5c15, U+5c18-5c19, U+5c1b, U+5c1d-5c1f, U+5c22, U+5c25, U+5c27-5c28, U+5c2a-5c2b, U+5c34, U+5c38, U+5c3d, U+5c42, U+5c44, U+5c47, U+5c49-5c4a, U+5c50, U+5c53, U+5c58-5c59, U+5c5b, U+5c5d, U+5c61, U+5c63, U+5c68, U+5c6d-5c6e, U+5c74, U+5c79-5c84, U+5c86, U+5c88, U+5c8a-5c8d, U+5c92-5c9c, U+5ca0, U+5ca2-5ca3, U+5ca5-5ca7, U+5cab-5cad, U+5cb5, U+5cb7, U+5cba-5cbb, U+5cc1, U+5cc8, U+5cca-5ccb, U+5cce, U+5cd2, U+5cd6, U+5cd8-5cda, U+5cdf) ); /* noto-sans-tc-[74]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-74-400-normal.woff2", $range: (U+5a51, U+5a53, U+5a56-5a57, U+5a5d-5a5e, U+5a60-5a62, U+5a65, U+5a67, U+5a6a, U+5a6c-5a6d, U+5a73-5a76, U+5a7a-5a7c, U+5a81-5a84, U+5a8c, U+5a90, U+5a93, U+5a96-5a97, U+5a9c, U+5a9e-5aa0, U+5aa4, U+5aa7, U+5aab-5aac, U+5aae-5aaf, U+5ab1, U+5ab4-5ab5, U+5ab8, U+5aba-5abc, U+5abe-5abf, U+5ac3-5ac4, U+5ac6-5acb, U+5acf-5ad2, U+5ad4-5adc, U+5ae0-5ae1, U+5ae3, U+5ae5-5ae6, U+5ae8, U+5aea-5aeb, U+5aee, U+5af0, U+5af2, U+5af5, U+5afa, U+5aff, U+5b01, U+5b05, U+5b08, U+5b0b, U+5b11, U+5b16-5b17, U+5b19, U+5b1b, U+5b1d, U+5b21-5b23, U+5b28, U+5b2a-5b2d, U+5b32, U+5b34, U+5b36-5b38, U+5b3e-5b40, U+5b43-5b46, U+5b4b-5b4c, U+5b51, U+5b53, U+5b59, U+5b5b-5b5c, U+5b62, U+5b65, U+5b6c-5b6e, U+5b70-5b73, U+5b75, U+5b7a-5b7b, U+5b7d, U+5b7f) ); /* noto-sans-tc-[75]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-75-400-normal.woff2", $range: (U+590b-590c, U+590e, U+5910-5911, U+5914, U+5919, U+591b, U+591f, U+5923-5924, U+592c, U+5932, U+5938-593a, U+5940, U+5942, U+5944, U+594b-594c, U+594e, U+5950, U+5953, U+5956, U+5958, U+595a, U+5961, U+5966, U+5968-5969, U+596c-596d, U+5975, U+5977, U+597b-597c, U+597e, U+5980-5981, U+5986-5988, U+598a, U+598f, U+5997-5998, U+599f-59a3, U+59a6-59a7, U+59a9, U+59ab-59ac, U+59af, U+59b1-59b2, U+59b6, U+59b8, U+59ba, U+59be, U+59c1, U+59c3, U+59c7-59c9, U+59cd-59ce, U+59d2, U+59d6-59d9, U+59dd-59de, U+59e0, U+59e3-59e5, U+59e9-59eb, U+59ee, U+59f1-59f3, U+59f5-59f9, U+59fc-59fd, U+5a00, U+5a04-5a07, U+5a09, U+5a0c, U+5a11, U+5a13, U+5a16-5a17, U+5a1a, U+5a1e, U+5a20, U+5a23-5a24, U+5a29-5a2b, U+5a2d-5a2f, U+5a32-5a34, U+5a38, U+5a3c, U+5a3f-5a44, U+5a47-5a48, U+5a4a, U+5a4c-5a4d, U+5a50) ); /* noto-sans-tc-[76]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-76-400-normal.woff2", $range: (U+57a1, U+57a4, U+57a6, U+57a9, U+57ab, U+57b5, U+57b8-57bb, U+57c2, U+57c5-57c8, U+57cc, U+57cf, U+57d2, U+57dc-57de, U+57e1-57e2, U+57e5, U+57e7, U+57ed-57ee, U+57f0, U+57f3-57f6, U+57f8, U+57fb-57fd, U+5800-5801, U+5803-5804, U+5807, U+5809-580b, U+580d-580e, U+5810-5811, U+5814-5815, U+5819, U+581d-581e, U+5820, U+5823, U+5826, U+582c-582d, U+5830, U+583a, U+583f-5841, U+5848, U+584b, U+584d, U+584f, U+5852, U+5859-585a, U+585c, U+5861, U+5864, U+5868-5869, U+586c-586d, U+5871-5872, U+5879, U+587c-5881, U+5887-5889, U+588e, U+5890-5892, U+5896-5899, U+589d, U+58a1, U+58a3, U+58a6, U+58a9, U+58ac, U+58b0-58b1, U+58bb-58bc, U+58c2, U+58c5-58c6, U+58ca, U+58cc, U+58ce, U+58d0-58d1, U+58d5, U+58d9-58da, U+58df-58e0, U+58e9, U+58ec, U+58ee, U+58f1-58f3, U+58f6-58f7, U+58fb-58fc, U+5900, U+5902, U+5906, U+5909-590a) ); /* noto-sans-tc-[77]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-77-400-normal.woff2", $range: (U+566f, U+5671-5672, U+5676, U+567a-567c, U+5680, U+5684-5686, U+568c, U+568e-568f, U+5692-5693, U+5697-5699, U+569c, U+569e, U+56a1-56a7, U+56a9, U+56ab-56ad, U+56af, U+56b3, U+56b5-56b6, U+56b8, U+56bf-56c1, U+56c3, U+56c5, U+56c7-56c8, U+56cb-56cc, U+56d2-56d4, U+56d6-56d9, U+56df, U+56e1-56e5, U+56ea-56ec, U+56ee-56ef, U+56f1-56f4, U+56f7, U+56f9, U+56ff-5700, U+5703-5704, U+5706-5707, U+5709-570a, U+570c, U+570f, U+5711, U+5717, U+571c, U+5723-5724, U+5727, U+5729-572a, U+572c, U+572e-572f, U+5734-5735, U+573b, U+5741, U+574b-574d, U+574f, U+5752, U+5754, U+575a-5760, U+5763, U+5768-5769, U+576b, U+576d, U+576f-5770, U+5772-5775, U+5777, U+577b-577d, U+5780, U+5784, U+5788, U+578c, U+578e, U+5792-5793, U+5795, U+579a-579b, U+579f-57a0) ); /* noto-sans-tc-[78]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-78-400-normal.woff2", $range: (U+5551, U+5553, U+5555-5557, U+555c, U+5562-5563, U+5567, U+5569, U+556b-556c, U+5570, U+5575-5579, U+557b-557c, U+557f, U+5581, U+5583, U+5586, U+5588, U+558b, U+558f, U+5591, U+5599, U+559f, U+55a1, U+55a3, U+55a5-55a6, U+55a8-55a9, U+55ab, U+55ad, U+55b0-55b1, U+55b3, U+55b6-55b7, U+55b9, U+55bc-55bd, U+55c4-55c5, U+55c7, U+55c9, U+55cc-55cd, U+55d0, U+55d2, U+55d4-55d9, U+55db, U+55dd-55df, U+55e1-55e6, U+55e9-55ea, U+55ec, U+55ee, U+55f1-55f3, U+55f5-55f7, U+55f9-55fa, U+55fe, U+5600-5602, U+5608, U+560c, U+560f, U+5612-5613, U+5615-5616, U+5618, U+561a, U+561c, U+561e, U+5620, U+5623-5625, U+5627, U+562a, U+562c-562e, U+5630-5631, U+5635-5636, U+5638-563a, U+5640, U+5642-5643, U+5649, U+564c-5650, U+5654, U+5658-565d, U+5664-5666, U+5669, U+566b, U+566d) ); /* noto-sans-tc-[79]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-79-400-normal.woff2", $range: (U+543d, U+543f, U+5441, U+5444-5445, U+5447, U+5449, U+544b-544d, U+5450-5455, U+5457, U+545b-545c, U+545f-5460, U+5463-5464, U+546a-5472, U+5474, U+5476, U+5478, U+547b, U+547e-547f, U+5482-5488, U+548a, U+548d-5491, U+5494, U+5498-549d, U+54a1-54a5, U+54ab, U+54ad-54af, U+54b5, U+54b7, U+54bb-54bc, U+54be-54bf, U+54ca, U+54cc, U+54cf-54d2, U+54d4, U+54d6-54d7, U+54da, U+54de-54df, U+54e2, U+54e4, U+54e7, U+54eb, U+54f3, U+54fd, U+54ff, U+5501-5502, U+5504-5506, U+550a, U+550c, U+550e-550f, U+5511-5513, U+5516-5517, U+551a-551b, U+551e, U+5520, U+5524, U+5526-5527, U+552a, U+552c-552d, U+5530, U+5532-5533, U+5535-5536, U+553b-553c, U+553e-553f, U+5541-5542, U+5544-5545, U+5547, U+5549, U+554b, U+554d-554e, U+5550) ); /* noto-sans-tc-[80]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-80-400-normal.woff2", $range: (U+52db, U+52e0, U+52e3, U+52e6-52e7, U+52eb, U+52ed-52ee, U+52f0-52f2, U+52f7, U+52f9-52fa, U+5300-5302, U+530a-530b, U+530d, U+530f-5310, U+5315, U+531a, U+531c-531d, U+532d-532e, U+5331, U+5338, U+533b-533e, U+5344-5345, U+534b-534d, U+534f-5350, U+5358, U+535e-535f, U+5362-5364, U+5367, U+5369, U+536b-536c, U+536e-536f, U+5372, U+5374, U+5379-537a, U+537c-537d, U+5382, U+5385, U+5389, U+538b-538c, U+538e, U+5392-5396, U+5399, U+53a0-53a2, U+53a4-53a6, U+53a8-53a9, U+53ae, U+53b0, U+53b3-53b4, U+53b6-53b7, U+53b9, U+53bf, U+53c1, U+53c4, U+53ce-53cf, U+53d2, U+53d5, U+53d9-53da, U+53df-53e1, U+53e7-53e9, U+53f1, U+53f5-53f6, U+53f9, U+53fb-53fd, U+5400-5402, U+5405-5407, U+540f, U+5412, U+5414-5417, U+541a, U+5420-5421, U+5424-5425, U+5428-5429, U+542c-542f, U+5431-5432, U+5434, U+5437) ); /* noto-sans-tc-[81]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-81-400-normal.woff2", $range: (U+518f, U+5191, U+5193, U+5195-5197, U+519a-519c, U+519e, U+51a2, U+51a6-51a9, U+51ab, U+51ad-51af, U+51b1-51b6, U+51ba-51c0, U+51c3-51c5, U+51c7, U+51c9-51cb, U+51ce-51d1, U+51d4, U+51d6, U+51d9, U+51db-51dc, U+51df, U+51e4, U+51e6, U+51e9-51ea, U+51ed, U+51ef, U+51f4-51f5, U+51fc, U+51ff, U+5201-5202, U+5204-5205, U+5208, U+520b, U+520d-520e, U+5213, U+5215-5216, U+5218, U+521a, U+5220, U+5223, U+5226-5228, U+5232-5234, U+5239, U+523c, U+5241-5242, U+5244, U+5249, U+524c, U+5251-5252, U+5255, U+5257, U+525c, U+525e, U+5261, U+5263-5265, U+526e, U+5270, U+5273-5274, U+5277, U+527d, U+527f, U+5281-5282, U+5284, U+528a, U+528c, U+528f, U+5292-5294, U+529d, U+52a6, U+52ac-52ad, U+52b1-52b5, U+52b9, U+52bb-52bc, U+52be-52c0, U+52c5, U+52cb, U+52cd, U+52d0-52d1, U+52d6-52d7) ); /* noto-sans-tc-[82]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-82-400-normal.woff2", $range: (U+5032, U+5036, U+503a-503b, U+503e, U+5040-5041, U+5043, U+5045-5046, U+5048, U+504a-504e, U+5051-5053, U+505d-5060, U+5063, U+506a, U+506f-5072, U+5078, U+507a-507b, U+507f-5080, U+5088-5089, U+508b-508c, U+508e, U+5092, U+5095-5096, U+509a-509d, U+50a3, U+50a5, U+50a8, U+50af, U+50b1, U+50b4, U+50ba, U+50c2, U+50c6-50ca, U+50cd-50ce, U+50d6, U+50d9, U+50dd-50df, U+50e1, U+50e3, U+50e5-50e6, U+50e8-50ea, U+50ec-50f0, U+50f3, U+50fb, U+50fe, U+5101-5102, U+5105-5109, U+510b-510e, U+5110, U+5113-5115, U+5117, U+511a-511c, U+511e, U+5120-5121, U+5125, U+512b, U+5131, U+5134-5135, U+5138-513c, U+5140, U+514e, U+5150-5151, U+5155-5157, U+515a, U+515f, U+5162, U+516a, U+516e, U+5172, U+5174, U+5179, U+517b, U+517d, U+5182, U+5186, U+5188-5189, U+518b) ); /* noto-sans-tc-[83]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-83-400-normal.woff2", $range: (U+4f22, U+4f24, U+4f29-4f2b, U+4f2d, U+4f31-4f32, U+4f35, U+4f37, U+4f39, U+4f3b, U+4f3e, U+4f41-4f43, U+4f47, U+4f49, U+4f4c, U+4f52, U+4f57-4f58, U+4f5a, U+4f5d-4f5f, U+4f61, U+4f63-4f64, U+4f67, U+4f6a, U+4f6e-4f6f, U+4f72, U+4f74, U+4f76-4f7b, U+4f7d-4f7e, U+4f80-4f82, U+4f84, U+4f89-4f8a, U+4f8e-4f94, U+4f96-4f98, U+4f9a, U+4f9e, U+4fa0-4fa3, U+4fa5-4fa8, U+4faa-4fac, U+4fb2-4fb3, U+4fb7-4fba, U+4fc0-4fc1, U+4fc5-4fc7, U+4fcb, U+4fcd-4fce, U+4fd1, U+4fd3-4fd4, U+4fd8-4fdc, U+4fdf, U+4fe2-4fe5, U+4fe8-4fea, U+4fec-4fed, U+4ff3-4ff6, U+4ff8-4ffa, U+4ffd, U+5000, U+5002, U+5005, U+5008, U+500c, U+500f, U+5013-5015, U+501b-501c, U+501e, U+5022-5025, U+5027-5028, U+502c-502e, U+5030-5031) ); /* noto-sans-tc-[84]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-84-400-normal.woff2", $range: (U+3a17, U+3a52, U+3b22, U+3bd7, U+3bff, U+3ca5, U+3d68, U+3ddb, U+3de7, U+3deb, U+3e03, U+3e74, U+3f08, U+3f0e, U+3f21, U+3f97, U+4102, U+411b, U+4181, U+43c8, U+4552, U+4576, U+46e5, U+4837, U+493d, U+4a3b, U+4d09, U+4e02, U+4e04-4e05, U+4e0c, U+4e0f-4e10, U+4e15, U+4e17, U+4e1b, U+4e21-4e22, U+4e25, U+4e27, U+4e31, U+4e34, U+4e36-4e37, U+4e3d, U+4e3f-4e42, U+4e44, U+4e47, U+4e49, U+4e4c, U+4e52-4e54, U+4e57, U+4e5a-4e5b, U+4e60-4e61, U+4e69, U+4e6d, U+4e78, U+4e80-4e81, U+4e85, U+4e87, U+4e89-4e8a, U+4e8d, U+4e8f, U+4e93, U+4e96, U+4e98-4e99, U+4e9c, U+4e9f-4ea0, U+4ea2, U+4ea5, U+4ea9, U+4eb0, U+4eb2-4eb3, U+4eb5-4eb7, U+4eb9, U+4ebb-4ebc, U+4ebf, U+4ec2-4ec6, U+4ec8-4ec9, U+4ecf, U+4ed1, U+4ed3, U+4edc-4ee1, U+4ee7-4eeb, U+4eee-4eef, U+4ef1, U+4ef3-4ef5, U+4efa, U+4efc, U+4f00, U+4f02-4f03, U+4f05, U+4f07-4f09, U+4f0b, U+4f0e, U+4f15, U+4f17, U+4f1d-4f1f) ); /* noto-sans-tc-[85]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-85-400-normal.woff2", $range: (U+305c, U+3062, U+306d, U+307a, U+307c, U+3080, U+308e, U+3090-3091, U+3099-309e, U+30a5, U+30c2, U+30c5, U+30ee, U+30f0-30f2, U+30f4-30f6, U+30fd-30fe, U+3105-3106, U+3108, U+310a-310b, U+310d-3119, U+311b-311e, U+3120-3126, U+3128-3129, U+3131, U+3134, U+3137, U+3139, U+3141-3142, U+3145, U+3147-3148, U+314b, U+314d-314f, U+3153, U+315c, U+3160-3161, U+3163-3164, U+3181, U+318d, U+3192-3193, U+3196-3198, U+319d-319f, U+3220-3226, U+3231, U+3268, U+3281, U+328b, U+3291-3292, U+3295-3297, U+3299, U+329d, U+329f, U+32a3-32a4, U+32d6, U+32e1, U+3314, U+3322, U+337f, U+338e-338f, U+339c-339e, U+33a1, U+33c4, U+33d1-33d2, U+3440, U+3449, U+3479, U+3551, U+3569, U+35ad, U+35ce, U+36ac, U+373a, U+3863, U+38ec, U+39b8, U+3a02) ); /* noto-sans-tc-[86]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-86-400-normal.woff2", $range: (U+2749-274f, U+2752-275b, U+275d-275e, U+2761, U+2763, U+2765-2769, U+276e-276f, U+2771, U+2776-277e, U+2780-2782, U+278a-278c, U+2794-2796, U+2798-2799, U+279c-27a6, U+27a8-27ab, U+27ad, U+27af-27b0, U+27b2-27b3, U+27b7-27b9, U+27bc-27bd, U+27bf, U+27e9-27eb, U+27f5-27f6, U+2800, U+28ec, U+2922, U+2934-2935, U+29bf, U+2a2f, U+2b05-2b07, U+2b1b, U+2b50, U+2b55, U+2cf5, U+2e1c-2e1d, U+2f00, U+2f08, U+2f12, U+2f24, U+2f29, U+2f2f, U+2f3c, U+2f3f, U+2f42, U+2f45, U+2f63-2f64, U+2f83, U+2f8f, U+3003-3007, U+3012-3013, U+3016-3019, U+3020-3025, U+3030, U+303d, U+3041, U+3043, U+3045, U+3047, U+3049, U+3052) ); /* noto-sans-tc-[87]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-87-400-normal.woff2", $range: (U+264a-2656, U+2658-265c, U+265e-2660, U+2662-2664, U+2666-2669, U+266b-266f, U+267b, U+2692-2696, U+2698, U+269b-269c, U+26a0-26a1, U+26a3-26a5, U+26aa-26ac, U+26bd-26be, U+26c4-26c5, U+26c8, U+26d1, U+26d3-26d4, U+26e4, U+26e9-26ea, U+26f0-26f5, U+26f9-26fa, U+26fd, U+2701-2702, U+2704-2706, U+2708, U+270a-2712, U+2714, U+2716-2727, U+2729-273e, U+2740-2748) ); /* noto-sans-tc-[88]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-88-400-normal.woff2", $range: (U+2567-2570, U+2572, U+2574, U+2579, U+2580-258a, U+258c-2595, U+2597, U+25a1, U+25a3-25a4, U+25a6-25ac, U+25b0, U+25b4, U+25b7-25b9, U+25bb, U+25bd, U+25bf-25c2, U+25c7-25ca, U+25cc-25cd, U+25d0-25d9, U+25dc-25e6, U+25ea-25eb, U+25ef, U+25fb-25fe, U+2600-2604, U+2607, U+2609-260b, U+260d-2615, U+2618, U+261a-2623, U+262a, U+262d-2630, U+2638-263e, U+2641-2642, U+2648-2649) ); /* noto-sans-tc-[89]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-89-400-normal.woff2", $range: (U+2476-2481, U+2488-2491, U+24b6-24c5, U+24c7-24ca, U+24cc, U+24ce, U+24d0-24df, U+24e1-24ea, U+24f5, U+24ff, U+2501, U+2503-250d, U+250f-2511, U+2513-2515, U+2517-2518, U+251b-251d, U+2520, U+2523-2524, U+2528, U+252b-252c, U+252f, U+2533-2534, U+2537, U+253b-253c, U+2541, U+2543-2545, U+254b, U+2550-2566) ); /* noto-sans-tc-[90]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-90-400-normal.woff2", $range: (U+2139, U+2153, U+2194-2197, U+2199, U+219d-219e, U+21a0, U+21a9-21aa, U+21ac, U+21af-21b1, U+21b3-21b5, U+21ba-21bb, U+21c4, U+21ca, U+21cc, U+21d0, U+21d2-21d4, U+21d8, U+21dd, U+21e2-21e9, U+2200, U+2202, U+2205-2208, U+220e-220f, U+2211-2212, U+2215, U+2217-221a, U+221d-2220, U+2225, U+2227-222b, U+222e, U+2234-2237, U+223c-223d, U+2248, U+2256, U+2260-2261, U+2264-2265, U+226a-226b, U+226e-226f, U+2282-2283, U+2295-2296, U+2299, U+22a5, U+22b0-22b1, U+22b9, U+22bf, U+22c5-22c6, U+22c8, U+22d0-22d1, U+22ee, U+2312-2313, U+2318, U+231a-231b, U+2323, U+2328, U+239d, U+23a0, U+23af, U+23e4, U+23e9-23ea, U+23ec, U+23f0-23f3, U+23fa, U+2445, U+2461-2471, U+2474-2475) ); /* noto-sans-tc-[91]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-91-400-normal.woff2", $range: (U+1ec0-1ec3, U+1ec5-1ec6, U+1ec9, U+1ecb-1ecd, U+1ecf-1ed1, U+1ed3-1ed5, U+1ed7-1edd, U+1edf, U+1ee1, U+1ee3-1ee7, U+1ee9, U+1eeb, U+1eed, U+1eef-1ef1, U+1ef3, U+1ef7, U+1ef9, U+1f62, U+1fa2, U+2001-2006, U+2009-200a, U+200c-200d, U+200f-2012, U+2015-2016, U+201a, U+201e, U+2020-2021, U+2023-2025, U+2028, U+202a-202d, U+202f-2030, U+2032-2033, U+2035, U+2038, U+203e-203f, U+2042-2044, U+2049, U+204d-204e, U+2060-2061, U+2063, U+2070, U+2074-207b, U+207d-2083, U+208a, U+208d-208e, U+20a1, U+20a4, U+20a6, U+20a8-20ab, U+20ad-20ae, U+20b1-20b3, U+20b5, U+20b8-20ba, U+20bd, U+20dd, U+20e3, U+2105, U+2109, U+2112-2113, U+2115-2117, U+2120-2121, U+2126, U+212b) ); /* noto-sans-tc-[92]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-92-400-normal.woff2", $range: (U+11af, U+11b7, U+11bc, U+121b, U+122d, U+129b, U+12a0, U+13a6, U+13a9, U+13ac, U+13af, U+13b3, U+13c2, U+13e3, U+141b, U+1555, U+1557, U+15dc, U+15e8, U+1780-1782, U+1784-1785, U+1787, U+178a, U+178e-1791, U+1793-179c, U+179f, U+17a2, U+17b6-17b9, U+17bb-17bc, U+17bf-17c7, U+17c9, U+17cb, U+17d0, U+17d2, U+17db, U+1871, U+18fa, U+1bff, U+1d00, U+1d04-1d05, U+1d07, U+1d0a-1d0b, U+1d0d, U+1d0f, U+1d17-1d18, U+1d1b-1d1c, U+1d20-1d22, U+1d25, U+1d2c, U+1d2e, U+1d30-1d31, U+1d33-1d3a, U+1d3c, U+1d3e-1d42, U+1d52, U+1d55, U+1d5b, U+1d5e, U+1d9c, U+1da0, U+1dc4-1dc5, U+1e3b, U+1e43, U+1e45, U+1e47, U+1e63, U+1e6d, U+1e73, U+1ea0, U+1ea2, U+1ea4-1ea9, U+1eab-1eaf, U+1eb1, U+1eb3, U+1eb5, U+1eb7, U+1eb9, U+1ebb, U+1ebd-1ebe) ); /* noto-sans-tc-[97]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-97-400-normal.woff2", $range: (U+2c8-2c9, U+2cc-2cd, U+2d0, U+2d8, U+2da, U+2dc, U+2e1-2e3, U+2e7, U+2eb, U+2ee, U+2f1-2ff, U+302-304, U+306-309, U+30c-30d, U+311, U+31b, U+321, U+323-325, U+328-329, U+32b-32c, U+32e-32f, U+331-33a, U+33c-33f, U+348, U+353, U+358-359, U+35c, U+35e-35f, U+361, U+363, U+367-368, U+36c, U+36f, U+530-535, U+537-540, U+55e, U+561-565, U+568-56d, U+56f-576, U+578-582, U+584, U+5a1, U+5a3-5a4, U+5aa, U+5ae, U+5b0-5b4) ); /* noto-sans-tc-[98]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-98-400-normal.woff2", $range: (U+1af, U+1b1, U+1b4-1be, U+1d0, U+1d2, U+1d4, U+1da, U+1dc-1dd, U+1e1, U+1e3-1e4, U+1e7, U+1e9, U+1eb-1ec, U+1f0-1f1, U+1f3-1f5, U+1f7, U+1f9-1ff, U+219, U+221, U+225-226, U+228-22b, U+22e-22f, U+231-235, U+239, U+23b, U+23e, U+250-252, U+254-255, U+259-25e, U+261-263, U+268-26b, U+26d, U+26f-277, U+279-27a, U+27d-281, U+283, U+28a-28c, U+28f, U+292, U+294-296, U+298-29a, U+29c, U+29f, U+2a1-2a2, U+2a4-2a7, U+2a9-2aa, U+2ae-2b3, U+2b5-2b7, U+2b9-2bf, U+2c2-2c4, U+2c6-2c7) ); /* noto-sans-tc-[99]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-99-400-normal.woff2", $range: (U+a1-a2, U+a4, U+a6-a8, U+aa, U+ac, U+af, U+b1, U+b5-b6, U+b8-ba, U+bc-be, U+c0-c8, U+ca-cc, U+ce-d5, U+d8-df, U+f0, U+f5, U+f8, U+fb, U+fe-100, U+102, U+105, U+107, U+109-10b, U+10f, U+112, U+115, U+117, U+119, U+11b, U+11f, U+121, U+123-124, U+127, U+129, U+12c-12d, U+130-13f, U+141-142, U+144, U+148, U+14b-14c, U+14f-153, U+159-15b, U+15e-160, U+163-166, U+169-16a, U+16d-171, U+173-17e, U+192, U+1a0, U+1a4, U+1aa, U+1ac-1ad) ); /* noto-sans-tc-[100]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-100-400-normal.woff2", $range: (U+a3, U+2ca, U+2223, U+2460, U+2640, U+273f, U+301c, U+3107, U+310c, U+4e30, U+4e3e, U+4e5e, U+4e71, U+4f26, U+4f7c, U+4f83, U+50da, U+5243, U+5267, U+529e, U+5321, U+5352, U+5477, U+548b, U+54a6, U+54b2, U+54c2, U+54c4, U+54c6, U+54cd, U+54ee, U+5543, U+55d1, U+55d3, U+55f0, U+55fd, U+560d, U+5629, U+5660, U+56d1, U+56dd, U+57ae, U+57e0, U+57e4, U+5904, U+592d, U+5965, U+5a31, U+5a7f, U+5b5a, U+5bb8, U+5c14, U+5c3b, U+5c5c, U+5c5e, U+5d10, U+5e10, U+5e4c, U+603b, U+604d, U+611c, U+6137, U+61c8, U+62c7, U+6371, U+6382, U+645f, U+64ae, U+64c2, U+651e, U+65f1, U+660a, U+663e, U+673d, U+6784, U+6789, U+67b1, U+67ff, U+6813, U+6854, U+68d8, U+68fa, U+697d, U+6a01, U+6a1e, U+6baf, U+6c08, U+6c17, U+6c2b, U+6c81, U+6cbd, U+6dc6, U+6df9, U+6ed9, U+6ee1, U+6f86, U+6fc1, U+6fdb, U+701f, U+7076, U+715c, U+7194, U+71ee, U+71fb, U+720d, U+72b6, U+7396, U+73af, U+745b, U+746f, U+748b, U+7647, U+7699, U+76ce, U+76de, U+77aa, U+786b, U+7881, U+78ca, U+793c, U+797a, U+79b9, U+79bb, U+79bf, U+7a92, U+7ac7, U+7ae3, U+7b19, U+7b20, U+7b51, U+7b94, U+7cbd, U+7cde, U+7cef, U+7d46, U+7dde, U+7f88, U+80da, U+814b, U+81cd, U+8235, U+8282, U+82b9, U+846b, U+84c1, U+84d3, U+8518, U+8611, U+8783, U+8814, U+8a15, U+8aa6, U+8b2c, U+8ba8-8ba9, U+8bc6, U+8be2, U+8be5-8be6, U+8c22, U+8d05, U+8d27, U+8dbe, U+8e34, U+8e66, U+8ec0, U+9005, U+9082, U+914b, U+916f, U+92c5, U+92f0, U+9318, U+938a, U+93e2, U+964b, U+96c1, U+96cc-96cd, U+96db, U+973e, U+97a0, U+9803, U+9876, U+9879, U+9955, U+99f1, U+9a5b, U+9ab7, U+9abc, U+9c57, U+9c9c, U+9d1b, U+9d26, U+9d51, U+9eef, U+9f99, U+c2a4, U+e253, U+e313-e314, U+e5c7, U+e5c9, U+e8db-e8dc, U+ff2d-ff2e, U+ff34, U+ffe5, U+1f60a, U+1f618, U+1f62d) ); /* noto-sans-tc-[101]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-101-400-normal.woff2", $range: (U+b4, U+10d, U+2d9, U+641, U+6cc, U+e20, U+e29, U+200e, U+20ac, U+2266, U+25be, U+301d-301e, U+3058, U+4e07, U+4e1d, U+4e66, U+4ece, U+4fde, U+5016, U+5180, U+5199, U+51aa, U+5306, U+5386, U+53d8, U+5413, U+541d, U+54ce, U+54e8, U+54fc, U+5571, U+557e, U+558e, U+55a7, U+56a8, U+57a2-57a3, U+58b3, U+5960, U+5992-5993, U+59a4, U+5a55, U+5ab2, U+5afb, U+5b56, U+5bc5, U+5bc7, U+5bf0, U+5cb1, U+5cc7, U+5dff, U+5e93, U+5ed3, U+5f6a, U+60bc, U+61ff, U+6218, U+6292, U+634d, U+6467, U+64f1-64f2, U+6582, U+65fb, U+6615, U+6687, U+66e6, U+66f0, U+6781, U+67f5, U+68a7, U+6a1f, U+6b27, U+6b4e, U+6b73, U+6b79, U+6bcb, U+6c5d, U+6cf5, U+6dee, U+6ec4, U+6ecc, U+6f88, U+701d, U+703e, U+707c, U+7099, U+710a, U+72d9, U+72e9, U+731d, U+739f, U+7463, U+7480, U+74a8, U+7523, U+7526, U+75e0, U+7613, U+7656, U+76bf, U+76d4, U+773a, U+775c, U+775e, U+780c, U+78e1, U+78f7, U+7960, U+7a20, U+7aaf, U+7b08, U+7b71, U+7be4, U+7cec, U+7cf0, U+7d5e, U+7d62, U+7dbe, U+7e1b, U+7ea2, U+7ec4, U+7ec6, U+7edc, U+7eed, U+7efc, U+7f16, U+7f57, U+7fb9, U+7fca, U+803d, U+816e, U+8258, U+82a5, U+82b7, U+8317, U+8338, U+834a, U+83d3, U+8401, U+8469, U+849e, U+854a, U+8559, U+865e, U+8700, U+8759, U+8760, U+8778, U+8782, U+879e, U+87d1, U+8836, U+8944, U+89c8, U+8aac, U+8b74, U+8ba2, U+8ba4, U+8bae, U+8bfb, U+8c4e, U+8cb3, U+8d16, U+8d28, U+8e44, U+8f3b, U+8f3f, U+8f91, U+8fb9, U+8fc4, U+8fde, U+8ff9, U+9076, U+9091, U+90ae, U+90b8, U+9257, U+9310, U+9382, U+93df, U+94fe, U+95a5, U+962e, U+968f-9690, U+9704, U+9713, U+97f6, U+9824, U+986b, U+9884, U+9886, U+98e2, U+991a, U+9986, U+99a5, U+99dd, U+9ab8, U+9b41, U+9b77, U+9bad, U+c774, U+e5d4, U+fe52, U+ff02, U+ff25, U+1f389, U+1f449, U+1f495) ); /* noto-sans-tc-[102]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-102-400-normal.woff2", $range: (U+2cb, U+5d1, U+5d9, U+5e2, U+5e8, U+5ea, U+633, U+e32, U+2252, U+2267, U+2573, U+25b3, U+25c4, U+2713, U+2715, U+30e2, U+4e28, U+4e3c, U+4e4d, U+4e70, U+4f88, U+4fef, U+5018, U+501a, U+5026, U+5137, U+513f, U+51f3, U+524b, U+5254, U+52d8, U+5308, U+5384, U+53cc, U+5436, U+5443, U+5466, U+54a8, U+54bd, U+54c9, U+54cb, U+555e, U+5580, U+560e, U+561f, U+562f, U+566c, U+5679, U+56bc, U+56cd, U+56e7, U+56ed, U+572d, U+57d7, U+582f, U+589f, U+5b09, U+5ba5, U+5c51, U+5c90, U+5cef, U+5d16, U+5d84, U+5dd4, U+5e08, U+5e26, U+5f0a, U+5f20, U+606c, U+61c7, U+620f, U+6254, U+625b, U+62a4, U+62d0, U+62f1, U+63a0, U+63c6, U+63f9, U+6413, U+6417, U+6483, U+64f7, U+650f, U+65a7, U+665f, U+66ae, U+66d6, U+66e0, U+6746, U+6756, U+67d1, U+6837, U+68e0, U+68f5, U+6995, U+69a8, U+69b4, U+69d3, U+6a3d, U+6abb, U+6bb7, U+6bd3, U+6c47, U+6cc4, U+6cd3, U+6dae, U+6e26, U+6e29, U+6eaf, U+6eba, U+6fef, U+7028, U+70b3, U+711a, U+725f, U+7325, U+733f, U+73c0, U+73ee, U+7444, U+745a, U+7487, U+7540, U+75a4, U+7729, U+779e, U+798e, U+79e9, U+7a3d, U+7a4c, U+7a9f, U+7ac4, U+7aff, U+7c27, U+7cd9, U+7d76, U+7e43, U+7ea6, U+7ed9, U+7ff1, U+808b, U+809b, U+80fa, U+827a, U+8309, U+8328, U+832b, U+8396, U+83e0, U+840e, U+8425, U+852d, U+853b, U+8588, U+85e9, U+86b5, U+86e4, U+8718, U+87ec, U+880d, U+8910, U+893b, U+89c1-89c2, U+8b3e, U+8baf, U+8bc1, U+8bdd, U+8c41, U+8c48, U+8cb6, U+8d2d, U+8d5e, U+8fbe, U+9015, U+90a8, U+90b5, U+90e1, U+9169, U+9183, U+91d0, U+91dc, U+9293, U+92f8, U+9472, U+9598, U+95a9, U+95ed, U+95fb, U+9605, U+96c7, U+9739, U+9742, U+9761, U+99ad, U+9ae6, U+9b1a, U+9b44, U+9bc9, U+9d3f, U+9dd7, U+9e7c, U+9e92, U+fe5d-fe5e, U+ff22-ff24, U+ff2f-ff30, U+ff33) ); /* noto-sans-tc-[103]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-103-400-normal.woff2", $range: (U+60, U+f7, U+2198, U+2571, U+258b, U+25b6, U+2661, U+3051, U+3109, U+311a, U+4e11, U+4e24, U+4e2b, U+4ef7, U+4f18, U+4f36, U+4fd0, U+5029-502a, U+5055, U+508d, U+50ad, U+50e7, U+50f1, U+50f5, U+51a5, U+51c8, U+51fb, U+5203, U+524e, U+5288, U+5323, U+53c2, U+5458, U+54a7, U+54b1, U+54b3, U+54b8, U+556a, U+5582, U+55b2, U+55ba, U+55da, U+55dc, U+5614, U+5662, U+5678, U+56c2, U+5742, U+57d5, U+5862, U+58e4, U+58f0, U+5907, U+590d, U+5934, U+5978, U+5984, U+5a25, U+5c06, U+5c62, U+5c91, U+5d01, U+5d1b, U+5e87, U+5eff, U+5f27, U+5f3a, U+5f53, U+6001, U+6168, U+61a9, U+6233, U+62a5, U+62ce, U+62ed, U+638f, U+6399, U+646f, U+6590, U+6631, U+664f, U+6689, U+66dc, U+672f, U+67af, U+67ec, U+68d7, U+6977, U+6a44, U+6c14, U+6c40, U+6c70, U+6c76, U+6cb8, U+6ce3, U+6df3, U+6e20, U+6e43, U+6e5b, U+6ebc, U+6eec, U+6f2c, U+6fb1, U+7009, U+7011, U+701a, U+7117, U+7184, U+72f9, U+7426, U+74bd, U+74cf, U+752b, U+7554, U+75b9, U+7621, U+7671-7672, U+7693, U+76ef, U+7737, U+77a7, U+77b3, U+77bb, U+77da, U+77e2, U+77e9, U+77ef, U+7801, U+7940, U+797f, U+79a7, U+79b1, U+79bd, U+79cd, U+7a6b, U+7ac5, U+7b1b, U+7b77, U+7ca7, U+7dab, U+7db4, U+7db8, U+7dcb, U+7ddd, U+7de0, U+7e55, U+7e9c, U+7ed3, U+7ef4, U+803f, U+8046, U+8087, U+8116, U+81a8, U+8214, U+821c, U+82d4, U+831c, U+8339, U+8350, U+8354, U+8526, U+860a, U+86db, U+8713, U+873b, U+8822, U+8993, U+8a1f, U+8ab9, U+8ad7, U+8bcd, U+8e72, U+8f4e, U+8f9c, U+8fd0, U+8fd8, U+8fe6, U+9042, U+907c, U+91ba, U+9452, U+95e2, U+9631, U+9699, U+96b8, U+9709, U+978d, U+9830, U+98ce, U+9945, U+99ed, U+9a8c, U+9ad3, U+9baa, U+9be8, U+9c77, U+9cf6, U+9d72, U+9e1f, U+9ec4, U+fe31, U+fe55, U+ff03, U+ff20, U+ff3b, U+ff3d, U+1f3fb, U+1f44d, U+1f60d) ); /* noto-sans-tc-[104]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-104-400-normal.woff2", $range: (U+10c, U+161, U+e44, U+2728, U+3081, U+4e13, U+4e19, U+4e1c, U+4e1e, U+4e5c, U+4ea7, U+4ed7, U+4f20, U+4f8d, U+4ffe, U+5021, U+50d5, U+515c, U+51a4, U+51e0, U+521b, U+522b, U+532a, U+534e, U+5355, U+537f, U+5398, U+541f, U+543c, U+544e, U+5509, U+5598, U+5622, U+563f, U+5641, U+566a, U+5695, U+569f, U+56ae, U+56da, U+573a, U+574e, U+584c, U+5885, U+58ae, U+5a1f, U+5ac2, U+5b24, U+5bb0, U+5bde, U+5be1, U+5bfc, U+5c39, U+5c4c, U+5c60, U+5cfb, U+5d11, U+5e76, U+5e7f, U+5e9a, U+5eb8, U+5f13, U+5f64, U+5f6c, U+6127, U+61f2, U+6208, U+620a, U+620c, U+6252, U+62ef, U+6328, U+633d, U+6362, U+63b0, U+63c0, U+63c9, U+640f, U+64a9, U+6514, U+652c, U+655e, U+6583, U+658c, U+6627, U+66f3, U+6734, U+6743, U+676d, U+67c4, U+67da, U+6807, U+68cd, U+68f2, U+690e, U+6b16, U+6b38, U+6b3d, U+6bc6, U+6ca1, U+6cab, U+6d8c, U+6e32, U+6e3e, U+6e58, U+6eef, U+6ef2, U+708a, U+7130, U+7165, U+7172, U+71ed, U+7232, U+7239, U+7261, U+7280, U+72a7, U+72f8, U+73c8, U+7464, U+753b, U+754f, U+755c, U+75d8, U+76ea, U+776b, U+7779, U+777f, U+7784, U+778e, U+77ee, U+79e4, U+7a46, U+7a57, U+7aba, U+7aed, U+7b4d, U+7c7b, U+7c7d, U+7d13, U+7d33, U+7dbb, U+7df9, U+7e46, U+7ea7, U+8085, U+8165, U+81fb, U+82b8, U+82d3, U+8305, U+8335, U+8343, U+83e9, U+840d, U+851a, U+853d, U+8543, U+859b, U+85fb, U+87fb, U+888d, U+88c5, U+8adc, U+8b0a, U+8bb0, U+8bbe, U+8bc4, U+8bf4, U+8c5a, U+8cc3, U+8ce4, U+8d44, U+8e81, U+8f44, U+8f66, U+8fdb, U+900d, U+9063, U+914c, U+9223, U+9226, U+923a, U+925b, U+9264, U+929c, U+92b9, U+9320, U+934d, U+9444, U+957f, U+9591, U+96a7, U+97ad, U+97cc, U+9811, U+9898, U+98ea, U+9921, U+9952, U+9a55, U+9b0d, U+9bca, U+9ebd, U+e60f, U+ff1c-ff1d, U+ff21, U+ff38, U+ff9f, U+fffd, U+1f602) ); /* noto-sans-tc-[105]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-105-400-normal.woff2", $range: (U+e17, U+e22, U+2103, U+25a0, U+266a, U+3014-3015, U+311f, U+4e1a, U+4e50, U+4f10, U+4f6c, U+4f70, U+5006, U+50d1, U+5170, U+518c, U+51f0, U+51f6, U+51f9, U+5219, U+5256, U+525d, U+52c9, U+5349, U+5351, U+5356, U+5375, U+539d, U+53db, U+53ee, U+53f7, U+5492, U+54fa, U+5538, U+55bb, U+55e8, U+5632, U+5757, U+5835, U+58be, U+5937, U+59dc, U+59e8, U+5a49, U+5a9a-5a9b, U+5ab3, U+5b9b, U+5b9e, U+5be8, U+5c37, U+5c4e, U+5d14, U+5d19, U+5d4c, U+5d50, U+5deb, U+5e84, U+5e94, U+5ec2, U+5f17, U+5f26, U+5f55, U+5f77, U+5f7f, U+5fbd, U+6052, U+6064-6065, U+608d, U+609a, U+6101, U+614c, U+621a, U+6237, U+6296, U+62e9, U+632a-632b, U+6488, U+6500, U+652a, U+6556, U+65e0, U+65ec, U+6643, U+6850, U+6893, U+6897, U+68b3, U+68d5, U+6930, U+6960, U+6a11, U+6a3a, U+6ab3, U+6b22, U+6c59, U+6c83, U+6ccc, U+6dea, U+6df5, U+6ef7, U+6f3e, U+6f80, U+6fe4, U+7164, U+71c9, U+722a, U+7260, U+7272, U+73b0, U+74e3, U+7538, U+7586, U+75b5, U+7661-7662, U+77db, U+7838, U+786e, U+788c, U+7950, U+79a6, U+79aa, U+7a40, U+7bf7, U+7c3e, U+7c98, U+7ca5, U+7d21, U+7d2e, U+7dba, U+7dec, U+7e79, U+7ecf, U+7edf, U+7f79, U+8086, U+810a, U+8139, U+813e, U+817a, U+81b3, U+821f, U+8247, U+8259, U+8271, U+839e, U+8431, U+846c, U+849c, U+84b2, U+84c4, U+8513-8514, U+8755, U+8877, U+8881, U+88f9, U+8a1d, U+8a3c, U+8a6d-8a6e, U+8a93, U+8ae7, U+8af7, U+8b17, U+8b5a, U+8ba1, U+8bba, U+8cdc, U+8dea, U+8f6c, U+8f7d, U+8fc7, U+8fd9, U+902e, U+90ca, U+916a, U+916c, U+921e, U+9245, U+935b, U+9594, U+95a8, U+95ee, U+95f4, U+9706, U+971e, U+9756, U+980c, U+9891, U+98b1, U+98fc, U+9903, U+9957, U+99ff, U+9b91, U+9db4, U+9f4b, U+e602-e605, U+e610-e611, U+ff16-ff19) ); /* noto-sans-tc-[106]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-106-400-normal.woff2", $range: (U+2190-2191, U+2193, U+22c1, U+2302, U+25cb, U+2699, U+2709, U+3127, U+4e0e, U+4e18, U+4e3a, U+4e48, U+4e91, U+4eec, U+4f3d, U+4fcf, U+5112, U+524a, U+52a3, U+52ab, U+52c3, U+52f3, U+52fb, U+5320, U+5339, U+533f, U+53e2, U+543e, U+5480, U+5495, U+5497, U+5564, U+5572, U+55c6, U+55ef, U+563b, U+5653, U+5657, U+56b7, U+5824, U+58d8, U+5955, U+5983, U+598d, U+59da, U+59e6, U+5a36, U+5bb5, U+5bc2, U+5bf9, U+5cb3, U+5d17, U+5dbc, U+5e2e, U+60df, U+611a, U+6190, U+61a4, U+61be, U+61fc, U+6284, U+62ac, U+62bc, U+634f, U+636e, U+6398, U+63a9, U+6487, U+6495, U+64ab, U+6577, U+65ac, U+6602, U+6652, U+66f9, U+6761, U+679a, U+683d, U+68ad, U+68b5, U+68da, U+68e7, U+6a38, U+6a59, U+6ae5, U+6b47, U+6b67, U+6b6a, U+6bef, U+6c50, U+6c9b, U+6e23, U+6e34, U+6e4a, U+6e67, U+6ea2, U+6eb6, U+6f20, U+6feb, U+70ed, U+714c, U+715e, U+7199, U+71ac, U+7231, U+7262, U+7409, U+745f, U+7469, U+74ca, U+7535, U+753a, U+75f4, U+7624, U+7682, U+76ba, U+76f2, U+77fd, U+780d, U+7832, U+78c5, U+78ef, U+7901, U+79be, U+79c9, U+79e6, U+7a1a, U+7a62, U+7a84, U+7aca, U+7cb5, U+7cb9, U+7cdf, U+7ce7, U+7d6e, U+7db1, U+7def, U+7e61, U+7e7d, U+7e8f, U+7f38, U+7f77, U+7fa8, U+7fc5, U+7fe1, U+7ff9, U+800d, U+8015, U+8054, U+80a2, U+80aa, U+80ba, U+814e, U+8180, U+819d, U+81c0, U+828b, U+82ad, U+82af, U+83f1, U+83f8, U+8403, U+84bc, U+84c9, U+84ec, U+8523, U+8549, U+8569, U+8591, U+85b0, U+881f, U+884d, U+88d4, U+89c4, U+89c6, U+8a60, U+8a79, U+8b19, U+8bd5, U+8bf7, U+8c03, U+8c79, U+8cc8, U+8d9f, U+8e10, U+8e48, U+8faf, U+9009, U+9017, U+9175, U+9187, U+918b, U+9214, U+946b, U+9470, U+947c, U+9640, U+9675, U+96ef, U+97cb, U+97e9, U+985b, U+99ae, U+99b3, U+9b4f, U+9d09, U+9e9f, U+9edb, U+9f90, U+ff14, U+1f464) ); /* noto-sans-tc-[107]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-107-400-normal.woff2", $range: (U+a5, U+25ce, U+4e56, U+4e9a, U+4ea8, U+4ead, U+4f3a, U+4f51, U+4f62, U+4faf, U+5098, U+50ac, U+5147, U+5173, U+5187, U+51f8, U+52a1, U+52a8, U+52f8, U+535c, U+53ed, U+541e, U+5435, U+5475, U+54a9, U+54c0, U+54c7, U+5589, U+5605, U+5733, U+5764, U+5782, U+57c3, U+5858, U+5893, U+589c, U+58e2, U+5974, U+599e, U+59a8, U+59ec, U+5b66, U+5b99, U+5b9d, U+5bee, U+5c2c, U+5c65, U+5cfd, U+5d0e, U+5dba, U+5de2, U+5e06, U+5e15, U+5ec1, U+5ed6, U+5f00, U+5f4c, U+5f65, U+6055, U+6070, U+609f, U+60b6, U+6241, U+624e, U+626f, U+6291, U+62cc, U+62d8, U+62da, U+62fe, U+6349, U+6367, U+63ea, U+6435, U+6454, U+64a4, U+64b2, U+64bc, U+64bf, U+64c5, U+64ce, U+6558, U+6572, U+65a5, U+65e8, U+65ed, U+6614, U+6670, U+6688, U+672d, U+673a, U+6770, U+68cb, U+6912, U+6953, U+6a61, U+6aac, U+6aaf, U+6ab8, U+6b20, U+6b96, U+6bbf, U+6bc5, U+6c6a, U+6cbe, U+6d59, U+6d78, U+6dc7, U+6deb, U+6e7e, U+6e9c, U+6f3f, U+6f51, U+6f84, U+704c, U+7051, U+70ab, U+70ad, U+70f9, U+7119, U+7149, U+714e, U+71e6, U+72c4, U+72d0, U+72e0, U+7334, U+744b, U+7455, U+7504, U+75ab, U+75b2, U+766e, U+76c3, U+76fc, U+76fe, U+7891, U+7948, U+7a74, U+7b28, U+7c72, U+7cca, U+7ebf, U+7f55, U+7ff0, U+8154, U+81c2, U+81d8, U+81e3, U+81e5, U+8292, U+8299, U+8302, U+8304, U+8332, U+83c1, U+83c7, U+83ca, U+845b, U+8475, U+8490, U+85af, U+8650, U+8667, U+86d9, U+8774, U+8abc, U+8b0e, U+8b39, U+8bed, U+8c54, U+8c6b, U+8c9e, U+8ca7, U+8caa-8cab, U+8ce6, U+8cec-8ced, U+8eb2, U+8eba, U+8fb0, U+901d, U+908f, U+9127, U+91c0, U+91d8, U+9215, U+92b3, U+932b, U+93fd, U+95ca, U+964c, U+96c0, U+970d, U+9716, U+9774, U+97fb, U+9812, U+9913, U+9935, U+99c1, U+9b31, U+9d5d, U+9d6c, U+9e79, U+fe0f, U+fe30, U+ff05, U+ff0b, U+ff10, U+ff15) ); /* noto-sans-tc-[108]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-108-400-normal.woff2", $range: (U+b0, U+926, U+928, U+939, U+93f-940, U+94d, U+200b, U+22ef, U+25ba, U+25c6, U+2665, U+4e08, U+4e2a, U+4e4f, U+4e59, U+4ec7, U+4f0d, U+4f0f, U+4f19, U+4f59, U+4fae, U+5075, U+507d, U+50b2, U+50b5, U+511f, U+5141, U+5146, U+514c, U+5185, U+51dd, U+51fd, U+522e, U+5319, U+533a, U+5378, U+53ad, U+53c9, U+53d1, U+53d4, U+543b, U+5442, U+5446, U+5481, U+54e9, U+5507, U+5565, U+559a, U+55aa, U+5690, U+56ca, U+56fe, U+582a, U+5915, U+5949, U+5962, U+5996, U+59a5, U+59fb, U+5a77, U+5b0c, U+5b5f, U+5bd3, U+5be2, U+5bfa, U+5c41, U+5c48, U+5ca9, U+5d07, U+5ec8, U+5eca, U+5f18, U+5f4e, U+5f59, U+5f6d, U+5f79, U+5fb9, U+6028, U+6068, U+606d, U+6094, U+60f1, U+6108-6109, U+614e, U+6170, U+617e, U+61b2, U+61f8, U+6247, U+626d, U+6276, U+62ab, U+62cb, U+62d3, U+62f3, U+6368, U+6380, U+6492, U+64e0, U+6570, U+6606, U+660f, U+6649, U+6691, U+66a8, U+6749, U+674f, U+6795, U+67f1, U+67f3, U+6842, U+6851, U+687f, U+68df, U+69fd, U+6a58, U+6c27, U+6c88, U+6cca, U+6d29, U+6d66, U+6daf, U+6f01, U+6f58, U+6f6d, U+6f70, U+6fa1, U+6ff1, U+6ffe, U+7058, U+70ae, U+71d9, U+71e5, U+7235, U+7267, U+73ca, U+742a, U+74f7, U+7529, U+758f, U+75bc, U+76c6, U+7955, U+7a00, U+7a3b, U+7b4b, U+7bad, U+7be9, U+7c4c, U+7c60, U+7cfe, U+7dbf, U+7e2b, U+7f9e, U+7fc1, U+7ffc, U+8096, U+809d, U+80de, U+8155, U+816b, U+81df, U+82bd, U+8352, U+8393, U+8404, U+8525, U+856d, U+8606, U+868a, U+87f9, U+886b, U+8870, U+896a, U+896f, U+8a23, U+8a87, U+8ad2, U+8b00, U+8b20, U+8cb8, U+8cca, U+8ce0, U+8d39, U+8d6b, U+8db4, U+8e29, U+8ef8, U+8f1b, U+8f5f, U+8fa8, U+906e, U+9077, U+90aa, U+90b1, U+90c1, U+9165, U+919c, U+92c1, U+95d6, U+95e8, U+975a, U+9817, U+98c6, U+9ecf, U+feff, U+ff06, U+ff0a, U+ff12-ff13) ); /* noto-sans-tc-[109]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-109-400-normal.woff2", $range: (U+627-629, U+631, U+639, U+644, U+64a, U+25cf, U+2606, U+2764, U+3008-3009, U+4e38, U+4e43, U+4ed5, U+4ef0, U+4eff, U+4fe0, U+5085, U+50a2, U+50be, U+5118, U+5211-5212, U+5272, U+52fe, U+5366, U+53b2, U+53ec, U+54ac, U+5587, U+55b5, U+5606, U+561b, U+5751, U+576a, U+57cb, U+58ef, U+58fa, U+594f, U+5951, U+596e, U+59d1, U+5ac1, U+5acc, U+5b8b, U+5c4d, U+5ca1, U+5d29, U+5dfe, U+5e7d, U+5edf, U+5ef7, U+5fa1, U+5faa, U+5fcc, U+5ffd, U+6021, U+6046, U+6062, U+62b9, U+6316, U+6350, U+6478, U+647a, U+6490, U+64b0, U+64e6, U+6524, U+6591, U+659c, U+65a4, U+65e6, U+65f6, U+6607, U+6674, U+6765, U+679d, U+67f4, U+68a8, U+6b3a, U+6c57, U+6c61, U+6c90, U+6cbf, U+6cdb, U+6d69, U+6db5, U+6dd1, U+6e21, U+6f06, U+6f62, U+70d8, U+71c3, U+71d5, U+722c, U+727d, U+72ac, U+72fc, U+731c, U+7336, U+7344, U+7384, U+73ab, U+7433, U+745c, U+7470, U+75d5, U+7652, U+76c8, U+76e7, U+7709, U+7720, U+7740, U+7747, U+7763, U+77ac-77ad, U+7802, U+78a7, U+78b3, U+78c1, U+78da, U+7926, U+796d, U+798d, U+7aae, U+7b52, U+7c92, U+7d68, U+7d81, U+7e31, U+7e5e, U+7e69, U+7e73, U+7f50, U+7f70, U+7f75, U+8058, U+8070, U+80c3, U+8105-8106, U+8108, U+8179, U+818f, U+81a9, U+81ed, U+820c-820d, U+8277, U+82d1, U+8461, U+84b8, U+852c, U+857e, U+8587, U+85e4, U+863f, U+8679, U+86c7, U+8702, U+8776, U+87ba, U+8896, U+88c2, U+88d5, U+88f8, U+8af8, U+8b7d, U+8ca2, U+8d64, U+8d74, U+8d81, U+8d99, U+8e5f, U+8e8d, U+8ecc, U+8ed2, U+8fb1, U+8fc5, U+9022, U+9038, U+905c, U+9081, U+9189, U+9234, U+92d2, U+934a, U+95a3, U+962a, U+9646, U+96d5, U+971c, U+9838, U+9875, U+98c4, U+99db, U+9a45, U+9a5f, U+9a6c, U+9ad2, U+9cf4, U+9d28, U+9daf, U+9df9, U+9e7d, U+9f0e, U+9f52, U+9f9c, U+ff11, U+ff1e) ); /* noto-sans-tc-[110]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-110-400-normal.woff2", $range: (U+2022, U+2500, U+25bc, U+4e1f, U+4e95, U+4f50, U+4f54, U+4f69, U+4fb6, U+4fc4, U+4fca, U+5009, U+50bb, U+5154, U+51cc, U+528d, U+5291, U+52d2, U+52e4, U+5353, U+5360, U+540a-540b, U+5410, U+54f2, U+5514, U+5537, U+558a, U+55ac, U+5617, U+56fd, U+573e, U+5766, U+5783, U+57d4, U+5806, U+5821, U+5857, U+5875, U+58f9, U+592f, U+5954, U+596a, U+59ae, U+59c6, U+59ca, U+59ff, U+5a03, U+5ae9, U+5b64, U+5bb4, U+5c3f, U+5c6f, U+5de1, U+5e16, U+5e45, U+5e72, U+5ec9, U+5f7c, U+5f81, U+5f90-5f92, U+6016, U+6085, U+6089, U+60a0, U+60a3, U+60b2, U+60d1, U+60f9, U+6155, U+6158, U+6191, U+6212, U+626e, U+62d4, U+632f, U+633a, U+63aa, U+642c, U+64a5, U+64cb, U+6566, U+6597, U+66b1, U+66ec, U+6731, U+6735, U+67ef, U+6846, U+6876, U+6881, U+68af-68b0, U+68c9, U+6905, U+6bc0, U+6beb, U+6c0f, U+6c1b, U+6c41, U+6ce5, U+6cf3, U+6d25, U+6d2a, U+6d3d, U+6dcb, U+6dd8, U+6dfa, U+6e9d, U+6eaa, U+6ec5, U+6ecb, U+6f0f, U+6f32, U+707d, U+708e, U+7092, U+716e, U+723a, U+731b, U+7345, U+7375, U+73b2, U+7434, U+74e6, U+758a, U+75be, U+75de, U+764c, U+76dc, U+788e, U+7897, U+789f, U+78a9, U+78b0, U+790e, U+7965, U+7a4e, U+7c43, U+7d17, U+7dd2, U+7e96, U+7f51, U+7f69, U+7f72, U+7fd4, U+7fe0, U+8017, U+80a9, U+80d6, U+8150, U+8178, U+81bd, U+829d, U+82ac, U+8303, U+838e, U+83cc, U+840c, U+8482, U+8499, U+85a9-85aa, U+883b, U+8861, U+88c1, U+88cf, U+88d9, U+8a3a, U+8a98, U+8aee, U+8c8c, U+8cc0, U+8ce2, U+8d0f, U+8da8, U+8dcc, U+8e0f, U+8f1d, U+8f29, U+8fad, U+9003, U+9006, U+903c, U+903e, U+9059, U+9072, U+9075, U+90ce, U+9130, U+91ac, U+91e3, U+9285, U+9298, U+92ea, U+9326, U+937e, U+95c6, U+9676-9677, U+9727, U+994b, U+99a8, U+99d0, U+9a30, U+9b42, U+9b45, U+9d3b, U+9e7f, U+9ee8, U+9f3b) ); /* noto-sans-tc-[111]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-111-400-normal.woff2", $range: (U+5e, U+3042, U+3044, U+3046, U+3048, U+304a-3050, U+3053-3057, U+3059-305b, U+305d-3061, U+3063-306c, U+306e-3079, U+307b, U+307d-307f, U+3082-308d, U+308f, U+3092-3093, U+30a1-30a4, U+30a6-30c1, U+30c3-30c4, U+30c6-30e1, U+30e3-30ed, U+30ef, U+30f3, U+30fb-30fc, U+4e32, U+4ef2, U+4fd7, U+501f, U+5144, U+51c6, U+52c1, U+5440, U+54e6, U+54ed, U+5510, U+5687, U+58c1, U+5b5d, U+5bd2, U+5ee2, U+5f31, U+6012, U+6084, U+6148, U+6182, U+622a, U+6355, U+6372, U+63ee, U+6416, U+6575, U+660c, U+66c9, U+675c, U+6a6b, U+6b32, U+6b49, U+6b98, U+6d6e, U+6dda, U+6ef4, U+6efe, U+7159, U+7378, U+775b, U+78e8, U+7aa9, U+7d1b, U+7de9, U+7f6a, U+7f8a, U+7fbd, U+8000, U+809a, U+8102, U+8170, U+819c, U+8266, U+82b3, U+87f2, U+8972, U+8a17, U+8b02, U+8e22, U+904d, U+90ed, U+91c7, U+93c8, U+9451, U+9a37, U+9b27, U+ad6d, U+c5b4, U+d55c) ); /* noto-sans-tc-[112]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-112-400-normal.woff2", $range: (U+2502, U+2605, U+4e39, U+4e58, U+4ea1, U+4ed9, U+4f2f-4f30, U+4f38, U+4f75, U+4fc3, U+4ff1, U+500d, U+5049, U+5074, U+5077, U+5091, U+5175, U+517c, U+51cd, U+51e1, U+5269-526a, U+52aa, U+52c7, U+52df, U+5377, U+541b, U+5439, U+5448, U+54aa, U+5674, U+56f0, U+5761, U+585e, U+588a, U+58a8, U+58fd, U+5925, U+592e, U+5948, U+5999, U+59b3, U+5a18, U+5a1c, U+5a46, U+5b30, U+5b54, U+5b6b, U+5b8f, U+5be9, U+5bf8, U+5c0a, U+5c16, U+5c24, U+5c46, U+5cf0, U+5e1d, U+5e25, U+5e2d, U+5e3d, U+5e79, U+5f04, U+5fcd, U+5fe0, U+60dc, U+6163, U+616e, U+61f6, U+6258, U+6293, U+62c6, U+62d2, U+62d6, U+62fc, U+63da, U+63ed, U+640d, U+6458, U+649e, U+64ec, U+64f4, U+64fe, U+651c, U+6562, U+65cb, U+65e2, U+65fa, U+6628, U+6668, U+66a2, U+66dd, U+66fc, U+66ff, U+6717, U+67cf, U+67d4, U+6817, U+6885, U+695a, U+69cd, U+6afb, U+6bbc, U+6c89, U+6c96, U+6cc9, U+6d1b, U+6d1e, U+6d74, U+6db2, U+6dbc, U+6df7, U+6dfb, U+6e38, U+6f38, U+6f5b, U+6f64, U+6f8e, U+6fa4, U+6fc3, U+6fd5, U+7070, U+70b8, U+70cf, U+70e4, U+7169, U+7210, U+721b, U+7238, U+737b, U+73bb, U+746a, U+7483, U+74dc, U+74f6, U+7518, U+756a, U+75c7, U+7919, U+7956, U+795d, U+7a05, U+7a0d, U+7a3f, U+7bc9, U+7c97, U+7cd5, U+7d0b, U+7d10, U+7dfb, U+7e3e, U+7e6a, U+8036, U+808c, U+80af, U+80ce, U+80e1, U+80f8, U+817f, U+8216, U+8239, U+827e, U+8377, U+8389, U+83ab, U+83f2, U+840a, U+8584, U+85c9, U+865b, U+8766, U+87a2, U+8932, U+8a50, U+8a69, U+8a95, U+8b6f, U+8c37, U+8c6c, U+8ca9, U+8cfa, U+8d95, U+8de1, U+8f14, U+8f9b, U+8fa3, U+8feb, U+8ff4, U+9010, U+901b, U+905e, U+9080, U+912d, U+9177, U+9336, U+947d, U+963b, U+966a, U+9670, U+9769, U+9813, U+9846, U+98fd, U+99d5, U+9a0e, U+9a19, U+9b6f, U+9ce5, U+9cf3, U+9ece, U+9ed8, U+9f13, U+9f20) ); /* noto-sans-tc-[113]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-113-400-normal.woff2", $range: (U+201c-201d, U+203b, U+2192, U+25b2, U+300e-300f, U+4e01, U+4e73, U+4e82, U+4e88, U+4e8e, U+4f0a, U+4f5b, U+502b, U+504f, U+5076, U+5100, U+5104, U+5132, U+5192, U+51a0, U+51ac, U+51f1, U+5200, U+5224, U+522a, U+5237-5238, U+523a, U+526f, U+5289, U+52de, U+52f5, U+52ff, U+5371, U+539a, U+53e5, U+540e, U+5433, U+547c, U+552f, U+5531, U+5634, U+56c9, U+574a, U+57f7, U+57f9, U+5805, U+5851, U+5854, U+586b, U+58c7, U+58de, U+5967, U+59bb, U+59d3-59d4, U+5b55, U+5b87, U+5b97, U+5bae, U+5bbf, U+5be7, U+5bec, U+5cb8, U+5df7, U+5e7b-5e7c, U+5f1f, U+5f70, U+5fd9, U+60e1, U+61b6, U+61c2, U+6200, U+6234, U+6263, U+62b5, U+62dc, U+62ec, U+6383, U+638c, U+63cf, U+63d2, U+63e1, U+63f4, U+641e, U+64cd, U+64fa, U+654f, U+6557, U+656c, U+65c1, U+65d7, U+6620, U+6676, U+6696-6697, U+66ab, U+66c6, U+671d, U+672b, U+676f, U+677e, U+67d0, U+67d3, U+684c, U+68c4, U+690d, U+694a, U+699c, U+6a4b, U+6ac3, U+6b04, U+6b23, U+6b78, U+6b8a, U+6bd2, U+6c60, U+6cb3, U+6d89, U+6de1, U+6de8, U+6e6f, U+6f02, U+70c8, U+7126, U+718a, U+7236, U+723d, U+7246, U+72af, U+72d7, U+73cd, U+7532, U+760b, U+7626, U+7687, U+76df, U+7761, U+79cb, U+79d2, U+79df, U+7a69, U+7af6, U+7b80, U+7c3d, U+7c3f, U+7c4d, U+7cd6, U+7d2b, U+7de3, U+7e2e, U+7e54, U+7e6b, U+8010, U+80a5, U+812b, U+819a, U+81a0, U+82d7, U+838a, U+8463, U+84cb, U+8521, U+8607, U+860b, U+864e, U+871c, U+878d, U+885d, U+89f8, U+8a13, U+8aa0, U+8afe, U+8b5c, U+8c46, U+8cbf, U+8cd3, U+8cf4, U+8d08, U+8d0a, U+8ddd, U+8de8, U+8fea, U+9014, U+9055, U+906d, U+907a, U+907f, U+90a6, U+9178, U+92fc, U+934b, U+9396, U+93ae, U+9583, U+9663, U+9694, U+96bb, U+9707, U+9738, U+9905, U+9aa8, U+9b25, U+9b3c, U+9ea5, U+9eb5, U+9f4a, U+9f61, U+ff0d-ff0e) ); /* noto-sans-tc-[114]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-114-400-normal.woff2", $range: (U+3c, U+d7, U+2027, U+4e4e, U+4e92, U+4ea6, U+4ec1, U+4ecd, U+4f34, U+4f48, U+4f53, U+4fb5, U+5012, U+50b7, U+51b0, U+5283, U+52dd, U+532f, U+5354, U+53eb, U+53f3, U+5409, U+5496, U+54c8, U+54e5, U+554a, U+5561, U+5594, U+559d, U+56b4, U+56fa, U+5713, U+5750, U+57df, U+584a, U+590f, U+592b, U+593e, U+5976, U+599d, U+59b9, U+59d0, U+5a5a, U+5a66, U+5b85, U+5b88, U+5ba3, U+5bdf, U+5c01, U+5c04, U+5c3a, U+5c3e, U+5c4f, U+5ddd-5dde, U+5de7-5de8, U+5e63, U+5e8a, U+5e9c, U+5eda, U+5ef3, U+5ef6, U+5f48, U+5fb5, U+6015, U+6025, U+602a, U+6050, U+6069, U+6162, U+6176, U+61f7, U+6279, U+627f, U+6297, U+62b1, U+62bd, U+6311, U+6377, U+6388-6389, U+63a1-63a2, U+6436, U+64c1, U+64d4, U+6551, U+6563, U+65bd, U+66b4, U+66f2, U+6751, U+675f, U+6790, U+6838, U+68d2, U+68ee, U+6982, U+69ae, U+69cb, U+6a39, U+6b66, U+6bba, U+6c5f, U+6ce1, U+6d0b, U+6d3e, U+6d6a, U+6e1b, U+6ed1, U+6f22, U+6f54, U+6f6e, U+6fc0, U+6fdf, U+719f, U+71c8, U+71d2, U+7259, U+72c2, U+7389, U+73e0, U+745e, U+751a, U+751c, U+7530, U+7533, U+7562, U+7591, U+75c5, U+75db, U+7642, U+7686, U+76d2, U+76db, U+76e1, U+76e3, U+7701, U+786c, U+7981, U+79c0, U+79fb, U+7a81, U+7a97, U+7adf, U+7aef, U+7b26, U+7c64, U+7d0d, U+7d14, U+7d2f, U+7d9c, U+7dca, U+7df4, U+7e23, U+7f3a, U+8033, U+804a, U+8056, U+805a, U+8173, U+81e8, U+8212, U+821e, U+822a, U+82e6, U+8336, U+83dc, U+8449, U+84ee, U+85e5, U+885b, U+888b, U+8907, U+8a34, U+8a5e, U+8aa4, U+8ab0, U+8ab2, U+8ac7, U+8b66, U+8c6a, U+8c93, U+8c9d, U+8cb4, U+8dd1, U+8f2a, U+8fb2, U+9109, U+9192, U+91cb, U+91dd, U+93e1, U+964d, U+9686, U+968e, U+969c, U+96de, U+96e8, U+96ea, U+96f7, U+975c, U+9760, U+978b, U+9858, U+98ef, U+9918, U+9aee, U+9b54, U+9ebb, U+ff0f, U+ff5c) ); /* noto-sans-tc-[115]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-115-400-normal.woff2", $range: (U+23-25, U+3d, U+4e45, U+4e5d, U+4e7e, U+4eac, U+4eae, U+4ed4, U+4ee4, U+4f01, U+4f3c, U+4f8b, U+4fc2, U+505c, U+50c5, U+5145, U+51b7, U+521d, U+523b, U+525b, U+5287, U+52e2, U+5348, U+535a, U+537b, U+5426, U+542b, U+5438, U+5462, U+54ea, U+555f, U+5566, U+5584, U+5609, U+5708, U+570d, U+571f, U+5747, U+5802, U+58d3, U+5920, U+5922, U+5957, U+5979, U+5a01, U+5a92, U+5abd, U+5b63, U+5b69, U+5b83, U+5bb3, U+5bc4, U+5bf5, U+5c3c, U+5c40, U+5c4b, U+5c64, U+5cf6, U+5de6, U+5e0c, U+5e55, U+5e78, U+5eab, U+5ead, U+5ee0, U+5f85, U+5f8b, U+5fd7-5fd8, U+6167, U+6298, U+62db, U+62ff, U+639b, U+63a7, U+642d, U+6469, U+64ad, U+651d, U+653b, U+65b7, U+65cf, U+665a, U+666e, U+66fe, U+6728, U+674e, U+67b6, U+6821, U+6839, U+6843, U+6a94, U+6b4c, U+6b50, U+6b62, U+6b72, U+6b7b, U+6bcd, U+6bdb, U+6c38, U+6c7a, U+6c7d, U+6c99, U+6cb9, U+6ce2, U+6cf0, U+6d17, U+6d32, U+6e2c, U+6e56, U+6fb3, U+722d, U+723e, U+725b, U+734e, U+7387, U+73ed, U+7565, U+7570, U+76ca, U+76e4, U+773e, U+77ed, U+77f3, U+7814, U+7834, U+7968, U+79d8, U+7a7f, U+7af9, U+7b11, U+7b46, U+7b54, U+7bc4, U+7d19, U+7d22, U+7d42, U+7d55, U+7da0, U+7e41, U+7e7c, U+7f85, U+7ffb, U+8077, U+8089, U+80cc, U+81c9, U+81f4, U+81fa, U+820a, U+822c, U+826f, U+8349, U+85cd, U+86cb, U+8840, U+88dc, U+8986, U+8a0e, U+8a73, U+8a8c, U+8b1b, U+8b9a, U+8c50, U+8ca0, U+8cde, U+8cfd, U+8d8a, U+8df3, U+8e64, U+8ecd, U+8edf, U+8f38, U+8fd4, U+8ff0, U+8ff7, U+9000, U+9047, U+9060, U+90f5, U+9152, U+91ce, U+9280, U+9418, U+9435, U+9589, U+9592, U+9678, U+968a, U+96aa, U+96c5, U+96d6, U+96dc, U+96f6, U+9732, U+9748, U+9802, U+9806, U+9808, U+983b, U+984d, U+984f, U+9867, U+98db, U+98f2, U+98fe, U+9a5a, U+9b06, U+9b5a, U+9bae, U+ff5e) ); /* noto-sans-tc-[116]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-116-400-normal.woff2", $range: (U+40, U+2026, U+4e03, U+4e14, U+4e9e, U+4ec0, U+4ed8, U+4f11, U+4f4e-4f4f, U+4f73, U+4fee, U+5019, U+503c, U+5047, U+514b, U+516b, U+5178, U+5207, U+520a, U+5236, U+5343, U+5347, U+534a, U+5370, U+53cd, U+53e4, U+53e6, U+53f2, U+5403, U+5411, U+5427, U+5468, U+5473, U+547d, U+552e, U+5740, U+5883, U+589e, U+591c, U+5931, U+59cb, U+5a1b, U+5b58, U+5b98, U+5b9c, U+5ba4, U+5bcc, U+5beb, U+5c45, U+5c6c, U+5dee, U+5df4, U+5e03, U+5e33, U+5e6b, U+5e7e, U+5e8f, U+5e95, U+5ea7, U+5f15, U+5f62, U+5f69, U+5f80, U+5fa9, U+5fae, U+5fb7, U+5ff5, U+600e, U+601d, U+60e0, U+614b, U+6230, U+623f, U+628a, U+6295, U+62c9, U+6309, U+64c7, U+64ca, U+652f, U+6545, U+6548, U+65af, U+65e9, U+6625, U+666f, U+667a, U+670b, U+671b, U+6750, U+677f, U+6975, U+6a13, U+6a21, U+6aa2, U+6b65, U+6b77, U+6bb5, U+6cc1, U+6ce8, U+6df1, U+6e90, U+6e96, U+6eab, U+6f14, U+6f2b, U+700f, U+706b, U+7206, U+724c, U+72c0, U+7368, U+7372, U+74b0, U+756b, U+76ae, U+773c, U+78ba, U+798f, U+79ae, U+7a4d, U+7a76, U+7ae5, U+7b56, U+7b97, U+7bb1, U+7bc7, U+7c73, U+7c89, U+7d00, U+7d20, U+7d39, U+7d72, U+7dad, U+7e8c, U+7fa4, U+7fd2, U+8003, U+807d, U+80a1, U+80b2, U+8166, U+8208-8209, U+82e5, U+843d, U+85cf, U+85dd, U+862d, U+8857, U+8863, U+89ba, U+89d2, U+8a2a, U+8a31, U+8a62, U+8a66, U+8a72, U+8abf, U+8b1d, U+8b58, U+8c61, U+8ca1, U+8ca8, U+8cac, U+8cbc, U+8d70, U+8da3, U+8db3, U+8ddf, U+8f03, U+8f15, U+8f2f, U+8fa6, U+8fce, U+8ffd, U+900f, U+9031, U+9069, U+908a, U+91ab, U+91cc, U+92b7, U+9322, U+932f, U+9375, U+9632, U+963f, U+9644, U+9662, U+9673, U+967d, U+96a8, U+96c4, U+96d9, U+96e2-96e3, U+96f2, U+9752, U+97d3, U+97ff, U+9805, U+9810, U+9818, U+986f, U+990a, U+9910, U+9928, U+9e97, U+9ec3, U+9f8d, U+ff1b) ); /* noto-sans-tc-[117]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-117-400-normal.woff2", $range: (U+26, U+3e, U+5f, U+7e, U+3000, U+300a-300b, U+3010-3011, U+4e16, U+4e26, U+4e94, U+4e9b, U+4ea4, U+4eca-4ecb, U+4efb, U+4efd, U+4f46, U+4f55, U+4f9b, U+4f9d, U+4fbf, U+505a, U+5065, U+5099, U+50cf, U+512a, U+5143, U+5148, U+5152, U+5169, U+516d, U+5171, U+5177, U+518a, U+5225, U+5247, U+5275, U+529f, U+52a9, U+5305, U+5341, U+5357, U+5361, U+5373, U+53bb, U+53c3, U+53c8, U+53d6-53d7, U+53e3, U+5404, U+559c, U+55ce, U+5668, U+56db, U+5712, U+5718, U+57ce, U+57fa, U+58eb, U+592a, U+5947, U+5bc6, U+5bf6, U+5c0e, U+5c11, U+5c1a, U+5c55, U+5c71, U+5df1, U+5e2b, U+5e36, U+5e97, U+5eb7, U+5ee3, U+5efa, U+5f35, U+5f37, U+5f88, U+5f9e, U+5fc5, U+606f, U+60a8, U+6232, U+6236, U+624d, U+627e, U+6280, U+62cd, U+6301, U+6307, U+6392, U+63db, U+64da, U+6539, U+653e-653f, U+6559, U+6574, U+65c5, U+6613, U+66f8, U+6797, U+67e5, U+6848, U+6a19, U+6a23, U+6b61, U+6bcf, U+6c11, U+6c42, U+6d41, U+6d77, U+6e2f, U+6eff, U+7167, U+71df, U+738b, U+73a9, U+7403, U+7537, U+754c, U+7559, U+767d-767e, U+78bc, U+793a, U+795e, U+79c1, U+79d1, U+7a2e, U+7a31, U+7a7a, U+7ae0, U+7ba1, U+7bc0, U+7c21, U+7cfb, U+7d04-7d05, U+7d1a, U+7d30, U+7d44, U+7d66, U+7d71, U+7de8, U+7e3d, U+7f6e, U+7fa9, U+8001, U+805e, U+8072, U+81f3, U+82f1, U+83ef, U+842c, U+8457, U+85a6, U+8655, U+8853, U+88ab, U+88dd, U+88e1, U+88fd, U+897f, U+898f, U+89aa, U+89bd, U+89c0, U+89e3, U+8a02, U+8a3b, U+8a55, U+8a8d, U+8a9e, U+8ad6, U+8b49, U+8b70, U+8b77, U+8b80, U+8b8a, U+8b93, U+8cb7, U+8ce3, U+8cea, U+8cfc, U+8f09, U+8fd1, U+9001, U+901f-9020, U+9054, U+90a3, U+914d, U+91cf, U+9304, U+95b1, U+9664, U+969b, U+96b1, U+96c6, U+9700, U+975e, U+97f3, U+98a8, U+98df, U+9999, U+99ac, U+9a57, U+9ebc, U+9ed1) ); /* noto-sans-tc-[118]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-118-400-normal.woff2", $range: (U+d, U+2b, U+7c, U+a9, U+300c-300d, U+4e09, U+4e3b, U+4e4b, U+4e5f, U+4e86, U+4e8b-4e8c, U+4eab, U+4ed6, U+4ee3, U+4ef6, U+4f1a, U+4f4d, U+4f60, U+4f7f, U+4fdd, U+4fe1, U+50b3, U+50f9, U+5149, U+514d, U+5167, U+5176, U+518d, U+5217, U+5229, U+524d, U+529b, U+52a0, U+52d9, U+5316-5317, U+5340, U+539f, U+53ca-53cb, U+53ea, U+53f8, U+5408, U+540c-540d, U+544a, U+548c, U+54c1, U+54e1, U+5546, U+554f, U+55ae, U+56de, U+56e0, U+5716, U+578b, U+5831, U+5834, U+5916, U+5973, U+5982, U+5b57, U+5b78, U+5b89, U+5b8c, U+5b9a, U+5ba2, U+5bb9, U+5be6, U+5c07-5c08, U+5c0b, U+5c0d, U+5c31, U+5de5, U+5df2, U+5e02, U+5e38, U+5ea6, U+5f0f, U+5f71, U+5f8c, U+5f97, U+5feb, U+6027, U+60c5, U+60f3, U+610f, U+611b, U+611f, U+61c9, U+6216, U+624b, U+6253, U+63a5, U+63a8, U+63d0, U+641c, U+6536, U+6578, U+6599, U+661f, U+662d, U+670d, U+671f, U+672a, U+6771, U+679c, U+682a, U+683c, U+689d, U+696d, U+6a02, U+6a5f, U+6b0a, U+6b21, U+6b3e, U+6b64, U+6bd4, U+6c23, U+6c34, U+6c92, U+6cd5, U+6d3b, U+6d88, U+6e05, U+7063, U+7121, U+7136, U+71b1, U+7247-7248, U+7269, U+7279, U+73fe, U+7406, U+7522, U+7531, U+7576, U+767b, U+76ee, U+76f4, U+770b, U+771f, U+77e5, U+793e, U+7a0b, U+7acb, U+7ad9, U+7b2c, U+7b49, U+7cbe, U+7d50, U+7d61, U+7d93, U+7dda, U+8005, U+800c, U+806f, U+8207, U+8272, U+82b1, U+865f, U+8868, U+898b, U+8996, U+8a00, U+8a08, U+8a0a, U+8a18, U+8a2d, U+8a71, U+8aaa, U+8acb, U+8cbb, U+8cc7, U+8d77, U+8d85, U+8def, U+8eab, U+8eca, U+8f49, U+9019-901a, U+9023, U+9032, U+904a-904b, U+904e, U+9053, U+9078, U+9084, U+90e8, U+90fd, U+91cd, U+91d1, U+9577, U+9580, U+9593, U+9650, U+9762, U+982d, U+984c, U+985e, U+9ad4, U+9ad8, U+9ede, U+ff01, U+ff08-ff09, U+ff1f) ); /* noto-sans-tc-[119]-400-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-119-400-normal.woff2", $range: (U+20-22, U+27-2a, U+2c-3b, U+3f, U+41-5d, U+61-7b, U+7d, U+a0, U+ab, U+ae, U+b2-b3, U+b7, U+bb, U+bf, U+c9, U+cd, U+d6, U+e0-ef, U+f1-f4, U+f6, U+f9-fa, U+fc-fd, U+101, U+103, U+110-111, U+113, U+12b, U+14d, U+16b, U+1a1, U+1b0, U+1ce, U+300-301, U+1ea1, U+1ea3, U+1ebf, U+1ec7, U+2013-2014, U+2039-203a, U+203c, U+2122, U+3001-3002, U+4e00, U+4e0a-4e0b, U+4e0d, U+4e2d, U+4eba, U+4ee5, U+4f5c, U+4f86, U+500b, U+5011, U+5165, U+5168, U+516c, U+51fa, U+5206, U+5230, U+52d5, U+53ef-53f0, U+570b, U+5728, U+5730, U+591a, U+5927, U+5929, U+597d, U+5b50, U+5bb6, U+5c0f, U+5e73-5e74, U+5fc3, U+6210-6211, U+6240, U+6587, U+65b0, U+65b9, U+65bc, U+65e5, U+660e, U+662f, U+6642, U+66f4, U+6700, U+6703, U+6708-6709, U+672c, U+6b63, U+6cbb, U+70b9-70ba, U+751f, U+7528, U+767c, U+7684, U+76f8, U+7db2, U+7f8e, U+80fd, U+81ea, U+884c, U+8981, U+958b, U+95dc, U+96fb, U+9801, U+9996, U+ff0c, U+ff1a) diff --git a/src/styles/noto-sans/tc-700-normal.scss b/src/styles/noto-sans/tc-700-normal.scss index 98981f857d..1a3a17a93f 100644 --- a/src/styles/noto-sans/tc-700-normal.scss +++ b/src/styles/noto-sans/tc-700-normal.scss @@ -1,7 +1,9 @@ +@use "../font"; + $tcFamily: "Noto Sans TC"; /* noto-sans-tc-[0]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-0-700-normal.woff2", @@ -9,7 +11,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[6]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-6-700-normal.woff2", @@ -17,7 +19,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[7]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-7-700-normal.woff2", @@ -25,7 +27,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[8]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-8-700-normal.woff2", @@ -33,7 +35,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[19]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-19-700-normal.woff2", @@ -41,7 +43,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[20]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-20-700-normal.woff2", @@ -49,7 +51,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[21]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-21-700-normal.woff2", @@ -57,7 +59,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[22]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-22-700-normal.woff2", @@ -65,7 +67,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[23]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-23-700-normal.woff2", @@ -73,7 +75,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[24]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-24-700-normal.woff2", @@ -81,7 +83,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[25]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-25-700-normal.woff2", @@ -89,7 +91,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[26]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-26-700-normal.woff2", @@ -97,7 +99,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[27]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-27-700-normal.woff2", @@ -105,7 +107,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[28]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-28-700-normal.woff2", @@ -113,7 +115,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[29]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-29-700-normal.woff2", @@ -121,7 +123,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[30]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-30-700-normal.woff2", @@ -129,7 +131,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[31]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-31-700-normal.woff2", @@ -137,7 +139,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[32]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-32-700-normal.woff2", @@ -145,7 +147,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[33]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-33-700-normal.woff2", @@ -153,7 +155,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[34]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-34-700-normal.woff2", @@ -161,7 +163,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[35]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-35-700-normal.woff2", @@ -169,7 +171,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[36]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-36-700-normal.woff2", @@ -177,7 +179,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[37]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-37-700-normal.woff2", @@ -185,7 +187,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[38]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-38-700-normal.woff2", @@ -193,7 +195,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[39]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-39-700-normal.woff2", @@ -201,7 +203,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[40]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-40-700-normal.woff2", @@ -209,7 +211,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[41]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-41-700-normal.woff2", @@ -217,7 +219,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[42]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-42-700-normal.woff2", @@ -225,7 +227,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[43]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-43-700-normal.woff2", @@ -233,7 +235,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[44]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-44-700-normal.woff2", @@ -241,7 +243,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[45]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-45-700-normal.woff2", @@ -249,7 +251,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[46]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-46-700-normal.woff2", @@ -257,7 +259,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[47]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-47-700-normal.woff2", @@ -265,7 +267,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[48]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-48-700-normal.woff2", @@ -273,7 +275,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[49]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-49-700-normal.woff2", @@ -281,7 +283,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[50]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-50-700-normal.woff2", @@ -289,7 +291,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[51]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-51-700-normal.woff2", @@ -297,7 +299,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[52]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-52-700-normal.woff2", @@ -305,7 +307,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[53]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-53-700-normal.woff2", @@ -313,7 +315,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[54]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-54-700-normal.woff2", @@ -321,7 +323,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[55]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-55-700-normal.woff2", @@ -329,7 +331,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[56]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-56-700-normal.woff2", @@ -337,7 +339,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[57]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-57-700-normal.woff2", @@ -345,7 +347,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[58]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-58-700-normal.woff2", @@ -353,7 +355,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[59]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-59-700-normal.woff2", @@ -361,7 +363,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[60]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-60-700-normal.woff2", @@ -369,7 +371,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[61]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-61-700-normal.woff2", @@ -377,7 +379,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[62]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-62-700-normal.woff2", @@ -385,7 +387,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[63]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-63-700-normal.woff2", @@ -393,7 +395,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[64]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-64-700-normal.woff2", @@ -401,7 +403,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[65]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-65-700-normal.woff2", @@ -409,7 +411,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[66]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-66-700-normal.woff2", @@ -417,7 +419,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[67]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-67-700-normal.woff2", @@ -425,7 +427,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[68]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-68-700-normal.woff2", @@ -433,7 +435,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[69]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-69-700-normal.woff2", @@ -441,7 +443,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[70]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-70-700-normal.woff2", @@ -449,7 +451,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[71]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-71-700-normal.woff2", @@ -457,7 +459,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[72]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-72-700-normal.woff2", @@ -465,7 +467,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[73]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-73-700-normal.woff2", @@ -473,7 +475,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[74]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-74-700-normal.woff2", @@ -481,7 +483,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[75]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-75-700-normal.woff2", @@ -489,7 +491,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[76]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-76-700-normal.woff2", @@ -497,7 +499,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[77]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-77-700-normal.woff2", @@ -505,7 +507,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[78]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-78-700-normal.woff2", @@ -513,7 +515,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[79]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-79-700-normal.woff2", @@ -521,7 +523,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[80]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-80-700-normal.woff2", @@ -529,7 +531,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[81]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-81-700-normal.woff2", @@ -537,7 +539,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[82]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-82-700-normal.woff2", @@ -545,7 +547,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[83]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-83-700-normal.woff2", @@ -553,7 +555,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[84]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-84-700-normal.woff2", @@ -561,7 +563,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[85]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-85-700-normal.woff2", @@ -569,7 +571,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[86]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-86-700-normal.woff2", @@ -577,7 +579,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[87]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-87-700-normal.woff2", @@ -585,7 +587,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[88]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-88-700-normal.woff2", @@ -593,7 +595,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[89]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-89-700-normal.woff2", @@ -601,7 +603,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[90]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-90-700-normal.woff2", @@ -609,7 +611,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[91]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-91-700-normal.woff2", @@ -617,7 +619,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[92]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-92-700-normal.woff2", @@ -625,7 +627,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[97]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-97-700-normal.woff2", @@ -633,7 +635,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[98]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-98-700-normal.woff2", @@ -641,7 +643,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[99]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-99-700-normal.woff2", @@ -649,7 +651,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[100]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-100-700-normal.woff2", @@ -657,7 +659,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[101]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-101-700-normal.woff2", @@ -665,7 +667,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[102]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-102-700-normal.woff2", @@ -673,7 +675,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[103]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-103-700-normal.woff2", @@ -681,7 +683,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[104]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-104-700-normal.woff2", @@ -689,7 +691,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[105]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-105-700-normal.woff2", @@ -697,7 +699,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[106]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-106-700-normal.woff2", @@ -705,7 +707,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[107]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-107-700-normal.woff2", @@ -713,7 +715,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[108]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-108-700-normal.woff2", @@ -721,7 +723,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[109]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-109-700-normal.woff2", @@ -729,7 +731,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[110]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-110-700-normal.woff2", @@ -737,7 +739,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[111]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-111-700-normal.woff2", @@ -745,7 +747,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[112]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-112-700-normal.woff2", @@ -753,7 +755,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[113]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-113-700-normal.woff2", @@ -761,7 +763,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[114]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-114-700-normal.woff2", @@ -769,7 +771,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[115]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-115-700-normal.woff2", @@ -777,7 +779,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[116]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-116-700-normal.woff2", @@ -785,7 +787,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[117]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-117-700-normal.woff2", @@ -793,7 +795,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[118]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-118-700-normal.woff2", @@ -801,7 +803,7 @@ $tcFamily: "Noto Sans TC"; ); /* noto-sans-tc-[119]-700-normal */ -@include fontFace( +@include font.face( $family: $tcFamily, $weight: 700, $url: "~@fontsource/noto-sans-tc/files/noto-sans-tc-119-700-normal.woff2", diff --git a/src/styles/videoosd.scss b/src/styles/videoosd.scss index d83c566adf..c5b5a547b3 100644 --- a/src/styles/videoosd.scss +++ b/src/styles/videoosd.scss @@ -1,4 +1,4 @@ -@import 'mixins'; +@use 'mixins' as *; .chapterThumbTextContainer, .videoOsdBottom { From 81d76d3c2b0845565f8fb0501dc976a296eca203 Mon Sep 17 00:00:00 2001 From: Ronan Fitzgerald Date: Wed, 19 Feb 2025 20:56:21 +0000 Subject: [PATCH 079/235] 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 | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 2420f6bac6..bfac284d64 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -150,7 +150,7 @@ "ChannelNumber": "Channel number", "CommunityRating": "Community rating", "Composer": "Composer", - "ConfigureDateAdded": "Set up how metadata for 'Date added' is determined in the Dashboard > Libraries > NFO Settings", + "ConfigureDateAdded": "Set up how metadata for 'Date added' is determined in the Dashboard > Libraries > Display", "ConfirmDeleteImage": "Delete image?", "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "ConfirmDeleteItems": "Deleting these items will delete them from both the file system and your media library. Are you sure you wish to continue?", @@ -923,7 +923,7 @@ "LabelMatchType": "Match type", "LabelManufacturerUrl": "Manufacturer URL", "LabelLoginDisclaimerHelp": "A message that will be displayed at the bottom of the login page.", - "LabelLockItemToPreventChanges": "Lock this item to prevent future changes", + "LabelLockItemToPreventChanges": "Lock this item to prevent future metadata changes", "LabelLocalHttpServerPortNumberHelp": "The TCP port number for the HTTP server.", "LabelLineup": "Lineup", "LabelLanguage": "Language", @@ -1382,11 +1382,11 @@ "LabelMaxMuxingQueueSize": "Max muxing queue size", "LabelTonemappingParamHelp": "Tune the tone mapping algorithm. The recommended and default values are NaN. Generally leave it blank.", "LabelTonemappingParam": "Tone mapping param", - "LabelTonemappingPeakHelp": "Override signal/nominal/reference peak with this value. Useful when the embedded peak information in display metadata is not reliable or when tone mapping from a lower range to a higher range. The recommended and default values are 100 and 0.", + "LabelTonemappingPeakHelp": "Override the embedded metadata value for the input signal with this peak value instead. The default value is 100 (1000nit).", "LabelTonemappingPeak": "Tone mapping peak", "LabelTonemappingThresholdHelp": "The tone mapping algorithm parameters is fine-tuned per each scene. And a threshold is used to detect whether the scene has changed or not. If the distance between the current frame average brightness and the current running average exceeds a threshold value, we would re-calculate scene average and peak brightness. The recommended and default values are 0.8 and 0.2.", "LabelTonemappingThreshold": "Tone mapping threshold", - "LabelTonemappingDesatHelp": "Apply desaturation for highlights that exceed this level of brightness. The higher the parameter, the more colour information will be preserved. This setting helps prevent unnaturally blown-out colours for super-highlights, by (smoothly) turning into white instead. This makes images feel more natural, at the cost of reducing information about out-of-range colours. The recommended and default values are 0 and 0.5.", + "LabelTonemappingDesatHelp": "Apply desaturation for highlights that exceed this level of brightness. The recommended value is 0 (disable).", "LabelTonemappingDesat": "Tone mapping desat", "TonemappingRangeHelp": "Select the output colour range. Auto is the same as the input range.", "LabelTonemappingRange": "Tone mapping range", @@ -1666,9 +1666,9 @@ "MediaInfoVideoRangeType": "Video range type", "LabelVideoRangeType": "Video range type", "VideoRangeTypeNotSupported": "The video's range type is not supported", - "LabelVppTonemappingContrastHelp": "Apply contrast gain in VPP tone mapping. Both recommended and default values are 1.", + "LabelVppTonemappingContrastHelp": "Apply contrast gain in VPP tone mapping. The recommended value is 1.", "LabelVppTonemappingContrast": "VPP Tone mapping contrast gain", - "LabelVppTonemappingBrightnessHelp": "Apply brightness gain in VPP tone mapping. The recommended and default values are 16 and 0.", + "LabelVppTonemappingBrightnessHelp": "Apply brightness gain in VPP tone mapping. The recommended value is 16.", "LabelVppTonemappingBrightness": "VPP Tone mapping brightness gain", "ScreenResolution": "Screen Resolution", "RememberSubtitleSelectionsHelp": "Try to set the subtitle track to the closest match to the last video.", @@ -1989,5 +1989,19 @@ "MediaSegmentAction.AskToSkip": "Ask To Skip", "MediaSegmentSkipPrompt": "Skip {0}", "Anime": "Anime", - "MoviesAndShows": "Films and Programmes" + "MoviesAndShows": "Films and Programmes", + "LabelMediaSegmentProviders": "Media segment providers", + "HeaderNextEpisode": "Next Episode", + "HeaderNextVideo": "Next Video", + "AutoSubtitleStylingHelp": "This mode will automatically switch between the native and custom subtitle styling mechanisms based on your device type.", + "Custom": "Custom", + "CustomSubtitleStylingHelp": "Subtitle styling will work on most devices, but comes with an additional performance overhead.", + "LabelSubtitleStyling": "Subtitle styling", + "DeleteServerConfirmation": "Are you sure you wish to delete this server?", + "Native": "Native", + "LabelDevice": "Device", + "LastActive": "Last active", + "NativeSubtitleStylingHelp": "Subtitle styling will not work on some devices. However, it does not come with any performance overhead.", + "MediaSegmentProvidersHelp": "Enable and rank your preferred media segment providers in order of priority.", + "LibraryNameInvalid": "Library name cannot be empty or have leading/trailing spaces." } From 90a3d6be52f23afe685fe96cb117367cf6c127b8 Mon Sep 17 00:00:00 2001 From: felix920506 Date: Thu, 20 Feb 2025 05:09:19 +0000 Subject: [PATCH 080/235] Translated using Weblate (Chinese (Traditional Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 1b9b766bb7..d5b78c1a79 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -293,7 +293,7 @@ "CinemaModeConfigurationHelp": "劇院模式直接為您的客廳帶來劇院級體驗,同時還可以播放預告片和自定開場。", "Collections": "系列作", "Composer": "作曲家", - "ConfigureDateAdded": "設定如何判斷在「控制台 > 媒體庫 > NFO 設定」中的「添加日期」", + "ConfigureDateAdded": "在「控制台 > 媒體庫 > 顯示」中設定「添加日期」的判斷方式", "ConfirmDeleteImage": "是否確定刪除圖片?", "ConfirmDeleteItems": "刪除這些項目會將檔案從檔案系統和媒體庫中刪除。你真的要繼續嗎?", "ConfirmEndPlayerSession": "您要在 {0} 秒後將 Jellyfin 關閉嗎?", @@ -795,7 +795,7 @@ "LabelEnableAutomaticPortMap": "啟用自動通訊埠轉發", "LabelEnableSingleImageInDidlLimit": "限制單個嵌入式圖片", "LabelEndDate": "結束日期", - "LabelLockItemToPreventChanges": "鎖定此項目以避免被更改", + "LabelLockItemToPreventChanges": "鎖定此項目以防止媒體資料被更改", "LabelManufacturer": "製造商", "LabelLoginDisclaimerHelp": "顯示在登入頁面底部的訊息。", "LabelManufacturerUrl": "製造商網址", @@ -1422,11 +1422,11 @@ "LabelMaxMuxingQueueSizeHelp": "等待所有串流初始化時可緩衝的最大封包數。如果在 FFmpeg 日誌中仍然遇到 \"Too many packets buffered for output stream\" 錯誤,請嘗試增加此設定值。建議值為 2048。", "LabelTonemappingParamHelp": "調整色調轉換演算法。建議值和預設值均為 NaN。通常將其留空。", "LabelTonemappingParam": "色調轉換參數", - "LabelTonemappingPeakHelp": "用此設定值覆蓋信號/標稱/參考峰值。當顯示資訊中嵌入的峰值資訊不可靠時,或從較低範圍到較高範圍的色調轉換時,此選項很有用。建議值和預設值為 100 和 0。", + "LabelTonemappingPeakHelp": "用此數值代替媒體中嵌入的峰值資訊。建議值為 100(1000nit)。", "LabelTonemappingPeak": "色調轉換峰值", "LabelTonemappingThresholdHelp": "此參數對每個場景的色調轉換演算法進行微調。此閾值用於檢測場景是否已更改。如果當前幀平均亮度和當前運行平均值之間的距離超過閾值,將重新計算場景平均和峰值亮度。建議值和預設值為 0.8 和 0.2。", "LabelTonemappingThreshold": "色調轉換閾值", - "LabelTonemappingDesatHelp": "降低超過此亮度級別的亮部飽和度。此值越大,將保留更多的顏色資訊。此設定可以平滑地變成白色,從而防止超高亮顯示出不自然的顏色。這使圖片感覺更自然,但以減少超出範圍的顏色的相關資訊為代價。建議值和預設值分別為 0 和 0.5。", + "LabelTonemappingDesatHelp": "降低超過此亮度級別的亮部飽和度。建議值為 0(停用)。", "LabelCreateHttpPortMap": "為 HTTP 與 HTTPS 啟用自動通訊埠轉發。", "LabelAutomaticDiscoveryHelp": "允許程式通過 UDP 7359 通訊埠自動偵測Jellyfin 。", "LabelAutomaticDiscovery": "啟動自動探索", @@ -1611,7 +1611,7 @@ "AudioIsExternal": "外部音訊串流", "LabelVppTonemappingBrightness": "VPP 色調轉換亮度增益", "EnableSplashScreen": "啟用啟動畫面", - "LabelVppTonemappingContrastHelp": "在 VPP 色調轉換中使用對比度增益。 推薦值和預設值是 1。", + "LabelVppTonemappingContrastHelp": "在 VPP 色調轉換中使用對比度增益。 建議值是 1。", "Clip": "花絮", "Larger": "較大的", "Sample": "樣本", @@ -1664,7 +1664,7 @@ "ThemeSong": "主題曲", "ThemeVideo": "主題影片", "EnableEnhancedNvdecDecoderHelp": "增強的 NVDEC 實現,如果遇到解碼錯誤,請停用此選項以使用 CUVID。", - "LabelVppTonemappingBrightnessHelp": "在 VPP 色調轉換中使用亮度增益。 推薦值和預設值為 16 和 0。", + "LabelVppTonemappingBrightnessHelp": "在 VPP 色調轉換中使用亮度增益。 建議值為 16。", "LabelVppTonemappingContrast": "VPP 色調轉換對比度增益", "VideoRangeTypeNotSupported": "不支援影片的範圍類型", "LabelVideoRangeType": "影片範圍類型", @@ -1994,5 +1994,13 @@ "AutoSubtitleStylingHelp": "此模式將依裝置類別自動切換原生字幕或自訂字幕樣式。", "LabelMediaSegmentProviders": "媒體片段提供者", "Custom": "自訂", - "CustomSubtitleStylingHelp": "字幕會在大部分裝置上運作,但會增加額外的效能損失。" + "CustomSubtitleStylingHelp": "字幕會在大部分裝置上運作,但會增加額外的效能損失。", + "MediaSegmentProvidersHelp": "啟用並重新排序偏好的媒體片段提供者。", + "LabelDevice": "裝置", + "DeleteServerConfirmation": "你確定要刪除此伺服器嗎?", + "LabelSubtitleStyling": "字幕樣式", + "LastActive": "最後活動", + "Native": "原生", + "NativeSubtitleStylingHelp": "字幕樣式在部分裝置上不被支援。在這些裝置上不會造成額外的負載。", + "LibraryNameInvalid": "媒體庫名稱不可為空,或以空白開始/結尾。" } From c03b2a92d6a071060a2c2da43e57cf3b46bd28ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 13:32:08 +0000 Subject: [PATCH 081/235] Update Linters --- package-lock.json | 1173 ++++++++++++++++++++++++++++----------------- package.json | 10 +- 2 files changed, 735 insertions(+), 448 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8034d8cf2c..eca2dee79e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,7 +70,7 @@ "@babel/preset-env": "7.25.8", "@babel/preset-react": "7.25.7", "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", - "@stylistic/eslint-plugin": "2.13.0", + "@stylistic/eslint-plugin": "3.1.0", "@stylistic/stylelint-plugin": "3.1.1", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", @@ -94,13 +94,13 @@ "css-loader": "7.1.2", "cssnano": "7.0.6", "es-check": "7.2.1", - "eslint": "8.57.1", - "eslint-plugin-compat": "4.2.0", + "eslint": "9.20.1", + "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.4", - "eslint-plugin-react-hooks": "4.6.2", - "eslint-plugin-sonarjs": "0.25.1", + "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-sonarjs": "3.0.2", "expose-loader": "5.0.0", "fork-ts-checker-webpack-plugin": "9.0.2", "html-loader": "5.1.0", @@ -3685,24 +3685,54 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz", + "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -3710,7 +3740,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3739,15 +3769,13 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3797,13 +3825,37 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", + "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.6.tgz", + "integrity": "sha512-+0TjwR1eAUdZtvv/ir1mGX+v0tUoR3VEPB8Up0LLJC+whRW0GgBBtpbOkg/a/U4Dxa6l5a3l9AJ1aWIQVyoWJA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.11.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@fontsource/noto-sans": { @@ -3842,20 +3894,42 @@ "integrity": "sha512-uJyenCRVZdiz+iRUyKwn99FDKQ0xMmLTOVHNzscqnp4ZwqYOl5S7fuL3IfH5FRRGYW+FTKtuY43D6gtVNtmrug==", "license": "OFL-1.1" }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -3871,13 +3945,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -4153,10 +4233,11 @@ } }, "node_modules/@mdn/browser-compat-data": { - "version": "5.3.29", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.29.tgz", - "integrity": "sha512-ipYCpMxejriKEC5OMHHN+cTTWpTQhaSg9+RGHl/Vly2LhGNml2eiGdx+LCU4XcCsi4YVVVPGcirNI/dF1xj70w==", - "dev": true + "version": "5.6.40", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.40.tgz", + "integrity": "sha512-cEprODy3K3rHUvHjbjcNyXrz/vK9qVB8gu3Wue9+9DaLVv9v5pKmR+FKs4ZYeQb5pMNp//MuONGnrDHm55H63A==", + "dev": true, + "license": "CC0-1.0" }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", @@ -5173,9 +5254,9 @@ } }, "node_modules/@stylistic/eslint-plugin": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.13.0.tgz", - "integrity": "sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz", + "integrity": "sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==", "dev": true, "license": "MIT", "dependencies": { @@ -5192,19 +5273,6 @@ "eslint": ">=8.40.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", @@ -5218,24 +5286,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/@stylistic/eslint-plugin/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -5574,10 +5624,11 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -6095,12 +6146,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "node_modules/@uupaa/dynamic-import-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@uupaa/dynamic-import-polyfill/-/dynamic-import-polyfill-1.0.2.tgz", @@ -6940,12 +6985,13 @@ } }, "node_modules/ast-metadata-inferer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz", - "integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.1.tgz", + "integrity": "sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==", "dev": true, + "license": "MIT", "dependencies": { - "@mdn/browser-compat-data": "^5.2.34" + "@mdn/browser-compat-data": "^5.6.19" } }, "node_modules/ast-types-flow": { @@ -7482,9 +7528,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "funding": [ { @@ -7502,10 +7548,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -7552,6 +7598,19 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -7746,9 +7805,9 @@ "dev": true }, "node_modules/caniuse-lite": { - "version": "1.0.30001667", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", - "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", + "version": "1.0.30001700", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", + "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", "dev": true, "funding": [ { @@ -8447,10 +8506,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9324,18 +9384,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -9482,9 +9530,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "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==", + "version": "1.5.102", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", + "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", "dev": true, "license": "ISC" }, @@ -9895,9 +9943,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -9918,59 +9966,63 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "9.20.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.1.tgz", + "integrity": "sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.11.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.20.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-import-resolver-node": { @@ -10038,24 +10090,26 @@ } }, "node_modules/eslint-plugin-compat": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz", - "integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-6.0.2.tgz", + "integrity": "sha512-1ME+YfJjmOz1blH0nPZpHgjMGK4kjgEeoYqGCqoBPQ/mGu/dJzdoP0f1C8H2jcWZjzhZjAMccbM/VdXhPORIfA==", "dev": true, + "license": "MIT", "dependencies": { - "@mdn/browser-compat-data": "^5.3.13", - "ast-metadata-inferer": "^0.8.0", - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001524", + "@mdn/browser-compat-data": "^5.5.35", + "ast-metadata-inferer": "^0.8.1", + "browserslist": "^4.24.2", + "caniuse-lite": "^1.0.30001687", "find-up": "^5.0.0", + "globals": "^15.7.0", "lodash.memoize": "^4.1.2", - "semver": "^7.5.4" + "semver": "^7.6.2" }, "engines": { - "node": ">=14.x" + "node": ">=18.x" }, "peerDependencies": { - "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-compat/node_modules/find-up": { @@ -10063,6 +10117,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -10074,11 +10129,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-plugin-compat/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-compat/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -10094,6 +10163,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10109,6 +10179,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -10120,13 +10191,11 @@ } }, "node_modules/eslint-plugin-compat/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10262,15 +10331,16 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { @@ -10315,15 +10385,73 @@ } }, "node_modules/eslint-plugin-sonarjs": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.25.1.tgz", - "integrity": "sha512-5IOKvj/GMBNqjxBdItfotfRHo7w48496GOu1hxdeXuD0mB1JBlDCViiLHETDTfA8pDAVSBimBEQoetRXYceQEw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.2.tgz", + "integrity": "sha512-LxjbfwI7ypENeTmGyKmDyNux3COSkMi7H/6Cal5StSLQ6edf0naP45SZR43OclaNR7WfhVTZdhOn63q3/Y6puQ==", "dev": true, - "engines": { - "node": ">=16" + "license": "LGPL-3.0-only", + "dependencies": { + "@eslint-community/regexpp": "4.12.1", + "builtin-modules": "3.3.0", + "bytes": "3.1.2", + "functional-red-black-tree": "1.0.1", + "jsx-ast-utils": "3.3.5", + "minimatch": "9.0.5", + "scslre": "0.3.0", + "semver": "7.7.1", + "typescript": "^5" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-sonarjs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/eslint-plugin-sonarjs/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eslint-plugin-sonarjs/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-plugin-sonarjs/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/eslint-scope": { @@ -10384,13 +10512,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -10442,9 +10563,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10452,7 +10573,20 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -10468,6 +10602,19 @@ "node": ">=4.0" } }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -10485,6 +10632,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -10498,22 +10659,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -10524,29 +10669,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -10616,17 +10738,44 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -11889,6 +12038,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true, + "license": "MIT" + }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -15275,9 +15431,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, @@ -18495,6 +18651,19 @@ "node": ">= 10.13.0" } }, + "node_modules/refa": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz", + "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -18565,6 +18734,20 @@ "node": ">=0.10.0" } }, + "node_modules/regexp-ast-analysis": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz", + "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.1" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -19552,6 +19735,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/scslre": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz", + "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.0", + "regexp-ast-analysis": "^0.7.0" + }, + "engines": { + "node": "^14.0.0 || >=16.0.0" + } + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -24116,18 +24314,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -24532,9 +24718,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "dev": true, "funding": [ { @@ -24552,8 +24738,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -27845,21 +28031,41 @@ } }, "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true }, + "@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "requires": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + } + }, + "@eslint/core": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz", + "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + }, "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -27886,13 +28092,10 @@ "dev": true }, "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true }, "import-fresh": { "version": "3.3.0", @@ -27928,11 +28131,27 @@ } }, "@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", + "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", "dev": true }, + "@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true + }, + "@eslint/plugin-kit": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.6.tgz", + "integrity": "sha512-+0TjwR1eAUdZtvv/ir1mGX+v0tUoR3VEPB8Up0LLJC+whRW0GgBBtpbOkg/a/U4Dxa6l5a3l9AJ1aWIQVyoWJA==", + "dev": true, + "requires": { + "@eslint/core": "^0.11.0", + "levn": "^0.4.1" + } + }, "@fontsource/noto-sans": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.1.1.tgz", @@ -27963,15 +28182,28 @@ "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.1.1.tgz", "integrity": "sha512-uJyenCRVZdiz+iRUyKwn99FDKQ0xMmLTOVHNzscqnp4ZwqYOl5S7fuL3IfH5FRRGYW+FTKtuY43D6gtVNtmrug==" }, - "@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true + }, + "@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "dependencies": { + "@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true + } } }, "@humanwhocodes/module-importer": { @@ -27980,10 +28212,10 @@ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, - "@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true }, "@isaacs/cliui": { @@ -28174,9 +28406,9 @@ } }, "@mdn/browser-compat-data": { - "version": "5.3.29", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.29.tgz", - "integrity": "sha512-ipYCpMxejriKEC5OMHHN+cTTWpTQhaSg9+RGHl/Vly2LhGNml2eiGdx+LCU4XcCsi4YVVVPGcirNI/dF1xj70w==", + "version": "5.6.40", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.40.tgz", + "integrity": "sha512-cEprODy3K3rHUvHjbjcNyXrz/vK9qVB8gu3Wue9+9DaLVv9v5pKmR+FKs4ZYeQb5pMNp//MuONGnrDHm55H63A==", "dev": true }, "@mrmlnc/readdir-enhanced": { @@ -28647,9 +28879,9 @@ "dev": true }, "@stylistic/eslint-plugin": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.13.0.tgz", - "integrity": "sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz", + "integrity": "sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==", "dev": true, "requires": { "@typescript-eslint/utils": "^8.13.0", @@ -28659,29 +28891,12 @@ "picomatch": "^4.0.2" }, "dependencies": { - "acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true - }, "eslint-visitor-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true }, - "espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "requires": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - } - }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -28921,9 +29136,9 @@ } }, "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/json5": { @@ -29323,12 +29538,6 @@ } } }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "@uupaa/dynamic-import-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@uupaa/dynamic-import-polyfill/-/dynamic-import-polyfill-1.0.2.tgz", @@ -29933,12 +30142,12 @@ "dev": true }, "ast-metadata-inferer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz", - "integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.1.tgz", + "integrity": "sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==", "dev": true, "requires": { - "@mdn/browser-compat-data": "^5.2.34" + "@mdn/browser-compat-data": "^5.6.19" } }, "ast-types-flow": { @@ -30321,15 +30530,15 @@ } }, "browserslist": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" } }, "buffer": { @@ -30354,6 +30563,12 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, "bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -30504,9 +30719,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001667", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", - "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", + "version": "1.0.30001700", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", + "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", "dev": true }, "canvas": { @@ -31010,9 +31225,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -31578,15 +31793,6 @@ "path-type": "^4.0.0" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -31710,9 +31916,9 @@ "dev": true }, "electron-to-chromium": { - "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==", + "version": "1.5.102", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", + "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", "dev": true }, "emoji-regex": { @@ -32037,9 +32243,9 @@ } }, "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, "escape-html": { @@ -32053,49 +32259,45 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "9.20.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.1.tgz", + "integrity": "sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.11.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.20.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "dependencies": { "ajv": { @@ -32119,12 +32321,6 @@ "color-convert": "^2.0.1" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -32157,21 +32353,36 @@ "dev": true }, "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true + }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -32182,6 +32393,16 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + } + }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -32191,36 +32412,12 @@ "is-glob": "^4.0.3" } }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -32319,18 +32516,19 @@ } }, "eslint-plugin-compat": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz", - "integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-6.0.2.tgz", + "integrity": "sha512-1ME+YfJjmOz1blH0nPZpHgjMGK4kjgEeoYqGCqoBPQ/mGu/dJzdoP0f1C8H2jcWZjzhZjAMccbM/VdXhPORIfA==", "dev": true, "requires": { - "@mdn/browser-compat-data": "^5.3.13", - "ast-metadata-inferer": "^0.8.0", - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001524", + "@mdn/browser-compat-data": "^5.5.35", + "ast-metadata-inferer": "^0.8.1", + "browserslist": "^4.24.2", + "caniuse-lite": "^1.0.30001687", "find-up": "^5.0.0", + "globals": "^15.7.0", "lodash.memoize": "^4.1.2", - "semver": "^7.5.4" + "semver": "^7.6.2" }, "dependencies": { "find-up": { @@ -32343,6 +32541,12 @@ "path-exists": "^4.0.0" } }, + "globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -32371,13 +32575,10 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true } } }, @@ -32514,18 +32715,60 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "dev": true, "requires": {} }, "eslint-plugin-sonarjs": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.25.1.tgz", - "integrity": "sha512-5IOKvj/GMBNqjxBdItfotfRHo7w48496GOu1hxdeXuD0mB1JBlDCViiLHETDTfA8pDAVSBimBEQoetRXYceQEw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.2.tgz", + "integrity": "sha512-LxjbfwI7ypENeTmGyKmDyNux3COSkMi7H/6Cal5StSLQ6edf0naP45SZR43OclaNR7WfhVTZdhOn63q3/Y6puQ==", "dev": true, - "requires": {} + "requires": { + "@eslint-community/regexpp": "4.12.1", + "builtin-modules": "3.3.0", + "bytes": "3.1.2", + "functional-red-black-tree": "1.0.1", + "jsx-ast-utils": "3.3.5", + "minimatch": "9.0.5", + "scslre": "0.3.0", + "semver": "7.7.1", + "typescript": "^5" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } + } }, "eslint-scope": { "version": "5.1.1", @@ -32544,14 +32787,28 @@ "dev": true }, "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "requires": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" + }, + "dependencies": { + "acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true + } } }, "esprima": { @@ -33478,6 +33735,12 @@ "is-callable": "^1.2.7" } }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -35882,9 +36145,9 @@ "dev": true }, "node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true }, "nopt": { @@ -37957,6 +38220,15 @@ "resolve": "^1.20.0" } }, + "refa": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz", + "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.8.0" + } + }, "reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -38012,6 +38284,16 @@ "safe-regex": "^1.1.0" } }, + "regexp-ast-analysis": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz", + "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.1" + } + }, "regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -38588,6 +38870,17 @@ "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.2.tgz", "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==" }, + "scslre": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz", + "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.0", + "regexp-ast-analysis": "^0.7.0" + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -41970,12 +42263,6 @@ "prelude-ls": "^1.2.1" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -42273,13 +42560,13 @@ } }, "update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "dev": true, "requires": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, "uri-js": { diff --git a/package.json b/package.json index 184c96fbfe..d719f7da69 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@babel/preset-env": "7.25.8", "@babel/preset-react": "7.25.7", "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", - "@stylistic/eslint-plugin": "2.13.0", + "@stylistic/eslint-plugin": "3.1.0", "@stylistic/stylelint-plugin": "3.1.1", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", @@ -34,13 +34,13 @@ "css-loader": "7.1.2", "cssnano": "7.0.6", "es-check": "7.2.1", - "eslint": "8.57.1", - "eslint-plugin-compat": "4.2.0", + "eslint": "9.20.1", + "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.4", - "eslint-plugin-react-hooks": "4.6.2", - "eslint-plugin-sonarjs": "0.25.1", + "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-sonarjs": "3.0.2", "expose-loader": "5.0.0", "fork-ts-checker-webpack-plugin": "9.0.2", "html-loader": "5.1.0", From 7d9acf30b68245476981dc97347aa209ed5fdbfe Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 20 Feb 2025 12:51:44 -0500 Subject: [PATCH 082/235] Update eslint config format --- .eslintignore | 5 - .eslintrc.js | 325 -------------------- eslint.config.mjs | 385 ++++++++++++++++++++++++ package-lock.json | 743 +++++++++++++++++++++++++++++++++++++--------- package.json | 6 +- 5 files changed, 996 insertions(+), 468 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 23f0a25578..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -coverage -dist -.idea -.vscode diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 21ae7e28e4..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,325 +0,0 @@ -const restrictedGlobals = require('confusing-browser-globals'); - -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - plugins: [ - '@stylistic', - '@typescript-eslint', - 'react', - 'import', - 'sonarjs' - ], - env: { - node: true, - es6: true, - es2017: true, - es2020: true - }, - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - 'plugin:import/errors', - 'plugin:@eslint-community/eslint-comments/recommended', - 'plugin:compat/recommended', - 'plugin:sonarjs/recommended' - ], - rules: { - 'array-callback-return': ['error', { 'checkForEach': true }], - 'curly': ['error', 'multi-line', 'consistent'], - 'default-case-last': ['error'], - 'max-params': ['error', 7], - 'new-cap': [ - 'error', - { - 'capIsNewExceptions': ['jQuery.Deferred'], - 'newIsCapExceptionPattern': '\\.default$' - } - ], - 'no-duplicate-imports': ['error'], - 'no-empty-function': ['error'], - 'no-extend-native': ['error'], - 'no-lonely-if': ['error'], - 'no-nested-ternary': ['error'], - 'no-redeclare': ['off'], - '@typescript-eslint/no-redeclare': ['error', { builtinGlobals: false }], - 'no-restricted-globals': ['error'].concat(restrictedGlobals), - 'no-return-assign': ['error'], - 'no-return-await': ['error'], - 'no-sequences': ['error', { 'allowInParentheses': false }], - 'no-shadow': ['off'], - '@typescript-eslint/no-shadow': ['error'], - 'no-throw-literal': ['error'], - 'no-undef-init': ['error'], - 'no-unneeded-ternary': ['error'], - 'no-unused-expressions': ['off'], - '@typescript-eslint/no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], - 'no-unused-private-class-members': ['error'], - 'no-useless-rename': ['error'], - 'no-useless-constructor': ['off'], - '@typescript-eslint/no-useless-constructor': ['error'], - 'no-var': ['error'], - 'no-void': ['error', { 'allowAsStatement': true }], - 'no-warning-comments': ['warn', { 'terms': ['fixme', 'hack', 'xxx'] }], - 'one-var': ['error', 'never'], - 'prefer-const': ['error', { 'destructuring': 'all' }], - 'prefer-promise-reject-errors': ['warn', { 'allowEmptyReject': true }], - '@typescript-eslint/prefer-for-of': ['error'], - 'radix': ['error'], - 'yoda': 'error', - - 'react/jsx-filename-extension': ['error', { 'extensions': ['.jsx', '.tsx'] }], - 'react/jsx-no-bind': ['error'], - 'react/jsx-no-useless-fragment': ['error'], - 'react/jsx-no-constructed-context-values': ['error'], - 'react/no-array-index-key': ['error'], - - 'sonarjs/no-inverted-boolean-check': ['error'], - // TODO: Enable the following rules and fix issues - 'sonarjs/cognitive-complexity': ['off'], - 'sonarjs/no-duplicate-string': ['off'], - - '@stylistic/block-spacing': ['error'], - '@stylistic/brace-style': ['error', '1tbs', { 'allowSingleLine': true }], - '@stylistic/comma-dangle': ['error', 'never'], - '@stylistic/comma-spacing': ['error'], - '@stylistic/eol-last': ['error'], - '@stylistic/indent': ['error', 4, { 'SwitchCase': 1 }], - '@stylistic/jsx-quotes': ['error', 'prefer-single'], - '@stylistic/keyword-spacing': ['error'], - '@stylistic/max-statements-per-line': ['error'], - '@stylistic/no-floating-decimal': ['error'], - '@stylistic/no-multi-spaces': ['error'], - '@stylistic/no-multiple-empty-lines': ['error', { 'max': 1 }], - '@stylistic/no-trailing-spaces': ['error'], - '@stylistic/object-curly-spacing': ['error', 'always'], - '@stylistic/operator-linebreak': ['error', 'before', { overrides: { '?': 'after', ':': 'after', '=': 'after' } }], - '@stylistic/padded-blocks': ['error', 'never'], - '@stylistic/quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }], - '@stylistic/semi': ['error'], - '@stylistic/space-before-blocks': ['error'], - '@stylistic/space-infix-ops': ['error'] - }, - settings: { - react: { - version: 'detect' - }, - 'import/parsers': { - '@typescript-eslint/parser': [ '.ts', '.tsx' ] - }, - 'import/resolver': { - node: { - extensions: [ - '.js', - '.ts', - '.jsx', - '.tsx' - ], - moduleDirectory: [ - 'node_modules', - 'src' - ] - } - }, - polyfills: [ - // Native Promises Only - 'Promise', - // whatwg-fetch - 'fetch', - // document-register-element - 'document.registerElement', - // resize-observer-polyfill - 'ResizeObserver', - // fast-text-encoding - 'TextEncoder', - // intersection-observer - 'IntersectionObserver', - // Core-js - 'Object.assign', - 'Object.is', - 'Object.setPrototypeOf', - 'Object.toString', - 'Object.freeze', - 'Object.seal', - 'Object.preventExtensions', - 'Object.isFrozen', - 'Object.isSealed', - 'Object.isExtensible', - 'Object.getOwnPropertyDescriptor', - 'Object.getPrototypeOf', - 'Object.keys', - 'Object.entries', - 'Object.getOwnPropertyNames', - 'Function.name', - 'Function.hasInstance', - 'Array.from', - 'Array.arrayOf', - 'Array.copyWithin', - 'Array.fill', - 'Array.find', - 'Array.findIndex', - 'Array.iterator', - 'String.fromCodePoint', - 'String.raw', - 'String.iterator', - 'String.codePointAt', - 'String.endsWith', - 'String.includes', - 'String.repeat', - 'String.startsWith', - 'String.trim', - 'String.anchor', - 'String.big', - 'String.blink', - 'String.bold', - 'String.fixed', - 'String.fontcolor', - 'String.fontsize', - 'String.italics', - 'String.link', - 'String.small', - 'String.strike', - 'String.sub', - 'String.sup', - 'RegExp', - 'Number', - 'Math', - 'Date', - 'async', - 'Symbol', - 'Map', - 'Set', - 'WeakMap', - 'WeakSet', - 'ArrayBuffer', - 'DataView', - 'Int8Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Int16Array', - 'Uint16Array', - 'Int32Array', - 'Uint32Array', - 'Float32Array', - 'Float64Array', - 'Reflect', - // Temporary while eslint-compat-plugin is buggy - 'document.querySelector' - ] - }, - overrides: [ - // Config files and development scripts - { - files: [ - './babel.config.js', - './.eslintrc.js', - './postcss.config.js', - './webpack.*.js', - './scripts/**/*.js' - ] - }, - // JavaScript source files - { - files: [ - './src/**/*.{js,jsx,ts,tsx}' - ], - parserOptions: { - project: ['./tsconfig.json'] - }, - env: { - node: false, - browser: true, - es6: true, - es2017: true, - es2020: true - }, - globals: { - // Tizen globals - 'tizen': 'readonly', - 'webapis': 'readonly', - // WebOS globals - 'webOS': 'readonly', - // Dependency globals - '$': 'readonly', - 'jQuery': 'readonly', - // Jellyfin globals - 'ApiClient': 'writable', - 'Events': 'writable', - 'chrome': 'writable', - 'Emby': 'readonly', - 'Hls': 'writable', - 'LibraryMenu': 'writable', - 'Windows': 'readonly', - // Build time definitions - __COMMIT_SHA__: 'readonly', - __JF_BUILD_VERSION__: 'readonly', - __PACKAGE_JSON_NAME__: 'readonly', - __PACKAGE_JSON_VERSION__: 'readonly', - __USE_SYSTEM_FONTS__: 'readonly', - __WEBPACK_SERVE__: 'readonly' - }, - rules: { - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'default', - format: [ 'camelCase', 'PascalCase' ], - leadingUnderscore: 'allow' - }, - { - selector: 'variable', - format: [ 'camelCase', 'PascalCase', 'UPPER_CASE' ], - leadingUnderscore: 'allowSingleOrDouble', - trailingUnderscore: 'allowSingleOrDouble' - }, - { - selector: 'typeLike', - format: [ 'PascalCase' ] - }, - { - selector: 'enumMember', - format: [ 'PascalCase', 'UPPER_CASE' ] - }, - { - selector: [ 'objectLiteralProperty', 'typeProperty' ], - format: [ 'camelCase', 'PascalCase' ], - leadingUnderscore: 'allowSingleOrDouble', - trailingUnderscore: 'allowSingleOrDouble' - }, - // Ignore numbers, locale strings (en-us), aria/data attributes, CSS selectors, - // and api_key parameter - { - selector: [ 'objectLiteralProperty', 'typeProperty' ], - format: null, - filter: { - regex: '[ &\\-]|^([0-9]+)$|^api_key$', - match: true - } - } - ], - '@typescript-eslint/prefer-string-starts-ends-with': ['error'] - } - }, - // TypeScript source files - { - files: [ - './src/**/*.{ts,tsx}' - ], - extends: [ - 'eslint:recommended', - 'plugin:import/typescript', - 'plugin:@typescript-eslint/recommended', - 'plugin:@eslint-community/eslint-comments/recommended', - 'plugin:react/recommended', - 'plugin:react-hooks/recommended', - 'plugin:jsx-a11y/recommended' - ], - rules: { - '@typescript-eslint/no-floating-promises': ['error'], - '@typescript-eslint/no-unused-vars': ['error'], - - 'sonarjs/cognitive-complexity': ['error'] - } - } - ] -}; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..5ddd5a00c5 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,385 @@ +// @ts-check + +import eslint from '@eslint/js'; +import comments from '@eslint-community/eslint-plugin-eslint-comments/configs'; +import compat from 'eslint-plugin-compat'; +import globals from 'globals'; +// @ts-expect-error Missing type definition +import importPlugin from 'eslint-plugin-import'; +import jsxA11y from 'eslint-plugin-jsx-a11y'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooks from 'eslint-plugin-react-hooks'; +import restrictedGlobals from 'confusing-browser-globals'; +import sonarjs from 'eslint-plugin-sonarjs'; +import stylistic from '@stylistic/eslint-plugin'; +// eslint-disable-next-line import/no-unresolved +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + // @ts-expect-error Harmless type mismatch in dependency + comments.recommended, + compat.configs['flat/recommended'], + importPlugin.flatConfigs.errors, + sonarjs.configs.recommended, + + reactPlugin.configs.flat.recommended, + { + settings: { + react: { + version: 'detect' + } + } + }, + jsxA11y.flatConfigs.recommended, + + // Global ignores + { + ignores: [ + 'node_modules', + 'coverage', + 'dist', + '.idea', + '.vscode' + ] + }, + + // Global style rules + { + plugins: { + '@stylistic': stylistic + }, + extends: [ importPlugin.flatConfigs.typescript ], + rules: { + 'array-callback-return': ['error', { 'checkForEach': true }], + 'curly': ['error', 'multi-line', 'consistent'], + 'default-case-last': 'error', + 'max-params': ['error', 7], + 'new-cap': [ + 'error', + { + 'capIsNewExceptions': ['jQuery.Deferred'], + 'newIsCapExceptionPattern': '\\.default$' + } + ], + 'no-duplicate-imports': 'error', + 'no-empty-function': 'error', + 'no-extend-native': 'error', + 'no-lonely-if': 'error', + 'no-nested-ternary': 'error', + 'no-redeclare': 'off', + '@typescript-eslint/no-redeclare': ['error', { builtinGlobals: false }], + 'no-restricted-globals': ['error'].concat(restrictedGlobals), + 'no-return-assign': 'error', + 'no-return-await': 'error', + 'no-sequences': ['error', { 'allowInParentheses': false }], + 'no-shadow': 'off', + '@typescript-eslint/no-shadow': 'error', + 'no-throw-literal': 'error', + 'no-undef-init': 'error', + 'no-unneeded-ternary': 'error', + 'no-unused-expressions': 'off', + '@typescript-eslint/no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], + 'no-unused-private-class-members': 'error', + '@typescript-eslint/no-unused-vars': 'error', + 'no-useless-rename': 'error', + 'no-useless-constructor': 'off', + '@typescript-eslint/no-useless-constructor': 'error', + 'no-var': 'error', + 'no-void': ['error', { 'allowAsStatement': true }], + 'no-warning-comments': ['warn', { 'terms': ['hack', 'xxx'] }], + 'one-var': ['error', 'never'], + 'prefer-const': ['error', { 'destructuring': 'all' }], + 'prefer-promise-reject-errors': ['warn', { 'allowEmptyReject': true }], + '@typescript-eslint/prefer-for-of': 'error', + 'radix': 'error', + 'yoda': 'error', + + 'sonarjs/fixme-tag': 'warn', + 'sonarjs/todo-tag': 'off', + 'sonarjs/deprecation': 'warn', + 'sonarjs/no-alphabetical-sort': 'warn', + 'sonarjs/no-inverted-boolean-check': 'error', + 'sonarjs/no-selector-parameter': 'off', + 'sonarjs/pseudo-random': 'warn', + // TODO: Enable the following sonarjs rules and fix issues + 'sonarjs/no-duplicate-string': 'off', + 'sonarjs/no-nested-functions': 'warn', + + // TODO: Replace with stylistic.configs.customize() + '@stylistic/block-spacing': 'error', + '@stylistic/brace-style': ['error', '1tbs', { 'allowSingleLine': true }], + '@stylistic/comma-dangle': ['error', 'never'], + '@stylistic/comma-spacing': 'error', + '@stylistic/eol-last': 'error', + '@stylistic/indent': ['error', 4, { 'SwitchCase': 1 }], + '@stylistic/jsx-quotes': ['error', 'prefer-single'], + '@stylistic/keyword-spacing': 'error', + '@stylistic/max-statements-per-line': 'error', + '@stylistic/no-floating-decimal': 'error', + '@stylistic/no-mixed-spaces-and-tabs': 'error', + '@stylistic/no-multi-spaces': 'error', + '@stylistic/no-multiple-empty-lines': ['error', { 'max': 1 }], + '@stylistic/no-trailing-spaces': 'error', + '@stylistic/object-curly-spacing': ['error', 'always'], + '@stylistic/operator-linebreak': ['error', 'before', { overrides: { '?': 'after', ':': 'after', '=': 'after' } }], + '@stylistic/padded-blocks': ['error', 'never'], + '@stylistic/quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }], + '@stylistic/semi': 'error', + '@stylistic/space-before-blocks': 'error', + '@stylistic/space-infix-ops': 'error' + } + }, + + // Config files use node globals + { + ignores: [ 'src' ], + languageOptions: { + globals: { + ...globals.node + } + } + }, + + // Config files are commonjs by default + { + files: [ '**/*.{cjs,js}' ], + ignores: [ 'src' ], + languageOptions: { + sourceType: 'commonjs' + }, + rules: { + '@typescript-eslint/no-require-imports': 'off' + } + }, + + // App files + { + files: [ + 'src/**/*.{js,jsx,ts,tsx}' + ], + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname + }, + globals: { + ...globals.browser, + // Tizen globals + 'tizen': false, + 'webapis': false, + // WebOS globals + 'webOS': false, + // Dependency globals + '$': false, + 'jQuery': false, + // Jellyfin globals + 'ApiClient': true, + 'Events': true, + 'chrome': true, + 'Emby': false, + 'Hls': true, + 'LibraryMenu': true, + 'Windows': false, + // Build time definitions + __COMMIT_SHA__: false, + __JF_BUILD_VERSION__: false, + __PACKAGE_JSON_NAME__: false, + __PACKAGE_JSON_VERSION__: false, + __USE_SYSTEM_FONTS__: false, + __WEBPACK_SERVE__: false + } + }, + settings: { + 'import/resolver': { + node: { + extensions: [ + '.js', + '.ts', + '.jsx', + '.tsx' + ], + moduleDirectory: [ + 'node_modules', + 'src' + ] + } + }, + polyfills: [ + 'Promise', + // whatwg-fetch + 'fetch', + // document-register-element + 'document.registerElement', + // resize-observer-polyfill + 'ResizeObserver', + // fast-text-encoding + 'TextEncoder', + // intersection-observer + 'IntersectionObserver', + // Core-js + 'Object.assign', + 'Object.is', + 'Object.setPrototypeOf', + 'Object.toString', + 'Object.freeze', + 'Object.seal', + 'Object.preventExtensions', + 'Object.isFrozen', + 'Object.isSealed', + 'Object.isExtensible', + 'Object.getOwnPropertyDescriptor', + 'Object.getPrototypeOf', + 'Object.keys', + 'Object.entries', + 'Object.getOwnPropertyNames', + 'Function.name', + 'Function.hasInstance', + 'Array.from', + 'Array.arrayOf', + 'Array.copyWithin', + 'Array.fill', + 'Array.find', + 'Array.findIndex', + 'Array.iterator', + 'String.fromCodePoint', + 'String.raw', + 'String.iterator', + 'String.codePointAt', + 'String.endsWith', + 'String.includes', + 'String.repeat', + 'String.startsWith', + 'String.trim', + 'String.anchor', + 'String.big', + 'String.blink', + 'String.bold', + 'String.fixed', + 'String.fontcolor', + 'String.fontsize', + 'String.italics', + 'String.link', + 'String.small', + 'String.strike', + 'String.sub', + 'String.sup', + 'RegExp', + 'Number', + 'Math', + 'Date', + 'async', + 'Symbol', + 'Map', + 'Set', + 'WeakMap', + 'WeakSet', + 'ArrayBuffer', + 'DataView', + 'Int8Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'Int16Array', + 'Uint16Array', + 'Int32Array', + 'Uint32Array', + 'Float32Array', + 'Float64Array', + 'Reflect' + ] + }, + rules: { + // TODO: Add typescript recommended typed rules + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'default', + format: [ 'camelCase', 'PascalCase' ], + leadingUnderscore: 'allow' + }, + { + selector: 'variable', + format: [ 'camelCase', 'PascalCase', 'UPPER_CASE' ], + leadingUnderscore: 'allowSingleOrDouble', + trailingUnderscore: 'allowSingleOrDouble' + }, + { + selector: 'typeLike', + format: [ 'PascalCase' ] + }, + { + selector: 'enumMember', + format: [ 'PascalCase', 'UPPER_CASE' ] + }, + { + selector: [ 'objectLiteralProperty', 'typeProperty' ], + format: [ 'camelCase', 'PascalCase' ], + leadingUnderscore: 'allowSingleOrDouble', + trailingUnderscore: 'allowSingleOrDouble' + }, + // Ignore numbers, locale strings (en-us), aria/data attributes, CSS selectors, + // and api_key parameter + { + selector: [ 'objectLiteralProperty', 'typeProperty' ], + format: null, + filter: { + regex: '[ &\\-]|^([0-9]+)$|^api_key$', + match: true + } + } + ], + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/prefer-string-starts-ends-with': 'error' + } + }, + + // React files + { + files: [ 'src/**/*.{jsx,tsx}' ], + plugins: { + 'react-hooks': reactHooks + }, + rules: { + 'react/jsx-filename-extension': ['error', { 'extensions': ['.jsx', '.tsx'] }], + 'react/jsx-no-bind': 'error', + 'react/jsx-no-useless-fragment': 'error', + 'react/no-array-index-key': 'error', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn' + } + }, + + // Service worker + { + files: [ 'src/serviceworker.js' ], + languageOptions: { + globals: { + ...globals.serviceworker + } + } + }, + + // Legacy JS (less strict) + { + files: [ 'src/**/*.{js,jsx}' ], + rules: { + '@typescript-eslint/no-floating-promises': 'off', + '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/no-unused-vars': 'warn', + + 'sonarjs/public-static-readonly': 'off', + + // TODO: Enable the following rules and fix issues + 'sonarjs/cognitive-complexity': 'off', + 'sonarjs/constructor-for-side-effects': 'off', + 'sonarjs/function-return-type': 'off', + 'sonarjs/no-async-constructor': 'off', + 'sonarjs/no-duplicate-string': 'off', + 'sonarjs/no-ignored-exceptions': 'off', + 'sonarjs/no-invariant-returns': 'warn', + 'sonarjs/no-nested-functions': 'off', + 'sonarjs/void-use': 'off' + } + } +); diff --git a/package-lock.json b/package-lock.json index eca2dee79e..0278d89196 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,6 +70,7 @@ "@babel/preset-env": "7.25.8", "@babel/preset-react": "7.25.7", "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", + "@eslint/js": "9.20.0", "@stylistic/eslint-plugin": "3.1.0", "@stylistic/stylelint-plugin": "3.1.1", "@types/dompurify": "3.0.5", @@ -81,8 +82,7 @@ "@types/react-dom": "18.3.1", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/eslint-plugin": "8.21.0", - "@typescript-eslint/parser": "8.21.0", + "@typescript-eslint/parser": "8.24.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.0.4", "autoprefixer": "10.4.20", @@ -103,6 +103,7 @@ "eslint-plugin-sonarjs": "3.0.2", "expose-loader": "5.0.0", "fork-ts-checker-webpack-plugin": "9.0.2", + "globals": "15.15.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", "jsdom": "25.0.1", @@ -123,6 +124,7 @@ "stylelint-scss": "6.10.1", "ts-loader": "9.5.2", "typescript": "5.7.3", + "typescript-eslint": "8.24.1", "vitest": "3.0.4", "webpack": "5.97.1", "webpack-bundle-analyzer": "4.10.2", @@ -874,6 +876,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", @@ -1788,6 +1799,14 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.25.8", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", @@ -3829,7 +3848,6 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -5914,47 +5932,16 @@ "@types/node": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.21.0.tgz", - "integrity": "sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.21.0", - "@typescript-eslint/type-utils": "8.21.0", - "@typescript-eslint/utils": "8.21.0", - "@typescript-eslint/visitor-keys": "8.21.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.21.0.tgz", - "integrity": "sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==", + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.1.tgz", + "integrity": "sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.21.0", - "@typescript-eslint/types": "8.21.0", - "@typescript-eslint/typescript-estree": "8.21.0", - "@typescript-eslint/visitor-keys": "8.21.0", + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/typescript-estree": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", "debug": "^4.3.4" }, "engines": { @@ -5969,6 +5956,127 @@ "typescript": ">=4.8.4 <5.8.0" } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.1.tgz", + "integrity": "sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.1.tgz", + "integrity": "sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.1.tgz", + "integrity": "sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.1.tgz", + "integrity": "sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.21.0.tgz", @@ -5987,30 +6095,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.21.0.tgz", - "integrity": "sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.21.0", - "@typescript-eslint/utils": "8.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, "node_modules/@typescript-eslint/types": { "version": "8.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.21.0.tgz", @@ -10129,19 +10213,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-compat/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-plugin-compat/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -10208,7 +10279,6 @@ "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": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -10302,7 +10372,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -12244,11 +12313,15 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -24135,11 +24208,10 @@ } }, "node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.12" }, @@ -24429,6 +24501,224 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.24.1.tgz", + "integrity": "sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.24.1", + "@typescript-eslint/parser": "8.24.1", + "@typescript-eslint/utils": "8.24.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.1.tgz", + "integrity": "sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/type-utils": "8.24.1", + "@typescript-eslint/utils": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.1.tgz", + "integrity": "sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.1.tgz", + "integrity": "sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.24.1", + "@typescript-eslint/utils": "8.24.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.1.tgz", + "integrity": "sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.1.tgz", + "integrity": "sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.1.tgz", + "integrity": "sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/typescript-estree": "8.24.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.1.tgz", + "integrity": "sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript-eslint/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -26626,6 +26916,14 @@ "@babel/helper-replace-supers": "^7.25.7", "@babel/traverse": "^7.25.7", "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } } }, "@babel/plugin-transform-computed-properties": { @@ -27196,6 +27494,13 @@ "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + } } }, "@babel/types": { @@ -29408,34 +29713,91 @@ "@types/node": "*" } }, - "@typescript-eslint/eslint-plugin": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.21.0.tgz", - "integrity": "sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.21.0", - "@typescript-eslint/type-utils": "8.21.0", - "@typescript-eslint/utils": "8.21.0", - "@typescript-eslint/visitor-keys": "8.21.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.0" - } - }, "@typescript-eslint/parser": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.21.0.tgz", - "integrity": "sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==", + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.1.tgz", + "integrity": "sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.21.0", - "@typescript-eslint/types": "8.21.0", - "@typescript-eslint/typescript-estree": "8.21.0", - "@typescript-eslint/visitor-keys": "8.21.0", + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/typescript-estree": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.1.tgz", + "integrity": "sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1" + } + }, + "@typescript-eslint/types": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.1.tgz", + "integrity": "sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.1.tgz", + "integrity": "sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.1.tgz", + "integrity": "sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.24.1", + "eslint-visitor-keys": "^4.2.0" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } } }, "@typescript-eslint/scope-manager": { @@ -29448,18 +29810,6 @@ "@typescript-eslint/visitor-keys": "8.21.0" } }, - "@typescript-eslint/type-utils": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.21.0.tgz", - "integrity": "sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "8.21.0", - "@typescript-eslint/utils": "8.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.0" - } - }, "@typescript-eslint/types": { "version": "8.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.21.0.tgz", @@ -32541,12 +32891,6 @@ "path-exists": "^4.0.0" } }, - "globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -33888,9 +34232,10 @@ } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true }, "globalthis": { "version": "1.0.4", @@ -42138,9 +42483,9 @@ "dev": true }, "ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "requires": {} }, @@ -42341,6 +42686,132 @@ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true }, + "typescript-eslint": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.24.1.tgz", + "integrity": "sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "8.24.1", + "@typescript-eslint/parser": "8.24.1", + "@typescript-eslint/utils": "8.24.1" + }, + "dependencies": { + "@typescript-eslint/eslint-plugin": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.1.tgz", + "integrity": "sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/type-utils": "8.24.1", + "@typescript-eslint/utils": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.1.tgz", + "integrity": "sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.1.tgz", + "integrity": "sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "8.24.1", + "@typescript-eslint/utils": "8.24.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + } + }, + "@typescript-eslint/types": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.1.tgz", + "integrity": "sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.1.tgz", + "integrity": "sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + } + }, + "@typescript-eslint/utils": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.1.tgz", + "integrity": "sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/typescript-estree": "8.24.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.1.tgz", + "integrity": "sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.24.1", + "eslint-visitor-keys": "^4.2.0" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } + } + }, "uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", diff --git a/package.json b/package.json index d719f7da69..cc4f0632d6 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@babel/preset-env": "7.25.8", "@babel/preset-react": "7.25.7", "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", + "@eslint/js": "9.20.0", "@stylistic/eslint-plugin": "3.1.0", "@stylistic/stylelint-plugin": "3.1.1", "@types/dompurify": "3.0.5", @@ -21,8 +22,7 @@ "@types/react-dom": "18.3.1", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/eslint-plugin": "8.21.0", - "@typescript-eslint/parser": "8.21.0", + "@typescript-eslint/parser": "8.24.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.0.4", "autoprefixer": "10.4.20", @@ -43,6 +43,7 @@ "eslint-plugin-sonarjs": "3.0.2", "expose-loader": "5.0.0", "fork-ts-checker-webpack-plugin": "9.0.2", + "globals": "15.15.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", "jsdom": "25.0.1", @@ -63,6 +64,7 @@ "stylelint-scss": "6.10.1", "ts-loader": "9.5.2", "typescript": "5.7.3", + "typescript-eslint": "8.24.1", "vitest": "3.0.4", "webpack": "5.97.1", "webpack-bundle-analyzer": "4.10.2", From 4730a30c3d6ef4732989ce8e5f6f96b065a6f5c4 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 20 Feb 2025 12:51:59 -0500 Subject: [PATCH 083/235] Fix lint errors --- .../components/library/GenresItemsContainer.tsx | 1 + src/apps/experimental/components/library/UpcomingView.tsx | 1 + src/apps/stable/features/playback/types/callbacks.ts | 1 + src/components/MarkdownBox.tsx | 1 + src/components/cardbuilder/Card/CardText.tsx | 1 + src/components/cardbuilder/Card/cardHelper.ts | 4 ++-- src/components/cardbuilder/cardBuilder.js | 2 ++ src/components/dashboard/users/AccessScheduleList.tsx | 2 +- src/components/favoriteitems.js | 7 ++++--- src/components/fetchhelper.js | 1 + src/components/focusManager.js | 1 + src/components/htmlMediaHelper.js | 3 ++- src/components/listview/listview.js | 1 + src/components/mediainfo/MediaInfoItem.tsx | 1 + src/components/playback/playbackmanager.js | 2 ++ src/components/playback/skipsegment.ts | 2 ++ src/components/sanitizeFilename.js | 6 +++++- src/controllers/favorites.js | 6 +++--- src/controllers/itemDetails/index.js | 2 ++ src/controllers/session/addServer/index.js | 1 + src/controllers/session/login/index.js | 1 + src/elements/emby-collapse/emby-collapse.js | 6 ++++-- src/elements/emby-slider/emby-slider.js | 1 + src/lib/legacy/htmlMediaElement.js | 1 + src/lib/scroller/index.js | 1 + src/scripts/browser.js | 6 +++--- src/scripts/browserDeviceProfile.js | 8 ++++---- src/scripts/clipboard.js | 5 ++--- webpack.common.js | 1 + 29 files changed, 53 insertions(+), 23 deletions(-) diff --git a/src/apps/experimental/components/library/GenresItemsContainer.tsx b/src/apps/experimental/components/library/GenresItemsContainer.tsx index ee77eeef2a..3885c77ece 100644 --- a/src/apps/experimental/components/library/GenresItemsContainer.tsx +++ b/src/apps/experimental/components/library/GenresItemsContainer.tsx @@ -17,6 +17,7 @@ const GenresItemsContainer: FC = ({ parentId, collectionType, itemType +// eslint-disable-next-line sonarjs/function-return-type }) => { const { isLoading, data: genresResult } = useGetGenres(itemType, parentId); diff --git a/src/apps/experimental/components/library/UpcomingView.tsx b/src/apps/experimental/components/library/UpcomingView.tsx index bef4fc36bc..af11d267af 100644 --- a/src/apps/experimental/components/library/UpcomingView.tsx +++ b/src/apps/experimental/components/library/UpcomingView.tsx @@ -6,6 +6,7 @@ import SectionContainer from 'components/common/SectionContainer'; import { CardShape } from 'utils/card'; import type { LibraryViewProps } from 'types/library'; +// eslint-disable-next-line sonarjs/function-return-type const UpcomingView: FC = ({ parentId }) => { const { isLoading, data: groupsUpcomingEpisodes } = useGetGroupsUpcomingEpisodes(parentId); diff --git a/src/apps/stable/features/playback/types/callbacks.ts b/src/apps/stable/features/playback/types/callbacks.ts index 1bede1b2c0..4eb039a71e 100644 --- a/src/apps/stable/features/playback/types/callbacks.ts +++ b/src/apps/stable/features/playback/types/callbacks.ts @@ -17,6 +17,7 @@ export interface MovedItem { playlistItemId: string } +// eslint-disable-next-line sonarjs/redundant-type-aliases export type PlayerErrorCode = string; export interface PlayerStopInfo { diff --git a/src/components/MarkdownBox.tsx b/src/components/MarkdownBox.tsx index b5023ce1eb..5274b7e796 100644 --- a/src/components/MarkdownBox.tsx +++ b/src/components/MarkdownBox.tsx @@ -16,6 +16,7 @@ const MarkdownBox: FC = ({ = ({ className, textLine }) => { const { title, titleAction } = textLine; + // eslint-disable-next-line sonarjs/function-return-type const renderCardText = () => { if (titleAction) { return ( diff --git a/src/components/cardbuilder/Card/cardHelper.ts b/src/components/cardbuilder/Card/cardHelper.ts index e64e7bfdd1..6ad1952d56 100644 --- a/src/components/cardbuilder/Card/cardHelper.ts +++ b/src/components/cardbuilder/Card/cardHelper.ts @@ -323,7 +323,7 @@ function shouldShowMediaTitle( } function shouldShowExtraType(itemExtraType: NullableString) { - return itemExtraType && itemExtraType !== 'Unknown'; + return !!(itemExtraType && itemExtraType !== 'Unknown'); } function shouldShowSeriesYearOrYear( @@ -351,7 +351,7 @@ function shouldShowPersonRoleOrType( showPersonRoleOrType: boolean | undefined, item: ItemDto ) { - return showPersonRoleOrType && (item as BaseItemPerson).Role; + return !!(showPersonRoleOrType && (item as BaseItemPerson).Role); } function shouldShowParentTitle( diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index bdcc0f8aea..7cbc33ace3 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -195,6 +195,7 @@ function buildCardsHtmlInternal(items, options) { if (isVertical) { html += '
'; } + // eslint-disable-next-line sonarjs/no-dead-store hasOpenSection = false; } @@ -215,6 +216,7 @@ function buildCardsHtmlInternal(items, options) { if (options.rows && itemsInRow === 0) { if (hasOpenRow) { html += ''; + // eslint-disable-next-line sonarjs/no-dead-store hasOpenRow = false; } diff --git a/src/components/dashboard/users/AccessScheduleList.tsx b/src/components/dashboard/users/AccessScheduleList.tsx index 91a789017f..a88a6c61b5 100644 --- a/src/components/dashboard/users/AccessScheduleList.tsx +++ b/src/components/dashboard/users/AccessScheduleList.tsx @@ -4,7 +4,7 @@ import globalize from '../../../lib/globalize'; import IconButtonElement from '../../../elements/IconButtonElement'; type AccessScheduleListProps = { - index: number; + index?: number; DayOfWeek?: string; StartHour?: number ; EndHour?: number; diff --git a/src/components/favoriteitems.js b/src/components/favoriteitems.js index 8a1b5c4738..e3e33be2f3 100644 --- a/src/components/favoriteitems.js +++ b/src/components/favoriteitems.js @@ -3,7 +3,6 @@ import globalize from 'lib/globalize'; import { getBackdropShape, getPortraitShape, getSquareShape } from 'utils/card'; import { getParameterByName } from 'utils/url'; -import { appHost } from './apphost'; import cardBuilder from './cardbuilder/cardBuilder'; import imageLoader from './images/imageLoader'; import layoutManager from './layoutManager'; @@ -160,8 +159,10 @@ function loadSection(elem, userId, topParentId, section, isSingleSection) { html += '
'; } - let cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle; - cardLayout = false; + // NOTE: Why is card layout always disabled? + // let cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle; + const cardLayout = false; + html += cardBuilder.getCardsHtml(result.Items, { preferThumb: section.preferThumb, shape: section.shape, diff --git a/src/components/fetchhelper.js b/src/components/fetchhelper.js index f63fa62ced..9de1dd7e3e 100644 --- a/src/components/fetchhelper.js +++ b/src/components/fetchhelper.js @@ -74,6 +74,7 @@ function fetchWithTimeout(url, options, timeoutMs) { */ function paramsToString(params) { return Object.entries(params) + // eslint-disable-next-line sonarjs/different-types-comparison .filter(([, v]) => v !== null && v !== undefined && v !== '') .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`) .join('&'); diff --git a/src/components/focusManager.js b/src/components/focusManager.js index 8dd0f6dd51..dc58fcc584 100644 --- a/src/components/focusManager.js +++ b/src/components/focusManager.js @@ -389,6 +389,7 @@ function intersectsInternal(a1, a2, b1, b2) { } function intersects(a1, a2, b1, b2) { + // eslint-disable-next-line sonarjs/arguments-order return intersectsInternal(a1, a2, b1, b2) || intersectsInternal(b1, b2, a1, a2); } diff --git a/src/components/htmlMediaHelper.js b/src/components/htmlMediaHelper.js index ab1a215656..f876568ce4 100644 --- a/src/components/htmlMediaHelper.js +++ b/src/components/htmlMediaHelper.js @@ -80,7 +80,7 @@ export function handleHlsJsMediaError(instance, reject) { let now = Date.now(); if (window.performance?.now) { - now = performance.now(); // eslint-disable-line compat/compat + now = performance.now(); } if (!recoverDecodingErrorDate || (now - recoverDecodingErrorDate) > 3000) { @@ -373,6 +373,7 @@ export function getBufferedRanges(instance, elem) { start = 0; } if (!isValidDuration(end)) { + // eslint-disable-next-line sonarjs/no-dead-store end = 0; continue; } diff --git a/src/components/listview/listview.js b/src/components/listview/listview.js index 8240ee047b..916b9a44a1 100644 --- a/src/components/listview/listview.js +++ b/src/components/listview/listview.js @@ -417,6 +417,7 @@ export function getListViewHtml(options) { } if (enableOverview && item.Overview) { + // eslint-disable-next-line sonarjs/disabled-auto-escaping const overview = DOMPurify.sanitize(markdownIt({ html: true }).render(item.Overview || '')); html += '
'; html += '' + overview + ''; diff --git a/src/components/mediainfo/MediaInfoItem.tsx b/src/components/mediainfo/MediaInfoItem.tsx index 35159ddfc6..58ce9952c2 100644 --- a/src/components/mediainfo/MediaInfoItem.tsx +++ b/src/components/mediainfo/MediaInfoItem.tsx @@ -13,6 +13,7 @@ interface MediaInfoItemProps { const MediaInfoItem: FC = ({ className, miscInfo }) => { const { text, textAction, cssClass, type } = miscInfo; + // eslint-disable-next-line sonarjs/function-return-type const renderText = () => { if (textAction) { return ( diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index de0c50e57d..f4e8ec02c1 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -208,6 +208,7 @@ function getMimeType(type, container) { } function getParam(name, url) { + // eslint-disable-next-line sonarjs/single-char-in-character-classes name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]'); const regexS = '[\\?&]' + name + '=([^&#]*)'; const regex = new RegExp(regexS, 'i'); @@ -2115,6 +2116,7 @@ export class PlaybackManager { if (!state) { playerStates[player.name] = {}; + // eslint-disable-next-line sonarjs/no-dead-store state = playerStates[player.name]; } diff --git a/src/components/playback/skipsegment.ts b/src/components/playback/skipsegment.ts index b73576c721..a6d3373b10 100644 --- a/src/components/playback/skipsegment.ts +++ b/src/components/playback/skipsegment.ts @@ -90,6 +90,7 @@ class SkipSegment extends PlaybackSubscriber { elem.classList.remove('no-transition'); } + // eslint-disable-next-line sonarjs/void-use void elem.offsetWidth; const hasFocus = document.activeElement && focusManager.isCurrentlyFocusable(document.activeElement); @@ -111,6 +112,7 @@ class SkipSegment extends PlaybackSubscriber { const elem = this.skipElement; if (elem) { elem.classList.remove('no-transition'); + // eslint-disable-next-line sonarjs/void-use void elem.offsetWidth; requestAnimationFrame(() => { diff --git a/src/components/sanitizeFilename.js b/src/components/sanitizeFilename.js index 77e06d359c..d0e32164f3 100644 --- a/src/components/sanitizeFilename.js +++ b/src/components/sanitizeFilename.js @@ -1,11 +1,14 @@ // TODO: Check if needed and move to external dependency // From https://github.com/parshap/node-sanitize-filename +// eslint-disable-next-line sonarjs/duplicates-in-character-class const illegalRe = /[/?<>\\:*|":]/g; -// eslint-disable-next-line no-control-regex +// eslint-disable-next-line no-control-regex, sonarjs/no-control-regex const controlRe = /[\x00-\x1f\x80-\x9f]/g; const reservedRe = /^\.+$/; +// eslint-disable-next-line sonarjs/concise-regex const windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i; +// eslint-disable-next-line sonarjs/slow-regex const windowsTrailingRe = /[. ]+$/; function isHighSurrogate(codePoint) { @@ -64,6 +67,7 @@ function truncate(string, byteLength) { segment = string[i]; if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) { + // eslint-disable-next-line sonarjs/updated-loop-counter i += 1; segment += string[i]; } diff --git a/src/controllers/favorites.js b/src/controllers/favorites.js index 6a6be74600..ccc689fc24 100644 --- a/src/controllers/favorites.js +++ b/src/controllers/favorites.js @@ -1,4 +1,3 @@ -import { appHost } from 'components/apphost'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import focusManager from 'components/focusManager'; import layoutManager from 'components/layoutManager'; @@ -202,8 +201,9 @@ function getRouteUrl(section, serverId) { function getItemsHtmlFn(section) { return function (items) { - let cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle; - cardLayout = false; + // NOTE: Why is card layout always disabled? + // let cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle; + const cardLayout = false; const serverId = this.apiClient.serverId(); const leadingButtons = layoutManager.tv ? [{ name: globalize.translate('All'), diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index bdb5a9fe08..344b316210 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -877,6 +877,7 @@ function renderOverview(page, item) { const overviewElements = page.querySelectorAll('.overview'); if (overviewElements.length > 0) { + // eslint-disable-next-line sonarjs/disabled-auto-escaping const overview = DOMPurify.sanitize(markdownIt({ html: true }).render(item.Overview || '')); if (overview) { @@ -1378,6 +1379,7 @@ function renderChildren(page, item) { if (item.Type == 'MusicAlbum') { let showArtist = false; for (const track of result.Items) { + // eslint-disable-next-line sonarjs/no-alphabetical-sort if (!isEqual(track.ArtistItems.map(x => x.Id).sort(), track.AlbumArtists.map(x => x.Id).sort())) { showArtist = true; break; diff --git a/src/controllers/session/addServer/index.js b/src/controllers/session/addServer/index.js index d7c02947f8..068fc6134d 100644 --- a/src/controllers/session/addServer/index.js +++ b/src/controllers/session/addServer/index.js @@ -36,6 +36,7 @@ function handleConnectionResult(page, result) { function submitServer(page) { loading.show(); + // eslint-disable-next-line sonarjs/slow-regex const host = page.querySelector('#txtServerHost').value.replace(/\/+$/, ''); ServerConnections.connectToAddress(host, { enableAutoLogin: appSettings.enableAutoLogin() diff --git a/src/controllers/session/login/index.js b/src/controllers/session/login/index.js index 93f8e03de0..2b61fb6e2b 100644 --- a/src/controllers/session/login/index.js +++ b/src/controllers/session/login/index.js @@ -292,6 +292,7 @@ export default function (view, params) { apiClient.getJSON(apiClient.getUrl('Branding/Configuration')).then(function (options) { const loginDisclaimer = view.querySelector('.loginDisclaimer'); + // eslint-disable-next-line sonarjs/disabled-auto-escaping loginDisclaimer.innerHTML = DOMPurify.sanitize(markdownIt({ html: true }).render(options.LoginDisclaimer || '')); for (const elem of loginDisclaimer.querySelectorAll('a')) { diff --git a/src/elements/emby-collapse/emby-collapse.js b/src/elements/emby-collapse/emby-collapse.js index bf281d1257..1f47db55b1 100644 --- a/src/elements/emby-collapse/emby-collapse.js +++ b/src/elements/emby-collapse/emby-collapse.js @@ -13,7 +13,8 @@ function slideDownToShow(button, elem) { elem.style.height = '0'; // trigger reflow // TODO: Find a better way to do this - const newHeight = elem.offsetHeight; /* eslint-disable-line no-unused-vars */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars, sonarjs/no-unused-vars, sonarjs/no-dead-store + const newHeight = elem.offsetHeight; elem.style.height = height; setTimeout(function () { @@ -35,7 +36,8 @@ function slideUpToHide(button, elem) { elem.style.height = elem.offsetHeight + 'px'; // trigger reflow // TODO: Find a better way to do this - const newHeight = elem.offsetHeight; /* eslint-disable-line no-unused-vars */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars, sonarjs/no-unused-vars, sonarjs/no-dead-store + const newHeight = elem.offsetHeight; elem.classList.remove('expanded'); elem.style.height = '0'; diff --git a/src/elements/emby-slider/emby-slider.js b/src/elements/emby-slider/emby-slider.js index 474fd430c2..e4575ecaff 100644 --- a/src/elements/emby-slider/emby-slider.js +++ b/src/elements/emby-slider/emby-slider.js @@ -161,6 +161,7 @@ function updateValues(isValueSet) { if (!!isValueSet && !supportsValueAutoSnap) { const value = snapValue(this, parseFloat(this.value)).toString(); + // eslint-disable-next-line sonarjs/different-types-comparison if (this.value !== value) { this.value = value; diff --git a/src/lib/legacy/htmlMediaElement.js b/src/lib/legacy/htmlMediaElement.js index b01389fded..9c76389168 100644 --- a/src/lib/legacy/htmlMediaElement.js +++ b/src/lib/legacy/htmlMediaElement.js @@ -11,6 +11,7 @@ const realPlay = HTMLMediaElementPrototype.play; HTMLMediaElementPrototype.play = function () { + // eslint-disable-next-line sonarjs/no-try-promise try { const promise = realPlay.apply(this, arguments); diff --git a/src/lib/scroller/index.js b/src/lib/scroller/index.js index 0292cb5688..d84cffc7b9 100644 --- a/src/lib/scroller/index.js +++ b/src/lib/scroller/index.js @@ -24,6 +24,7 @@ function type(value) { } if (typeof value === 'object' || typeof value === 'function') { + // eslint-disable-next-line sonarjs/prefer-regexp-exec return Object.prototype.toString.call(value).match(/\s([a-z]+)/i)[1].toLowerCase() || 'object'; } diff --git a/src/scripts/browser.js b/src/scripts/browser.js index e2f593e70b..d93b91dded 100644 --- a/src/scripts/browser.js +++ b/src/scripts/browser.js @@ -86,7 +86,7 @@ function iOSversion() { /Version\/(\d+)/ ]; for (const test of tests) { - const matches = (navigator.appVersion).match(test); + const matches = RegExp(test).exec(navigator.appVersion); if (matches) { return [ parseInt(matches[1], 10), @@ -163,6 +163,7 @@ function supportsCssAnimation(allowPrefix) { const domPrefixes = ['Webkit', 'O', 'Moz']; const elm = document.createElement('div'); + // eslint-disable-next-line sonarjs/different-types-comparison if (elm.style.animationName !== undefined) { animation = true; } @@ -298,7 +299,7 @@ if (browser.web0s) { delete browser.chrome; delete browser.safari; } else if (browser.tizen) { - const v = (navigator.appVersion).match(/Tizen (\d+).(\d+)/); + const v = RegExp(/Tizen (\d+).(\d+)/).exec(navigator.appVersion); browser.tizenVersion = parseInt(v[1], 10); // UserAgent string contains 'Chrome' and 'Safari', but we only want 'tizen' to be true @@ -319,7 +320,6 @@ if (browser.mobile || browser.tv) { browser.slow = true; } -/* eslint-disable-next-line compat/compat */ if (typeof document !== 'undefined' && ('ontouchstart' in window) || (navigator.maxTouchPoints > 0)) { browser.touch = true; } diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index f051d4a122..4370edaeaf 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -230,7 +230,8 @@ function supportsVc1(videoTestElement) { } function supportsHdr10(options) { - return options.supportsHdr10 ?? (false // eslint-disable-line sonarjs/no-redundant-boolean + // eslint-disable-next-line no-constant-binary-expression, sonarjs/no-redundant-boolean + return options.supportsHdr10 ?? (false || browser.vidaa || browser.tizen || browser.web0s @@ -253,7 +254,8 @@ function supportsHlg(options) { } function supportsDolbyVision(options) { - return options.supportsDolbyVision ?? (false // eslint-disable-line sonarjs/no-redundant-boolean + // eslint-disable-next-line no-constant-binary-expression, sonarjs/no-redundant-boolean + return options.supportsDolbyVision ?? (false || browser.safari && ((browser.iOS && browser.iOSVersion >= 13) || browser.osx) ); } @@ -512,10 +514,8 @@ export default function (options) { } } - /* eslint-disable compat/compat */ let maxVideoWidth = browser.xboxOne ? window.screen?.width : null; - /* eslint-enable compat/compat */ if (options.maxVideoWidth) { maxVideoWidth = options.maxVideoWidth; } diff --git a/src/scripts/clipboard.js b/src/scripts/clipboard.js index 7e7170b7a1..79bee57f18 100644 --- a/src/scripts/clipboard.js +++ b/src/scripts/clipboard.js @@ -33,7 +33,7 @@ function textAreaCopy(text) { } else { ret = Promise.reject(); } - } catch (_) { + } catch { ret = Promise.reject(); } @@ -48,11 +48,10 @@ function textAreaCopy(text) { * @returns {Promise} Promise. */ export function copy(text) { - /* eslint-disable-next-line compat/compat */ + // eslint-disable-next-line sonarjs/different-types-comparison if (navigator.clipboard === undefined) { return textAreaCopy(text); } else { - /* eslint-disable-next-line compat/compat */ return navigator.clipboard.writeText(text).catch(() => { return textAreaCopy(text); }); diff --git a/webpack.common.js b/webpack.common.js index bce07af984..0a4f543a2d 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -23,6 +23,7 @@ const DEV_MODE = process.env.NODE_ENV !== 'production'; let COMMIT_SHA = ''; try { COMMIT_SHA = require('child_process') + // eslint-disable-next-line sonarjs/no-os-command-from-path .execSync('git describe --always --dirty') .toString() .trim(); From 2216dcbc5c454b79b869bdd55d8976c30ff04fb4 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 20 Feb 2025 13:22:57 -0500 Subject: [PATCH 084/235] Disable renovate lockfile maintenance --- .github/renovate.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/renovate.json b/.github/renovate.json index 44f4b23180..97dc4f0edb 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -4,6 +4,9 @@ "github>jellyfin/.github//renovate-presets/nodejs", ":dependencyDashboard" ], + "lockFileMaintenance": { + "enabled": false + }, "packageRules": [ { "matchPackageNames": [ "@jellyfin/sdk" ], From cca94f8fc861ad72187ea1aad8b6b895472540a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 18:48:45 +0000 Subject: [PATCH 085/235] Update dependency vitest to v3.0.5 [SECURITY] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cc4f0632d6..f2a8b2a569 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "ts-loader": "9.5.2", "typescript": "5.7.3", "typescript-eslint": "8.24.1", - "vitest": "3.0.4", + "vitest": "3.0.5", "webpack": "5.97.1", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", From 6e6467b090c499a4e9c3459257d286a40807960b Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 20 Feb 2025 14:03:40 -0500 Subject: [PATCH 086/235] Fix restart and shutdown buttons --- src/apps/dashboard/controllers/dashboard.html | 4 ++-- src/apps/dashboard/controllers/dashboard.js | 23 ++++++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/apps/dashboard/controllers/dashboard.html b/src/apps/dashboard/controllers/dashboard.html index aafe8de61b..5c449c5e91 100644 --- a/src/apps/dashboard/controllers/dashboard.html +++ b/src/apps/dashboard/controllers/dashboard.html @@ -23,10 +23,10 @@ - -
diff --git a/src/apps/dashboard/controllers/dashboard.js b/src/apps/dashboard/controllers/dashboard.js index 119fe8e670..e29bb4778d 100644 --- a/src/apps/dashboard/controllers/dashboard.js +++ b/src/apps/dashboard/controllers/dashboard.js @@ -714,30 +714,34 @@ const DashboardPage = { pollForInfo(page, ApiClient); }); }, - restart: function (btn) { + restart: function (event) { confirm({ title: globalize.translate('Restart'), text: globalize.translate('MessageConfirmRestart'), confirmText: globalize.translate('Restart'), primary: 'delete' - }).then(function () { - const page = dom.parentWithClass(btn, 'page'); + }).then(() => { + const page = dom.parentWithClass(event.target, 'page'); page.querySelector('#btnRestartServer').disabled = true; page.querySelector('#btnShutdown').disabled = true; ApiClient.restartServer(); + }).catch(() => { + // Confirm dialog closed }); }, - shutdown: function (btn) { + shutdown: function (event) { confirm({ title: globalize.translate('ButtonShutdown'), text: globalize.translate('MessageConfirmShutdown'), confirmText: globalize.translate('ButtonShutdown'), primary: 'delete' - }).then(function () { - const page = dom.parentWithClass(btn, 'page'); + }).then(() => { + const page = dom.parentWithClass(event.target, 'page'); page.querySelector('#btnRestartServer').disabled = true; page.querySelector('#btnShutdown').disabled = true; ApiClient.shutdownServer(); + }).catch(() => { + // Confirm dialog closed }); } }; @@ -817,7 +821,11 @@ export default function (view) { taskKey: 'RefreshLibrary', button: page.querySelector('.btnRefresh') }); + + page.querySelector('#btnRestartServer').addEventListener('click', DashboardPage.restart); + page.querySelector('#btnShutdown').addEventListener('click', DashboardPage.shutdown); }); + view.addEventListener('viewbeforehide', function () { const apiClient = ApiClient; const page = this; @@ -839,6 +847,9 @@ export default function (view) { taskKey: 'RefreshLibrary', button: page.querySelector('.btnRefresh') }); + + page.querySelector('#btnRestartServer').removeEventListener('click', DashboardPage.restart); + page.querySelector('#btnShutdown').removeEventListener('click', DashboardPage.shutdown); }); view.addEventListener('viewdestroy', function () { const page = this; From d97b56968ae638b5a3057306fde7306a58bd8c1e Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 20 Feb 2025 14:17:47 -0500 Subject: [PATCH 087/235] Update @vitest/coverage-v8 to 3.0.5 --- package-lock.json | 770 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 381 insertions(+), 391 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0278d89196..11b2a7b77c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,7 +84,7 @@ "@types/sortablejs": "1.15.8", "@typescript-eslint/parser": "8.24.1", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "3.0.4", + "@vitest/coverage-v8": "3.0.5", "autoprefixer": "10.4.20", "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", @@ -125,7 +125,7 @@ "ts-loader": "9.5.2", "typescript": "5.7.3", "typescript-eslint": "8.24.1", - "vitest": "3.0.4", + "vitest": "3.0.5", "webpack": "5.97.1", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", @@ -3238,7 +3238,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "aix" @@ -3255,7 +3254,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -3272,7 +3270,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -3289,7 +3286,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -3306,7 +3302,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -3323,7 +3318,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -3340,7 +3334,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -3357,7 +3350,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -3374,7 +3366,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3391,7 +3382,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3408,7 +3398,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3425,7 +3414,6 @@ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3442,7 +3430,6 @@ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3459,7 +3446,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3476,7 +3462,6 @@ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3493,7 +3478,6 @@ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3510,7 +3494,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -3527,7 +3510,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -3544,7 +3526,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -3561,7 +3542,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -3578,7 +3558,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -3595,7 +3574,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" @@ -3612,7 +3590,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -3629,7 +3606,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -3646,7 +3622,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -4987,266 +4962,247 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz", - "integrity": "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz", - "integrity": "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz", - "integrity": "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz", - "integrity": "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz", - "integrity": "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz", - "integrity": "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz", - "integrity": "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz", - "integrity": "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz", - "integrity": "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz", - "integrity": "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz", - "integrity": "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", "cpu": [ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz", - "integrity": "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz", - "integrity": "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz", - "integrity": "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz", - "integrity": "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz", - "integrity": "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz", - "integrity": "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz", - "integrity": "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz", - "integrity": "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -6237,11 +6193,10 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.4.tgz", - "integrity": "sha512-f0twgRCHgbs24Dp8cLWagzcObXMcuKtAwgxjJV/nnysPAJJk1JiKu/W0gIehZLmkljhJXU/E0/dmuQzsA/4jhA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.5.tgz", + "integrity": "sha512-zOOWIsj5fHh3jjGwQg+P+J1FW3s4jBu1Zqga0qW60yutsBtqEqNEJKWYh7cYn1yGD+1bdPsPdC/eL4eVK56xMg==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^1.0.2", @@ -6260,8 +6215,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.0.4", - "vitest": "3.0.4" + "@vitest/browser": "3.0.5", + "vitest": "3.0.5" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -6270,14 +6225,13 @@ } }, "node_modules/@vitest/expect": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.4.tgz", - "integrity": "sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.5.tgz", + "integrity": "sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==", "dev": true, - "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.4", - "@vitest/utils": "3.0.4", + "@vitest/spy": "3.0.5", + "@vitest/utils": "3.0.5", "chai": "^5.1.2", "tinyrainbow": "^2.0.0" }, @@ -6286,13 +6240,12 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.4.tgz", - "integrity": "sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.5.tgz", + "integrity": "sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==", "dev": true, - "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.4", + "@vitest/spy": "3.0.5", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -6313,11 +6266,10 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.4.tgz", - "integrity": "sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.6.tgz", + "integrity": "sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==", "dev": true, - "license": "MIT", "dependencies": { "tinyrainbow": "^2.0.0" }, @@ -6326,13 +6278,12 @@ } }, "node_modules/@vitest/runner": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.4.tgz", - "integrity": "sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.5.tgz", + "integrity": "sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==", "dev": true, - "license": "MIT", "dependencies": { - "@vitest/utils": "3.0.4", + "@vitest/utils": "3.0.5", "pathe": "^2.0.2" }, "funding": { @@ -6340,13 +6291,12 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.4.tgz", - "integrity": "sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.5.tgz", + "integrity": "sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==", "dev": true, - "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.4", + "@vitest/pretty-format": "3.0.5", "magic-string": "^0.30.17", "pathe": "^2.0.2" }, @@ -6354,12 +6304,23 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/spy": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.4.tgz", - "integrity": "sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==", + "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", + "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", + "dev": true, + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.5.tgz", + "integrity": "sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==", "dev": true, - "license": "MIT", "dependencies": { "tinyspy": "^3.0.2" }, @@ -6368,13 +6329,12 @@ } }, "node_modules/@vitest/utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.4.tgz", - "integrity": "sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.5.tgz", + "integrity": "sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==", "dev": true, - "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.4", + "@vitest/pretty-format": "3.0.5", "loupe": "^3.1.2", "tinyrainbow": "^2.0.0" }, @@ -6382,6 +6342,18 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/utils/node_modules/@vitest/pretty-format": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", + "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", + "dev": true, + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -7054,7 +7026,6 @@ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" } @@ -7935,11 +7906,10 @@ } }, "node_modules/chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -8009,7 +7979,6 @@ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 16" } @@ -9241,7 +9210,6 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -9991,7 +9959,6 @@ "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -10919,7 +10886,6 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } @@ -11041,7 +11007,6 @@ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.0.0" } @@ -14778,11 +14743,10 @@ } }, "node_modules/loupe": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", - "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", - "dev": true, - "license": "MIT" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "dev": true }, "node_modules/lower-case": { "version": "2.0.2", @@ -14810,7 +14774,6 @@ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } @@ -15358,9 +15321,9 @@ "optional": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -16200,18 +16163,16 @@ } }, "node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", - "dev": true, - "license": "MIT" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14.16" } @@ -19085,11 +19046,10 @@ } }, "node_modules/rollup": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz", - "integrity": "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.6" }, @@ -19101,25 +19061,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.32.1", - "@rollup/rollup-android-arm64": "4.32.1", - "@rollup/rollup-darwin-arm64": "4.32.1", - "@rollup/rollup-darwin-x64": "4.32.1", - "@rollup/rollup-freebsd-arm64": "4.32.1", - "@rollup/rollup-freebsd-x64": "4.32.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.32.1", - "@rollup/rollup-linux-arm-musleabihf": "4.32.1", - "@rollup/rollup-linux-arm64-gnu": "4.32.1", - "@rollup/rollup-linux-arm64-musl": "4.32.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.32.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1", - "@rollup/rollup-linux-riscv64-gnu": "4.32.1", - "@rollup/rollup-linux-s390x-gnu": "4.32.1", - "@rollup/rollup-linux-x64-gnu": "4.32.1", - "@rollup/rollup-linux-x64-musl": "4.32.1", - "@rollup/rollup-win32-arm64-msvc": "4.32.1", - "@rollup/rollup-win32-ia32-msvc": "4.32.1", - "@rollup/rollup-win32-x64-msvc": "4.32.1", + "@rollup/rollup-android-arm-eabi": "4.34.8", + "@rollup/rollup-android-arm64": "4.34.8", + "@rollup/rollup-darwin-arm64": "4.34.8", + "@rollup/rollup-darwin-x64": "4.34.8", + "@rollup/rollup-freebsd-arm64": "4.34.8", + "@rollup/rollup-freebsd-x64": "4.34.8", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", + "@rollup/rollup-linux-arm64-gnu": "4.34.8", + "@rollup/rollup-linux-arm64-musl": "4.34.8", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", + "@rollup/rollup-linux-s390x-gnu": "4.34.8", + "@rollup/rollup-linux-x64-gnu": "4.34.8", + "@rollup/rollup-linux-x64-musl": "4.34.8", + "@rollup/rollup-win32-arm64-msvc": "4.34.8", + "@rollup/rollup-win32-ia32-msvc": "4.34.8", + "@rollup/rollup-win32-x64-msvc": "4.34.8", "fsevents": "~2.3.2" } }, @@ -20869,8 +20829,7 @@ "version": "3.8.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/string_decoder": { "version": "1.1.1", @@ -23985,22 +23944,19 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/tinypool": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, - "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" } @@ -24010,7 +23966,6 @@ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -24020,7 +23975,6 @@ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -25179,15 +25133,14 @@ } }, "node_modules/vite": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", - "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.1.tgz", + "integrity": "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" + "postcss": "^8.5.2", + "rollup": "^4.30.1" }, "bin": { "vite": "bin/vite.js" @@ -25251,11 +25204,10 @@ } }, "node_modules/vite-node": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.4.tgz", - "integrity": "sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.5.tgz", + "integrity": "sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==", "dev": true, - "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.4.0", @@ -25273,20 +25225,47 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vitest": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.4.tgz", - "integrity": "sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==", + "node_modules/vite/node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@vitest/expect": "3.0.4", - "@vitest/mocker": "3.0.4", - "@vitest/pretty-format": "^3.0.4", - "@vitest/runner": "3.0.4", - "@vitest/snapshot": "3.0.4", - "@vitest/spy": "3.0.4", - "@vitest/utils": "3.0.4", + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/vitest": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.5.tgz", + "integrity": "sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==", + "dev": true, + "dependencies": { + "@vitest/expect": "3.0.5", + "@vitest/mocker": "3.0.5", + "@vitest/pretty-format": "^3.0.5", + "@vitest/runner": "3.0.5", + "@vitest/snapshot": "3.0.5", + "@vitest/spy": "3.0.5", + "@vitest/utils": "3.0.5", "chai": "^5.1.2", "debug": "^4.4.0", "expect-type": "^1.1.0", @@ -25298,7 +25277,7 @@ "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.4", + "vite-node": "3.0.5", "why-is-node-running": "^2.3.0" }, "bin": { @@ -25314,8 +25293,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.4", - "@vitest/ui": "3.0.4", + "@vitest/browser": "3.0.5", + "@vitest/ui": "3.0.5", "happy-dom": "*", "jsdom": "*" }, @@ -25979,7 +25958,6 @@ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, - "license": "MIT", "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" @@ -26389,21 +26367,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "devOptional": true }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -29039,135 +29002,135 @@ "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==" }, "@rollup/rollup-android-arm-eabi": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz", - "integrity": "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", "dev": true, "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz", - "integrity": "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", "dev": true, "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz", - "integrity": "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", "dev": true, "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz", - "integrity": "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", "dev": true, "optional": true }, "@rollup/rollup-freebsd-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz", - "integrity": "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", "dev": true, "optional": true }, "@rollup/rollup-freebsd-x64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz", - "integrity": "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz", - "integrity": "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-musleabihf": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz", - "integrity": "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz", - "integrity": "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz", - "integrity": "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", "dev": true, "optional": true }, "@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz", - "integrity": "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz", - "integrity": "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", "dev": true, "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz", - "integrity": "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", "dev": true, "optional": true }, "@rollup/rollup-linux-s390x-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz", - "integrity": "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz", - "integrity": "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz", - "integrity": "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", "dev": true, "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz", - "integrity": "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", "dev": true, "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz", - "integrity": "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", "dev": true, "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz", - "integrity": "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", "dev": true, "optional": true }, @@ -29895,9 +29858,9 @@ "dev": true }, "@vitest/coverage-v8": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.4.tgz", - "integrity": "sha512-f0twgRCHgbs24Dp8cLWagzcObXMcuKtAwgxjJV/nnysPAJJk1JiKu/W0gIehZLmkljhJXU/E0/dmuQzsA/4jhA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.5.tgz", + "integrity": "sha512-zOOWIsj5fHh3jjGwQg+P+J1FW3s4jBu1Zqga0qW60yutsBtqEqNEJKWYh7cYn1yGD+1bdPsPdC/eL4eVK56xMg==", "dev": true, "requires": { "@ampproject/remapping": "^2.3.0", @@ -29915,76 +29878,98 @@ } }, "@vitest/expect": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.4.tgz", - "integrity": "sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.5.tgz", + "integrity": "sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==", "dev": true, "requires": { - "@vitest/spy": "3.0.4", - "@vitest/utils": "3.0.4", + "@vitest/spy": "3.0.5", + "@vitest/utils": "3.0.5", "chai": "^5.1.2", "tinyrainbow": "^2.0.0" } }, "@vitest/mocker": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.4.tgz", - "integrity": "sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.5.tgz", + "integrity": "sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==", "dev": true, "requires": { - "@vitest/spy": "3.0.4", + "@vitest/spy": "3.0.5", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" } }, "@vitest/pretty-format": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.4.tgz", - "integrity": "sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.6.tgz", + "integrity": "sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==", "dev": true, "requires": { "tinyrainbow": "^2.0.0" } }, "@vitest/runner": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.4.tgz", - "integrity": "sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.5.tgz", + "integrity": "sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==", "dev": true, "requires": { - "@vitest/utils": "3.0.4", + "@vitest/utils": "3.0.5", "pathe": "^2.0.2" } }, "@vitest/snapshot": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.4.tgz", - "integrity": "sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.5.tgz", + "integrity": "sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==", "dev": true, "requires": { - "@vitest/pretty-format": "3.0.4", + "@vitest/pretty-format": "3.0.5", "magic-string": "^0.30.17", "pathe": "^2.0.2" + }, + "dependencies": { + "@vitest/pretty-format": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", + "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", + "dev": true, + "requires": { + "tinyrainbow": "^2.0.0" + } + } } }, "@vitest/spy": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.4.tgz", - "integrity": "sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.5.tgz", + "integrity": "sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==", "dev": true, "requires": { "tinyspy": "^3.0.2" } }, "@vitest/utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.4.tgz", - "integrity": "sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.5.tgz", + "integrity": "sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==", "dev": true, "requires": { - "@vitest/pretty-format": "3.0.4", + "@vitest/pretty-format": "3.0.5", "loupe": "^3.1.2", "tinyrainbow": "^2.0.0" + }, + "dependencies": { + "@vitest/pretty-format": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", + "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", + "dev": true, + "requires": { + "tinyrainbow": "^2.0.0" + } + } } }, "@webassemblyjs/ast": { @@ -31092,9 +31077,9 @@ "dev": true }, "chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, "requires": { "assertion-error": "^2.0.1", @@ -35966,9 +35951,9 @@ } }, "loupe": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", - "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", "dev": true }, "lower-case": { @@ -36375,9 +36360,9 @@ "optional": true }, "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true }, "nanomatch": { @@ -37011,9 +36996,9 @@ "optional": true }, "pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true }, "pathval": { @@ -38836,30 +38821,30 @@ } }, "rollup": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz", - "integrity": "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==", + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", "dev": true, "requires": { - "@rollup/rollup-android-arm-eabi": "4.32.1", - "@rollup/rollup-android-arm64": "4.32.1", - "@rollup/rollup-darwin-arm64": "4.32.1", - "@rollup/rollup-darwin-x64": "4.32.1", - "@rollup/rollup-freebsd-arm64": "4.32.1", - "@rollup/rollup-freebsd-x64": "4.32.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.32.1", - "@rollup/rollup-linux-arm-musleabihf": "4.32.1", - "@rollup/rollup-linux-arm64-gnu": "4.32.1", - "@rollup/rollup-linux-arm64-musl": "4.32.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.32.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1", - "@rollup/rollup-linux-riscv64-gnu": "4.32.1", - "@rollup/rollup-linux-s390x-gnu": "4.32.1", - "@rollup/rollup-linux-x64-gnu": "4.32.1", - "@rollup/rollup-linux-x64-musl": "4.32.1", - "@rollup/rollup-win32-arm64-msvc": "4.32.1", - "@rollup/rollup-win32-ia32-msvc": "4.32.1", - "@rollup/rollup-win32-x64-msvc": "4.32.1", + "@rollup/rollup-android-arm-eabi": "4.34.8", + "@rollup/rollup-android-arm64": "4.34.8", + "@rollup/rollup-darwin-arm64": "4.34.8", + "@rollup/rollup-darwin-x64": "4.34.8", + "@rollup/rollup-freebsd-arm64": "4.34.8", + "@rollup/rollup-freebsd-x64": "4.34.8", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", + "@rollup/rollup-linux-arm64-gnu": "4.34.8", + "@rollup/rollup-linux-arm64-musl": "4.34.8", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", + "@rollup/rollup-linux-s390x-gnu": "4.34.8", + "@rollup/rollup-linux-x64-gnu": "4.34.8", + "@rollup/rollup-linux-x64-musl": "4.34.8", + "@rollup/rollup-win32-arm64-msvc": "4.34.8", + "@rollup/rollup-win32-ia32-msvc": "4.34.8", + "@rollup/rollup-win32-x64-msvc": "4.34.8", "@types/estree": "1.0.6", "fsevents": "~2.3.2" } @@ -43149,21 +43134,34 @@ } }, "vite": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", - "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.1.tgz", + "integrity": "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==", "dev": true, "requires": { "esbuild": "^0.24.2", "fsevents": "~2.3.3", - "postcss": "^8.4.49", - "rollup": "^4.23.0" + "postcss": "^8.5.2", + "rollup": "^4.30.1" + }, + "dependencies": { + "postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "requires": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + } } }, "vite-node": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.4.tgz", - "integrity": "sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.5.tgz", + "integrity": "sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==", "dev": true, "requires": { "cac": "^6.7.14", @@ -43174,18 +43172,18 @@ } }, "vitest": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.4.tgz", - "integrity": "sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.5.tgz", + "integrity": "sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==", "dev": true, "requires": { - "@vitest/expect": "3.0.4", - "@vitest/mocker": "3.0.4", - "@vitest/pretty-format": "^3.0.4", - "@vitest/runner": "3.0.4", - "@vitest/snapshot": "3.0.4", - "@vitest/spy": "3.0.4", - "@vitest/utils": "3.0.4", + "@vitest/expect": "3.0.5", + "@vitest/mocker": "3.0.5", + "@vitest/pretty-format": "^3.0.5", + "@vitest/runner": "3.0.5", + "@vitest/snapshot": "3.0.5", + "@vitest/spy": "3.0.5", + "@vitest/utils": "3.0.5", "chai": "^5.1.2", "debug": "^4.4.0", "expect-type": "^1.1.0", @@ -43197,7 +43195,7 @@ "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.4", + "vite-node": "3.0.5", "why-is-node-running": "^2.3.0" } }, @@ -43926,14 +43924,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "devOptional": true }, - "yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true, - "optional": true, - "peer": true - }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", diff --git a/package.json b/package.json index f2a8b2a569..d20a77a28b 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@types/sortablejs": "1.15.8", "@typescript-eslint/parser": "8.24.1", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "3.0.4", + "@vitest/coverage-v8": "3.0.5", "autoprefixer": "10.4.20", "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", From 627a9cc3d175900b639e12e74ea705a1e5283853 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 19:39:09 +0000 Subject: [PATCH 088/235] Update CI dependencies --- .github/workflows/__codeql.yml | 6 +++--- .github/workflows/__deploy.yml | 2 +- .github/workflows/pull_request.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index 87f2957fb9..2bc5d3ee50 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -26,15 +26,15 @@ jobs: show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/init@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/autobuild@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/analyze@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 with: category: '/language:${{matrix.language}}' diff --git a/.github/workflows/__deploy.yml b/.github/workflows/__deploy.yml index 4c57b2b05f..caa90e5cc0 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@7a5f8bbdfeedcde38e6777a50fe685f89259d4ca # v3.13.1 + uses: cloudflare/wrangler-action@392082e81ffbcb9ebdde27400634aa004b35ea37 # v3.14.0 id: cf with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index efa5ac21ec..b972d461ce 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -95,6 +95,6 @@ jobs: run: npm ci --no-audit - name: Run eslint - uses: CatChen/eslint-suggestion-action@2e2f18e272ccd63a031778599523af90d122e25f # v4.1.8 + uses: CatChen/eslint-suggestion-action@3ba53ce078667d5f60a73a8005627cf95ab57dce # v4.1.9 with: github-token: ${{ secrets.GITHUB_TOKEN }} From 07287ff71143d79ae71c3fd1c6a3b6a06c4a7205 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 20 Feb 2025 19:48:52 +0000 Subject: [PATCH 089/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 49817286b9..53125259bd 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1560,7 +1560,7 @@ "AudioCodecNotSupported": "Este codec de áudio não é suportado", "EnableGamepadHelp": "Responder a quaisquer comandos de jogos ligados. (Requer: Modo de visualização 'TV')", "LabelEnableGamepad": "Ativar comandos de jogos", - "Controls": "Controlos", + "Controls": "Comandos", "AllowVppTonemappingHelp": "Mapeamento de tons totalmente baseado no driver Intel. Vídeos em HDR10 funcionam apenas em certas configurações de hardware. Tem maior prioridade quando comparado a outras implementações OpenCL.", "EnableVppTonemapping": "Ativar Tone Mapping VPP", "EnableEnhancedNvdecDecoder": "Ativar o descodificador NVDEC", From 201a3c32f85dbab443970c90a8d1ecf17cf54fb7 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 20 Feb 2025 19:48:38 +0000 Subject: [PATCH 090/235] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 8c103b3d78..09e7fd0f18 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1674,7 +1674,7 @@ "ValueAlbumCount": "{0} álbuns", "ValueOneAlbum": "1 álbum", "ValueSongCount": "{0} músicas", - "Controls": "Controles", + "Controls": "Comandos", "LabelSyncPlaySettingsSpeedToSyncDuration": "Duração da Velocidade de sincronização", "EnableFallbackFontHelp": "Ative fontes alternativas personalizadas. Isso pode evitar o problema de renderização incorreta de legendas.", "MessagePlaybackError": "Ocorreu um erro ao reproduzir este ficheiro no teu recetor Google Cast.", From f5732216434bbc2c53c355173b918ef7ec77c610 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Fri, 21 Feb 2025 00:18:42 +0300 Subject: [PATCH 091/235] Migrate scheduled tasks to React (#6506) * Migrate scheduled tasks to React * Adjust margins * Use localeCompare * Clean up imports * Use legacy apiclient from useApi * Fix import * Fix nested typography * Add polling fallback * Cleanup code * Rename to tasks * Rename to Component * Use constants for websocket events * Use memo to fix timestamp rerender on run --- .../scheduledtasks/scheduledtasks.html | 20 -- .../scheduledtasks/scheduledtasks.js | 197 ------------------ .../scheduledtasks/api/useStartTask.ts | 23 ++ .../scheduledtasks/api/useStopTask.ts | 23 ++ .../features/scheduledtasks/api/useTasks.ts | 35 ++++ .../scheduledtasks/components/Task.tsx | 67 ++++++ .../scheduledtasks/components/TaskLastRan.tsx | 45 ++++ .../components/TaskProgress.tsx | 32 +++ .../scheduledtasks/components/Tasks.tsx | 29 +++ .../scheduledtasks/types/taskProps.ts | 5 + .../features/scheduledtasks/utils/tasks.ts | 27 +++ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - src/apps/dashboard/routes/tasks/index.tsx | 75 +++++++ 14 files changed, 362 insertions(+), 224 deletions(-) delete mode 100644 src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.html delete mode 100644 src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.js create mode 100644 src/apps/dashboard/features/scheduledtasks/api/useStartTask.ts create mode 100644 src/apps/dashboard/features/scheduledtasks/api/useStopTask.ts create mode 100644 src/apps/dashboard/features/scheduledtasks/api/useTasks.ts create mode 100644 src/apps/dashboard/features/scheduledtasks/components/Task.tsx create mode 100644 src/apps/dashboard/features/scheduledtasks/components/TaskLastRan.tsx create mode 100644 src/apps/dashboard/features/scheduledtasks/components/TaskProgress.tsx create mode 100644 src/apps/dashboard/features/scheduledtasks/components/Tasks.tsx create mode 100644 src/apps/dashboard/features/scheduledtasks/types/taskProps.ts create mode 100644 src/apps/dashboard/features/scheduledtasks/utils/tasks.ts create mode 100644 src/apps/dashboard/routes/tasks/index.tsx diff --git a/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.html b/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.html deleted file mode 100644 index 299bed531f..0000000000 --- a/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.html +++ /dev/null @@ -1,20 +0,0 @@ -
- -
-
-
-
-
-
diff --git a/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.js b/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.js deleted file mode 100644 index 114c97f40f..0000000000 --- a/src/apps/dashboard/controllers/scheduledtasks/scheduledtasks.js +++ /dev/null @@ -1,197 +0,0 @@ -import { formatDistance, formatDistanceToNow } from 'date-fns'; -import 'jquery'; - -import loading from 'components/loading/loading'; -import globalize from 'lib/globalize'; -import dom from 'scripts/dom'; -import serverNotifications from 'scripts/serverNotifications'; -import { getLocale, getLocaleWithSuffix } from 'utils/dateFnsLocale.ts'; -import Events from 'utils/events.ts'; - -import 'components/listview/listview.scss'; -import 'elements/emby-button/emby-button'; - -function reloadList(page) { - ApiClient.getScheduledTasks({ - isHidden: false - }).then(function(tasks) { - populateList(page, tasks); - loading.hide(); - }); -} - -function populateList(page, tasks) { - tasks = tasks.sort(function(a, b) { - a = a.Category + ' ' + a.Name; - b = b.Category + ' ' + b.Name; - if (a > b) { - return 1; - } else if (a < b) { - return -1; - } else { - return 0; - } - }); - - let currentCategory; - let html = ''; - for (const task of tasks) { - if (task.Category != currentCategory) { - currentCategory = task.Category; - if (currentCategory) { - html += '
'; - html += ''; - } - html += '
'; - html += '
'; - html += '

'; - html += currentCategory; - html += '

'; - html += '
'; - html += '
'; - } - html += '
'; - html += ""; - html += ''; - html += ''; - html += '
'; - const textAlignStyle = globalize.getIsRTL() ? 'right' : 'left'; - html += ""; - html += "

" + task.Name + '

'; - html += "
" + getTaskProgressHtml(task) + '
'; - html += '
'; - html += '
'; - if (task.State === 'Running') { - html += ''; - } else if (task.State === 'Idle') { - html += ''; - } - html += '
'; - } - if (tasks.length) { - html += '
'; - html += '
'; - } - page.querySelector('.divScheduledTasks').innerHTML = html; -} - -function getTaskProgressHtml(task) { - let html = ''; - if (task.State === 'Idle') { - if (task.LastExecutionResult) { - const endtime = Date.parse(task.LastExecutionResult.EndTimeUtc); - const starttime = Date.parse(task.LastExecutionResult.StartTimeUtc); - html += globalize.translate('LabelScheduledTaskLastRan', formatDistanceToNow(endtime, getLocaleWithSuffix()), - formatDistance(starttime, endtime, { locale: getLocale() })); - if (task.LastExecutionResult.Status === 'Failed') { - html += " (" + globalize.translate('LabelFailed') + ')'; - } else if (task.LastExecutionResult.Status === 'Cancelled') { - html += " (" + globalize.translate('LabelCancelled') + ')'; - } else if (task.LastExecutionResult.Status === 'Aborted') { - html += " " + globalize.translate('LabelAbortedByServerShutdown') + ''; - } - } - } else if (task.State === 'Running') { - const progress = (task.CurrentProgressPercentage || 0).toFixed(1); - html += '
'; - html += '
'; - html += '
'; - html += '
'; - html += '
'; - html += "" + progress + '%'; - html += '
'; - } else { - html += "" + globalize.translate('LabelStopping') + ''; - } - return html; -} - -function setTaskButtonIcon(button, icon) { - const inner = button.querySelector('.material-icons'); - inner.classList.remove('stop', 'play_arrow'); - inner.classList.add(icon); -} - -function updateTaskButton(elem, state) { - if (state === 'Running') { - elem.classList.remove('btnStartTask'); - elem.classList.add('btnStopTask'); - setTaskButtonIcon(elem, 'stop'); - elem.title = globalize.translate('ButtonStop'); - } else if (state === 'Idle') { - elem.classList.add('btnStartTask'); - elem.classList.remove('btnStopTask'); - setTaskButtonIcon(elem, 'play_arrow'); - elem.title = globalize.translate('ButtonStart'); - } - dom.parentWithClass(elem, 'listItem').setAttribute('data-status', state); -} - -export default function(view) { - function updateTasks(tasks) { - for (const task of tasks) { - const taskProgress = view.querySelector(`#taskProgress${task.Id}`); - if (taskProgress) taskProgress.innerHTML = getTaskProgressHtml(task); - - const taskButton = view.querySelector(`#btnTask${task.Id}`); - if (taskButton) updateTaskButton(taskButton, task.State); - } - } - - function onPollIntervalFired() { - if (!ApiClient.isMessageChannelOpen()) { - reloadList(view); - } - } - - function onScheduledTasksUpdate(e, apiClient, info) { - if (apiClient.serverId() === serverId) { - updateTasks(info); - } - } - - function startInterval() { - ApiClient.sendMessage('ScheduledTasksInfoStart', '1000,1000'); - pollInterval && clearInterval(pollInterval); - pollInterval = setInterval(onPollIntervalFired, 1e4); - } - - function stopInterval() { - ApiClient.sendMessage('ScheduledTasksInfoStop'); - pollInterval && clearInterval(pollInterval); - } - - let pollInterval; - const serverId = ApiClient.serverId(); - - $('.divScheduledTasks', view).on('click', '.btnStartTask', function() { - const button = this; - const id = button.getAttribute('data-taskid'); - ApiClient.startScheduledTask(id).then(function() { - updateTaskButton(button, 'Running'); - reloadList(view); - }); - }); - - $('.divScheduledTasks', view).on('click', '.btnStopTask', function() { - const button = this; - const id = button.getAttribute('data-taskid'); - ApiClient.stopScheduledTask(id).then(function() { - updateTaskButton(button, ''); - reloadList(view); - }); - }); - - view.addEventListener('viewbeforehide', function() { - Events.off(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); - stopInterval(); - }); - - view.addEventListener('viewshow', function() { - loading.show(); - startInterval(); - reloadList(view); - Events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); - }); -} - diff --git a/src/apps/dashboard/features/scheduledtasks/api/useStartTask.ts b/src/apps/dashboard/features/scheduledtasks/api/useStartTask.ts new file mode 100644 index 0000000000..6775ae3cf9 --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/api/useStartTask.ts @@ -0,0 +1,23 @@ +import { ScheduledTasksApiStartTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api'; +import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api'; +import { useMutation } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; +import { QUERY_KEY } from './useTasks'; + +export const useStartTask = () => { + const { api } = useApi(); + + return useMutation({ + mutationFn: (params: ScheduledTasksApiStartTaskRequest) => ( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + getScheduledTasksApi(api!) + .startTask(params) + ), + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + } + }); +}; diff --git a/src/apps/dashboard/features/scheduledtasks/api/useStopTask.ts b/src/apps/dashboard/features/scheduledtasks/api/useStopTask.ts new file mode 100644 index 0000000000..9edc866245 --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/api/useStopTask.ts @@ -0,0 +1,23 @@ +import { ScheduledTasksApiStartTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api'; +import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api'; +import { useMutation } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; +import { QUERY_KEY } from './useTasks'; + +export const useStopTask = () => { + const { api } = useApi(); + + return useMutation({ + mutationFn: (params: ScheduledTasksApiStartTaskRequest) => ( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + getScheduledTasksApi(api!) + .stopTask(params) + ), + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + } + }); +}; diff --git a/src/apps/dashboard/features/scheduledtasks/api/useTasks.ts b/src/apps/dashboard/features/scheduledtasks/api/useTasks.ts new file mode 100644 index 0000000000..9ac9851e9c --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/api/useTasks.ts @@ -0,0 +1,35 @@ +import type { ScheduledTasksApiGetTasksRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api'; +import type { AxiosRequestConfig } from 'axios'; +import type { Api } from '@jellyfin/sdk'; +import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api'; +import { useQuery } from '@tanstack/react-query'; + +import { useApi } from 'hooks/useApi'; + +export const QUERY_KEY = 'Tasks'; + +const fetchTasks = async ( + api?: Api, + params?: ScheduledTasksApiGetTasksRequest, + options?: AxiosRequestConfig +) => { + if (!api) { + console.warn('[fetchTasks] No API instance available'); + return; + } + + const response = await getScheduledTasksApi(api).getTasks(params, options); + + return response.data; +}; + +export const useTasks = (params?: ScheduledTasksApiGetTasksRequest) => { + const { api } = useApi(); + + return useQuery({ + queryKey: [QUERY_KEY], + queryFn: ({ signal }) => + fetchTasks(api, params, { signal }), + enabled: !!api + }); +}; diff --git a/src/apps/dashboard/features/scheduledtasks/components/Task.tsx b/src/apps/dashboard/features/scheduledtasks/components/Task.tsx new file mode 100644 index 0000000000..0c5fda280b --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/components/Task.tsx @@ -0,0 +1,67 @@ +import React, { FunctionComponent, useCallback } from 'react'; +import ListItem from '@mui/material/ListItem'; +import Avatar from '@mui/material/Avatar'; +import AccessTimeIcon from '@mui/icons-material/AccessTime'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemAvatar from '@mui/material/ListItemAvatar'; +import ListItemText from '@mui/material/ListItemText'; +import Typography from '@mui/material/Typography'; +import Dashboard from 'utils/dashboard'; +import { TaskProps } from '../types/taskProps'; +import TaskProgress from './TaskProgress'; +import TaskLastRan from './TaskLastRan'; +import IconButton from '@mui/material/IconButton'; +import PlayArrow from '@mui/icons-material/PlayArrow'; +import Stop from '@mui/icons-material/Stop'; +import { useStartTask } from '../api/useStartTask'; +import { useStopTask } from '../api/useStopTask'; + +const Task: FunctionComponent = ({ task }: TaskProps) => { + const startTask = useStartTask(); + const stopTask = useStopTask(); + + const navigateTaskEdit = useCallback(() => { + Dashboard.navigate(`/dashboard/tasks/edit?id=${task.Id}`) + .catch(err => { + console.error('[Task] failed to navigate to task edit page', err); + }); + }, [task]); + + const handleStartTask = useCallback(() => { + if (task.Id) { + startTask.mutate({ taskId: task.Id }); + } + }, [task, startTask]); + + const handleStopTask = useCallback(() => { + if (task.Id) { + stopTask.mutate({ taskId: task.Id }); + } + }, [task, stopTask]); + + return ( + + {task.State == 'Running' ? : } + + } + > + + + + + + + {task.Name}} + secondary={task.State == 'Running' ? : } + disableTypography + /> + + + ); +}; + +export default Task; diff --git a/src/apps/dashboard/features/scheduledtasks/components/TaskLastRan.tsx b/src/apps/dashboard/features/scheduledtasks/components/TaskLastRan.tsx new file mode 100644 index 0000000000..7261cf685d --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/components/TaskLastRan.tsx @@ -0,0 +1,45 @@ +import React, { FunctionComponent, useMemo } from 'react'; +import { TaskProps } from '../types/taskProps'; +import { useLocale } from 'hooks/useLocale'; +import { formatDistance, formatDistanceToNow, parseISO } from 'date-fns'; +import Typography from '@mui/material/Typography'; +import globalize from 'lib/globalize'; + +const TaskLastRan: FunctionComponent = ({ task }: TaskProps) => { + const { dateFnsLocale } = useLocale(); + + const [ lastRan, timeTaken ] = useMemo(() => { + if (task.LastExecutionResult?.StartTimeUtc && task.LastExecutionResult?.EndTimeUtc) { + const endTime = parseISO(task.LastExecutionResult.EndTimeUtc); + const startTime = parseISO(task.LastExecutionResult.StartTimeUtc); + + return [ + formatDistanceToNow(endTime, { locale: dateFnsLocale, addSuffix: true }), + formatDistance(startTime, endTime, { locale: dateFnsLocale }) + ]; + } + return []; + }, [task, dateFnsLocale]); + + if (task.State == 'Idle') { + if (task.LastExecutionResult?.StartTimeUtc && task.LastExecutionResult?.EndTimeUtc) { + const lastResultStatus = task.LastExecutionResult.Status; + + return ( + + {globalize.translate('LabelScheduledTaskLastRan', lastRan, timeTaken)} + + {lastResultStatus == 'Failed' && {` (${globalize.translate('LabelFailed')})`}} + {lastResultStatus == 'Cancelled' && {` (${globalize.translate('LabelCancelled')})`}} + {lastResultStatus == 'Aborted' && {` (${globalize.translate('LabelAbortedByServerShutdown')})`}} + + ); + } + } else { + return ( + {globalize.translate('LabelStopping')} + ); + } +}; + +export default TaskLastRan; diff --git a/src/apps/dashboard/features/scheduledtasks/components/TaskProgress.tsx b/src/apps/dashboard/features/scheduledtasks/components/TaskProgress.tsx new file mode 100644 index 0000000000..6482dd57fe --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/components/TaskProgress.tsx @@ -0,0 +1,32 @@ +import React, { FunctionComponent } from 'react'; +import { TaskProps } from '../types/taskProps'; +import Box from '@mui/material/Box'; +import LinearProgress from '@mui/material/LinearProgress'; +import Typography from '@mui/material/Typography'; + +const TaskProgress: FunctionComponent = ({ task }: TaskProps) => { + const progress = task.CurrentProgressPercentage; + + return ( + + {progress != null ? ( + <> + + + + + {`${Math.round(progress)}%`} + + + ) : ( + + + + )} + + ); +}; + +export default TaskProgress; diff --git a/src/apps/dashboard/features/scheduledtasks/components/Tasks.tsx b/src/apps/dashboard/features/scheduledtasks/components/Tasks.tsx new file mode 100644 index 0000000000..6635ce0b3a --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/components/Tasks.tsx @@ -0,0 +1,29 @@ +import React, { FunctionComponent } from 'react'; +import type { TaskInfo } from '@jellyfin/sdk/lib/generated-client/models/task-info'; +import List from '@mui/material/List'; +import Typography from '@mui/material/Typography'; +import Stack from '@mui/material/Stack'; +import Task from './Task'; + +type TasksProps = { + category: string; + tasks: TaskInfo[]; +}; + +const Tasks: FunctionComponent = ({ category, tasks }: TasksProps) => { + return ( + + {category} + + {tasks.map(task => { + return ; + })} + + + ); +}; + +export default Tasks; diff --git a/src/apps/dashboard/features/scheduledtasks/types/taskProps.ts b/src/apps/dashboard/features/scheduledtasks/types/taskProps.ts new file mode 100644 index 0000000000..31683422ea --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/types/taskProps.ts @@ -0,0 +1,5 @@ +import type { TaskInfo } from '@jellyfin/sdk/lib/generated-client/models/task-info'; + +export type TaskProps = { + task: TaskInfo; +}; diff --git a/src/apps/dashboard/features/scheduledtasks/utils/tasks.ts b/src/apps/dashboard/features/scheduledtasks/utils/tasks.ts new file mode 100644 index 0000000000..b0bc1aa5b1 --- /dev/null +++ b/src/apps/dashboard/features/scheduledtasks/utils/tasks.ts @@ -0,0 +1,27 @@ +import type { TaskInfo } from '@jellyfin/sdk/lib/generated-client/models/task-info'; + +export function getCategories(tasks: TaskInfo[] | undefined) { + if (!tasks) return []; + + const categories: string[] = []; + + for (const task of tasks) { + if (task.Category && !categories.includes(task.Category)) { + categories.push(task.Category); + } + } + + return categories.sort((a, b) => a.localeCompare(b)); +} + +export function getTasksByCategory(tasks: TaskInfo[] | undefined, category: string) { + if (!tasks) return []; + + return tasks.filter(task => task.Category == category).sort((a, b) => { + if (a.Name && b.Name) { + return a.Name?.localeCompare(b.Name); + } else { + return 0; + } + }); +} diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index cce1471000..19cf7ea1a5 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -11,6 +11,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'playback/streaming', type: AppType.Dashboard }, { path: 'playback/trickplay', type: AppType.Dashboard }, { path: 'plugins/:pluginId', page: 'plugins/plugin', type: AppType.Dashboard }, + { path: 'tasks', type: AppType.Dashboard }, { path: 'users', type: AppType.Dashboard }, { path: 'users/access', type: AppType.Dashboard }, { path: 'users/add', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index 19a3bedc79..848c242b67 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -114,12 +114,5 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'scheduledtasks/scheduledtask', view: 'scheduledtasks/scheduledtask.html' } - }, { - path: 'tasks', - pageProps: { - appType: AppType.Dashboard, - controller: 'scheduledtasks/scheduledtasks', - view: 'scheduledtasks/scheduledtasks.html' - } } ]; diff --git a/src/apps/dashboard/routes/tasks/index.tsx b/src/apps/dashboard/routes/tasks/index.tsx new file mode 100644 index 0000000000..f742ef8ede --- /dev/null +++ b/src/apps/dashboard/routes/tasks/index.tsx @@ -0,0 +1,75 @@ +import React, { useEffect } from 'react'; +import Page from 'components/Page'; +import globalize from 'lib/globalize'; +import Box from '@mui/material/Box'; +import Stack from '@mui/material/Stack'; +import { QUERY_KEY, useTasks } from '../../features/scheduledtasks/api/useTasks'; +import { getCategories, getTasksByCategory } from '../../features/scheduledtasks/utils/tasks'; +import Loading from 'components/loading/LoadingComponent'; +import Tasks from '../../features/scheduledtasks/components/Tasks'; +import type { TaskInfo } from '@jellyfin/sdk/lib/generated-client/models/task-info'; +import { SessionMessageType } from '@jellyfin/sdk/lib/generated-client/models/session-message-type'; +import serverNotifications from 'scripts/serverNotifications'; +import Events, { Event } from 'utils/events'; +import { ApiClient } from 'jellyfin-apiclient'; +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; + +export const Component = () => { + const { __legacyApiClient__ } = useApi(); + const { data: tasks, isPending } = useTasks({ isHidden: false }); + + // TODO: Replace usage of the legacy apiclient when websocket support is added to the TS SDK. + useEffect(() => { + const onScheduledTasksUpdate = (_e: Event, _apiClient: ApiClient, info: TaskInfo[]) => { + queryClient.setQueryData([ QUERY_KEY ], info); + }; + + const fallbackInterval = setInterval(() => { + if (!__legacyApiClient__?.isMessageChannelOpen()) { + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + } + }, 1e4); + + __legacyApiClient__?.sendMessage(SessionMessageType.ScheduledTasksInfoStart, '1000,1000'); + Events.on(serverNotifications, SessionMessageType.ScheduledTasksInfo, onScheduledTasksUpdate); + + return () => { + clearInterval(fallbackInterval); + __legacyApiClient__?.sendMessage(SessionMessageType.ScheduledTasksInfoStop, null); + Events.off(serverNotifications, SessionMessageType.ScheduledTasksInfo, onScheduledTasksUpdate); + }; + }, [__legacyApiClient__]); + + if (isPending || !tasks) { + return ; + } + + const categories = getCategories(tasks); + + return ( + + + + + {categories.map(category => { + return ; + })} + + + + + ); +}; + +Component.displayName = 'TasksPage'; From cfe12956da6bb88a2c17dc7c8f29825405f771b9 Mon Sep 17 00:00:00 2001 From: Jxiced <48179642+Jxiced@users.noreply.github.com> Date: Thu, 20 Feb 2025 21:21:42 +0000 Subject: [PATCH 092/235] Remove trailing whitespace from new users' usernames (#6528) * Add input validation and error toast when attempting to add a new user with whitespaces at beginning or end. * Update from OR expression * Remove changes to en-gb due to only allowing direct commits to en-us. * Update to automatically trim instead of showing a message. --- src/apps/dashboard/routes/users/add.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps/dashboard/routes/users/add.tsx b/src/apps/dashboard/routes/users/add.tsx index 98cc928887..ffb8d3dc04 100644 --- a/src/apps/dashboard/routes/users/add.tsx +++ b/src/apps/dashboard/routes/users/add.tsx @@ -111,8 +111,9 @@ const UserNew = () => { const saveUser = () => { const userInput: UserInput = {}; - userInput.Name = (page.querySelector('#txtUsername') as HTMLInputElement).value; + userInput.Name = (page.querySelector('#txtUsername') as HTMLInputElement).value.trim(); userInput.Password = (page.querySelector('#txtPassword') as HTMLInputElement).value; + window.ApiClient.createUser(userInput).then(function (user) { if (!user.Id || !user.Policy) { throw new Error('Unexpected null user id or policy'); From 3c4023ec026b020567ac02ee26dceb19c7f244c5 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Thu, 20 Feb 2025 22:39:09 +0100 Subject: [PATCH 093/235] Enforce ESLint as default formatter in VSCode settings --- .vscode/settings.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.vscode/settings.json b/.vscode/settings.json index d2b2caa950..6548ad0602 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,7 @@ { + "[json][typescript][typescriptreact][javascript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, From cb8940a5120e1f9614ad11c3c02767a69560437b Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Fri, 14 Feb 2025 11:40:17 +0300 Subject: [PATCH 094/235] Convert trickplay to mui --- .../dashboard/routes/playback/trickplay.tsx | 523 ++++++++---------- 1 file changed, 226 insertions(+), 297 deletions(-) diff --git a/src/apps/dashboard/routes/playback/trickplay.tsx b/src/apps/dashboard/routes/playback/trickplay.tsx index 442111145d..b69aba0c20 100644 --- a/src/apps/dashboard/routes/playback/trickplay.tsx +++ b/src/apps/dashboard/routes/playback/trickplay.tsx @@ -1,323 +1,252 @@ -import type { ServerConfiguration } from '@jellyfin/sdk/lib/generated-client/models/server-configuration'; +import React, { type FC } from 'react'; + +import globalize from 'lib/globalize'; +import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; +import { useConfiguration } from 'hooks/useConfiguration'; +import Page from 'components/Page'; +import Box from '@mui/material/Box'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import FormControl from '@mui/material/FormControl'; +import Switch from '@mui/material/Switch'; +import Loading from 'components/loading/LoadingComponent'; +import FormHelperText from '@mui/material/FormHelperText'; +import MenuItem from '@mui/material/MenuItem'; +import TextField from '@mui/material/TextField'; +import Button from '@mui/material/Button'; +import Alert from '@mui/material/Alert'; +import ServerConnections from 'components/ServerConnections'; +import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import { TrickplayScanBehavior } from '@jellyfin/sdk/lib/generated-client/models/trickplay-scan-behavior'; import { ProcessPriorityClass } from '@jellyfin/sdk/lib/generated-client/models/process-priority-class'; -import React, { type FC, useCallback, useEffect, useRef } from 'react'; +import { ActionData } from 'types/actionData'; -import globalize from '../../../../lib/globalize'; -import Page from '../../../../components/Page'; -import SectionTitleContainer from '../../../../elements/SectionTitleContainer'; -import ButtonElement from '../../../../elements/ButtonElement'; -import CheckBoxElement from '../../../../elements/CheckBoxElement'; -import SelectElement from '../../../../elements/SelectElement'; -import InputElement from '../../../../elements/InputElement'; -import loading from '../../../../components/loading/loading'; -import toast from '../../../../components/toast/toast'; -import ServerConnections from '../../../../components/ServerConnections'; +export const action = async ({ request }: ActionFunctionArgs) => { + const api = ServerConnections.getCurrentApi(); + if (!api) throw new Error('No Api instance available'); -function onSaveComplete() { - loading.hide(); - toast(globalize.translate('SettingsSaved')); -} + const formData = await request.formData(); + const data = Object.fromEntries(formData); + + const { data: config } = await getConfigurationApi(api).getConfiguration(); + + const options = config.TrickplayOptions; + if (!options) throw new Error('Unexpected null TrickplayOptions'); + + options.EnableHwAcceleration = data.HwAcceleration?.toString() === 'on'; + options.EnableHwEncoding = data.HwEncoding?.toString() === 'on'; + options.EnableKeyFrameOnlyExtraction = data.KeyFrameOnlyExtraction?.toString() === 'on'; + options.ScanBehavior = data.ScanBehavior.toString() as TrickplayScanBehavior; + options.ProcessPriority = data.ProcessPriority.toString() as ProcessPriorityClass; + options.Interval = parseInt(data.ImageInterval.toString() || '10000', 10); + options.WidthResolutions = data.WidthResolutions.toString().replace(' ', '').split(',').map(Number); + options.TileWidth = parseInt(data.TileWidth.toString() || '10', 10); + options.TileHeight = parseInt(data.TileHeight.toString() || '10', 10); + options.Qscale = parseInt(data.Qscale.toString() || '4', 10); + options.JpegQuality = parseInt(data.JpegQuality.toString() || '90', 10); + options.ProcessThreads = parseInt(data.TrickplayThreads.toString() || '1', 10); + + await getConfigurationApi(api) + .updateConfiguration({ serverConfiguration: config }); + + return { + isSaved: true + }; +}; const PlaybackTrickplay: FC = () => { - const element = useRef(null); + const navigation = useNavigation(); + const actionData = useActionData() as ActionData | undefined; + const { data: defaultConfig, isPending } = useConfiguration(); + const isSubmitting = navigation.state === 'submitting'; - const loadConfig = useCallback((config: ServerConfiguration) => { - const page = element.current; - const options = config.TrickplayOptions; - - if (!page) { - console.error('Unexpected null reference'); - return; - } - - (page.querySelector('.chkEnableHwAcceleration') as HTMLInputElement).checked = options?.EnableHwAcceleration || false; - (page.querySelector('.chkEnableHwEncoding') as HTMLInputElement).checked = options?.EnableHwEncoding || false; - (page.querySelector('.chkEnableKeyFrameOnlyExtraction') as HTMLInputElement).checked = options?.EnableKeyFrameOnlyExtraction || false; - (page.querySelector('#selectScanBehavior') as HTMLSelectElement).value = (options?.ScanBehavior || TrickplayScanBehavior.NonBlocking); - (page.querySelector('#selectProcessPriority') as HTMLSelectElement).value = (options?.ProcessPriority || ProcessPriorityClass.Normal); - (page.querySelector('#txtInterval') as HTMLInputElement).value = options?.Interval?.toString() || '10000'; - (page.querySelector('#txtWidthResolutions') as HTMLInputElement).value = options?.WidthResolutions?.join(',') || ''; - (page.querySelector('#txtTileWidth') as HTMLInputElement).value = options?.TileWidth?.toString() || '10'; - (page.querySelector('#txtTileHeight') as HTMLInputElement).value = options?.TileHeight?.toString() || '10'; - (page.querySelector('#txtQscale') as HTMLInputElement).value = options?.Qscale?.toString() || '4'; - (page.querySelector('#txtJpegQuality') as HTMLInputElement).value = options?.JpegQuality?.toString() || '90'; - (page.querySelector('#txtProcessThreads') as HTMLInputElement).value = options?.ProcessThreads?.toString() || '1'; - - loading.hide(); - }, []); - - const loadData = useCallback(() => { - loading.show(); - - ServerConnections.currentApiClient()?.getServerConfiguration().then(function (config) { - loadConfig(config); - }).catch(err => { - console.error('[PlaybackTrickplay] failed to fetch server config', err); - }); - }, [loadConfig]); - - useEffect(() => { - const page = element.current; - - if (!page) { - console.error('Unexpected null reference'); - return; - } - - const saveConfig = (config: ServerConfiguration) => { - const apiClient = ServerConnections.currentApiClient(); - - if (!apiClient) { - console.error('[PlaybackTrickplay] No current apiclient instance'); - return; - } - - if (!config.TrickplayOptions) { - throw new Error('Unexpected null TrickplayOptions'); - } - - const options = config.TrickplayOptions; - options.EnableHwAcceleration = (page.querySelector('.chkEnableHwAcceleration') as HTMLInputElement).checked; - options.EnableHwEncoding = (page.querySelector('.chkEnableHwEncoding') as HTMLInputElement).checked; - options.EnableKeyFrameOnlyExtraction = (page.querySelector('.chkEnableKeyFrameOnlyExtraction') as HTMLInputElement).checked; - options.ScanBehavior = (page.querySelector('#selectScanBehavior') as HTMLSelectElement).value as TrickplayScanBehavior; - options.ProcessPriority = (page.querySelector('#selectProcessPriority') as HTMLSelectElement).value as ProcessPriorityClass; - options.Interval = Math.max(1, parseInt((page.querySelector('#txtInterval') as HTMLInputElement).value || '10000', 10)); - options.WidthResolutions = (page.querySelector('#txtWidthResolutions') as HTMLInputElement).value.replace(' ', '').split(',').map(Number); - options.TileWidth = Math.max(1, parseInt((page.querySelector('#txtTileWidth') as HTMLInputElement).value || '10', 10)); - options.TileHeight = Math.max(1, parseInt((page.querySelector('#txtTileHeight') as HTMLInputElement).value || '10', 10)); - options.Qscale = Math.min(31, parseInt((page.querySelector('#txtQscale') as HTMLInputElement).value || '4', 10)); - options.JpegQuality = Math.min(100, parseInt((page.querySelector('#txtJpegQuality') as HTMLInputElement).value || '90', 10)); - options.ProcessThreads = parseInt((page.querySelector('#txtProcessThreads') as HTMLInputElement).value || '1', 10); - - apiClient.updateServerConfiguration(config).then(() => { - onSaveComplete(); - }).catch(err => { - console.error('[PlaybackTrickplay] failed to update config', err); - }); - }; - - const onSubmit = (e: Event) => { - const apiClient = ServerConnections.currentApiClient(); - - if (!apiClient) { - console.error('[PlaybackTrickplay] No current apiclient instance'); - return; - } - - loading.show(); - apiClient.getServerConfiguration().then(function (config) { - saveConfig(config); - }).catch(err => { - console.error('[PlaybackTrickplay] failed to fetch server config', err); - }); - - e.preventDefault(); - e.stopPropagation(); - return false; - }; - - (page.querySelector('.trickplayConfigurationForm') as HTMLFormElement).addEventListener('submit', onSubmit); - - loadData(); - }, [loadData]); - - const optionScanBehavior = () => { - let content = ''; - content += ``; - content += ``; - return content; - }; - - const optionProcessPriority = () => { - let content = ''; - content += ``; - content += ``; - content += ``; - content += ``; - content += ``; - return content; - }; + if (!defaultConfig || isPending) { + return ; + } return ( -
-
- -
+ +
+ + + {globalize.translate('Trickplay')} + - -
- + {globalize.translate('SettingsSaved')} + + )} + + + + } + label={globalize.translate('LabelTrickplayAccel')} + /> + + + + + } + label={globalize.translate('LabelTrickplayAccelEncoding')} + /> + {globalize.translate('LabelTrickplayAccelEncodingHelp')} + + + + + } + label={globalize.translate('LabelTrickplayKeyFrameOnlyExtraction')} + /> + {globalize.translate('LabelTrickplayKeyFrameOnlyExtractionHelp')} + + + + {globalize.translate('NonBlockingScan')} + {globalize.translate('BlockingScan')} + + + + {globalize.translate('PriorityHigh')} + {globalize.translate('PriorityAboveNormal')} + {globalize.translate('PriorityNormal')} + {globalize.translate('PriorityBelowNormal')} + {globalize.translate('PriorityIdle')} + + + -
-
- -
-
- {globalize.translate('LabelTrickplayAccelEncodingHelp')} -
-
-
-
- -
-
- {globalize.translate('LabelTrickplayKeyFrameOnlyExtractionHelp')} -
-
-
-
-
- - {optionScanBehavior()} - -
- {globalize.translate('LabelScanBehaviorHelp')} -
-
-
+ -
-
- - {optionProcessPriority()} - -
- {globalize.translate('LabelProcessPriorityHelp')} -
-
-
+ -
-
- -
- {globalize.translate('LabelImageIntervalHelp')} -
-
-
+ -
-
- -
- {globalize.translate('LabelWidthResolutionsHelp')} -
-
-
+ -
-
- -
- {globalize.translate('LabelTileWidthHelp')} -
-
-
- -
-
- -
- {globalize.translate('LabelTileHeightHelp')} -
-
-
- -
-
- -
- {globalize.translate('LabelJpegQualityHelp')} -
-
-
- -
-
- -
- {globalize.translate('LabelQscaleHelp')} -
-
-
- -
-
- -
- {globalize.translate('LabelTrickplayThreadsHelp')} -
-
-
- -
- -
- -
+ size='large' + > + {globalize.translate('Save')} + + + +
); }; From e80cbdc094e7884b5f9badfd1e832bf8ff35576f Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Mon, 17 Feb 2025 21:29:55 +0300 Subject: [PATCH 095/235] Rename to Component --- src/apps/dashboard/routes/playback/trickplay.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/dashboard/routes/playback/trickplay.tsx b/src/apps/dashboard/routes/playback/trickplay.tsx index b69aba0c20..d5b54bd956 100644 --- a/src/apps/dashboard/routes/playback/trickplay.tsx +++ b/src/apps/dashboard/routes/playback/trickplay.tsx @@ -1,4 +1,4 @@ -import React, { type FC } from 'react'; +import React from 'react'; import globalize from 'lib/globalize'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; @@ -55,7 +55,7 @@ export const action = async ({ request }: ActionFunctionArgs) => { }; }; -const PlaybackTrickplay: FC = () => { +export const Component = () => { const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; const { data: defaultConfig, isPending } = useConfiguration(); @@ -251,4 +251,4 @@ const PlaybackTrickplay: FC = () => { ); }; -export default PlaybackTrickplay; +Component.displayName = 'TrickplayPage'; From e4ccacac8304c618cdba048e1445e1bb35f9e4c8 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Fri, 21 Feb 2025 00:31:56 +0300 Subject: [PATCH 096/235] Invalidate queries on update --- src/apps/dashboard/routes/playback/trickplay.tsx | 7 ++++++- src/hooks/useConfiguration.ts | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/routes/playback/trickplay.tsx b/src/apps/dashboard/routes/playback/trickplay.tsx index d5b54bd956..81ef076961 100644 --- a/src/apps/dashboard/routes/playback/trickplay.tsx +++ b/src/apps/dashboard/routes/playback/trickplay.tsx @@ -2,7 +2,7 @@ import React from 'react'; import globalize from 'lib/globalize'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; -import { useConfiguration } from 'hooks/useConfiguration'; +import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import Page from 'components/Page'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; @@ -21,6 +21,7 @@ import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-a import { TrickplayScanBehavior } from '@jellyfin/sdk/lib/generated-client/models/trickplay-scan-behavior'; import { ProcessPriorityClass } from '@jellyfin/sdk/lib/generated-client/models/process-priority-class'; import { ActionData } from 'types/actionData'; +import { queryClient } from 'utils/query/queryClient'; export const action = async ({ request }: ActionFunctionArgs) => { const api = ServerConnections.getCurrentApi(); @@ -50,6 +51,10 @@ export const action = async ({ request }: ActionFunctionArgs) => { await getConfigurationApi(api) .updateConfiguration({ serverConfiguration: config }); + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + return { isSaved: true }; diff --git a/src/hooks/useConfiguration.ts b/src/hooks/useConfiguration.ts index 2d5dbd5a2a..f1b9d47c3d 100644 --- a/src/hooks/useConfiguration.ts +++ b/src/hooks/useConfiguration.ts @@ -4,6 +4,8 @@ import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import type { AxiosRequestConfig } from 'axios'; +export const QUERY_KEY = 'Configuration'; + export const fetchConfiguration = async (api?: Api, options?: AxiosRequestConfig) => { if (!api) { console.error('[useLogOptions] No API instance available'); @@ -19,7 +21,7 @@ export const useConfiguration = () => { const { api } = useApi(); return useQuery({ - queryKey: ['Configuration'], + queryKey: [QUERY_KEY], queryFn: ({ signal }) => fetchConfiguration(api, { signal }), enabled: !!api }); From b8344c9290abd8c150db12e6c40ea47b46673120 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Fri, 21 Feb 2025 00:43:18 +0300 Subject: [PATCH 097/235] Invalidate queries for resume & streaming --- src/apps/dashboard/routes/playback/resume.tsx | 7 ++++++- src/apps/dashboard/routes/playback/streaming.tsx | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/routes/playback/resume.tsx b/src/apps/dashboard/routes/playback/resume.tsx index ab0da25b7c..3009825cfd 100644 --- a/src/apps/dashboard/routes/playback/resume.tsx +++ b/src/apps/dashboard/routes/playback/resume.tsx @@ -9,10 +9,11 @@ import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; -import { useConfiguration } from 'hooks/useConfiguration'; +import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import Loading from 'components/loading/LoadingComponent'; import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; +import { queryClient } from 'utils/query/queryClient'; export const action = async ({ request }: ActionFunctionArgs) => { const api = ServerConnections.getCurrentApi(); @@ -36,6 +37,10 @@ export const action = async ({ request }: ActionFunctionArgs) => { await getConfigurationApi(api) .updateConfiguration({ serverConfiguration: config }); + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + return { isSaved: true }; diff --git a/src/apps/dashboard/routes/playback/streaming.tsx b/src/apps/dashboard/routes/playback/streaming.tsx index 522b266b84..e329277303 100644 --- a/src/apps/dashboard/routes/playback/streaming.tsx +++ b/src/apps/dashboard/routes/playback/streaming.tsx @@ -10,9 +10,10 @@ import Typography from '@mui/material/Typography'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; -import { useConfiguration } from 'hooks/useConfiguration'; +import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import Loading from 'components/loading/LoadingComponent'; import { ActionData } from 'types/actionData'; +import { queryClient } from 'utils/query/queryClient'; export const action = async ({ request }: ActionFunctionArgs) => { const api = ServerConnections.getCurrentApi(); @@ -27,6 +28,10 @@ export const action = async ({ request }: ActionFunctionArgs) => { await getConfigurationApi(api) .updateConfiguration({ serverConfiguration: config }); + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + return { isSaved: true }; From 37d6f94c7c999f0ee7f43851f429847afa659ea9 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 20 Feb 2025 17:16:18 -0500 Subject: [PATCH 098/235] Update library name validation to trim automatically --- src/components/mediaLibraryCreator/mediaLibraryCreator.js | 4 ++-- src/strings/en-us.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/mediaLibraryCreator/mediaLibraryCreator.js b/src/components/mediaLibraryCreator/mediaLibraryCreator.js index 50eabad2a1..81e957e342 100644 --- a/src/components/mediaLibraryCreator/mediaLibraryCreator.js +++ b/src/components/mediaLibraryCreator/mediaLibraryCreator.js @@ -42,10 +42,10 @@ function onAddLibrary(e) { isCreating = true; loading.show(); const dlg = dom.parentWithClass(this, 'dlg-librarycreator'); - const name = dlg.querySelector('#txtValue').value; + const name = dlg.querySelector('#txtValue').value.trim(); let type = dlg.querySelector('#selectCollectionType').value; - if (name.length == 0 || name.trim().length !== name.length) { + if (name.length === 0) { alert({ text: globalize.translate('LibraryNameInvalid'), type: 'error' diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 861960ac41..5377cbd88a 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1015,7 +1015,7 @@ "LeaveBlankToNotSetAPassword": "You can leave this field blank to set no password.", "Letterer": "Letterer", "LibraryAccessHelp": "Select the libraries to share with this user. Administrators will be able to edit all folders using the metadata manager.", - "LibraryNameInvalid": "Library name cannot be empty or have leading/trailing spaces.", + "LibraryNameInvalid": "Library name cannot be empty.", "LibraryScanFanoutConcurrency": "Parallel library scan tasks limit", "LibraryScanFanoutConcurrencyHelp": "Maximum number of parallel tasks during library scans. Setting this to 0 will choose a limit based on your systems core count. WARNING: Setting this number too high may cause issues with network file systems; if you encounter problems lower this number.", "LibraryInvalidItemIdError": "The library is in an invalid state and cannot be edited. You are possibly encountering a bug: the path in the database is not the correct path on the filesystem.", From d2f522a1e0372e6ad39d4333117e46fc9037417a Mon Sep 17 00:00:00 2001 From: othmar52 Date: Thu, 20 Feb 2025 23:59:34 +0100 Subject: [PATCH 099/235] Add title attribute to actor roles (#6344) Co-authored-by: engine --- src/components/cardbuilder/cardBuilder.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 7cbc33ace3..54e9d33a8e 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -706,7 +706,8 @@ function getCardFooterText(item, apiClient, options, footerClass, progressHtml, if (item.Role) { if ([ PersonKind.Actor, PersonKind.GuestStar ].includes(item.Type)) { // List actor roles formatted like "as Character Name" - lines.push(globalize.translate('PersonRole', escapeHtml(item.Role))); + const roleText = globalize.translate('PersonRole', escapeHtml(item.Role)); + lines.push(`${roleText}`); } else if (item.Role.toLowerCase() === item.Type.toLowerCase()) { // Role and Type are the same so use the localized Type lines.push(escapeHtml(globalize.translate(item.Type))); From c41fe8e4d58a42feca53fe14c2f1f94d9074d462 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 20 Feb 2025 22:30:14 +0000 Subject: [PATCH 100/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 53125259bd..62143d9eb2 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1493,7 +1493,7 @@ "LabelMaxAudiobookResume": "Minutos do áudio-livro em falta para retomar", "MessagePlaybackError": "Ocorreu um erro ao reproduzir este ficheiro no teu recetor Google Cast.", "MessageChromecastConnectionError": "O seu recetor Google Cast não pode contatar o servidor Jellyfin. Por favor, verifique a ligação e tente de novo.", - "YoutubeDenied": "Não é permitida a reprodução do vídeo solicitado em reprodutores embutidos.", + "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em leitores incorporados.", "PreferFmp4HlsContainerHelp": "Utiliza o fMP4 como container predefinido para HLS, tornando possível a transmissão direta de conteúdos HEVC e AV1 em dispositivos suportados.", "PreferFmp4HlsContainer": "Preferir o container multimédia fMP4-HLS", "LabelSyncPlayInfo": "Info do SyncPlay", From d4a341aae77d02af4e1877543cfc26efa5030835 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 20 Feb 2025 22:30:22 +0000 Subject: [PATCH 101/235] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 09e7fd0f18..b20d7d952d 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1622,7 +1622,7 @@ "XmlTvNewsCategoriesHelp": "Os programas com estas categorias serão exibidos como programas de notícias. Separe múltiplos com '|'.", "LabelOriginalMediaInfo": "Informações da mídia original", "YoutubeBadRequest": "Requisição ruim.", - "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em players incorporados.", + "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em leitores incorporados.", "TypeOptionPluralBoxSet": "Conjuntos de caixas", "LabelBackdropScreensaverInterval": "Intervalo do fundo do protetor de ecrã", "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes referido como desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluído, como o que verias ao ver vídeo entrelaçado numa televisão.", From 44205ca5b2a1a654d28f192d48afa4e13ff7f0ef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 06:15:43 +0000 Subject: [PATCH 102/235] Update dependency @jellyfin/sdk to v0.0.0-unstable.202502210501 --- 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 11b2a7b77c..2b3c32f962 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.1", "@fontsource/noto-sans-tc": "5.1.1", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202501180501", + "@jellyfin/sdk": "0.0.0-unstable.202502210501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.20.0", @@ -4040,9 +4040,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.202501180501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202501180501.tgz", - "integrity": "sha512-H1K/uZlelqP330o1uKX0THWmEEw5iAplJeRkbVPAvGJKp4mgALV7UqFaexKgx7HEaulOOEFoHYweShg+FjI76Q==", + "version": "0.0.0-unstable.202502210501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202502210501.tgz", + "integrity": "sha512-IFfgfESaHoHsLZbo+eKd+cGtwjgW7bj1hmX8Igc1eV0UHJ1SlLTvjRecm4pp85vvE7u6elrwgVhIsFS0hYucqA==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28546,9 +28546,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202501180501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202501180501.tgz", - "integrity": "sha512-H1K/uZlelqP330o1uKX0THWmEEw5iAplJeRkbVPAvGJKp4mgALV7UqFaexKgx7HEaulOOEFoHYweShg+FjI76Q==", + "version": "0.0.0-unstable.202502210501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202502210501.tgz", + "integrity": "sha512-IFfgfESaHoHsLZbo+eKd+cGtwjgW7bj1hmX8Igc1eV0UHJ1SlLTvjRecm4pp85vvE7u6elrwgVhIsFS0hYucqA==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index d20a77a28b..345212f5ba 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@fontsource/noto-sans-sc": "5.1.1", "@fontsource/noto-sans-tc": "5.1.1", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202501180501", + "@jellyfin/sdk": "0.0.0-unstable.202502210501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.20.0", From 238f2d791c5630264de3010e608f44334a327d22 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 06:35:15 +0000 Subject: [PATCH 103/235] Update dependency @stylistic/stylelint-plugin to v3.1.2 --- 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 2b3c32f962..e67be9791e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,7 +72,7 @@ "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", "@eslint/js": "9.20.0", "@stylistic/eslint-plugin": "3.1.0", - "@stylistic/stylelint-plugin": "3.1.1", + "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", "@types/loadable__component": "5.13.9", @@ -5284,9 +5284,9 @@ } }, "node_modules/@stylistic/stylelint-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.1.tgz", - "integrity": "sha512-XagAHHIa528EvyGybv8EEYGK5zrVW74cHpsjhtovVATbhDRuJYfE+X4HCaAieW9lCkwbX6L+X0I4CiUG3w/hFw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz", + "integrity": "sha512-tylFJGMQo62alGazK74MNxFjMagYOHmBZiePZFOJK2n13JZta0uVkB3Bh5qodUmOLtRH+uxH297EibK14UKm8g==", "dev": true, "license": "MIT", "dependencies": { @@ -29180,9 +29180,9 @@ } }, "@stylistic/stylelint-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.1.tgz", - "integrity": "sha512-XagAHHIa528EvyGybv8EEYGK5zrVW74cHpsjhtovVATbhDRuJYfE+X4HCaAieW9lCkwbX6L+X0I4CiUG3w/hFw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz", + "integrity": "sha512-tylFJGMQo62alGazK74MNxFjMagYOHmBZiePZFOJK2n13JZta0uVkB3Bh5qodUmOLtRH+uxH297EibK14UKm8g==", "dev": true, "requires": { "@csstools/css-parser-algorithms": "^3.0.1", diff --git a/package.json b/package.json index 345212f5ba..dd2dc6716d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", "@eslint/js": "9.20.0", "@stylistic/eslint-plugin": "3.1.0", - "@stylistic/stylelint-plugin": "3.1.1", + "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", "@types/loadable__component": "5.13.9", From 06754bfe9e5511a583e9c86e888e2d6582e4f1be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 06:35:32 +0000 Subject: [PATCH 104/235] Update material-ui monorepo --- package-lock.json | 249 +++++++++++++++++++++++----------------------- package.json | 6 +- 2 files changed, 130 insertions(+), 125 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2b3c32f962..247f55abd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,9 +19,9 @@ "@fontsource/noto-sans-tc": "5.1.1", "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202502210501", - "@mui/icons-material": "5.16.7", - "@mui/material": "5.16.7", - "@mui/x-date-pickers": "7.20.0", + "@mui/icons-material": "5.16.14", + "@mui/material": "5.16.14", + "@mui/x-date-pickers": "7.26.0", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.62.16", "@tanstack/react-query-devtools": "5.62.16", @@ -3104,14 +3104,14 @@ } }, "node_modules/@emotion/cache": { - "version": "11.13.1", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", - "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", "license": "MIT", "dependencies": { "@emotion/memoize": "^0.9.0", "@emotion/sheet": "^1.4.0", - "@emotion/utils": "^1.4.0", + "@emotion/utils": "^1.4.2", "@emotion/weak-memoize": "^0.4.0", "stylis": "4.2.0" } @@ -3219,9 +3219,9 @@ } }, "node_modules/@emotion/utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz", - "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", "license": "MIT" }, "node_modules/@emotion/weak-memoize": { @@ -4246,9 +4246,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.16.7", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.7.tgz", - "integrity": "sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.14.tgz", + "integrity": "sha512-sbjXW+BBSvmzn61XyTMun899E7nGPTXwqD9drm1jBUAvWEhJpPFIRxwQQiATWZnd9rvdxtnhhdsDxEGWI0jxqA==", "license": "MIT", "funding": { "type": "opencollective", @@ -4256,9 +4256,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "5.16.7", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.7.tgz", - "integrity": "sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.14.tgz", + "integrity": "sha512-heL4S+EawrP61xMXBm59QH6HODsu0gxtZi5JtnXF2r+rghzyU/3Uftlt1ij8rmJh+cFdKTQug1L9KkZB5JgpMQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9" @@ -4272,8 +4272,8 @@ }, "peerDependencies": { "@mui/material": "^5.0.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -4282,22 +4282,22 @@ } }, "node_modules/@mui/material": { - "version": "5.16.7", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.7.tgz", - "integrity": "sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.14.tgz", + "integrity": "sha512-eSXQVCMKU2xc7EcTxe/X/rC9QsV2jUe8eLM3MUCPYbo6V52eCE436akRIvELq/AqZpxx2bwkq7HC0cRhLB+yaw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/core-downloads-tracker": "^5.16.7", - "@mui/system": "^5.16.7", + "@mui/core-downloads-tracker": "^5.16.14", + "@mui/system": "^5.16.14", "@mui/types": "^7.2.15", - "@mui/utils": "^5.16.6", + "@mui/utils": "^5.16.14", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.3.1", + "react-is": "^19.0.0", "react-transition-group": "^4.4.5" }, "engines": { @@ -4310,9 +4310,9 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4327,18 +4327,19 @@ } }, "node_modules/@mui/material/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", "license": "MIT" }, "node_modules/@mui/private-theming": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.6.tgz", - "integrity": "sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.14.tgz", + "integrity": "sha512-12t7NKzvYi819IO5IapW2BcR33wP/KAVrU8d7gLhGHoAmhDxyXlRoKiRij3TOD8+uzk0B6R9wHUNKi4baJcRNg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.16.6", + "@mui/utils": "^5.16.14", "prop-types": "^15.8.1" }, "engines": { @@ -4349,8 +4350,8 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -4359,12 +4360,13 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.6.tgz", - "integrity": "sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.14.tgz", + "integrity": "sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@emotion/cache": "^11.11.0", + "@emotion/cache": "^11.13.5", "csstype": "^3.1.3", "prop-types": "^15.8.1" }, @@ -4378,7 +4380,7 @@ "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4390,15 +4392,16 @@ } }, "node_modules/@mui/system": { - "version": "5.16.7", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.7.tgz", - "integrity": "sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.14.tgz", + "integrity": "sha512-KBxMwCb8mSIABnKvoGbvM33XHyT+sN0BzEBG+rsSc0lLQGzs7127KWkCA6/H8h6LZ00XpBEME5MAj8mZLiQ1tw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.16.6", - "@mui/styled-engine": "^5.16.6", + "@mui/private-theming": "^5.16.14", + "@mui/styled-engine": "^5.16.14", "@mui/types": "^7.2.15", - "@mui/utils": "^5.16.6", + "@mui/utils": "^5.16.14", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -4413,8 +4416,8 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4442,16 +4445,17 @@ } }, "node_modules/@mui/utils": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.6.tgz", - "integrity": "sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.14.tgz", + "integrity": "sha512-wn1QZkRzSmeXD1IguBVvJJHV3s6rxJrfb6YuC9Kk6Noh9f8Fb54nUs5JRkKm+BOerRhj5fLg05Dhx/H3Ofb8Mg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", "@mui/types": "^7.2.15", "@types/prop-types": "^15.7.12", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.3.1" + "react-is": "^19.0.0" }, "engines": { "node": ">=12.0.0" @@ -4461,8 +4465,8 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -4471,19 +4475,20 @@ } }, "node_modules/@mui/utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" }, "node_modules/@mui/x-date-pickers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.20.0.tgz", - "integrity": "sha512-LnijrF8IF3r7c7sAVXRX4pDurozJSMUGAJdd5xuTT7ZPQIOp5ry0kDKqx79WAjXA/ZgjropLNt/nk15GE+6ZNw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.26.0.tgz", + "integrity": "sha512-bhSDce1b5MBYYlCdHQJBThe10LGTE3D/u53TDQ41+IRj+iiNCun8jivw3DxKhmoBxlB+hVdkcltpTtIGlPjQZQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0", - "@mui/x-internals": "7.20.0", + "@mui/x-internals": "7.26.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -4502,14 +4507,14 @@ "@mui/material": "^5.15.14 || ^6.0.0", "@mui/system": "^5.15.14 || ^6.0.0", "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0", - "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0", + "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0", "dayjs": "^1.10.7", "luxon": "^3.0.2", "moment": "^2.29.4", - "moment-hijri": "^2.1.2", + "moment-hijri": "^2.1.2 || ^3.0.0", "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4542,9 +4547,9 @@ } }, "node_modules/@mui/x-internals": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.20.0.tgz", - "integrity": "sha512-ScXdEwtnxmBEq9umeusnotfeVQnnhjOZcM2ddXyIupmzeGmgDDtEcXGyTgrS/GOc91J74g81s6eJ4UCrlYZ2sg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.26.0.tgz", + "integrity": "sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", @@ -4558,7 +4563,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "react": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/@nodelib/fs.scandir": { @@ -28001,13 +28006,13 @@ } }, "@emotion/cache": { - "version": "11.13.1", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", - "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", "requires": { "@emotion/memoize": "^0.9.0", "@emotion/sheet": "^1.4.0", - "@emotion/utils": "^1.4.0", + "@emotion/utils": "^1.4.2", "@emotion/weak-memoize": "^0.4.0", "stylis": "4.2.0" } @@ -28087,9 +28092,9 @@ "requires": {} }, "@emotion/utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz", - "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==" }, "@emotion/weak-memoize": { "version": "0.4.0", @@ -28690,75 +28695,75 @@ } }, "@mui/core-downloads-tracker": { - "version": "5.16.7", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.7.tgz", - "integrity": "sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==" + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.14.tgz", + "integrity": "sha512-sbjXW+BBSvmzn61XyTMun899E7nGPTXwqD9drm1jBUAvWEhJpPFIRxwQQiATWZnd9rvdxtnhhdsDxEGWI0jxqA==" }, "@mui/icons-material": { - "version": "5.16.7", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.7.tgz", - "integrity": "sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.14.tgz", + "integrity": "sha512-heL4S+EawrP61xMXBm59QH6HODsu0gxtZi5JtnXF2r+rghzyU/3Uftlt1ij8rmJh+cFdKTQug1L9KkZB5JgpMQ==", "requires": { "@babel/runtime": "^7.23.9" } }, "@mui/material": { - "version": "5.16.7", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.7.tgz", - "integrity": "sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.14.tgz", + "integrity": "sha512-eSXQVCMKU2xc7EcTxe/X/rC9QsV2jUe8eLM3MUCPYbo6V52eCE436akRIvELq/AqZpxx2bwkq7HC0cRhLB+yaw==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/core-downloads-tracker": "^5.16.7", - "@mui/system": "^5.16.7", + "@mui/core-downloads-tracker": "^5.16.14", + "@mui/system": "^5.16.14", "@mui/types": "^7.2.15", - "@mui/utils": "^5.16.6", + "@mui/utils": "^5.16.14", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.3.1", + "react-is": "^19.0.0", "react-transition-group": "^4.4.5" }, "dependencies": { "react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==" } } }, "@mui/private-theming": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.6.tgz", - "integrity": "sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.14.tgz", + "integrity": "sha512-12t7NKzvYi819IO5IapW2BcR33wP/KAVrU8d7gLhGHoAmhDxyXlRoKiRij3TOD8+uzk0B6R9wHUNKi4baJcRNg==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.16.6", + "@mui/utils": "^5.16.14", "prop-types": "^15.8.1" } }, "@mui/styled-engine": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.6.tgz", - "integrity": "sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.14.tgz", + "integrity": "sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw==", "requires": { "@babel/runtime": "^7.23.9", - "@emotion/cache": "^11.11.0", + "@emotion/cache": "^11.13.5", "csstype": "^3.1.3", "prop-types": "^15.8.1" } }, "@mui/system": { - "version": "5.16.7", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.7.tgz", - "integrity": "sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.14.tgz", + "integrity": "sha512-KBxMwCb8mSIABnKvoGbvM33XHyT+sN0BzEBG+rsSc0lLQGzs7127KWkCA6/H8h6LZ00XpBEME5MAj8mZLiQ1tw==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.16.6", - "@mui/styled-engine": "^5.16.6", + "@mui/private-theming": "^5.16.14", + "@mui/styled-engine": "^5.16.14", "@mui/types": "^7.2.15", - "@mui/utils": "^5.16.6", + "@mui/utils": "^5.16.14", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -28771,33 +28776,33 @@ "requires": {} }, "@mui/utils": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.6.tgz", - "integrity": "sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.14.tgz", + "integrity": "sha512-wn1QZkRzSmeXD1IguBVvJJHV3s6rxJrfb6YuC9Kk6Noh9f8Fb54nUs5JRkKm+BOerRhj5fLg05Dhx/H3Ofb8Mg==", "requires": { "@babel/runtime": "^7.23.9", "@mui/types": "^7.2.15", "@types/prop-types": "^15.7.12", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.3.1" + "react-is": "^19.0.0" }, "dependencies": { "react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==" } } }, "@mui/x-date-pickers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.20.0.tgz", - "integrity": "sha512-LnijrF8IF3r7c7sAVXRX4pDurozJSMUGAJdd5xuTT7ZPQIOp5ry0kDKqx79WAjXA/ZgjropLNt/nk15GE+6ZNw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.26.0.tgz", + "integrity": "sha512-bhSDce1b5MBYYlCdHQJBThe10LGTE3D/u53TDQ41+IRj+iiNCun8jivw3DxKhmoBxlB+hVdkcltpTtIGlPjQZQ==", "requires": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0", - "@mui/x-internals": "7.20.0", + "@mui/x-internals": "7.26.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -28805,9 +28810,9 @@ } }, "@mui/x-internals": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.20.0.tgz", - "integrity": "sha512-ScXdEwtnxmBEq9umeusnotfeVQnnhjOZcM2ddXyIupmzeGmgDDtEcXGyTgrS/GOc91J74g81s6eJ4UCrlYZ2sg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.26.0.tgz", + "integrity": "sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg==", "requires": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0" diff --git a/package.json b/package.json index 345212f5ba..c1931cd8a5 100644 --- a/package.json +++ b/package.json @@ -84,9 +84,9 @@ "@fontsource/noto-sans-tc": "5.1.1", "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202502210501", - "@mui/icons-material": "5.16.7", - "@mui/material": "5.16.7", - "@mui/x-date-pickers": "7.20.0", + "@mui/icons-material": "5.16.14", + "@mui/material": "5.16.14", + "@mui/x-date-pickers": "7.26.0", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.62.16", "@tanstack/react-query-devtools": "5.62.16", From 883743781772e46725deb9bd48c0457ee6ecaca4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 06:48:33 +0000 Subject: [PATCH 105/235] Update dependency swiper to v11.2.3 --- 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 e67be9791e..90a417c34d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.6", - "swiper": "11.2.1", + "swiper": "11.2.3", "usehooks-ts": "3.1.0", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" @@ -23612,9 +23612,9 @@ } }, "node_modules/swiper": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.1.tgz", - "integrity": "sha512-62G69+iQRIfUqTmJkWpZDcX891Ra8O9050ckt1/JI2H+0483g+gq0m7gINecDqMtDh2zt5dK+uzBRxGhGOOvQA==", + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.3.tgz", + "integrity": "sha512-24m5tqHCd1Wmp9+86aKDoIGMsZGEjIL++3nuB1UjhAhIlvwj4k0Jikxu9PGQ/VswLpoje6JtMDWo12uu4aS2FA==", "funding": [ { "type": "patreon", @@ -42086,9 +42086,9 @@ } }, "swiper": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.1.tgz", - "integrity": "sha512-62G69+iQRIfUqTmJkWpZDcX891Ra8O9050ckt1/JI2H+0483g+gq0m7gINecDqMtDh2zt5dK+uzBRxGhGOOvQA==" + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.3.tgz", + "integrity": "sha512-24m5tqHCd1Wmp9+86aKDoIGMsZGEjIL++3nuB1UjhAhIlvwj4k0Jikxu9PGQ/VswLpoje6JtMDWo12uu4aS2FA==" }, "symbol-tree": { "version": "3.2.4", diff --git a/package.json b/package.json index dd2dc6716d..cadd71ce9c 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,7 @@ "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.6", - "swiper": "11.2.1", + "swiper": "11.2.3", "usehooks-ts": "3.1.0", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" From cf0a024cb13b45c0ea48623444c9bf25f74b1682 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 21 Feb 2025 06:45:27 +0000 Subject: [PATCH 106/235] 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 53ec64d6ff..a0949d1d2f 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2002,5 +2002,5 @@ "LabelDevice": "Apparaat", "LastActive": "Laatst actief", "DeleteServerConfirmation": "Weet je zeker dat je deze server wilt verwijderen?", - "LibraryNameInvalid": "De naam van de bibliotheek kan niet leeg zijn of beginnen of eindigen met een spatie." + "LibraryNameInvalid": "Bibliotheeknaam kan niet leeg zijn." } From 6b9db6b83238f0882bb61a5227cf3971b1c7cb95 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 08:59:59 +0000 Subject: [PATCH 107/235] Update dependency usehooks-ts to v3.1.1 --- package-lock.json | 17 +++++++++-------- package.json | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5e12cf42b..4eff6edabe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,7 @@ "screenfull": "6.0.2", "sortablejs": "1.15.6", "swiper": "11.2.3", - "usehooks-ts": "3.1.0", + "usehooks-ts": "3.1.1", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" }, @@ -25023,9 +25023,10 @@ } }, "node_modules/usehooks-ts": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.0.tgz", - "integrity": "sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.1.tgz", + "integrity": "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==", + "license": "MIT", "dependencies": { "lodash.debounce": "^4.0.8" }, @@ -25033,7 +25034,7 @@ "node": ">=16.15.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18" + "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "node_modules/util-deprecate": { @@ -43052,9 +43053,9 @@ "dev": true }, "usehooks-ts": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.0.tgz", - "integrity": "sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.1.tgz", + "integrity": "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==", "requires": { "lodash.debounce": "^4.0.8" } diff --git a/package.json b/package.json index 5ffccea3f2..fd0a3e46c3 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,7 @@ "screenfull": "6.0.2", "sortablejs": "1.15.6", "swiper": "11.2.3", - "usehooks-ts": "3.1.0", + "usehooks-ts": "3.1.1", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" }, From 49cba4f300d59245a95aa1dee9a38ada9478047d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 09:00:14 +0000 Subject: [PATCH 108/235] Update Linters --- package-lock.json | 116 +++++++++++++++++++++++++++++++--------------- package.json | 4 +- 2 files changed, 80 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5e12cf42b..4cbbbdf5c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,11 +117,11 @@ "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", - "stylelint": "16.13.2", + "stylelint": "16.14.1", "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "1.3.0", "stylelint-order": "6.0.4", - "stylelint-scss": "6.10.1", + "stylelint-scss": "6.11.0", "ts-loader": "9.5.2", "typescript": "5.7.3", "typescript-eslint": "8.24.1", @@ -21087,9 +21087,9 @@ } }, "node_modules/stylelint": { - "version": "16.13.2", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.13.2.tgz", - "integrity": "sha512-wDlgh0mRO9RtSa3TdidqHd0nOG8MmUyVKl+dxA6C1j8aZRzpNeEgdhFmU5y4sZx4Fc6r46p0fI7p1vR5O2DZqA==", + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.14.1.tgz", + "integrity": "sha512-oqCL7AC3786oTax35T/nuLL8p2C3k/8rHKAooezrPGRvUX0wX+qqs5kMWh5YYT4PHQgVDobHT4tw55WgpYG6Sw==", "dev": true, "funding": [ { @@ -21121,7 +21121,7 @@ "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^7.0.1", + "ignore": "^7.0.3", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.35.0", @@ -21130,7 +21130,7 @@ "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", - "postcss": "^8.4.49", + "postcss": "^8.5.1", "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.0.0", @@ -22990,16 +22990,16 @@ } }, "node_modules/stylelint-scss": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.10.1.tgz", - "integrity": "sha512-CBqs0jecftIyhic6xba+4OvZUp4B0wNbX19w6Rq1fPo+lBDmTevk+olo8H7u/WQpTSDCDbBN4f3oocQurvXLTQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.11.0.tgz", + "integrity": "sha512-AvJ6LVzz2iXHxPlPTR9WVy73FC/vmohH54VySNlCKX1NIXNAeuzy/VbIkMJLMyw/xKYqkgY4kAgB+qy5BfCaCg==", "dev": true, "license": "MIT", "dependencies": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", "known-css-properties": "^0.35.0", - "mdn-data": "^2.14.0", + "mdn-data": "^2.15.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.0.0", @@ -23051,9 +23051,9 @@ "license": "CC0-1.0" }, "node_modules/stylelint-scss/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { @@ -23240,9 +23240,9 @@ } }, "node_modules/stylelint/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -23315,6 +23315,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stylelint/node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/stylelint/node_modules/postcss-safe-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", @@ -23343,9 +23372,9 @@ } }, "node_modules/stylelint/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { @@ -40219,9 +40248,9 @@ } }, "stylelint": { - "version": "16.13.2", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.13.2.tgz", - "integrity": "sha512-wDlgh0mRO9RtSa3TdidqHd0nOG8MmUyVKl+dxA6C1j8aZRzpNeEgdhFmU5y4sZx4Fc6r46p0fI7p1vR5O2DZqA==", + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.14.1.tgz", + "integrity": "sha512-oqCL7AC3786oTax35T/nuLL8p2C3k/8rHKAooezrPGRvUX0wX+qqs5kMWh5YYT4PHQgVDobHT4tw55WgpYG6Sw==", "dev": true, "requires": { "@csstools/css-parser-algorithms": "^3.0.4", @@ -40242,7 +40271,7 @@ "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^7.0.1", + "ignore": "^7.0.3", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.35.0", @@ -40251,7 +40280,7 @@ "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", - "postcss": "^8.4.49", + "postcss": "^8.5.1", "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.0.0", @@ -40367,9 +40396,9 @@ "dev": true }, "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -40417,6 +40446,17 @@ "lines-and-columns": "^1.1.6" } }, + "postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "requires": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, "postcss-safe-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", @@ -40425,9 +40465,9 @@ "requires": {} }, "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -41865,15 +41905,15 @@ } }, "stylelint-scss": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.10.1.tgz", - "integrity": "sha512-CBqs0jecftIyhic6xba+4OvZUp4B0wNbX19w6Rq1fPo+lBDmTevk+olo8H7u/WQpTSDCDbBN4f3oocQurvXLTQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.11.0.tgz", + "integrity": "sha512-AvJ6LVzz2iXHxPlPTR9WVy73FC/vmohH54VySNlCKX1NIXNAeuzy/VbIkMJLMyw/xKYqkgY4kAgB+qy5BfCaCg==", "dev": true, "requires": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", "known-css-properties": "^0.35.0", - "mdn-data": "^2.14.0", + "mdn-data": "^2.15.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.0.0", @@ -41911,9 +41951,9 @@ "dev": true }, "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "requires": { "cssesc": "^3.0.0", diff --git a/package.json b/package.json index 5ffccea3f2..4d818a5675 100644 --- a/package.json +++ b/package.json @@ -57,11 +57,11 @@ "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", - "stylelint": "16.13.2", + "stylelint": "16.14.1", "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "1.3.0", "stylelint-order": "6.0.4", - "stylelint-scss": "6.10.1", + "stylelint-scss": "6.11.0", "ts-loader": "9.5.2", "typescript": "5.7.3", "typescript-eslint": "8.24.1", From f8a147b0395ae5ee35b3c2bd08b5fa57633437f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 12:52:45 +0000 Subject: [PATCH 109/235] Update Babel --- package-lock.json | 2198 ++++++++++++++++++++++----------------------- package.json | 8 +- 2 files changed, 1079 insertions(+), 1127 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5e12cf42b..e828836be8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,10 +65,10 @@ "whatwg-fetch": "3.6.20" }, "devDependencies": { - "@babel/core": "7.25.8", - "@babel/plugin-transform-modules-umd": "7.25.7", - "@babel/preset-env": "7.25.8", - "@babel/preset-react": "7.25.7", + "@babel/core": "7.26.9", + "@babel/plugin-transform-modules-umd": "7.25.9", + "@babel/preset-env": "7.26.9", + "@babel/preset-react": "7.26.3", "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", "@eslint/js": "9.20.0", "@stylistic/eslint-plugin": "3.1.0", @@ -166,12 +166,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -179,9 +180,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", - "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true, "license": "MIT", "engines": { @@ -189,22 +190,22 @@ } }, "node_modules/@babel/core": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", - "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@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.8", - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.8", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -227,12 +228,13 @@ "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -242,41 +244,27 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "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.25.7", - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", - "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -301,18 +289,18 @@ "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { - "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==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", + "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", "dev": true, "license": "MIT", "dependencies": { - "@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", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.26.9", "semver": "^6.3.1" }, "engines": { @@ -323,14 +311,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "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==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "regexpu-core": "^6.1.1", + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -341,9 +329,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", "dev": true, "license": "MIT", "dependencies": { @@ -358,43 +346,42 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "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==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "license": "MIT", "dependencies": { - "@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-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -404,22 +391,22 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "dev": true, "license": "MIT", "engines": { @@ -427,15 +414,15 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-wrap-function": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -445,15 +432,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", - "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.7", - "@babel/helper-optimise-call-expression": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -462,56 +449,42 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "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.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, "license": "MIT", "engines": { @@ -519,56 +492,41 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", - "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", - "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", + "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "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.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", - "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.8" + "@babel/types": "^7.26.9" }, "bin": { "parser": "bin/babel-parser.js" @@ -578,14 +536,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -595,13 +553,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -611,13 +569,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "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==", + "version": "7.25.9", + "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.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -627,15 +585,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", "dev": true, "license": "MIT", "dependencies": { - "@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/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -645,14 +603,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -674,13 +632,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "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==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -690,13 +648,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "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==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -706,13 +664,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -738,13 +696,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -754,15 +712,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz", - "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-remap-async-to-generator": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" @@ -772,15 +730,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-remap-async-to-generator": "^7.25.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -790,13 +748,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "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==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -806,13 +764,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -822,14 +780,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -839,14 +797,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz", - "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -856,17 +814,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "dev": true, "license": "MIT", "dependencies": { - "@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", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", "globals": "^11.1.0" }, "engines": { @@ -886,14 +844,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/template": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -903,13 +861,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -919,14 +877,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -936,13 +894,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -952,14 +910,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -969,13 +927,13 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz", - "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -985,14 +943,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "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==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1002,13 +959,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", - "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1018,14 +975,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "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==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1035,15 +992,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1053,13 +1010,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz", - "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1069,13 +1026,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1085,13 +1042,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz", - "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1101,13 +1058,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1117,14 +1074,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1134,15 +1091,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "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==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1152,16 +1108,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "dev": true, "license": "MIT", "dependencies": { - "@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/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1171,14 +1127,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1188,14 +1144,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1205,13 +1161,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1221,13 +1177,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", - "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1237,13 +1193,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz", - "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1253,15 +1209,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", - "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-transform-parameters": "^7.25.7" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1271,14 +1227,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1288,13 +1244,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz", - "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1304,14 +1260,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", - "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1321,13 +1277,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1337,14 +1293,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1354,15 +1310,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", - "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", "dev": true, "license": "MIT", "dependencies": { - "@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/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1372,13 +1328,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1388,13 +1344,13 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1404,17 +1360,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "license": "MIT", "dependencies": { - "@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/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1424,13 +1380,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.7" + "@babel/plugin-transform-react-jsx": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1440,14 +1396,14 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1457,13 +1413,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", - "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.9", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1473,14 +1429,31 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "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==", + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1490,13 +1463,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1506,14 +1479,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", - "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1523,13 +1496,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1539,13 +1512,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "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==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1555,13 +1528,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "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==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1571,13 +1544,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1587,14 +1560,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1604,14 +1577,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1621,14 +1594,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1638,79 +1611,80 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz", - "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.8", - "@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/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.25.7", - "@babel/plugin-syntax-import-attributes": "^7.25.7", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.8", - "@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.8", - "@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.8", - "@babel/plugin-transform-exponentiation-operator": "^7.25.7", - "@babel/plugin-transform-export-namespace-from": "^7.25.8", - "@babel/plugin-transform-for-of": "^7.25.7", - "@babel/plugin-transform-function-name": "^7.25.7", - "@babel/plugin-transform-json-strings": "^7.25.8", - "@babel/plugin-transform-literals": "^7.25.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.8", - "@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.8", - "@babel/plugin-transform-numeric-separator": "^7.25.8", - "@babel/plugin-transform-object-rest-spread": "^7.25.8", - "@babel/plugin-transform-object-super": "^7.25.7", - "@babel/plugin-transform-optional-catch-binding": "^7.25.8", - "@babel/plugin-transform-optional-chaining": "^7.25.8", - "@babel/plugin-transform-parameters": "^7.25.7", - "@babel/plugin-transform-private-methods": "^7.25.7", - "@babel/plugin-transform-private-property-in-object": "^7.25.8", - "@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/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@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-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -1735,18 +1709,18 @@ } }, "node_modules/@babel/preset-react": { - "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==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", "dev": true, "license": "MIT", "dependencies": { - "@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/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1768,30 +1742,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "license": "MIT", "dependencies": { - "@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", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1808,14 +1782,13 @@ } }, "node_modules/@babel/types": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", - "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -6724,6 +6697,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -7288,14 +7262,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -7930,6 +7904,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -8178,6 +8153,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -8185,7 +8161,8 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "node_modules/color-string": { "version": "1.9.1", @@ -8512,13 +8489,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", + "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3" + "browserslist": "^4.24.3" }, "funding": { "type": "opencollective", @@ -10017,6 +9994,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -12450,6 +12428,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, "engines": { "node": ">=4" } @@ -18809,16 +18788,16 @@ } }, "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -18834,9 +18813,9 @@ "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==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -23423,6 +23402,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -24004,14 +23984,6 @@ "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", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -26422,36 +26394,37 @@ } }, "@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "requires": { - "@babel/highlight": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "@babel/compat-data": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", - "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true }, "@babel/core": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", - "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", - "@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.8", - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.8", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -26468,43 +26441,34 @@ } }, "@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "requires": { - "@babel/types": "^7.25.7", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "@babel/helper-annotate-as-pure": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "requires": { - "@babel/types": "^7.25.7" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "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.25.7", - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.9" } }, "@babel/helper-compilation-targets": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", - "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "dev": true, "requires": { - "@babel/compat-data": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -26528,35 +26492,35 @@ } }, "@babel/helper-create-class-features-plugin": { - "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==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", + "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", "dev": true, "requires": { - "@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", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.26.9", "semver": "^6.3.1" } }, "@babel/helper-create-regexp-features-plugin": { - "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==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "regexpu-core": "^6.1.1", + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.6", @@ -26567,196 +26531,174 @@ } }, "@babel/helper-member-expression-to-functions": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, "requires": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/helper-module-imports": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "requires": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/helper-module-transforms": { - "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==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "requires": { - "@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-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, "@babel/helper-optimise-call-expression": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dev": true, "requires": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.9" } }, "@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-wrap-function": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, "@babel/helper-replace-supers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", - "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", "dev": true, "requires": { - "@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.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.25.7", - "@babel/types": "^7.25.7" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, "requires": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/helper-string-parser": { - "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==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==" }, "@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" }, "@babel/helper-validator-option": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", - "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "dev": true, "requires": { - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/helpers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", - "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", + "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", "dev": true, "requires": { - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7" - } - }, - "@babel/highlight": { - "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.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9" } }, "@babel/parser": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", - "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "requires": { - "@babel/types": "^7.25.8" + "@babel/types": "^7.26.9" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, "@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "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==", + "version": "7.25.9", + "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.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", "dev": true, "requires": { - "@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/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" } }, "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, "@babel/plugin-proposal-private-property-in-object": { @@ -26767,30 +26709,30 @@ "requires": {} }, "@babel/plugin-syntax-import-assertions": { - "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==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-syntax-import-attributes": { - "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==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-syntax-jsx": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-syntax-unicode-sets-regex": { @@ -26804,85 +26746,85 @@ } }, "@babel/plugin-transform-arrow-functions": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz", - "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-remap-async-to-generator": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" } }, "@babel/plugin-transform-async-to-generator": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-remap-async-to-generator": "^7.25.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" } }, "@babel/plugin-transform-block-scoped-functions": { - "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==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5" } }, "@babel/plugin-transform-block-scoping": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-class-properties": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-class-static-block": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz", - "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-classes": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "dev": true, "requires": { - "@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", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", "globals": "^11.1.0" }, "dependencies": { @@ -26895,515 +26837,524 @@ } }, "@babel/plugin-transform-computed-properties": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/template": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" } }, "@babel/plugin-transform-destructuring": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-dotall-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-duplicate-keys": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-dynamic-import": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz", - "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-exponentiation-operator": { - "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==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-export-namespace-from": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", - "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-for-of": { - "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==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" } }, "@babel/plugin-transform-function-name": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, "@babel/plugin-transform-json-strings": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz", - "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-literals": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz", - "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-member-expression-literals": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-modules-amd": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-modules-commonjs": { - "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==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-modules-systemjs": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "dev": true, "requires": { - "@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/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, "@babel/plugin-transform-modules-umd": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-new-target": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", - "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5" } }, "@babel/plugin-transform-numeric-separator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz", - "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", - "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-transform-parameters": "^7.25.7" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" } }, "@babel/plugin-transform-object-super": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" } }, "@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz", - "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", - "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" } }, "@babel/plugin-transform-parameters": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-private-methods": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", - "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", "dev": true, "requires": { - "@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/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-property-literals": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-react-display-name": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-react-jsx": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "requires": { - "@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/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/plugin-transform-react-jsx-development": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.25.7" + "@babel/plugin-transform-react-jsx": "^7.25.9" } }, "@babel/plugin-transform-react-pure-annotations": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-regenerator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", - "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.9", "regenerator-transform": "^0.15.2" } }, - "@babel/plugin-transform-reserved-words": { - "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==", + "@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-shorthand-properties": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-spread": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", - "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" } }, "@babel/plugin-transform-sticky-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-template-literals": { - "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==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5" } }, "@babel/plugin-transform-typeof-symbol": { - "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==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.26.5" } }, "@babel/plugin-transform-unicode-escapes": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-unicode-property-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-unicode-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-unicode-sets-regex": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/preset-env": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz", - "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.25.8", - "@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/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.25.7", - "@babel/plugin-syntax-import-attributes": "^7.25.7", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.8", - "@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.8", - "@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.8", - "@babel/plugin-transform-exponentiation-operator": "^7.25.7", - "@babel/plugin-transform-export-namespace-from": "^7.25.8", - "@babel/plugin-transform-for-of": "^7.25.7", - "@babel/plugin-transform-function-name": "^7.25.7", - "@babel/plugin-transform-json-strings": "^7.25.8", - "@babel/plugin-transform-literals": "^7.25.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.8", - "@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.8", - "@babel/plugin-transform-numeric-separator": "^7.25.8", - "@babel/plugin-transform-object-rest-spread": "^7.25.8", - "@babel/plugin-transform-object-super": "^7.25.7", - "@babel/plugin-transform-optional-catch-binding": "^7.25.8", - "@babel/plugin-transform-optional-chaining": "^7.25.8", - "@babel/plugin-transform-parameters": "^7.25.7", - "@babel/plugin-transform-private-methods": "^7.25.7", - "@babel/plugin-transform-private-property-in-object": "^7.25.8", - "@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/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@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-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" } }, @@ -27419,17 +27370,17 @@ } }, "@babel/preset-react": { - "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==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", "dev": true, "requires": { - "@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/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" } }, "@babel/runtime": { @@ -27441,25 +27392,25 @@ } }, "@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "requires": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" } }, "@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "requires": { - "@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", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -27472,13 +27423,12 @@ } }, "@babel/types": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", - "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "requires": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, "@bcoe/v8-coverage": { @@ -30256,6 +30206,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -30641,13 +30592,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" } }, "babel-plugin-polyfill-regenerator": { @@ -31098,6 +31049,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -31275,6 +31227,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -31282,7 +31235,8 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "color-string": { "version": "1.9.1", @@ -31530,12 +31484,12 @@ "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==" }, "core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", + "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", "dev": true, "requires": { - "browserslist": "^4.23.3" + "browserslist": "^4.24.3" } }, "core-util-is": { @@ -32596,7 +32550,8 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "eslint": { "version": "9.20.1", @@ -34338,7 +34293,8 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-property-descriptors": { "version": "1.0.2", @@ -38644,15 +38600,15 @@ } }, "regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, "requires": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" } @@ -38664,9 +38620,9 @@ "dev": true }, "regjsparser": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", - "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, "requires": { "jsesc": "~3.0.2" @@ -41968,6 +41924,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -42359,11 +42316,6 @@ "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", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", diff --git a/package.json b/package.json index 5ffccea3f2..57cd4c3721 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.8", - "@babel/plugin-transform-modules-umd": "7.25.7", - "@babel/preset-env": "7.25.8", - "@babel/preset-react": "7.25.7", + "@babel/core": "7.26.9", + "@babel/plugin-transform-modules-umd": "7.25.9", + "@babel/preset-env": "7.26.9", + "@babel/preset-react": "7.26.3", "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", "@eslint/js": "9.20.0", "@stylistic/eslint-plugin": "3.1.0", From 7bd5f47984895d4f94c2da2e4b43ac7015f347e2 Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 21 Feb 2025 11:01:43 +0000 Subject: [PATCH 110/235] 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 9379eb5857..88ea07c4e6 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2003,5 +2003,5 @@ "LabelDevice": "Urządzenie", "LastActive": "Ostatnio aktywne", "DeleteServerConfirmation": "Czy na pewno chcesz usunąć ten serwer?", - "LibraryNameInvalid": "Nazwa biblioteki nie może być pusta ani zaczynać się lub kończyć spacją." + "LibraryNameInvalid": "Nazwa biblioteki nie może być pusta." } From a1ccb3998ae05c95701ec08dd040e7becd6ac556 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Fri, 21 Feb 2025 11:39:11 +0000 Subject: [PATCH 111/235] 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 059e3c4648..5a7fe408dd 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -2000,7 +2000,7 @@ "LabelSubtitleStyling": "Štylizácia titulkov", "Native": "Natívne", "NativeSubtitleStylingHelp": "Štylizácia titulkov nebude na niektorých zariadeniach fungovať, ale nevyžaduje žiadny výkon naviac.", - "LibraryNameInvalid": "Názov knižnice nesmie byť prázdny ani obsahovať medzery na začiatku alebo konci.", + "LibraryNameInvalid": "Názov knižnice nesmie byť prázdny.", "LabelDevice": "Zariadenie", "LastActive": "Naposledy aktívny", "DeleteServerConfirmation": "Ste si istí, že chcete odstrániť tento server?" From cae000832715cb7881a46d2772c650cecc2bc0fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 13:37:35 +0000 Subject: [PATCH 112/235] Update PostCSS --- package-lock.json | 52 +++++++++++++++++++++++------------------------ package.json | 4 ++-- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index e828836be8..acf6e94848 100644 --- a/package-lock.json +++ b/package-lock.json @@ -108,9 +108,9 @@ "html-webpack-plugin": "5.6.3", "jsdom": "25.0.1", "mini-css-extract-plugin": "2.9.2", - "postcss": "8.4.49", + "postcss": "8.5.2", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.1.3", + "postcss-preset-env": "10.1.4", "postcss-scss": "4.0.9", "sass": "1.83.4", "sass-loader": "16.0.4", @@ -2309,9 +2309,9 @@ } }, "node_modules/@csstools/postcss-initial": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz", - "integrity": "sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", "dev": true, "funding": [ { @@ -16265,9 +16265,9 @@ } }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", + "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", "dev": true, "funding": [ { @@ -16285,7 +16285,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -17838,9 +17838,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.3.tgz", - "integrity": "sha512-9qzVhcMFU/MnwYHyYpJz4JhGku/4+xEiPTmhn0hj3IxnUYlEF9vbh7OC1KoLAnenS6Fgg43TKNp9xcuMeAi4Zw==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.4.tgz", + "integrity": "sha512-awWKS3CwyY7I4Eb3YSWOZisbj3qXyuQCrylYiu2vSHxnSZAj3LHStN6jOcpCrc6EjYunLwbeNto3M5/JBtXpzg==", "dev": true, "funding": [ { @@ -17864,7 +17864,7 @@ "@csstools/postcss-gradients-interpolation-method": "^5.0.7", "@csstools/postcss-hwb-function": "^4.0.7", "@csstools/postcss-ic-unit": "^4.0.0", - "@csstools/postcss-initial": "^2.0.0", + "@csstools/postcss-initial": "^2.0.1", "@csstools/postcss-is-pseudo-class": "^5.0.1", "@csstools/postcss-light-dark-function": "^2.0.7", "@csstools/postcss-logical-float-and-clear": "^3.0.0", @@ -17887,7 +17887,7 @@ "@csstools/postcss-trigonometric-functions": "^4.0.6", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.19", - "browserslist": "^4.23.1", + "browserslist": "^4.24.4", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", @@ -27636,9 +27636,9 @@ } }, "@csstools/postcss-initial": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz", - "integrity": "sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", "dev": true, "requires": {} }, @@ -37040,12 +37040,12 @@ "dev": true }, "postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", + "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", "dev": true, "requires": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } @@ -37929,9 +37929,9 @@ } }, "postcss-preset-env": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.3.tgz", - "integrity": "sha512-9qzVhcMFU/MnwYHyYpJz4JhGku/4+xEiPTmhn0hj3IxnUYlEF9vbh7OC1KoLAnenS6Fgg43TKNp9xcuMeAi4Zw==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.4.tgz", + "integrity": "sha512-awWKS3CwyY7I4Eb3YSWOZisbj3qXyuQCrylYiu2vSHxnSZAj3LHStN6jOcpCrc6EjYunLwbeNto3M5/JBtXpzg==", "dev": true, "requires": { "@csstools/postcss-cascade-layers": "^5.0.1", @@ -37944,7 +37944,7 @@ "@csstools/postcss-gradients-interpolation-method": "^5.0.7", "@csstools/postcss-hwb-function": "^4.0.7", "@csstools/postcss-ic-unit": "^4.0.0", - "@csstools/postcss-initial": "^2.0.0", + "@csstools/postcss-initial": "^2.0.1", "@csstools/postcss-is-pseudo-class": "^5.0.1", "@csstools/postcss-light-dark-function": "^2.0.7", "@csstools/postcss-logical-float-and-clear": "^3.0.0", @@ -37967,7 +37967,7 @@ "@csstools/postcss-trigonometric-functions": "^4.0.6", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.19", - "browserslist": "^4.23.1", + "browserslist": "^4.24.4", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", diff --git a/package.json b/package.json index 57cd4c3721..eb99e471ec 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,9 @@ "html-webpack-plugin": "5.6.3", "jsdom": "25.0.1", "mini-css-extract-plugin": "2.9.2", - "postcss": "8.4.49", + "postcss": "8.5.2", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.1.3", + "postcss-preset-env": "10.1.4", "postcss-scss": "4.0.9", "sass": "1.83.4", "sass-loader": "16.0.4", From b6a3d110fded3a54f0afd9d3765d8f21ed3fe242 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 13:39:14 +0000 Subject: [PATCH 113/235] Update Sass to v1.85.0 --- 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 c0b41cc7ee..6f52aa3333 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.1.3", "postcss-scss": "4.0.9", - "sass": "1.83.4", + "sass": "1.85.0", "sass-loader": "16.0.4", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -139,7 +139,7 @@ "yarn": "YARN NO LONGER USED - use npm instead." }, "optionalDependencies": { - "sass-embedded": "1.83.4" + "sass-embedded": "1.85.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -19220,9 +19220,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz", - "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz", + "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", "dev": true, "license": "MIT", "dependencies": { @@ -19241,9 +19241,9 @@ } }, "node_modules/sass-embedded": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.83.4.tgz", - "integrity": "sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.85.0.tgz", + "integrity": "sha512-x3Vv54g0jv1aPSW8OTA/0GzQCs/HMQOjIkLtZJ3Xsn/I4vnyjKbVTQmFTax9bQjldqLEEkdbvy6ES/cOOnYNwA==", "license": "MIT", "optional": true, "dependencies": { @@ -19263,32 +19263,32 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.83.4", - "sass-embedded-android-arm64": "1.83.4", - "sass-embedded-android-ia32": "1.83.4", - "sass-embedded-android-riscv64": "1.83.4", - "sass-embedded-android-x64": "1.83.4", - "sass-embedded-darwin-arm64": "1.83.4", - "sass-embedded-darwin-x64": "1.83.4", - "sass-embedded-linux-arm": "1.83.4", - "sass-embedded-linux-arm64": "1.83.4", - "sass-embedded-linux-ia32": "1.83.4", - "sass-embedded-linux-musl-arm": "1.83.4", - "sass-embedded-linux-musl-arm64": "1.83.4", - "sass-embedded-linux-musl-ia32": "1.83.4", - "sass-embedded-linux-musl-riscv64": "1.83.4", - "sass-embedded-linux-musl-x64": "1.83.4", - "sass-embedded-linux-riscv64": "1.83.4", - "sass-embedded-linux-x64": "1.83.4", - "sass-embedded-win32-arm64": "1.83.4", - "sass-embedded-win32-ia32": "1.83.4", - "sass-embedded-win32-x64": "1.83.4" + "sass-embedded-android-arm": "1.85.0", + "sass-embedded-android-arm64": "1.85.0", + "sass-embedded-android-ia32": "1.85.0", + "sass-embedded-android-riscv64": "1.85.0", + "sass-embedded-android-x64": "1.85.0", + "sass-embedded-darwin-arm64": "1.85.0", + "sass-embedded-darwin-x64": "1.85.0", + "sass-embedded-linux-arm": "1.85.0", + "sass-embedded-linux-arm64": "1.85.0", + "sass-embedded-linux-ia32": "1.85.0", + "sass-embedded-linux-musl-arm": "1.85.0", + "sass-embedded-linux-musl-arm64": "1.85.0", + "sass-embedded-linux-musl-ia32": "1.85.0", + "sass-embedded-linux-musl-riscv64": "1.85.0", + "sass-embedded-linux-musl-x64": "1.85.0", + "sass-embedded-linux-riscv64": "1.85.0", + "sass-embedded-linux-x64": "1.85.0", + "sass-embedded-win32-arm64": "1.85.0", + "sass-embedded-win32-ia32": "1.85.0", + "sass-embedded-win32-x64": "1.85.0" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.83.4.tgz", - "integrity": "sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.85.0.tgz", + "integrity": "sha512-pPBT7Ad6G8Mlao8ypVNXW2ya7I/Bhcny+RYZ/EmrunEXfhzCNp4PWV2VAweitPO9RnPIJwvUTkLc8Fu6K3nVmw==", "cpu": [ "arm" ], @@ -19302,9 +19302,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.83.4.tgz", - "integrity": "sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.85.0.tgz", + "integrity": "sha512-4itDzRwezwrW8+YzMLIwHtMeH+qrBNdBsRn9lTVI15K+cNLC8z5JWJi6UCZ8TNNZr9LDBfsh5jUdjSub0yF7jg==", "cpu": [ "arm64" ], @@ -19318,9 +19318,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.83.4.tgz", - "integrity": "sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.85.0.tgz", + "integrity": "sha512-bwqKq95hzbGbMTeXCMQhH7yEdc2xJVwIXj7rGdD3McvyFWbED6362XRFFPI5YyjfD2wRJd9yWLh/hn+6VyjcYA==", "cpu": [ "ia32" ], @@ -19334,9 +19334,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.83.4.tgz", - "integrity": "sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.85.0.tgz", + "integrity": "sha512-Fgkgay+5EePJXZFHR5Vlkutnsmox2V6nX4U3mfGbSN1xjLRm8F5ST72V2s5Z0mnIFpGvEu/v7hfptgViqMvaxg==", "cpu": [ "riscv64" ], @@ -19350,9 +19350,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.83.4.tgz", - "integrity": "sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.85.0.tgz", + "integrity": "sha512-/bG3JgTn3eoIDHCiJNVkLeJgUesat4ghxqYmKMZUJx++4e6iKCDj8XwQTJAgm+QDrsPKXHBacHEANJ9LEAuTqg==", "cpu": [ "x64" ], @@ -19366,9 +19366,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.83.4.tgz", - "integrity": "sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.85.0.tgz", + "integrity": "sha512-plp8TyMz97YFBCB3ndftEvoW29vyfsSBJILM5U84cGzr06SvLh/Npjj8psfUeRw+upEk1zkFtw5u61sRCdgwIw==", "cpu": [ "arm64" ], @@ -19382,9 +19382,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.83.4.tgz", - "integrity": "sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.85.0.tgz", + "integrity": "sha512-LP8Zv8DG57Gn6PmSwWzC0gEZUsGdg36Ps3m0i1fVTOelql7N3HZIrlPYRjJvidL8ZlB3ISxNANebTREUHn/wkQ==", "cpu": [ "x64" ], @@ -19398,9 +19398,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.83.4.tgz", - "integrity": "sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.85.0.tgz", + "integrity": "sha512-18xOAEfazJt1MMVS2TRHV94n81VyMnywOoJ7/S7I79qno/zx26OoqqP4XvH107xu8+mZ9Gg54LrUH6ZcgHk08g==", "cpu": [ "arm" ], @@ -19414,9 +19414,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.83.4.tgz", - "integrity": "sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.85.0.tgz", + "integrity": "sha512-JRIRKVOY5Y8M1zlUOv9AQGju4P6lj8i5vLJZsVYVN/uY8Cd2dDJZPC8EOhjntp+IpF8AOGIHqCeCkHBceIyIjA==", "cpu": [ "arm64" ], @@ -19430,9 +19430,9 @@ } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.83.4.tgz", - "integrity": "sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.85.0.tgz", + "integrity": "sha512-4JH+h+gLt9So22nNPQtsKojEsLzjld9ol3zWcOtMGclv+HojZGbCuhJUrLUcK72F8adXYsULmWhJPKROLIwYMA==", "cpu": [ "ia32" ], @@ -19446,9 +19446,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.83.4.tgz", - "integrity": "sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.85.0.tgz", + "integrity": "sha512-Z1j4ageDVFihqNUBnm89fxY46pY0zD/Clp1D3ZdI7S+D280+AEpbm5vMoH8LLhBQfQLf2w7H++SZGpQwrisudQ==", "cpu": [ "arm" ], @@ -19462,9 +19462,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.83.4.tgz", - "integrity": "sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.85.0.tgz", + "integrity": "sha512-aoQjUjK28bvdw9XKTjQeayn8oWQ2QqvoTD11myklGd3IHH7Jj0nwXUstI4NxDueCKt3wghuZoIQkjOheReQxlg==", "cpu": [ "arm64" ], @@ -19478,9 +19478,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.83.4.tgz", - "integrity": "sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.85.0.tgz", + "integrity": "sha512-/cJCSXOfXmQFH8deE+3U9x+BSz8i0d1Tt9gKV/Gat1Xm43Oumw8pmZgno+cDuGjYQInr9ryW5121pTMlj/PBXQ==", "cpu": [ "ia32" ], @@ -19494,9 +19494,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.83.4.tgz", - "integrity": "sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.85.0.tgz", + "integrity": "sha512-l+FJxMXkmg42RZq5RFKXg4InX0IA7yEiPHe4kVSdrczP7z3NLxk+W9wVkPnoRKYIMe1qZPPQ25y0TgI4HNWouA==", "cpu": [ "riscv64" ], @@ -19510,9 +19510,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.83.4.tgz", - "integrity": "sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.85.0.tgz", + "integrity": "sha512-M9ffjcYfFcRvkFA6V3DpOS955AyvmpvPAhL/xNK45d/ma1n1ehTWpd24tVeKiNK5CZkNjjMEfyw2fHa6MpqmEA==", "cpu": [ "x64" ], @@ -19526,9 +19526,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.83.4.tgz", - "integrity": "sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.85.0.tgz", + "integrity": "sha512-yqPXQWfM+qiIPkfn++48GOlbmSvUZIyL9nwFstBk0k4x40UhbhilfknqeTUpxoHfQzylTGVhrm5JE7MjM+LNZA==", "cpu": [ "riscv64" ], @@ -19542,9 +19542,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.83.4.tgz", - "integrity": "sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.85.0.tgz", + "integrity": "sha512-NTDeQFZcuVR7COoaRy8pZD6/+QznwBR8kVFsj7NpmvX9aJ7TX/q+OQZHX7Bfb3tsfKXhf1YZozegPuYxRnMKAQ==", "cpu": [ "x64" ], @@ -19558,9 +19558,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.83.4.tgz", - "integrity": "sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.85.0.tgz", + "integrity": "sha512-gO0VAuxC4AdV+uZYJESRWVVHQWCGzNs0C3OKCAdH4r1vGRugooMi7J/5wbwUdXDA1MV9ICfhlKsph2n3GiPdqA==", "cpu": [ "arm64" ], @@ -19574,9 +19574,9 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.83.4.tgz", - "integrity": "sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.85.0.tgz", + "integrity": "sha512-PCyn6xeFIBUgBceNypuf73/5DWF2VWPlPqPuBprPsTvpZOMUJeBtP+Lf4mnu3dNy1z76mYVnpaCnQmzZ0zHZaA==", "cpu": [ "ia32" ], @@ -19590,9 +19590,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.83.4.tgz", - "integrity": "sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.85.0.tgz", + "integrity": "sha512-AknE2jLp6OBwrR5hQ8pDsG94KhJCeSheFJ2xgbnk8RUjZX909JiNbgh2sNt9LG+RXf4xZa55dDL537gZoCx/iw==", "cpu": [ "x64" ], @@ -19689,9 +19689,9 @@ } }, "node_modules/sass/node_modules/readdirp": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz", - "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", "engines": { @@ -38918,9 +38918,9 @@ "dev": true }, "sass": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz", - "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz", + "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", "dev": true, "requires": { "@parcel/watcher": "^2.4.1", @@ -38939,17 +38939,17 @@ } }, "readdirp": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz", - "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true } } }, "sass-embedded": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.83.4.tgz", - "integrity": "sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.85.0.tgz", + "integrity": "sha512-x3Vv54g0jv1aPSW8OTA/0GzQCs/HMQOjIkLtZJ3Xsn/I4vnyjKbVTQmFTax9bQjldqLEEkdbvy6ES/cOOnYNwA==", "optional": true, "requires": { "@bufbuild/protobuf": "^2.0.0", @@ -38957,26 +38957,26 @@ "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", - "sass-embedded-android-arm": "1.83.4", - "sass-embedded-android-arm64": "1.83.4", - "sass-embedded-android-ia32": "1.83.4", - "sass-embedded-android-riscv64": "1.83.4", - "sass-embedded-android-x64": "1.83.4", - "sass-embedded-darwin-arm64": "1.83.4", - "sass-embedded-darwin-x64": "1.83.4", - "sass-embedded-linux-arm": "1.83.4", - "sass-embedded-linux-arm64": "1.83.4", - "sass-embedded-linux-ia32": "1.83.4", - "sass-embedded-linux-musl-arm": "1.83.4", - "sass-embedded-linux-musl-arm64": "1.83.4", - "sass-embedded-linux-musl-ia32": "1.83.4", - "sass-embedded-linux-musl-riscv64": "1.83.4", - "sass-embedded-linux-musl-x64": "1.83.4", - "sass-embedded-linux-riscv64": "1.83.4", - "sass-embedded-linux-x64": "1.83.4", - "sass-embedded-win32-arm64": "1.83.4", - "sass-embedded-win32-ia32": "1.83.4", - "sass-embedded-win32-x64": "1.83.4", + "sass-embedded-android-arm": "1.85.0", + "sass-embedded-android-arm64": "1.85.0", + "sass-embedded-android-ia32": "1.85.0", + "sass-embedded-android-riscv64": "1.85.0", + "sass-embedded-android-x64": "1.85.0", + "sass-embedded-darwin-arm64": "1.85.0", + "sass-embedded-darwin-x64": "1.85.0", + "sass-embedded-linux-arm": "1.85.0", + "sass-embedded-linux-arm64": "1.85.0", + "sass-embedded-linux-ia32": "1.85.0", + "sass-embedded-linux-musl-arm": "1.85.0", + "sass-embedded-linux-musl-arm64": "1.85.0", + "sass-embedded-linux-musl-ia32": "1.85.0", + "sass-embedded-linux-musl-riscv64": "1.85.0", + "sass-embedded-linux-musl-x64": "1.85.0", + "sass-embedded-linux-riscv64": "1.85.0", + "sass-embedded-linux-x64": "1.85.0", + "sass-embedded-win32-arm64": "1.85.0", + "sass-embedded-win32-ia32": "1.85.0", + "sass-embedded-win32-x64": "1.85.0", "supports-color": "^8.1.1", "sync-child-process": "^1.0.2", "varint": "^6.0.0" @@ -39000,123 +39000,123 @@ } }, "sass-embedded-android-arm": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.83.4.tgz", - "integrity": "sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.85.0.tgz", + "integrity": "sha512-pPBT7Ad6G8Mlao8ypVNXW2ya7I/Bhcny+RYZ/EmrunEXfhzCNp4PWV2VAweitPO9RnPIJwvUTkLc8Fu6K3nVmw==", "optional": true }, "sass-embedded-android-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.83.4.tgz", - "integrity": "sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.85.0.tgz", + "integrity": "sha512-4itDzRwezwrW8+YzMLIwHtMeH+qrBNdBsRn9lTVI15K+cNLC8z5JWJi6UCZ8TNNZr9LDBfsh5jUdjSub0yF7jg==", "optional": true }, "sass-embedded-android-ia32": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.83.4.tgz", - "integrity": "sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.85.0.tgz", + "integrity": "sha512-bwqKq95hzbGbMTeXCMQhH7yEdc2xJVwIXj7rGdD3McvyFWbED6362XRFFPI5YyjfD2wRJd9yWLh/hn+6VyjcYA==", "optional": true }, "sass-embedded-android-riscv64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.83.4.tgz", - "integrity": "sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.85.0.tgz", + "integrity": "sha512-Fgkgay+5EePJXZFHR5Vlkutnsmox2V6nX4U3mfGbSN1xjLRm8F5ST72V2s5Z0mnIFpGvEu/v7hfptgViqMvaxg==", "optional": true }, "sass-embedded-android-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.83.4.tgz", - "integrity": "sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.85.0.tgz", + "integrity": "sha512-/bG3JgTn3eoIDHCiJNVkLeJgUesat4ghxqYmKMZUJx++4e6iKCDj8XwQTJAgm+QDrsPKXHBacHEANJ9LEAuTqg==", "optional": true }, "sass-embedded-darwin-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.83.4.tgz", - "integrity": "sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.85.0.tgz", + "integrity": "sha512-plp8TyMz97YFBCB3ndftEvoW29vyfsSBJILM5U84cGzr06SvLh/Npjj8psfUeRw+upEk1zkFtw5u61sRCdgwIw==", "optional": true }, "sass-embedded-darwin-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.83.4.tgz", - "integrity": "sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.85.0.tgz", + "integrity": "sha512-LP8Zv8DG57Gn6PmSwWzC0gEZUsGdg36Ps3m0i1fVTOelql7N3HZIrlPYRjJvidL8ZlB3ISxNANebTREUHn/wkQ==", "optional": true }, "sass-embedded-linux-arm": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.83.4.tgz", - "integrity": "sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.85.0.tgz", + "integrity": "sha512-18xOAEfazJt1MMVS2TRHV94n81VyMnywOoJ7/S7I79qno/zx26OoqqP4XvH107xu8+mZ9Gg54LrUH6ZcgHk08g==", "optional": true }, "sass-embedded-linux-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.83.4.tgz", - "integrity": "sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.85.0.tgz", + "integrity": "sha512-JRIRKVOY5Y8M1zlUOv9AQGju4P6lj8i5vLJZsVYVN/uY8Cd2dDJZPC8EOhjntp+IpF8AOGIHqCeCkHBceIyIjA==", "optional": true }, "sass-embedded-linux-ia32": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.83.4.tgz", - "integrity": "sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.85.0.tgz", + "integrity": "sha512-4JH+h+gLt9So22nNPQtsKojEsLzjld9ol3zWcOtMGclv+HojZGbCuhJUrLUcK72F8adXYsULmWhJPKROLIwYMA==", "optional": true }, "sass-embedded-linux-musl-arm": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.83.4.tgz", - "integrity": "sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.85.0.tgz", + "integrity": "sha512-Z1j4ageDVFihqNUBnm89fxY46pY0zD/Clp1D3ZdI7S+D280+AEpbm5vMoH8LLhBQfQLf2w7H++SZGpQwrisudQ==", "optional": true }, "sass-embedded-linux-musl-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.83.4.tgz", - "integrity": "sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.85.0.tgz", + "integrity": "sha512-aoQjUjK28bvdw9XKTjQeayn8oWQ2QqvoTD11myklGd3IHH7Jj0nwXUstI4NxDueCKt3wghuZoIQkjOheReQxlg==", "optional": true }, "sass-embedded-linux-musl-ia32": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.83.4.tgz", - "integrity": "sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.85.0.tgz", + "integrity": "sha512-/cJCSXOfXmQFH8deE+3U9x+BSz8i0d1Tt9gKV/Gat1Xm43Oumw8pmZgno+cDuGjYQInr9ryW5121pTMlj/PBXQ==", "optional": true }, "sass-embedded-linux-musl-riscv64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.83.4.tgz", - "integrity": "sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.85.0.tgz", + "integrity": "sha512-l+FJxMXkmg42RZq5RFKXg4InX0IA7yEiPHe4kVSdrczP7z3NLxk+W9wVkPnoRKYIMe1qZPPQ25y0TgI4HNWouA==", "optional": true }, "sass-embedded-linux-musl-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.83.4.tgz", - "integrity": "sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.85.0.tgz", + "integrity": "sha512-M9ffjcYfFcRvkFA6V3DpOS955AyvmpvPAhL/xNK45d/ma1n1ehTWpd24tVeKiNK5CZkNjjMEfyw2fHa6MpqmEA==", "optional": true }, "sass-embedded-linux-riscv64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.83.4.tgz", - "integrity": "sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.85.0.tgz", + "integrity": "sha512-yqPXQWfM+qiIPkfn++48GOlbmSvUZIyL9nwFstBk0k4x40UhbhilfknqeTUpxoHfQzylTGVhrm5JE7MjM+LNZA==", "optional": true }, "sass-embedded-linux-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.83.4.tgz", - "integrity": "sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.85.0.tgz", + "integrity": "sha512-NTDeQFZcuVR7COoaRy8pZD6/+QznwBR8kVFsj7NpmvX9aJ7TX/q+OQZHX7Bfb3tsfKXhf1YZozegPuYxRnMKAQ==", "optional": true }, "sass-embedded-win32-arm64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.83.4.tgz", - "integrity": "sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.85.0.tgz", + "integrity": "sha512-gO0VAuxC4AdV+uZYJESRWVVHQWCGzNs0C3OKCAdH4r1vGRugooMi7J/5wbwUdXDA1MV9ICfhlKsph2n3GiPdqA==", "optional": true }, "sass-embedded-win32-ia32": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.83.4.tgz", - "integrity": "sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.85.0.tgz", + "integrity": "sha512-PCyn6xeFIBUgBceNypuf73/5DWF2VWPlPqPuBprPsTvpZOMUJeBtP+Lf4mnu3dNy1z76mYVnpaCnQmzZ0zHZaA==", "optional": true }, "sass-embedded-win32-x64": { - "version": "1.83.4", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.83.4.tgz", - "integrity": "sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.85.0.tgz", + "integrity": "sha512-AknE2jLp6OBwrR5hQ8pDsG94KhJCeSheFJ2xgbnk8RUjZX909JiNbgh2sNt9LG+RXf4xZa55dDL537gZoCx/iw==", "optional": true }, "sass-loader": { diff --git a/package.json b/package.json index 396f08a5df..690e78a52a 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.1.3", "postcss-scss": "4.0.9", - "sass": "1.83.4", + "sass": "1.85.0", "sass-loader": "16.0.4", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -130,7 +130,7 @@ "whatwg-fetch": "3.6.20" }, "optionalDependencies": { - "sass-embedded": "1.83.4" + "sass-embedded": "1.85.0" }, "browserslist": [ "last 2 Firefox versions", From c0cbae999bf4982be0f6dc1a09c54acbd5ca55b4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 21:29:12 +0000 Subject: [PATCH 114/235] Update CI dependencies --- .github/workflows/__codeql.yml | 6 +++--- .github/workflows/__package.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index 2bc5d3ee50..0300f6e37a 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -26,15 +26,15 @@ jobs: show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + uses: github/codeql-action/autobuild@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 with: category: '/language:${{matrix.language}}' diff --git a/.github/workflows/__package.yml b/.github/workflows/__package.yml index 3165b6899e..f2c3d2afc8 100644 --- a/.github/workflows/__package.yml +++ b/.github/workflows/__package.yml @@ -39,7 +39,7 @@ jobs: mv dist/config.tmp.json dist/config.json - name: Upload artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 with: name: frontend path: dist From 3e60eceb8090131b32c6c32add2979cfec172f69 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 21:29:35 +0000 Subject: [PATCH 115/235] Update Webpack --- package-lock.json | 283 +++++++++------------------------------------- package.json | 6 +- 2 files changed, 58 insertions(+), 231 deletions(-) diff --git a/package-lock.json b/package-lock.json index 133f6508e5..2fce5b58d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -101,7 +101,7 @@ "eslint-plugin-react": "7.37.4", "eslint-plugin-react-hooks": "5.1.0", "eslint-plugin-sonarjs": "3.0.2", - "expose-loader": "5.0.0", + "expose-loader": "5.0.1", "fork-ts-checker-webpack-plugin": "9.0.2", "globals": "15.15.0", "html-loader": "5.1.0", @@ -113,7 +113,7 @@ "postcss-preset-env": "10.1.4", "postcss-scss": "4.0.9", "sass": "1.85.0", - "sass-loader": "16.0.4", + "sass-loader": "16.0.5", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", @@ -126,7 +126,7 @@ "typescript": "5.7.3", "typescript-eslint": "8.24.1", "vitest": "3.0.5", - "webpack": "5.97.1", + "webpack": "5.98.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.2.0", @@ -10995,9 +10995,9 @@ } }, "node_modules/expose-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-5.0.0.tgz", - "integrity": "sha512-BtUqYRmvx1bEY5HN6eK2I9URUZgNmN0x5UANuocaNjXSgfoDlkXt+wyEMe7i5DzDNh2BKJHPc5F4rBwEdSQX6w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-5.0.1.tgz", + "integrity": "sha512-5YPZuszN/eWND/B+xuq5nIpb/l5TV1HYmdO6SubYtHv+HenVw9/6bn33Mm5reY8DNid7AVtbARvyUD34edfCtg==", "dev": true, "license": "MIT", "engines": { @@ -19632,9 +19632,9 @@ } }, "node_modules/sass-loader": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.4.tgz", - "integrity": "sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", "dev": true, "license": "MIT", "dependencies": { @@ -19723,10 +19723,11 @@ } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -19734,7 +19735,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -23729,10 +23730,11 @@ } }, "node_modules/terser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.0.tgz", - "integrity": "sha512-Y/SblUl5kEyEFzhMAQdsxVHh+utAxd4IuRNJzKywY/4uzSogh3G219jqbDDxYu4MXO9CzY3tSEqmZvW6AoEDJw==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -23747,16 +23749,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -23780,55 +23783,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -25384,9 +25338,9 @@ } }, "node_modules/webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "dev": true, "license": "MIT", "dependencies": { @@ -25408,9 +25362,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, @@ -25723,33 +25677,6 @@ "node": ">=0.4.0" } }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/webpack/node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -25757,32 +25684,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -33284,9 +33185,9 @@ "dev": true }, "expose-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-5.0.0.tgz", - "integrity": "sha512-BtUqYRmvx1bEY5HN6eK2I9URUZgNmN0x5UANuocaNjXSgfoDlkXt+wyEMe7i5DzDNh2BKJHPc5F4rBwEdSQX6w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-5.0.1.tgz", + "integrity": "sha512-5YPZuszN/eWND/B+xuq5nIpb/l5TV1HYmdO6SubYtHv+HenVw9/6bn33Mm5reY8DNid7AVtbARvyUD34edfCtg==", "dev": true, "requires": {} }, @@ -39149,9 +39050,9 @@ "optional": true }, "sass-loader": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.4.tgz", - "integrity": "sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", "dev": true, "requires": { "neo-async": "^2.6.2" @@ -39175,9 +39076,9 @@ } }, "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", @@ -42156,9 +42057,9 @@ } }, "terser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.0.tgz", - "integrity": "sha512-Y/SblUl5kEyEFzhMAQdsxVHh+utAxd4IuRNJzKywY/4uzSogh3G219jqbDDxYu4MXO9CzY3tSEqmZvW6AoEDJw==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", @@ -42176,54 +42077,16 @@ } }, "terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" } }, "test-exclude": { @@ -43245,9 +43108,9 @@ "dev": true }, "webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.7", @@ -43268,9 +43131,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, @@ -43281,47 +43144,11 @@ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } } } }, diff --git a/package.json b/package.json index a73705f8b5..48d6e68e94 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "eslint-plugin-react": "7.37.4", "eslint-plugin-react-hooks": "5.1.0", "eslint-plugin-sonarjs": "3.0.2", - "expose-loader": "5.0.0", + "expose-loader": "5.0.1", "fork-ts-checker-webpack-plugin": "9.0.2", "globals": "15.15.0", "html-loader": "5.1.0", @@ -53,7 +53,7 @@ "postcss-preset-env": "10.1.4", "postcss-scss": "4.0.9", "sass": "1.85.0", - "sass-loader": "16.0.4", + "sass-loader": "16.0.5", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", @@ -66,7 +66,7 @@ "typescript": "5.7.3", "typescript-eslint": "8.24.1", "vitest": "3.0.5", - "webpack": "5.97.1", + "webpack": "5.98.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.2.0", From 4d383abe737eb4b97caee6aa19459c89c1795880 Mon Sep 17 00:00:00 2001 From: Jxiced Date: Fri, 21 Feb 2025 21:38:32 +0000 Subject: [PATCH 116/235] Prevent whitespaces in username during wizard setup. --- src/controllers/wizard/user/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/wizard/user/index.js b/src/controllers/wizard/user/index.js index eb521c87af..1d064bf382 100644 --- a/src/controllers/wizard/user/index.js +++ b/src/controllers/wizard/user/index.js @@ -37,7 +37,7 @@ function submit(form) { .ajax({ type: 'POST', data: JSON.stringify({ - Name: form.querySelector('#txtUsername').value, + Name: form.querySelector('#txtUsername').value.trim(), Password: form.querySelector('#txtManualPassword').value }), url: apiClient.getUrl('Startup/User'), From c1af507f91f3b4e6d3393cc909e2654a8c6c47be Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sat, 22 Feb 2025 07:00:42 +0000 Subject: [PATCH 117/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 62143d9eb2..a17e499022 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1998,5 +1998,5 @@ "LabelDevice": "Dispositivo", "LastActive": "Última atividade", "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?", - "LibraryNameInvalid": "O nome da biblioteca multimédia não pode estar vazio ou ter espaços à esquerda, ou à direita." + "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio." } From 30f3c0dd83e030aee9f97dd2545840f637e693cc Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sat, 22 Feb 2025 07:00:58 +0000 Subject: [PATCH 118/235] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index b20d7d952d..6787d53884 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1996,5 +1996,5 @@ "LabelDevice": "Dispositivo", "LastActive": "Última atividade", "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?", - "LibraryNameInvalid": "O nome da biblioteca multimédia não pode estar vazio ou ter espaços à esquerda, ou à direita." + "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio." } From 8be11338617715654f15e8870f393ea1843fc8f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Sat, 22 Feb 2025 08:34:45 +0000 Subject: [PATCH 119/235] 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 975dd3e642..835a6ae67b 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -2003,5 +2003,5 @@ "LabelDevice": "Zařízení", "LastActive": "Naposledy aktivní", "DeleteServerConfirmation": "Opravdu chcete odstranit tento server?", - "LibraryNameInvalid": "Název knihovny nesmí být prázdný nebo mít kolem sebe mezery." + "LibraryNameInvalid": "Název knihovny nesmí být prázdný." } From 362b21d6802255f11047bfcda09f7340c08ec41e Mon Sep 17 00:00:00 2001 From: millallo Date: Sat, 22 Feb 2025 12:33:22 +0000 Subject: [PATCH 120/235] 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, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index 128a1d5f94..697b3ce62e 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -31,7 +31,7 @@ "Artists": "Artisti", "AsManyAsPossible": "Tutto il possibile", "Ascending": "Crescente", - "AspectRatio": "Rapporto d'Aspetto", + "AspectRatio": "Rapporto d'aspetto", "Backdrop": "Sfondo", "Backdrops": "Sfondi", "BirthDateValue": "Nato il: {0}", @@ -1125,7 +1125,7 @@ "HeaderCastAndCrew": "Cast", "HeaderMedia": "Media", "HeaderPassword": "Password", - "AuthProviderHelp": "Selezionare un provider di autenticazione da utilizzare per autenticare la password dell'utente.", + "AuthProviderHelp": "Selezionare un provider di autenticazione da utilizzare per chiedere la password utente.", "HeaderFetcherSettings": "Impostazioni del Fetcher", "HeaderImageOptions": "Opzioni Immagine", "Home": "Home", @@ -1760,7 +1760,7 @@ "AllowSegmentDeletionHelp": "Elimina i vecchi segmenti dopo che sono stati scaricati dal client. In questo modo si evita di dover memorizzare l'intero file transcodificato su disco. Disattiva questa funzione se si verificano problemi di riproduzione.", "LabelThrottleDelaySeconds": "Limita dopo", "LabelThrottleDelaySecondsHelp": "Tempo in secondi dopo cui il transcodificatore verrà messo in pausa. Deve essere sufficientemente grande perché il client mantenga un buon buffer. Funziona solo se il throttling è abilitato.", - "LabelSegmentKeepSeconds": "Il tempo per cui tenere i segmenti", + "LabelSegmentKeepSeconds": "Tempo di durata dei segmenti", "LabelSegmentKeepSecondsHelp": "Tempo in secondi per cui i segmenti devono essere conservati dopo essere stati scaricati dal client. Funziona solo se l'eliminazione dei segmenti è abilitata.", "AllowAv1Encoding": "Permetti la codifica nel formato AV1", "GoHome": "Vai alla Home", @@ -2003,5 +2003,5 @@ "LabelDevice": "Dispositivo", "DeleteServerConfirmation": "Sei sicuro di voler eliminare questo server?", "LastActive": "Ultimo accesso", - "LibraryNameInvalid": "Il nome della libreria non può essere vuoto o avere spazi iniziali o finali." + "LibraryNameInvalid": "Il nome della libreria non può essere vuoto." } From f5d4eb244a4c050b2c50697b66aafbe6028a0744 Mon Sep 17 00:00:00 2001 From: Jxiced Date: Sat, 22 Feb 2025 14:36:10 +0000 Subject: [PATCH 121/235] Prevent exception being thrown when renaming user. --- src/apps/dashboard/routes/users/profile.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index fa4b077845..2f98d67bd3 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -199,7 +199,7 @@ const UserEdit = () => { throw new Error('Unexpected null user id or policy'); } - user.Name = (page.querySelector('#txtUserName') as HTMLInputElement).value; + user.Name = (page.querySelector('#txtUserName') as HTMLInputElement).value.trim(); user.Policy.IsAdministrator = (page.querySelector('.chkIsAdmin') as HTMLInputElement).checked; user.Policy.IsHidden = (page.querySelector('.chkIsHidden') as HTMLInputElement).checked; user.Policy.IsDisabled = (page.querySelector('.chkDisabled') as HTMLInputElement).checked; From 62438c6948ec0ee0e9e50e0a9fd689adfc3284e0 Mon Sep 17 00:00:00 2001 From: Jxiced Date: Sat, 22 Feb 2025 14:58:58 +0000 Subject: [PATCH 122/235] Update contributors. --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index c79fa08ca9..8737fc166b 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -95,6 +95,7 @@ - [Ali](https://github.com/bu3alwa) - [K. Kyle Puchkov](https://github.com/kepper104) - [ItsAllAboutTheCode](https://github.com/ItsAllAboutTheCode) +- [Jxiced](https://github.com/Jxiced) ## Emby Contributors From e741bd5e0a7b4aaec9cdc51723f7d85160347a08 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Thu, 20 Feb 2025 22:19:36 +0100 Subject: [PATCH 123/235] Add log viewer to dashboard --- .../features/logs/api/useServerLog.ts | 35 ++++++ .../features/logs/components/LogItemList.tsx | 20 +--- src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/logs/file.tsx | 112 ++++++++++++++++++ src/strings/en-us.json | 3 +- 5 files changed, 153 insertions(+), 18 deletions(-) create mode 100644 src/apps/dashboard/features/logs/api/useServerLog.ts create mode 100644 src/apps/dashboard/routes/logs/file.tsx diff --git a/src/apps/dashboard/features/logs/api/useServerLog.ts b/src/apps/dashboard/features/logs/api/useServerLog.ts new file mode 100644 index 0000000000..c3794bf182 --- /dev/null +++ b/src/apps/dashboard/features/logs/api/useServerLog.ts @@ -0,0 +1,35 @@ +import { Api } from '@jellyfin/sdk'; +import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api'; +import { useQuery } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import type { AxiosRequestConfig } from 'axios'; + +const fetchServerLog = async ( + api?: Api, + name?: string, + options?: AxiosRequestConfig +) => { + if (!api) { + console.error('[useServerLog] No API instance available'); + return; + } + + if (!name) { + console.error('[useServerLog] Name is required'); + return; + } + + const response = await getSystemApi(api).getLogFile({ name }, options); + + // FIXME: TypeScript SDK thinks it is returning a File but in reality it is a string + return response.data as never as string; +}; +export const useServerLog = (name: string) => { + const { api } = useApi(); + + return useQuery({ + queryKey: ['ServerLog', name], + queryFn: ({ signal }) => fetchServerLog(api, name, { signal }), + enabled: !!api + }); +}; diff --git a/src/apps/dashboard/features/logs/components/LogItemList.tsx b/src/apps/dashboard/features/logs/components/LogItemList.tsx index a7f2aa69f6..eed1509726 100644 --- a/src/apps/dashboard/features/logs/components/LogItemList.tsx +++ b/src/apps/dashboard/features/logs/components/LogItemList.tsx @@ -2,28 +2,15 @@ import React, { FunctionComponent } from 'react'; import type { LogFile } from '@jellyfin/sdk/lib/generated-client/models/log-file'; import List from '@mui/material/List'; import ListItem from '@mui/material/ListItem'; -import ListItemButton from '@mui/material/ListItemButton'; import ListItemText from '@mui/material/ListItemText'; -import OpenInNewIcon from '@mui/icons-material/OpenInNew'; -import { useApi } from 'hooks/useApi'; import datetime from 'scripts/datetime'; +import ListItemLink from 'components/ListItemLink'; type LogItemProps = { logs: LogFile[]; }; const LogItemList: FunctionComponent = ({ logs }: LogItemProps) => { - const { api } = useApi(); - - const getLogFileUrl = (logFile: LogFile) => { - if (!api) return ''; - - return api.getUri('/System/Logs/Log', { - name: logFile.Name, - api_key: api.accessToken - }); - }; - const getDate = (logFile: LogFile) => { const date = datetime.parseISO8601Date(logFile.DateModified, true); return datetime.toLocaleDateString(date) + ' ' + datetime.getDisplayTime(date); @@ -34,15 +21,14 @@ const LogItemList: FunctionComponent = ({ logs }: LogItemProps) => {logs.map(log => { return ( - + - - +
); })} diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 19cf7ea1a5..c48c604b79 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -7,6 +7,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'devices', type: AppType.Dashboard }, { path: 'keys', type: AppType.Dashboard }, { path: 'logs', type: AppType.Dashboard }, + { path: 'logs/:file', page: 'logs/file', type: AppType.Dashboard }, { path: 'playback/resume', type: AppType.Dashboard }, { path: 'playback/streaming', type: AppType.Dashboard }, { path: 'playback/trickplay', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/logs/file.tsx b/src/apps/dashboard/routes/logs/file.tsx new file mode 100644 index 0000000000..25b7e492f1 --- /dev/null +++ b/src/apps/dashboard/routes/logs/file.tsx @@ -0,0 +1,112 @@ +import Loading from 'components/loading/LoadingComponent'; +import Page from 'components/Page'; +import React, { useCallback } from 'react'; +import { useParams } from 'react-router-dom'; +import { useServerLog } from 'apps/dashboard/features/logs/api/useServerLog'; +import { + Alert, + Box, + Button, + ButtonGroup, + Card, + CardContent, + Container, + Typography +} from '@mui/material'; +import { ContentCopy, FileDownload } from '@mui/icons-material'; +import globalize from 'lib/globalize'; + +export const Component = () => { + const { file: fileName } = useParams(); + const { + isError: error, + isPending: loading, + data: log, + refetch + } = useServerLog(fileName ?? ''); + + const retry = useCallback(() => refetch(), [refetch]); + + const copyToClipboard = useCallback(async () => { + if ('clipboard' in navigator && log) { + await navigator.clipboard.writeText(log); + } + }, [log]); + + const downloadFile = useCallback(() => { + if ('URL' in globalThis && log && fileName) { + const blob = new Blob([log], { type: 'text/plain' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = fileName; + a.click(); + URL.revokeObjectURL(url); + } + }, [log, fileName]); + + return ( + + + + {fileName} + + {error && ( + + Retry + + } + > + {globalize.translate('LogLoadFailure')} + + )} + + {loading && } + + {!error && !loading && ( + <> + + + + + + + + +
{log}
+
+
+
+ + )} +
+
+
+ ); +}; + +Component.displayName = 'LogPage'; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5377cbd88a..576de0abd8 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1808,5 +1808,6 @@ "OptionExtractTrickplayImage": "Enable trickplay image extraction", "ExtractTrickplayImagesHelp": "Trickplay images are similar to chapter images, except they span the entire length of the content and are used to show a preview when scrubbing through videos.", "LabelExtractTrickplayDuringLibraryScan": "Extract trickplay images during the library scan", - "LabelExtractTrickplayDuringLibraryScanHelp": "Generate trickplay images when videos are imported during the library scan. Otherwise, they will be extracted during the trickplay images scheduled task. If generation is set to non-blocking this will not affect the time a library scan takes to complete." + "LabelExtractTrickplayDuringLibraryScanHelp": "Generate trickplay images when videos are imported during the library scan. Otherwise, they will be extracted during the trickplay images scheduled task. If generation is set to non-blocking this will not affect the time a library scan takes to complete.", + "LogLoadFailure": "Failed to load the log file. It may still be actively written to." } From 7904bdd981cea1bfcd89dd6bbcf40bf90fe64369 Mon Sep 17 00:00:00 2001 From: katori_m Date: Sun, 23 Feb 2025 00:24:35 +0000 Subject: [PATCH 124/235] Translated using Weblate (Japanese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/ --- src/strings/ja.json | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/strings/ja.json b/src/strings/ja.json index b9923782c9..8571487a1a 100644 --- a/src/strings/ja.json +++ b/src/strings/ja.json @@ -52,7 +52,7 @@ "BoxRear": "ボックス ( 裏 )", "Browse": "ブラウズ", "MessageBrowsePluginCatalog": "利用可能なプラグインを表示するには、プラグインカタログを参照してください。", - "BurnSubtitlesHelp": "サーバーが映像のトランスコード時に字幕を焼き付けるかどうかを決めます。焼き付けを行わなければパフォーマンスが非常に向上します。自動を選ぶと、画像ベースの字幕形式 (VobSub、PGS、SUB、IDX など ) と特定の ASS または SSA 字幕でだけ焼き付けを行います。", + "BurnSubtitlesHelp": "サーバーが字幕を焼きこむべきかどうかを決定します。 これを使用しない場合はパフォーマンスが大幅に向上します。 イメージベースのフォーマット(VobSub、PGS、SUB、IDXなど)と特定のASSまたはSSA字幕を書き込むには、Autoを選択してください。", "ButtonAddMediaLibrary": "メディアライブラリーを追加", "ButtonAddScheduledTaskTrigger": "トリガーを追加", "ButtonAddServer": "サーバーを追加", @@ -112,7 +112,7 @@ "ColorSpace": "カラースペース", "CommunityRating": "コミュニティ評価", "Composer": "作曲者", - "ConfigureDateAdded": "ダッシュボード > ライブラリ > NFO設定にて、「追加日」のメタデータをどのように決定するかを設定します", + "ConfigureDateAdded": "ダッシュボード > ライブラリ > ディスプレイで、「追加日」のメタデータをどのように決定するかを設定します", "ConfirmDeleteImage": "イメージを削除しますか?", "ConfirmDeleteItem": "このアイテムを削除すると、ファイルシステムとメディアライブラリの両方から削除されます。 続行しますか?", "ConfirmDeleteItems": "これらの項目を削除すると、ファイルシステムとメディアライブラリの両方からそれらが削除されます。 続行しますか?", @@ -1752,7 +1752,7 @@ "LabelThrottleDelaySeconds": "スロットルまでの時間", "LabelThrottleDelaySecondsHelp": "「スロットル」を行うまでの秒数。クライアントが安定して再生できるバッファーを維持するのに十分大きなサイズでなければなりません。「スロットル」が有効の場合にのみ動作します。", "LabelSegmentKeepSeconds": "セグメントの保存時間", - "LabelSegmentKeepSecondsHelp": "セグメントを上書きせず維持する秒数。「スロットルまでの時間」より大きな値を設定してください。「セグメントを削除」が有効な場合にのみ動作します。", + "LabelSegmentKeepSecondsHelp": "クライアントがセグメントをダウンロードした後、そのセグメントを保持する時間 (秒単位)。 セグメント削除が有効な場合にのみ動作します。", "GetThePlugin": "プラグインを取得", "LogLevel.Trace": "トレース", "LogLevel.Error": "エラー", @@ -1776,7 +1776,7 @@ "LabelBackdropScreensaverInterval": "バックドロップスクリーンセーバー間隔", "LabelBackdropScreensaverIntervalHelp": "バックドロップスクリーンセーバーを使用時に異なるバックドロップ間での秒数。", "HeaderAllRecordings": "すべての録音", - "SelectAudioNormalizationHelp": "トラックゲイン - 各トラックの音量を調整して、同じ大きさで再生されるようにします。アルバムゲイン - アルバム内の全てのトラックの音量を調整し、アルバムのダイナミックレンジを保持します。", + "SelectAudioNormalizationHelp": "トラックゲイン - 各トラックの音量を調整し、同じ音量で再生します。 アルバムゲイン - アルバム内の全トラックの音量のみを調整し、アルバムのダイナミックレンジを維持します。 オフと他のオプションを切り替えるには、現在の再生を再開する必要があります。", "LabelSelectAudioNormalization": "音量正規化", "LabelBuildVersion": "ビルドバージョン", "LabelServerVersion": "サーバーバージョン", @@ -1918,5 +1918,20 @@ "EnableHi10p": "H.264のハイ10プロファイルを有効化", "PreviewLyrics": "歌詞をプレビュー", "SearchForLyrics": "歌詞を検索", - "DateModified": "変更日付" + "DateModified": "変更日付", + "AllowStreamSharingHelp": "JellyfinがチューナーからのMPEGTSストリームを複製し、この複製されたストリームをクライアントに共有できるようにします。 これは、チューナーに総ストリーム数の制限がある場合に便利ですが、再生上の問題を引き起こす可能性もあります。", + "AllowFmp4TranscodingContainerHelp": "このチューナーのfMP4トランスコードコンテナを許可して、HEVCとHDRコンテンツを有効にします。 すべてのチューナーがこのコンテナに対応しているわけではありません。 再生に問題がある場合は無効にしてください。", + "AutoSubtitleStylingHelp": "このモードではデバイスの種類に応じて、ネイティブ字幕とカスタム字幕のスタイリングメカニズムが自動的に切り替わります。", + "CustomSubtitleStylingHelp": "字幕のスタイリングはほとんどのデバイスで機能しますが、パフォーマンス上のオーバーヘッドが増加します。", + "Alternate": "代替", + "AlwaysBurnInSubtitleWhenTranscoding": "トランスコード時に常に字幕を書き込む", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "トランスコードがトリガーされたときに、すべての字幕を焼き込みます。 これにより、トランスコード速度は低下しますが、トランスコード後の字幕の同期が保証されます。", + "AlwaysRemuxFlacAudioFilesHelp": "ブラウザが再生を拒否したり、タイムスタンプの計算が不正確なファイルがある場合は、回避策としてこの機能を有効にしてください。", + "AlwaysRemuxMp3AudioFilesHelp": "ブラウザがタイムスタンプを不正確に計算するファイルがある場合は、回避策としてこの機能を有効にしてください。", + "AllowTonemappingSoftwareHelp": "トーンマッピングは、元のシーンを表現するために非常に重要な情報である画像のディテールと色を維持したまま、ビデオのダイナミックレンジをHDRからSDRに変換することができます。 現在、10bit HDR10、HLG、DoViビデオでのみ動作します。", + "DeleteServerConfirmation": "本当にこのサーバーを削除しますか?", + "DisableVbrAudioEncodingHelp": "サーバーがこのクライアントのオーディオをVBRでエンコードしないようにする。", + "EnableHi10pHelp": "H.264 10ビット動画のトランスコードを避けるには、このオプションを有効にします。 ビデオにブランクフレームが表示される場合はこのオプションを無効にします。", + "FallbackMaxStreamingBitrateHelp": "最大ストリーミングビットレートは、ffprobe がソースストリームのビットレートを決定できない場合のフォールバックとして使用されます。 これは、クライアントが過度に高いトランスコード・ビットレートを要求するのを防ぐのに役立ちます。", + "HeaderAddLyrics": "歌詞を追加" } From f15d7613ae6c445574c5565f40663e7489b4f006 Mon Sep 17 00:00:00 2001 From: yoga sree jagadam Date: Sun, 23 Feb 2025 12:59:15 +0000 Subject: [PATCH 125/235] Translated using Weblate (Telugu) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/te/ --- src/strings/te.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/te.json b/src/strings/te.json index c94afb098a..a436618d9a 100644 --- a/src/strings/te.json +++ b/src/strings/te.json @@ -1324,7 +1324,7 @@ "Categories": "కేటగిరీలు", "CancelSeries": "సిరీస్‌ను రద్దు చేయండి", "CancelRecording": "రికార్డింగ్‌ను రద్దు చేయండి", - "Bwdif": "BWDIF", + "Bwdif": "బాబ్ వీవర్ డీఇంటర్‌లేసింగ్ ఫిల్టర్ (బాబ్ వీవర్ డీఇంటర్‌లేసింగ్ ఫిల్టర్ (బిడబ్ల్యుడిఐఎఫ్)", "ButtonWebsite": "వెబ్‌సైట్", "ButtonUseQuickConnect": "త్వరిత కనెక్ట్ ఉపయోగించండి", "ButtonUninstall": "అన్‌ఇన్‌స్టాల్ చేయండి", From 3a9534c5bad997bf385ff6c0016704a8fca3dcde Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Sun, 23 Feb 2025 21:57:41 +0100 Subject: [PATCH 126/235] Toast on log copy --- src/apps/dashboard/features/logs/api/useServerLog.ts | 10 ++-------- src/apps/dashboard/routes/logs/file.tsx | 2 ++ src/strings/en-us.json | 1 + 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/apps/dashboard/features/logs/api/useServerLog.ts b/src/apps/dashboard/features/logs/api/useServerLog.ts index c3794bf182..4182f9f78d 100644 --- a/src/apps/dashboard/features/logs/api/useServerLog.ts +++ b/src/apps/dashboard/features/logs/api/useServerLog.ts @@ -5,20 +5,14 @@ import { useApi } from 'hooks/useApi'; import type { AxiosRequestConfig } from 'axios'; const fetchServerLog = async ( - api?: Api, - name?: string, + api: Api | undefined, + name: string, options?: AxiosRequestConfig ) => { if (!api) { console.error('[useServerLog] No API instance available'); return; } - - if (!name) { - console.error('[useServerLog] Name is required'); - return; - } - const response = await getSystemApi(api).getLogFile({ name }, options); // FIXME: TypeScript SDK thinks it is returning a File but in reality it is a string diff --git a/src/apps/dashboard/routes/logs/file.tsx b/src/apps/dashboard/routes/logs/file.tsx index 25b7e492f1..80cfd99934 100644 --- a/src/apps/dashboard/routes/logs/file.tsx +++ b/src/apps/dashboard/routes/logs/file.tsx @@ -15,6 +15,7 @@ import { } from '@mui/material'; import { ContentCopy, FileDownload } from '@mui/icons-material'; import globalize from 'lib/globalize'; +import toast from 'components/toast/toast'; export const Component = () => { const { file: fileName } = useParams(); @@ -30,6 +31,7 @@ export const Component = () => { const copyToClipboard = useCallback(async () => { if ('clipboard' in navigator && log) { await navigator.clipboard.writeText(log); + toast({ text: globalize.translate('CopyLogSuccess') }); } }, [log]); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 576de0abd8..ff73246005 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -188,6 +188,7 @@ "CopyFailed": "Could not copy", "CopyStreamURL": "Copy Stream URL", "CopyStreamURLSuccess": "URL copied successfully.", + "CopyLogSuccess": "Log contents copied successfully.", "CoverArtist": "Cover artist", "Creator": "Creator", "CriticRating": "Critics rating", From b58ed1ea550c505ded5ef406330d316e5a4bbf65 Mon Sep 17 00:00:00 2001 From: xiaoyao Date: Mon, 24 Feb 2025 09:13:50 +0000 Subject: [PATCH 127/235] 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 a0bd9caac3..bdde9c32e6 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1140,7 +1140,7 @@ "LabelTranscodes": "转码", "AuthProviderHelp": "选择用于验证此用户密码的身份验证提供者。", "ColorPrimaries": "原色", - "ConfigureDateAdded": "设置如何在仪表板 > 库 > NFO 设置中确定“添加日期”的元数据", + "ConfigureDateAdded": "设置如何在仪表板 > 库 > 显示 中确定“添加日期”的元数据", "DisplayModeHelp": "选择您想要的界面布局风格。", "EnableColorCodedBackgrounds": "彩色背景", "ErrorDeletingItem": "从服务器删除项目时出错。请检查Jellyfin是否拥有对媒体目录的写权限,然后重试。", @@ -1999,5 +1999,9 @@ "Custom": "自定义", "LabelSubtitleStyling": "字幕样式", "Native": "原生", - "NativeSubtitleStylingHelp": "字幕样式在一些设备上不工作。自然也不会增加功耗。" + "NativeSubtitleStylingHelp": "字幕样式在一些设备上不工作。自然也不会增加功耗。", + "LabelDevice": "设备", + "LastActive": "上次活跃", + "DeleteServerConfirmation": "您确定要删除此服务器吗?", + "LibraryNameInvalid": "媒体库名称不能为空。" } From 50a0fddf0bdfad9404f77276224a12389b0fc31b Mon Sep 17 00:00:00 2001 From: LK HO Date: Mon, 24 Feb 2025 08:29:35 +0000 Subject: [PATCH 128/235] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 1389f55dff..47a14749df 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -1270,7 +1270,7 @@ "Anime": "動漫", "ChannelResolutionSDPAL": "SD(PAL 格式)", "AllowContentWithTagsHelp": "僅顯示至少有一個指定標籤的媒體。", - "LibraryNameInvalid": "媒體庫名稱不可為空,或有前置/後置的空格。", + "LibraryNameInvalid": "媒體庫名稱不可為空。", "LabelDevice": "裝置", "LastActive": "最後活躍", "DeleteServerConfirmation": "你確定要刪除此伺服器?", From c403690a4392f2a5e6f18754e3f52685952bd0d2 Mon Sep 17 00:00:00 2001 From: Dan Bishop Date: Mon, 24 Feb 2025 10:51:19 +0000 Subject: [PATCH 129/235] 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 bfac284d64..c1886f4691 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -2003,5 +2003,5 @@ "LastActive": "Last active", "NativeSubtitleStylingHelp": "Subtitle styling will not work on some devices. However, it does not come with any performance overhead.", "MediaSegmentProvidersHelp": "Enable and rank your preferred media segment providers in order of priority.", - "LibraryNameInvalid": "Library name cannot be empty or have leading/trailing spaces." + "LibraryNameInvalid": "Library name cannot be empty." } From c11fe56d654c3e6cf8bb7141bc4330f961081f25 Mon Sep 17 00:00:00 2001 From: GolanGitHub Date: Mon, 24 Feb 2025 15:54:28 +0000 Subject: [PATCH 130/235] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index b0fdca2b49..6abec5eb76 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1870,8 +1870,8 @@ "OptionExtractTrickplayImage": "Habilitar la extracción de imágenes de trickplay", "LabelExtractTrickplayDuringLibraryScanHelp": "Generar imágenes de trickplay cuando los vídeos se importan durante el escaneo de la biblioteca. De lo contrario se extraerán durante la tarea programada de extracción de imágenes de trickplay. Si la generación es no bloqueante esto no afectará al tiempo que la biblioteca tarda en escanearse.", "Author": "Autor", - "LibraryScanFanoutConcurrencyHelp": "Numero maximo de tareas de escaneos en librerias paralelas. Marcar esta opcion en 0 escogera un limite basado en la cantidad de nucleos (CPU) en sus sistema. ADVERTENCIA: Marcar este numero demasiado alto puede causar problemas con sistemas de archivos de red; si encuentra problemas baje este numero.", - "LibraryScanFanoutConcurrency": "Limite de escaneos de tareas en librerias paralelas", + "LibraryScanFanoutConcurrencyHelp": "Número máximo de tareas en paralelo durante los escaneos de la biblioteca. Configurar este valor en 0 seleccionará un límite basado en la cantidad de núcleos de tu sistema. ADVERTENCIA: Configurar un número demasiado alto puede causar problemas con sistemas de archivos en red; si experimentas inconvenientes, reduce este valor.", + "LibraryScanFanoutConcurrency": "Límite de tareas de escaneo en paralelo de la biblioteca", "Penciller": "Lapicista", "PlaylistError.CreateFailed": "Error creando lista de reproduccion", "PlaylistError.AddFailed": "Error agregando a lista de reproduccion", @@ -1995,5 +1995,5 @@ "DeleteServerConfirmation": "¿Estás seguro de que deseas eliminar este servidor?", "LabelDevice": "Dispositivo", "LastActive": "Último activo", - "LibraryNameInvalid": "El nombre de la biblioteca no puede estar vacío ni contener espacios al principio o al final." + "LibraryNameInvalid": "El nombre de la biblioteca no puede estar vacío." } From 29551e49bf896b75e0b09711212bfb0a9d108061 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 24 Feb 2025 13:19:01 -0500 Subject: [PATCH 131/235] Fix undefined server id in experimental layout --- .../components/library/GenresSectionContainer.tsx | 6 +++++- src/apps/experimental/components/library/ItemsView.tsx | 6 +++++- .../components/library/ProgramsSectionView.tsx | 8 ++++++-- .../components/library/SuggestionsSectionView.tsx | 9 +++++++-- .../experimental/components/library/UpcomingView.tsx | 6 +++++- src/components/cardbuilder/Card/cardHelper.ts | 2 +- 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/apps/experimental/components/library/GenresSectionContainer.tsx b/src/apps/experimental/components/library/GenresSectionContainer.tsx index 04f28233e6..eded36d938 100644 --- a/src/apps/experimental/components/library/GenresSectionContainer.tsx +++ b/src/apps/experimental/components/library/GenresSectionContainer.tsx @@ -5,6 +5,8 @@ import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-ite import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by'; import { SortOrder } from '@jellyfin/sdk/lib/generated-client/models/sort-order'; import React, { type FC } from 'react'; + +import { useApi } from 'hooks/useApi'; import { useGetItems } from 'hooks/useFetchItems'; import Loading from 'components/loading/LoadingComponent'; import { appRouter } from 'components/router/appRouter'; @@ -26,6 +28,7 @@ const GenresSectionContainer: FC = ({ itemType, genre }) => { + const { __legacyApiClient__ } = useApi(); const getParametersOptions = () => { return { sortBy: [ItemSortBy.Random], @@ -73,7 +76,8 @@ const GenresSectionContainer: FC = ({ cardLayout: false, shape: collectionType === CollectionType.Music ? CardShape.SquareOverflow : CardShape.PortraitOverflow, showParentTitle: collectionType === CollectionType.Music, - showYear: collectionType !== CollectionType.Music + showYear: collectionType !== CollectionType.Music, + serverId: __legacyApiClient__?.serverId() }} />; }; diff --git a/src/apps/experimental/components/library/ItemsView.tsx b/src/apps/experimental/components/library/ItemsView.tsx index e296720805..dbe1753fd3 100644 --- a/src/apps/experimental/components/library/ItemsView.tsx +++ b/src/apps/experimental/components/library/ItemsView.tsx @@ -5,6 +5,8 @@ import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort- import React, { type FC, useCallback } from 'react'; import Box from '@mui/material/Box'; import classNames from 'classnames'; + +import { useApi } from 'hooks/useApi'; import { useLocalStorage } from 'hooks/useLocalStorage'; import { useGetItemsViewByType } from 'hooks/useFetchItems'; import { getDefaultLibraryViewSettings, getSettingsKey } from 'utils/items'; @@ -69,6 +71,7 @@ const ItemsView: FC = ({ getDefaultLibraryViewSettings(viewType) ); + const { __legacyApiClient__ } = useApi(); const { isLoading, data: itemsResult, @@ -138,7 +141,8 @@ const ItemsView: FC = ({ preferLogo: preferLogo, overlayText: !libraryViewSettings.ShowTitle, imageType: libraryViewSettings.ImageType, - queryKey: ['ItemsViewByType'] + queryKey: ['ItemsViewByType'], + serverId: __legacyApiClient__?.serverId() }; if ( diff --git a/src/apps/experimental/components/library/ProgramsSectionView.tsx b/src/apps/experimental/components/library/ProgramsSectionView.tsx index d1a7bfdb8a..87b882dd0b 100644 --- a/src/apps/experimental/components/library/ProgramsSectionView.tsx +++ b/src/apps/experimental/components/library/ProgramsSectionView.tsx @@ -1,4 +1,5 @@ import React, { type FC } from 'react'; +import { useApi } from 'hooks/useApi'; import { useGetProgramsSectionsWithItems, useGetTimers } from 'hooks/useFetchItems'; import { appRouter } from 'components/router/appRouter'; import globalize from 'lib/globalize'; @@ -20,6 +21,7 @@ const ProgramsSectionView: FC = ({ sectionType, isUpcomingRecordingsEnabled = false }) => { + const { __legacyApiClient__ } = useApi(); const { isLoading, data: sectionsWithItems, refetch } = useGetProgramsSectionsWithItems(parentId, sectionType); const { isLoading: isUpcomingRecordingsLoading, @@ -63,7 +65,8 @@ const ProgramsSectionView: FC = ({ items={items} cardOptions={{ ...section.cardOptions, - queryKey: ['ProgramSectionWithItems'] + queryKey: ['ProgramSectionWithItems'], + serverId: __legacyApiClient__?.serverId() }} /> ))} @@ -95,7 +98,8 @@ const ProgramsSectionView: FC = ({ coverImage: true, allowBottomPadding: false, overlayText: false, - showChannelLogo: true + showChannelLogo: true, + serverId: __legacyApiClient__?.serverId() }} /> ))} diff --git a/src/apps/experimental/components/library/SuggestionsSectionView.tsx b/src/apps/experimental/components/library/SuggestionsSectionView.tsx index c036451e7f..0aa346b94f 100644 --- a/src/apps/experimental/components/library/SuggestionsSectionView.tsx +++ b/src/apps/experimental/components/library/SuggestionsSectionView.tsx @@ -1,6 +1,8 @@ import type { RecommendationDto } from '@jellyfin/sdk/lib/generated-client/models/recommendation-dto'; import { RecommendationType } from '@jellyfin/sdk/lib/generated-client/models/recommendation-type'; import React, { type FC } from 'react'; + +import { useApi } from 'hooks/useApi'; import { useGetMovieRecommendations, useGetSuggestionSectionsWithItems @@ -26,6 +28,7 @@ const SuggestionsSectionView: FC = ({ sectionType, isMovieRecommendationEnabled = false }) => { + const { __legacyApiClient__ } = useApi(); const { isLoading, data: sectionsWithItems } = useGetSuggestionSectionsWithItems(parentId, sectionType); @@ -106,7 +109,8 @@ const SuggestionsSectionView: FC = ({ showTitle: true, centerText: true, cardLayout: false, - overlayText: false + overlayText: false, + serverId: __legacyApiClient__?.serverId() }} /> ))} @@ -130,7 +134,8 @@ const SuggestionsSectionView: FC = ({ overlayPlayButton: true, showTitle: true, centerText: true, - cardLayout: false + cardLayout: false, + serverId: __legacyApiClient__?.serverId() }} /> ))} diff --git a/src/apps/experimental/components/library/UpcomingView.tsx b/src/apps/experimental/components/library/UpcomingView.tsx index af11d267af..da80eaca0e 100644 --- a/src/apps/experimental/components/library/UpcomingView.tsx +++ b/src/apps/experimental/components/library/UpcomingView.tsx @@ -1,4 +1,6 @@ import React, { type FC } from 'react'; + +import { useApi } from 'hooks/useApi'; import { useGetGroupsUpcomingEpisodes } from 'hooks/useFetchItems'; import Loading from 'components/loading/LoadingComponent'; import NoItemsMessage from 'components/common/NoItemsMessage'; @@ -8,6 +10,7 @@ import type { LibraryViewProps } from 'types/library'; // eslint-disable-next-line sonarjs/function-return-type const UpcomingView: FC = ({ parentId }) => { + const { __legacyApiClient__ } = useApi(); const { isLoading, data: groupsUpcomingEpisodes } = useGetGroupsUpcomingEpisodes(parentId); @@ -36,7 +39,8 @@ const UpcomingView: FC = ({ parentId }) => { showDetailsMenu: true, missingIndicator: false, cardLayout: false, - queryKey: ['GroupsUpcomingEpisodes'] + queryKey: ['GroupsUpcomingEpisodes'], + serverId: __legacyApiClient__?.serverId() }} /> )); diff --git a/src/components/cardbuilder/Card/cardHelper.ts b/src/components/cardbuilder/Card/cardHelper.ts index 6ad1952d56..070c8085df 100644 --- a/src/components/cardbuilder/Card/cardHelper.ts +++ b/src/components/cardbuilder/Card/cardHelper.ts @@ -82,7 +82,7 @@ export function getTextActionButton( }; } - const url = appRouter.getRouteUrl(item); + const url = appRouter.getRouteUrl(item, { serverId }); const dataAttributes = getDataAttributes( { From 6c370e68c5ae7777329caa6f9bd924098002cab4 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Mon, 24 Feb 2025 19:33:01 +0100 Subject: [PATCH 132/235] Address review feedback --- .../features/logs/api/useServerLog.ts | 4 ++-- src/apps/dashboard/routes/logs/file.tsx | 18 ++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/apps/dashboard/features/logs/api/useServerLog.ts b/src/apps/dashboard/features/logs/api/useServerLog.ts index 4182f9f78d..4c337dfa98 100644 --- a/src/apps/dashboard/features/logs/api/useServerLog.ts +++ b/src/apps/dashboard/features/logs/api/useServerLog.ts @@ -5,7 +5,7 @@ import { useApi } from 'hooks/useApi'; import type { AxiosRequestConfig } from 'axios'; const fetchServerLog = async ( - api: Api | undefined, + api: Api, name: string, options?: AxiosRequestConfig ) => { @@ -23,7 +23,7 @@ export const useServerLog = (name: string) => { return useQuery({ queryKey: ['ServerLog', name], - queryFn: ({ signal }) => fetchServerLog(api, name, { signal }), + queryFn: ({ signal }) => fetchServerLog(api!, name, { signal }), enabled: !!api }); }; diff --git a/src/apps/dashboard/routes/logs/file.tsx b/src/apps/dashboard/routes/logs/file.tsx index 80cfd99934..d225008683 100644 --- a/src/apps/dashboard/routes/logs/file.tsx +++ b/src/apps/dashboard/routes/logs/file.tsx @@ -3,16 +3,14 @@ import Page from 'components/Page'; import React, { useCallback } from 'react'; import { useParams } from 'react-router-dom'; import { useServerLog } from 'apps/dashboard/features/logs/api/useServerLog'; -import { - Alert, - Box, - Button, - ButtonGroup, - Card, - CardContent, - Container, - Typography -} from '@mui/material'; +import Alert from '@mui/material/Alert'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import ButtonGroup from '@mui/material/ButtonGroup'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import Container from '@mui/material/Container'; +import Typography from '@mui/material/Typography'; import { ContentCopy, FileDownload } from '@mui/icons-material'; import globalize from 'lib/globalize'; import toast from 'components/toast/toast'; From c99fe4a402d65c8b41904f80f7dd91cc0f10b4c5 Mon Sep 17 00:00:00 2001 From: Ivan Beltrame <87547424+ivanbeltrame@users.noreply.github.com> Date: Mon, 24 Feb 2025 21:31:32 +0000 Subject: [PATCH 133/235] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 697b3ce62e..cce9649336 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1886,7 +1886,7 @@ "PlaylistPublic": "Consenti accesso pubblico", "PlaylistPublicDescription": "Consenti che questa playlist sia visibile ad ogni utente loggato.", "HeaderLyricDownloads": "Scarica testi", - "LibraryScanFanoutConcurrencyHelp": "Massimo numero di task paralleli durante la scansione delle librerie. Se impostato a 0 sarà utilizzato il numero di core del sistema. ATTENZIONE: impostare un numero alto potrebbe causare problemi sui network filesystem. In caso di problemi ridurre il numero.", + "LibraryScanFanoutConcurrencyHelp": "Massimo numero di task parallele durante la scansione delle librerie. Se impostato a 0 sarà utilizzato il numero di core del sistema. ATTENZIONE: impostare un numero troppo alto potrebbe causare problemi sui network filesystem. In caso di problemi ridurre il numero.", "LabelSelectPreferredTranscodeVideoAudioCodec": "Codec audio preferito per la transcodica durante la riproduzione video", "LibraryScanFanoutConcurrency": "Massimo numero di task durante la scansione", "Colorist": "Colorista", From 451fbe40fa367bc8ce3f5594d4f135835f107bfa Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Tue, 25 Feb 2025 04:38:24 +0000 Subject: [PATCH 134/235] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index f269acc648..8b3b83ad1d 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1997,7 +1997,7 @@ "CustomSubtitleStylingHelp": "Kiểu phụ đề sẽ hoạt động trên hầu hết các thiết bị nhưng đi kèm với chi phí hiệu suất bổ sung.", "LabelSubtitleStyling": "Kiểu phụ đề", "Native": "Gốc", - "LibraryNameInvalid": "Tên thư viện không thể trống hoặc có khoảng trống ở đầu/cuối.", + "LibraryNameInvalid": "Tên thư viện không để trống.", "LabelDevice": "Thiết bị", "LastActive": "Hoạt động cuối", "DeleteServerConfirmation": "Bạn có chắc bạn muốn xóa máy chủ này không?" From 65b6a43aae3a1b8c2fac2cbc9c50eb5da97dd6aa Mon Sep 17 00:00:00 2001 From: PalmarHealer Date: Tue, 25 Feb 2025 07:44:08 +0000 Subject: [PATCH 135/235] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 6471d3183f..4822d2b02d 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1715,7 +1715,7 @@ "SubtitleRed": "Rot", "SubtitleWhite": "Weiß", "SubtitleYellow": "Gelb", - "Featurette": "Featurette", + "Featurette": "Hinter den Kulissen", "Short": "Kurzfilm", "LabelParallelImageEncodingLimit": "Limit der parallelen Bildkodierung", "LabelParallelImageEncodingLimitHelp": "Maximale Anzahl von Bildkodierungen, die parallel ausgeführt werden dürfen. Wenn Sie diesen Wert auf 0 setzen, wird eine Grenze auf der Grundlage der Kernanzahl Ihres Systems festgelegt.", @@ -1880,8 +1880,8 @@ "HeaderLyricDownloads": "Lyrik Downloads", "LabelSelectPreferredTranscodeVideoAudioCodec": "Bevorzugter Transcode-Audiocodec bei der Videowiedergabe", "Translator": "Übersetzer", - "LibraryScanFanoutConcurrency": "Parallele Bibliotheks-Scan-Aufgaben Limit", - "LibraryScanFanoutConcurrencyHelp": "Maximale Anzahl der parallelen Aufgaben während der Bibliotheksscans. Wenn Sie diesen Wert auf 0 setzen, wird eine Begrenzung auf der Grundlage der Kernanzahl Ihres Systems gewählt. WARNUNG: Wenn Sie diese Zahl zu hoch einstellen, kann es zu Problemen mit Netzwerkdateisystemen kommen; wenn Sie Probleme haben, senken Sie diese Zahl.", + "LibraryScanFanoutConcurrency": "Limit der Parallelen Aufgaben für das Scanen der Bibliotheken", + "LibraryScanFanoutConcurrencyHelp": "Anzahl der Maximalen parallelen Aufgaben während des Bibliotheksscans. Wenn sie diesen Wert auf 0 Setzten werden soviele parallelen Aufgaben gestartet wie dieser Instanz/auf diesem System vorhanden sind. WARNUNG: Wenn Sie diese Zahl zu hoch einstellen, kann es zu Problemen mit Bibliotheken die über das Netzwerk verbunden sind kommen; wenn dies der fall ist, senken Sie diese Zahl.", "PlaylistError.AddFailed": "Fehler beim Hinzufügen zur Wiedergabeliste", "PlaylistError.CreateFailed": "Fehler beim Erstellen der Wiedergabeliste", "SavePassword": "Passwort speichern", @@ -1931,7 +1931,7 @@ "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrahiert nur Schlüsselbilder für eine deutlich schnellere Verarbeitung mit weniger genauem Timing. Wenn der konfigurierte Hardware-Decoder diesen Modus nicht unterstützt, wird stattdessen der Software-Decoder verwendet.", "Reset": "Zurücksetzen", "LibraryInvalidItemIdError": "Die Bibliothek ist in einem ungültigen Zustand und kann nicht verändert werden. Dies ist möglicherweise ein Bug: Der Pfad in der Datenbank ist nicht der richtige Pfad im Dateisystem.", - "MediaInfoRotation": "Rotation", + "MediaInfoRotation": "Drehung", "EnableHi10p": "H.264 High 10 Profil aktivieren", "EnableHi10pHelp": "Aktivieren, um die Transkodierung von H.264-Videos zu verhindern. Deaktivieren, wenn die Videos nur leere Frames zeigen.", "LabelDisableVbrAudioEncoding": "VBR-Audiocodierung deaktivieren", @@ -2000,7 +2000,7 @@ "NativeSubtitleStylingHelp": "Das Untertitel-Styling funktioniert auf einigen Geräten nicht. Allerdings ist damit kein Leistungsaufwand verbunden.", "AutoSubtitleStylingHelp": "In diesem Modus wird je nach Gerätetyp automatisch zwischen dem nativen und dem benutzerdefinierten Untertitel-Styling umgeschaltet.", "Custom": "benutzerdefiniert", - "LibraryNameInvalid": "Der Bibliotheksname darf nicht leer sein oder voran-/nachgestellte Leerzeichen haben.", + "LibraryNameInvalid": "Der Bibliotheksname darf nicht leer sein.", "DeleteServerConfirmation": "Bist du sicher, dass du diesen Server löschen möchtest?", "LabelDevice": "Gerät", "LastActive": "Zuletzt aktiv" From 6c3c262d1dc0a50feb633c702712fedb914bc870 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 25 Feb 2025 08:24:09 +0000 Subject: [PATCH 136/235] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 4822d2b02d..6802932e72 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1597,7 +1597,7 @@ "TypeOptionPluralBook": "Bücher", "TypeOptionPluralAudio": "Tondateien", "TypeOptionPluralSeries": "Serien", - "Casual": "Casual", + "Casual": "Freizeit", "LabelAutomaticallyAddToCollectionHelp": "Wenn mindestens 2 Filme den gleichen Sammlungsnamen haben, werden sie automatisch zur Sammlung hinzugefügt.", "LabelAutomaticallyAddToCollection": "Automatisch zu Sammlung hinzufügen", "Cursive": "Kursivschrift", From 577e9725646bde972009e74b04745f139a5d0f4e Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Tue, 25 Feb 2025 09:11:30 +0000 Subject: [PATCH 137/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index a17e499022..7000853b28 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -127,7 +127,7 @@ "HeaderImageSettings": "Configurações de imagem", "HeaderInstall": "Instalar", "HeaderInstantMix": "Mix instantâneo", - "HeaderLatestEpisodes": "Episódios mais recentes", + "HeaderLatestEpisodes": "Episódios adicionados recentemente", "HeaderLatestMedia": "Conteúdo recente", "HeaderLatestMovies": "Filmes recentes", "HeaderLatestMusic": "Músicas recentes", @@ -852,7 +852,7 @@ "Overview": "Resumo", "OriginalAirDateValue": "Data de estreia original: {0}", "OptionSubstring": "Parte de palavra", - "LatestFromLibrary": "Mais Recentes em {0}", + "LatestFromLibrary": "Adicionado recentemente em {0}", "HideWatchedContentFromLatestMedia": "Ocultar títulos já vistos do \"Conteúdo Recente\"", "MessageUnableToConnectToServer": "Não foi possível estabelecer ligação ao servidor. Por favor, certifique-se de que o servidor está a correr e tente de novo.", "HeaderStartNow": "Iniciar", From 74a4c5c7cfe83a540418c714d36b066a71fa4e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Tue, 25 Feb 2025 10:21:32 +0000 Subject: [PATCH 138/235] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 360 ++++++++++++++++++++++---------------------- 1 file changed, 184 insertions(+), 176 deletions(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 8019149be4..9bae859558 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -8,22 +8,22 @@ "All": "Mind", "AllEpisodes": "Összes epizód", "AllLanguages": "Összes nyelv", - "AllLibraries": "Összes könyvtár", + "AllLibraries": "Összes médiatár", "Ascending": "Növekvő", - "Audio": "Audió", - "BirthDateValue": "Született: {0}", + "Audio": "Hang", + "BirthDateValue": "Születési idő: {0}", "BirthPlaceValue": "Születési hely: {0}", "Books": "Könyvek", "Browse": "Tallózás", - "ButtonAddMediaLibrary": "Médiakönyvtár hozzáadása", + "ButtonAddMediaLibrary": "Médiatár hozzáadása", "ButtonAddServer": "Kiszolgáló hozzáadása", "ButtonAddUser": "Új felhasználó", "ButtonAudioTracks": "Hangsávok", "ButtonCancel": "Mégse", - "ButtonChangeServer": "Szerver váltás", + "ButtonChangeServer": "Kiszolgáló váltása", "ButtonForgotPassword": "Elfelejtett jelszó", "ButtonGotIt": "Értettem", - "ButtonLibraryAccess": "Könyvtár hozzáférés", + "ButtonLibraryAccess": "Médiatár-hozzáférés", "ButtonManualLogin": "Kézi belépés", "ButtonMore": "Tovább", "ButtonNextTrack": "Következő sáv", @@ -36,7 +36,7 @@ "ButtonRename": "Átnevezés", "ButtonResetEasyPassword": "PIN-kód visszaállítása", "ButtonResume": "Folytatás", - "ButtonScanAllLibraries": "Minden könyvtár beolvasása", + "ButtonScanAllLibraries": "Összes médiatár beolvasása", "ButtonSelectDirectory": "Könyvtár választása", "ButtonSend": "Küldés", "ButtonShutdown": "Leállítás", @@ -51,7 +51,7 @@ "Collections": "Gyűjtemények", "CommunityRating": "Közösségi értékelés", "Connect": "Kapcsolódás", - "DateAdded": "Hozzáadva", + "DateAdded": "Hozzáadás dátuma", "DatePlayed": "Lejátszás dátuma", "Delete": "Törlés", "DeleteMedia": "Média törlése", @@ -77,9 +77,9 @@ "Favorite": "Kedvenc", "Favorites": "Kedvencek", "Features": "Jellemzők", - "FileNotFound": "Fájl nem található.", + "FileNotFound": "A fájl nem található.", "Filters": "Szűrők", - "Folders": "Könyvtárak", + "Folders": "Mappák", "Friday": "Péntek", "Fullscreen": "Teljes képernyő", "General": "Általános", @@ -87,16 +87,16 @@ "HeaderActiveDevices": "Aktív eszközök", "HeaderAddToCollection": "Hozzáadás a gyűjteményhez", "HeaderAddToPlaylist": "Hozzáadás lejátszási listához", - "HeaderAddUpdateImage": "Kép hozzáadása / frissítése", + "HeaderAddUpdateImage": "Kép hozzáadása/frissítése", "HeaderAudioBooks": "Hangoskönyvek", "HeaderAudioSettings": "Hangbeállítások", "HeaderCastAndCrew": "Szereplők és stáb", - "HeaderConnectToServer": "Kapcsolódás a Szerverhez", + "HeaderConnectToServer": "Kapcsolódás a kiszolgálóhoz", "HeaderContinueWatching": "Megtekintés folytatása", "HeaderCustomDlnaProfiles": "Egyéni profilok", - "HeaderDetectMyDevices": "Eszközök érzékelése", + "HeaderDetectMyDevices": "Eszközök észlelése", "HeaderDeveloperInfo": "Fejlesztői információk", - "HeaderDeviceAccess": "Eszköz Hozzáférések", + "HeaderDeviceAccess": "Eszközhozzáférés", "HeaderDevices": "Eszközök", "HeaderDownloadSync": "Letöltés és szinkronizálás", "HeaderEasyPinCode": "PIN-kód", @@ -110,46 +110,46 @@ "HeaderLatestEpisodes": "Nemrég hozzáadott epizódok", "HeaderLatestMedia": "Nemrég hozzáadott tartalmak", "HeaderLatestMovies": "Nemrég hozzáadott filmek", - "HeaderLibraries": "Könyvtárak", - "HeaderLibraryAccess": "Könyvtár hozzáférés", - "HeaderLibraryFolders": "Médiatár mappák", - "HeaderLibraryOrder": "Médiatár elrendezése", - "HeaderLibrarySettings": "Médiatár beállítások", + "HeaderLibraries": "Médiatárak", + "HeaderLibraryAccess": "Médiatár-hozzáférés", + "HeaderLibraryFolders": "Médiatármappák", + "HeaderLibraryOrder": "Médiatár rendezése", + "HeaderLibrarySettings": "Médiatárbeállítások", "HeaderLiveTvTunerSetup": "Élő TV tuner beállítása", "HeaderMedia": "Média", - "HeaderMediaFolders": "Médiakönyvtárak", - "HeaderMetadataSettings": "Metaadat-beállítások", + "HeaderMediaFolders": "Médiamappák", + "HeaderMetadataSettings": "Metaadatbeállítások", "HeaderMoreLikeThis": "Több ehhez hasonló", "HeaderMyDevice": "Jelenlegi eszköz", - "HeaderMyMedia": "Saját médiatár", - "HeaderMyMediaSmall": "Saját médiatár (kicsi)", + "HeaderMyMedia": "Saját média", + "HeaderMyMediaSmall": "Saját média (kicsi)", "HeaderOnNow": "Most", - "HeaderParentalRatings": "Korhatár besorolás", + "HeaderParentalRatings": "Korhatárbesorolás", "HeaderPassword": "Jelszó", "HeaderPaths": "Útvonalak", "HeaderPinCodeReset": "PIN-kód visszaállítása", "HeaderPlayAll": "Összes lejátszása", - "HeaderPlayOn": "Vetítés itt", + "HeaderPlayOn": "Lejátszás itt", "HeaderPlayback": "Médialejátszás", - "HeaderPleaseSignIn": "Kérlek jelentkezz be", + "HeaderPleaseSignIn": "Jelentkezzen be", "HeaderPluginInstallation": "Bővítmény telepítése", "HeaderPreferredMetadataLanguage": "Előnyben részesített metaadatnyelv", "HeaderRecentlyPlayed": "Nemrég játszott", "HeaderRemoteControl": "Távirányítás", "HeaderRevisionHistory": "Módosítási előzmények", - "HeaderRunningTasks": "Futó folyamatok", + "HeaderRunningTasks": "Futó feladatok", "HeaderScenes": "Jelenetek", "HeaderSeasons": "Évadok", "HeaderSelectMetadataPath": "Válaszd ki a metaadat útvonalat", "HeaderSendMessage": "Üzenet küldése", - "HeaderSetupLibrary": "Állítsd be a média könyvtáraidat", - "HeaderSortBy": "Megjelenítés", + "HeaderSetupLibrary": "Állítsa be a médiatárait", + "HeaderSortBy": "Rendezés", "HeaderSortOrder": "Sorrend", "HeaderStatus": "Állapot", - "HeaderSubtitleDownloads": "Felirat letöltések", + "HeaderSubtitleDownloads": "Feliratletöltések", "HeaderSystemDlnaProfiles": "Rendszer profilok", "HeaderTracks": "Sávok", - "HeaderUploadImage": "Kép feltöltés", + "HeaderUploadImage": "Kép feltöltése", "HeaderUser": "Felhasználó", "HeaderUsers": "Felhasználók", "HeaderVideoType": "Videó típusa", @@ -162,7 +162,7 @@ "Images": "Képek", "InstallingPackage": "{0} ({1} verzió) telepítése", "Label3DFormat": "3D formátum", - "LabelAlbumArtists": "Album előadók", + "LabelAlbumArtists": "Albumelőadók", "LabelArtists": "Előadók", "LabelAudioLanguagePreference": "Hang előnyben részesített nyelve", "LabelBirthYear": "Születési év", @@ -190,13 +190,13 @@ "LabelEpisodeNumber": "Epizód száma", "LabelEvent": "Esemény", "LabelEveryXMinutes": "Minden", - "LabelFinish": "Befejez", - "LabelForgotPasswordUsernameHelp": "Add meg a felhasználóneved, ha emlékszel rá.", - "LabelGroupMoviesIntoCollections": "Filmek csoportosítása gyűjteményekbe", + "LabelFinish": "Befejezés", + "LabelForgotPasswordUsernameHelp": "Adja meg a felhasználónevét, ha emlékszik rá.", + "LabelGroupMoviesIntoCollections": "Filmek gyűjteményekbe csoportosítása", "LabelEncoderPreset": "Enkóder beállítások", "LabelHardwareAccelerationType": "Hardveres gyorsítás", - "LabelHardwareAccelerationTypeHelp": "A hardveres gyorsítás további konfigurálást igényel.", - "LabelHomeScreenSectionValue": "{0}. kezdőképernyő blokk", + "LabelHardwareAccelerationTypeHelp": "A hardveres gyorsítás további beállításokat igényel.", + "LabelHomeScreenSectionValue": "{0}. kezdőképernyő-blokk", "LabelImageType": "Kép típusa", "LabelKodiMetadataDateFormat": "Megjelenési dátum formátuma", "LabelLanguage": "Nyelv", @@ -280,7 +280,7 @@ "MessageAlreadyInstalled": "Ez a verzió már telepítve van.", "MessageConfirmRestart": "Biztosan újra szeretnéd indítani a Jellyfint?", "MessageConfirmShutdown": "Biztosan le akarod állítani a Szervert?", - "MessageItemsAdded": "Elem hozzáadva.", + "MessageItemsAdded": "Elemek hozzáadva.", "MessageNoPluginsInstalled": "Nincs bővítmény telepítve.", "MessageNothingHere": "Nincs itt semmi.", "MessagePleaseEnsureInternetMetadata": "Kérlek ellenőrizd hogy az Internetes metaadat letöltés engedélyezve van.", @@ -293,16 +293,16 @@ "Mute": "Némít", "MySubtitles": "Feliratok", "Name": "Név", - "NewCollection": "Új Gyűjtemény", - "NewCollectionNameExample": "Például: Star Wars Gyűjtemény", + "NewCollection": "Új gyűjtemény", + "NewCollectionNameExample": "Például: Star Wars gyűjtemény", "NewEpisodes": "Új epizódok", "NewEpisodesOnly": "Csak új epizódok", "NoSubtitleSearchResultsFound": "Nincs találat.", "None": "Nincs", - "NumLocationsValue": "{0} könyvtár", + "NumLocationsValue": "{0} mappa", "OptionAdminUsers": "Adminisztrátorok", "OptionAllUsers": "Összes felhasználó", - "OptionAllowBrowsingLiveTv": "Élő TV hozzáférés engedélyezése", + "OptionAllowBrowsingLiveTv": "Élő TV-hozzáférés engedélyezése", "OptionAllowLinkSharing": "Közösségi médiamegosztás engedélyezése", "OptionAllowMediaPlayback": "Média lejátszás engedélyezése", "OptionAllowRemoteControlOthers": "Egyéb felhasználók távoli irányításának engedélyezése", @@ -440,13 +440,13 @@ "LabelDropImageHere": "Húzz ide egy képet, vagy kattints a böngészéshez.", "LabelDropShadow": "Árnyék", "LabelDynamicExternalId": "{0} Id", - "AccessRestrictedTryAgainLater": "A hozzáférés jelenleg korlátozott. Kérlek próbáld újra később.", + "AccessRestrictedTryAgainLater": "A hozzáférés jelenleg korlátozott. Próbálja újra később.", "Actor": "Színész", "AirDate": "Vetítés dátuma", - "Aired": "Megjelent", + "Aired": "Megjelenés", "Albums": "Albumok", - "AllChannels": "Minden csatorna", - "AllComplexFormats": "Minden összetett formátum (ASS, SSA, VobSub, PGS, SUB, IDX, ...)", + "AllChannels": "Összes csatorna", + "AllComplexFormats": "Összes összetett formátum (ASS, SSA, VobSub, PGS, SUB, IDX, …)", "AllowMediaConversion": "Média konvertálás engedélyezése", "AllowMediaConversionHelp": "Add meg vagy tiltsd le a média konvertálás funkcióhoz való hozzáférést.", "AllowRemoteAccess": "Távoli kapcsolatok engedélyezése ehhez a szerverhez", @@ -457,42 +457,42 @@ "AroundTime": "Körülbelül {0}", "AsManyAsPossible": "Amennyi lehetséges", "AspectRatio": "Képarány", - "Auto": "Auto", + "Auto": "Automatikus", "Backdrop": "Háttér", - "Backdrops": "Háttér", + "Backdrops": "Hátterek", "Banner": "Banner", "BirthLocation": "Születési hely", "Box": "Doboz", "AlwaysPlaySubtitlesHelp": "A nyelvi beállításoknak megfelelő feliratok az audió nyelvétől függetlenül kerülnek betöltésre.", "Artists": "Előadók", "Blacklist": "Feketelista", - "BookLibraryHelp": "Lehetőség van audió és hangoskönyvek visszajátszására. Nézd meg a {0} könyvelnevezési útmutatót {1}.", + "BookLibraryHelp": "A hangos és szöveges könyvek támogatottak. Nézze meg a {0} könyvelnevezési útmutatót {1}.", "MessageBrowsePluginCatalog": "Böngéssz a Bővítmény katalógusunkban a rendelkezésre álló bővítmények megtekintéséhez.", - "AllowedRemoteAddressesHelp": "Vesszővel válaszd el az IP-címek vagy IP / netmask címek listáját annak a hálózatnak amelyből távolról csatlakozhatnak. Ha üresen marad, az összes távoli cím megengedett.", + "AllowedRemoteAddressesHelp": "Azon IP-címek vagy IP/netmask bejegyzések vesszővel elválasztott listája, melyekből távolról csatlakozhatnak. Ha üresen marad, az összes távoli cím megengedett.", "BoxRear": "Doboz (hátulja)", "ButtonArrowLeft": "Bal", "ButtonArrowRight": "Jobb", "ButtonBack": "Vissza", "ButtonEditOtherUserPreferences": "A felhasználó profiljának, képének és személyes beállításainak szerkesztése.", "ButtonFullscreen": "Teljes képernyő", - "ButtonInfo": "Info", + "ButtonInfo": "Információ", "ButtonNetwork": "Hálózat", "ButtonOk": "Ok", "ButtonRevoke": "Visszavonás", - "ButtonSelectView": "Válassz nézetet", + "ButtonSelectView": "Válasszon nézetet", "ButtonStart": "Indítás", - "CancelRecording": "Felvétel törlése", - "CancelSeries": "Sorozat visszavonása", + "CancelRecording": "Felvétel megszakítása", + "CancelSeries": "Sorozat megszakítása", "Categories": "Kategóriák", - "ChangingMetadataImageSettingsNewContent": "A metaadatok vagy az artwork fileok letöltési beállításainak módosítása csak a könyvtárhoz hozzáadott új tartalomra vonatkozik. A meglévő címek módosításainak alkalmazásához manuálisan kell frissíteni a metaadatokat.", - "ChannelAccessHelp": "Válaszd ki a megosztani kívánt csatornákat a felhasználóval. A rendszergazdák a metaadatkezelő segítségével szerkeszthetik az összes csatornát.", + "ChangingMetadataImageSettingsNewContent": "A metaadatok vagy az illusztrációs fájlok letöltési beállításainak módosítása csak a médiatárhoz hozzáadott új tartalomra vonatkozik. A meglévő címek módosításainak alkalmazásához kézileg kell frissíteni a metaadatokat.", + "ChannelAccessHelp": "Válassza ki a felhasználóval megosztandó csatornákat. A rendszergazdák a metaadat-kezelő segítségével szerkeszthetik az összes csatornát.", "ChannelNameOnly": "Csak a(z) {0}. csatorna", "ChannelNumber": "Csatorna száma", "CinemaModeConfigurationHelp": "A Mozi mód igazi mozi élményt nyújt előzetessel és egyedi intróval a film vetítése előtt.", "ColorSpace": "Színtér", "ColorTransfer": "Színátvitel", "Composer": "Zeneszerző", - "ConfigureDateAdded": "Állítsa be, hogy a „Hozzáadás Dátuma” metaadatok hogyan legyenek meghatározva az Irányítópult > Könyvtárak > Kijelző menüpontban", + "ConfigureDateAdded": "Állítsa be az Irányítópult > Médiatárak > Megjelenítés menüpontban, hogy a „Hozzáadás dátuma” metaadat hogyan legyen meghatározva.", "ConfirmDeleteImage": "Kép törlése?", "ConfirmDeleteItem": "Az elem törlésével az törlődni fog a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", "ConfirmDeleteItems": "Az elemek törlésével azok törlődni fognak a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", @@ -508,9 +508,9 @@ "DefaultMetadataLangaugeDescription": "Ezek az alapértelmezettek, és könyvtáranként testre szabhatók.", "DeleteDeviceConfirmation": "Biztosan törölni szeretnéd ezt az eszközt? Legközelebb akkor jelenik meg, amikor a felhasználó bejelentkezik róla.", "DeleteImage": "Kép törlése", - "DeleteImageConfirmation": "Biztosan törölni szeretnéd ezt a képet?", + "DeleteImageConfirmation": "Biztos, hogy törli ezt a képet?", "DeleteUser": "Felhasználó törlése", - "DeleteUserConfirmation": "Biztosan törölni szeretnéd ezt a felhasználót?", + "DeleteUserConfirmation": "Biztos, hogy törli ezt a felhasználót?", "DetectingDevices": "Eszközök észlelése", "DirectPlaying": "Közvetlen lejátszás", "DirectStreamHelp1": "A videofolyamat kompatibilis a lejátszóval, de inkompatibilis audio formátumú (DTS, Dolby TrueHD stb.) Vagy nem kompatibilis számú audiocsatorna. A videofolyamat működés közben veszteség nélkül újracsomagolódik, mielőtt a készülékre küldené. Csak a hangfolyamot kódoljuk át.", @@ -542,7 +542,7 @@ "ErrorDeletingItem": "Hiba történt az elem szerverről való törlése során. Ellenőrizd, hogy a szerver rendelkezik-e írási jogosultsággal a média mappához és próbálja újra.", "ErrorStartHourGreaterThanEnd": "A befejezési időnek nagyobbnak kell lennie mint a kezdési idő.", "ErrorSavingTvProvider": "Hiba történt a TV szolgáltató mentésekor. Kérlek győződj meg róla, hogy elérhető és próbálkozz meg újra.", - "EveryNDays": "Minden {0} nap", + "EveryNDays": "Minden {0}. nap", "ExtraLarge": "Extra NAGY", "ExtractChapterImagesHelp": "A fejezetképek kivonása lehetővé teszi, hogy az alkalmazások grafikus jelenetválasztási menüket jelenítsenek meg. A folyamat lehet lassú, erőforrás igényes, és több gigabájt területet igényelhet. A kivonás akkor történik, amikor új videók kerülnek a Médiatárba, valamint egy éjszakai ütemezett feladatként. Az ütemezés konfigurálható az Ütemezett Feladatok menüpontban. Nem ajánlott ezt a feladatot a csúcshasználati órákban futtatni.", "Extras": "Extrák", @@ -566,19 +566,19 @@ "HeaderAlbumArtists": "Albumelőadók", "HeaderAlert": "Figyelem", "HeaderAllowMediaDeletionFrom": "Médiatörlés engedélyezése innen", - "HeaderApiKey": "API kulcs", - "HeaderApiKeys": "API kulcsok", + "HeaderApiKey": "API-kulcs", + "HeaderApiKeys": "API-kulcsok", "HeaderAppearsOn": "Megjelenik", - "HeaderCancelRecording": "Felvétel törlése", - "HeaderCancelSeries": "Sorozat törlése", - "HeaderChannelAccess": "Csatorna hozzáférés", - "HeaderChapterImages": "Fejezet képek", + "HeaderCancelRecording": "Rögzítés megszakítása", + "HeaderCancelSeries": "Sorozat megszakítása", + "HeaderChannelAccess": "Csatorna-hozzáférés", + "HeaderChapterImages": "Fejezetképek", "HeaderCodecProfile": "Kodekprofil", "HeaderCodecProfileHelp": "A kodekprofilok jelzik a készülék korlátait az adott kodekkel történő lejátszáskor. Ha egy korlátozás érvényes, akkor a média átkódolásra kerül, még akkor is ha a kodek közvetlen lejátszásra van állítva.", "HeaderConfigureRemoteAccess": "Távoli hozzáférés beállítása", "HeaderConfirmPluginInstallation": "Bővítmény telepítésének megerősítése", "HeaderConfirmProfileDeletion": "Profil törlésének megerősítése", - "HeaderConfirmRevokeApiKey": "API kulcs visszavonása", + "HeaderConfirmRevokeApiKey": "API-kulcs visszavonása", "HeaderConnectionFailure": "Kapcsolathiba", "HeaderContainerProfile": "Konténerprofil", "HeaderContainerProfileHelp": "A konténerprofilok meghatározzák az eszköz korlátozásait bizonyos formátumok lejátszásakor. Ha egy korlátozás érvényes akkor a média átkódolásra kerül még akkor is, ha a formátum közvetlen lejátszásra van konfigurálva.", @@ -621,7 +621,7 @@ "HeaderRecordingOptions": "Felvételi beállítások", "HeaderRecordingPostProcessing": "Felvétel utáni feldolgozás", "HeaderRemoveMediaFolder": "Médiamappa eltávolítása", - "HeaderRemoveMediaLocation": "Média eltávolítása", + "HeaderRemoveMediaLocation": "Médiahely eltávolítása", "HeaderResponseProfile": "Válaszprofil", "HeaderResponseProfileHelp": "A válaszprofilok lehetővé teszik az eszközre küldött információk testreszabását bizonyos médiák lejátszásakor.", "HeaderSecondsValue": "{0} másodperc", @@ -632,7 +632,7 @@ "HeaderSelectServerCachePathHelp": "Tallózd ki vagy írd be a szerver gyorsítótár fájljainak elérési útját. A mappának írhatónak kell lennie.", "HeaderSelectTranscodingPath": "Válaszd ki az Átkódolás ideiglenes útvonalát", "HeaderSelectTranscodingPathHelp": "Tallózd ki vagy add meg a fájlok átkódolásához használt útvonalat. A mappának írhatónak kell lennie.", - "HeaderSeriesOptions": "Sorozatok beállításai", + "HeaderSeriesOptions": "Sorozat beállításai", "LabelTag": "Címke", "MediaInfoCodecTag": "Kódek címke", "Photos": "Fényképek", @@ -642,8 +642,8 @@ "ValueSpecialEpisodeName": "Különkiadás – {0}", "EnableThemeVideosHelp": "Témavideókat játszhat a háttérben a könyvtár böngészése közben.", "HeaderBlockItemsWithNoRating": "Blokkolja azokat az elemeket amelyek tiltott, vagy nem felismerhető minősítésűek", - "HeaderSeriesStatus": "Sorozat állapot", - "HeaderSpecialEpisodeInfo": "Speciális epizód információ", + "HeaderSeriesStatus": "Sorozat állapota", + "HeaderSpecialEpisodeInfo": "Speciális epizódinformációk", "HeaderStartNow": "Indítás most", "HeaderStopRecording": "Felvétel leállítása", "HeaderSubtitleAppearance": "Felirat kinézete", @@ -657,9 +657,9 @@ "HeaderTunerDevices": "Tuner eszközök", "HeaderTuners": "Tunerek", "HeaderTypeImageFetchers": "Képgyűjtők ({0})", - "HeaderTypeText": "Írd be a szöveget", + "HeaderTypeText": "Írja be a szöveget", "HeaderVideoQuality": "Videóminőség", - "HeaderVideoTypes": "Videó típusok", + "HeaderVideoTypes": "Videótípusok", "HeaderXmlDocumentAttribute": "XML dokumentum attribútum", "HeaderXmlDocumentAttributes": "XML dokumentum attribútumok", "HeaderXmlSettings": "XML beállítások", @@ -670,7 +670,7 @@ "ItemCount": "{0} elem", "Items": "Elemek", "Kids": "Gyerekek", - "LabelAbortedByServerShutdown": "(A szerver leállítása megszakította)", + "LabelAbortedByServerShutdown": "(A kiszolgáló leállítása megszakította)", "LabelAccessDay": "A hét napja", "LabelAccessEnd": "Befejezés ideje", "LabelAccessStart": "Kezdés ideje", @@ -684,7 +684,7 @@ "LabelAllowedRemoteAddresses": "Távoli IP cím szűrő", "LabelAllowedRemoteAddressesMode": "Távoli IP cím szűrő mód", "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.", + "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.", @@ -711,7 +711,7 @@ "LabelDisplayLanguage": "Megjelenítési nyelv", "LabelDisplayLanguageHelp": "A Jellyfin fordítása egy folyamatos projekt.", "LabelDisplayMode": "Megjelenítési mód", - "LabelArtistsHelp": "Ha több előadót adsz meg, pontosvesszővel válaszd el őket.", + "LabelArtistsHelp": "Az előadókat pontosvesszővel válassza el.", "LabelEnableAutomaticPortMapHelp": "A szerver az UPnP segítségével a routeren megpróbálja automatikusan átirányítani a nyilvános portot a helyi portra. Előfordulhat, hogy egyes router modellek, vagy hálózati konfigurációk esetén ez nem működik. A módosítások újraindítás után lépnek életbe.", "LabelEnableBlastAliveMessagesHelp": "Engedélyezd ezt ha a szerver nem észleli megbízhatóan a hálózat más UPnP-eszközeit.", "LabelEnableDlnaClientDiscoveryInterval": "Kliens felderítési intervallum", @@ -725,11 +725,11 @@ "LabelEnableSingleImageInDidlLimit": "Korlátozás egyetlen beágyazott képre", "LabelEnableSingleImageInDidlLimitHelp": "Néhány eszköz nem jeleníti meg megfelelően, ha több kép van beágyazva a DIDL-be.", "LabelEndDate": "Befejezés dátuma", - "LabelExtractChaptersDuringLibraryScan": "Fejezet képek készítése a könyvtár beolvasása során", - "LabelExtractChaptersDuringLibraryScanHelp": "A fejezetképek elkészítése a könyvtár beolvasása során történik meg. Ellenkező esetben az elkészítés az Ütemezett feladatokban meghatározott időben készül el, ami lehetővé teszi a könyvtárbeolvasás gyorsítását.", + "LabelExtractChaptersDuringLibraryScan": "Fejezetképek készítése a médiatár beolvasása során", + "LabelExtractChaptersDuringLibraryScanHelp": "A fejezetképek létrehozása a médiatár beolvasása során. Ellenkező esetben az ütemezett feladatokban meghatározott időben kerül kinyerésre, ami lehetővé teszi a médiatár gyorsabb beolvasását.", "LabelFailed": "Sikertelen", - "LabelFileOrUrl": "Fájl vagy URL", - "LabelFont": "Betűtípus", + "LabelFileOrUrl": "Fájl vagy webcím", + "LabelFont": "Betűkészlet", "LabelFormat": "Formátum", "LabelFriendlyName": "Könnyen megjegyezhető név", "LabelServerNameHelp": "Ez a név kerül a Szerver azonosítására és alapértelmezetten a hoszt neve kerül felhasználásra.", @@ -738,11 +738,11 @@ "LabelHomeNetworkQuality": "Otthoni hálózat minősége", "LabelHttpsPort": "Helyi HTTPS port száma", "LabelImageFetchersHelp": "Engedélyezd és rangsorold az előnyben részesített képletöltőket prioritásuk sorrendjében.", - "LabelImportOnlyFavoriteChannels": "Csak a kedvencként megjelölt csatornákra korlátozza", + "LabelImportOnlyFavoriteChannels": "Csak a kedvencként megjelölt csatornákra korlátozás", "LabelInNetworkSignInWithEasyPassword": "Engedélyezze a hálózaton belüli bejelentkezést az egyszerű PIN kóddal", "LabelInNetworkSignInWithEasyPasswordHelp": "Az egyszerű PIN kódod segítségével beléphetsz az alkalmazásokból az otthoni hálózaton belül. A szokásos jelszót csak akkor kell használni, ha az otthoni hálózaton kívül vagy. Ha a PIN kód üres, akkor nem lesz szükség jelszóra az otthoni hálózaton belül.", "LabelInternetQuality": "Internet minősége", - "LabelKidsCategories": "Gyermek kategóriák", + "LabelKidsCategories": "Gyermek kategóriái", "LabelKodiMetadataDateFormatHelp": "Az NFO-n belüli összes dátum ezzel a formátummal lesz kezelve.", "LabelKodiMetadataEnableExtraThumbs": "Másolja az extrafanartot extrathumbs mezőbe", "LabelKodiMetadataEnableExtraThumbsHelp": "A képek letöltésekor mind az extrafanart, mind az extrathumbs-ba menthetőek a maximális Kodi skin kompatibilitáshoz.", @@ -836,7 +836,7 @@ "LabelValue": "Érték", "LabelZipCode": "Irányítószám", "LabelffmpegPath": "FFmpeg útvonal", - "LabelffmpegPathHelp": "Az FFmpeg alkalmazásfájl elérési útja vagy az őt tartalmazó mappa.", + "LabelffmpegPathHelp": "Az FFmpeg alkalmazásfájl elérési útja, vagy az azt tartalmazó mappa.", "Large": "Nagy", "LearnHowYouCanContribute": "Ismerd meg, hogyan járulhatsz hozzá.", "LeaveBlankToNotSetAPassword": "Ha nem szeretnél jelszót beállítani, hagyd ezt a mezőt üresen.", @@ -909,7 +909,7 @@ "MoveRight": "Mozgás jobbra", "MovieLibraryHelp": "Tekintsd át a {0} film elnevezési útmutatót {1}.", "Never": "Soha", - "NewCollectionHelp": "A gyűjtemények lehetővé teszik, hogy személyre szabott csoportokat hozz létre filmekből és más könyvtártartalomból.", + "NewCollectionHelp": "A gyűjtemények lehetővé teszik, hogy személyre szabott csoportokat hozzon létre filmekből és más könyvtártartalomból.", "News": "Hírek", "Next": "Következő", "NextUp": "Következik", @@ -922,7 +922,7 @@ "OneChannel": "Egy csatorna", "OnlyImageFormats": "Csak képformátumok (VoBSuB, PGS, SUB)", "Option3D": "3D", - "OptionAllowAudioPlaybackTranscoding": "Engedélyezze az átkódolást igénylő audió lejátszást", + "OptionAllowAudioPlaybackTranscoding": "Átkódolást igénylő hanglejátszás engedélyezése", "OptionAllowContentDownloading": "Média letöltésének és szinkronizálásának engedélyezése", "OptionAllowLinkSharingHelp": "Csak a médiaadatokat tartalmazó weboldalak oszthatók meg. A médiafájlok soha nem oszthatók meg nyilvánosan. A megosztás időlimithez van kötve, és lejár {0} nap elteltével.", "OptionAllowManageLiveTv": "Élő TV felvételkezelés engedélyezése", @@ -1105,9 +1105,9 @@ "SmallCaps": "Kiskapitális", "AllowOnTheFlySubtitleExtractionHelp": "A beágyazott feliratokat ki lehet nyerni a videókból és elküldeni az alkalmazásoknak sima szöveg formátumba, hogy ne legyen átkódolás. Néhány eszközön ez hosszú ideig is eltarthat, valamint a videó lejátszás megakadhat az eltávolítási folyamat futása közben. Ezt kikapcsolva a beágyazott feliratok videó átkódolással beégetésre kerülnek azon kliens eszközökre melyek nem támogatják a külső feliratokat.", "Art": "ClearArt", - "AuthProviderHelp": "Válaszd ki az azonosítási szolgáltatást amely ezen felhasználó jelszavának ellenőrzését valósítja meg.", - "BurnSubtitlesHelp": "Meghatározza, hogy a szervernek be kell-e égetnie a feliratot a felirat típusának függvényében. Ennek elkerülésével a szerver teljesítménye javul. Válaszd az Auto lehetőséget a kép alapú feliratok (pl. VobSuB, PGS, SUB/IDX, stb.) és bizonyos ASS/SSA feliratok beégetéséhez.", - "ButtonAddScheduledTaskTrigger": "Vezérlő hozzáadása", + "AuthProviderHelp": "Válassza ki a felhasználó jelszava ellenőrzésére használt hitelesítésszolgáltatót.", + "BurnSubtitlesHelp": "Meghatározza, hogy a kiszolgálónak be kell-e égetnie a feliratot. Ennek elkerülésével javul a kiszolgáló teljesítménye. Válassza az Automatikus lehetőséget a kép alapú formátumok (például VobSuB, PGS, SUB/IDX, stb.) és bizonyos ASS/SSA feliratok beégetéséhez.", + "ButtonAddScheduledTaskTrigger": "Aktiváló hozzáadása", "ButtonRefreshGuideData": "Műsorújság frissítése", "ColorPrimaries": "Alapszínek", "DefaultSubtitlesHelp": "A feliratok a beágyazott metaadatok alapértelmezett és forced jelölői által meghatározottak alapján kerülnek betöltésre. A nyelvi beállítások akkor kerülnek figyelembe vételre, ha több lehetőség is rendelkezésre áll.", @@ -1116,9 +1116,9 @@ "Guide": "Műsorújság", "H264CrfHelp": "A 'Constant Rate Factor' (CRF) az alapértelmezett minőségi beállítás az x264 és x265 enkóderekhez. Az értékek 0 és 51 között állíthatók, ahol az alacsonyabb érték jobb minőséget eredményez (nagyobb fájl méret mellett). Az ajánlott érték 18 és 28 között van. Az x264 alapértelmezett beállítása 23, x265-é 28, ez lehet kiindulási alap. A hardveresen gyorsított enkóderek nem használják ezt a beállítást.", "HeaderApiKeysHelp": "A külső alkalmazásoknak egy API kulcsra van szüksége, hogy kommunikáljanak a szerverrel. A kulcsokat egy fiókkal történő belépéssel lehet megkapni, vagy kézileg felvenni egy alkalmazáshoz tartozó kulcsot.", - "HeaderBranding": "Személyes arculat", - "HeaderContinueListening": "Folyamatban lévő zenék", - "HeaderDeleteTaskTrigger": "Feladatvezérlő törlése", + "HeaderBranding": "Arculat", + "HeaderContinueListening": "Hallgatás folytatása", + "HeaderDeleteTaskTrigger": "Feladataktiváló törlése", "HeaderGuideProviders": "TV műsorújság szolgáltatók", "HeaderUpcomingOnTV": "Következő TV műsorok", "ImportFavoriteChannelsHelp": "Csak a tuner eszközön kedvencként megjelölt csatornák kerülnek importálásra.", @@ -1136,11 +1136,11 @@ "LabelEmbedAlbumArtDidl": "Albumborító beágyazása a DIDL-be", "LabelEmbedAlbumArtDidlHelp": "Néhány eszköz ezt a megoldást részesíti előnyben az albumborítók esetében. Mások esetlegesen lejátszási hibát jeleznek, ha ez az opció engedélyezve van.", "LabelEnableBlastAliveMessages": "Blast alive üzenetek", - "LabelHttpsPortHelp": "A TCP port száma, melyen a HTTPS szerver figyel.", + "LabelHttpsPortHelp": "A HTTPS kiszolgáló TCP portjának száma.", "LabelIconMaxHeight": "Ikon maximális magasság", "LabelIconMaxWidth": "Ikon maximális szélesség", "LabelIdentificationFieldHelp": "Kis-és nagybetű különbséget figyelmen kívül hagyó szöveg vagy reguláris kifejezés.", - "LabelKeepUpTo": "Őrizd meg", + "LabelKeepUpTo": "Megőrzés", "LabelKodiMetadataUser": "Mentsd el a következő felhasználó megtekintési adatát az NFO-ba", "LabelKodiMetadataUserHelp": "Mentse az időadatokat NFO-fájlokba, hogy más alkalmazások is használhatják.", "LabelLocalHttpServerPortNumberHelp": "A TCP port száma, melyen a HTTP szerver figyel.", @@ -1153,8 +1153,8 @@ "LabelAudioChannels": "Hangcsatornák", "LabelAudioBitrate": "Hang bitsebessége", "LabelAudioBitDepth": "Hang bitmélysége", - "CopyStreamURLSuccess": "URL másolása sikeres.", - "CopyStreamURL": "Stream URL másolása", + "CopyStreamURLSuccess": "A webcím másolása sikeres.", + "CopyStreamURL": "Közvetítés webcímének másolása", "PlaybackData": "Lejátszási információk", "ButtonAddImage": "Kép hozzáadása", "LabelPasswordResetProvider": "Jelszó Visszaállítási Szolgáltató", @@ -1210,7 +1210,7 @@ "HeaderKeepSeries": "Sorozat megtartása", "ErrorGettingTvLineups": "Hiba történt a TV kínálat letöltése során. Kérjük ellenőrizd a megadott információkat és próbáld újra.", "LabelTranscodes": "Átkódolások", - "AskAdminToCreateLibrary": "Kérj meg egy adminisztrátort könyvtár létrehozására.", + "AskAdminToCreateLibrary": "Kérjen meg egy adminisztrátort, hogy hozza létre a médiatárat.", "LabelXDlnaDoc": "Eszközosztály-azonosító", "LabelXDlnaCap": "Eszköztulajdon-azonosító", "MapChannels": "Csatornák feltérképezése", @@ -1242,7 +1242,7 @@ "ErrorAddingListingsToSchedulesDirect": "Hiba történt a felhozatal hozzáadása közben a Schedules Direct fiókhoz. A Schedules Direct csak korlátozott számú fiók hozzáadását támogatja. Lehetséges, hogy be kell jelentkezned a Schedules Direct weboldalán és eltávolítani néhány más listát a fiókodról mielőtt továbblépsz.", "DeviceAccessHelp": "Ez csak azokra az eszközökre alkalmazható, amelyek egyedileg vannak azonosítva és nem gátolják meg a böngészőből való elérést. A felhasználói eszközök kiszűrése meg fogja akadályozni az új eszközök használatát addig, amíg itt nem engedélyezed őket.", "PlaybackErrorNoCompatibleStream": "Ez a kliens nem kompatibilis ezzel a médiával és a szerver nem tud kompatibilis streamet küldeni az eszközre.", - "AllowFfmpegThrottlingHelp": "Ha az átkódolás vagy remux eléggé előtöltődött a jelenlegi lejátszási pozícióhoz képest, ez megállítja a folyamatot, hogy kevesebb erőforrást vegyen igénybe. Ez akkor hasznos, ha ritkán ugrálsz előre a lejátszott videókban. Kapcsold ki, ha lejátszási problémákba ütközöl.", + "AllowFfmpegThrottlingHelp": "Ha az átkódolás vagy remux eléggé előtöltődött a jelenlegi lejátszási pozícióhoz képest, ez megállítja a folyamatot, hogy kevesebb erőforrást vegyen igénybe. Ez akkor hasznos, ha ritkán ugrik előre a lejátszott videókban. Kapcsolja ki, ha lejátszási problémákba ütközik.", "AllowFfmpegThrottling": "Átkódolás visszafogása", "PreferEmbeddedEpisodeInfosOverFileNames": "Az epizódból elérhető beágyazott információkat használja inkább, fájlnevek helyett", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Ha elérhető, használja a beágyazott metaadatokból származó epizódinformációkat.", @@ -1263,9 +1263,9 @@ "Movie": "Film", "Episode": "Epizód", "ClientSettings": "Kliensbeállítások", - "BoxSet": "Dobozos kiadások", + "BoxSet": "Dobozos kiadás", "Artist": "Előadó", - "AlbumArtist": "Album előadó", + "AlbumArtist": "Albumelőadó", "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", @@ -1273,7 +1273,7 @@ "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", - "ButtonTogglePlaylist": "Lejátszási listák", + "ButtonTogglePlaylist": "Lejátszási lista", "Filter": "Szűrés", "New": "Új", "ApiKeysCaption": "A jelenleg engedélyezett API kulcsok listája", @@ -1302,7 +1302,7 @@ "LabelSyncPlaySyncMethod": "Szinkronizálási mód", "MillisecondsUnit": "ms", "HeaderSyncPlayEnabled": "SyncPlay engedélyezve", - "HeaderSyncPlaySelectGroup": "Csatlakozás csoporthoz", + "HeaderSyncPlaySelectGroup": "Csatlakozás egy csoporthoz", "SyncPlayAccessHelp": "A SyncPlay funkcióhoz lehetőséget biztosít a lejátszások közötti szinkronizációra. Válaszd ki, hogy ez a felhasználó milyen szinten férhet hozzá a SyncPlay.", "MessageSyncPlayErrorMedia": "Nem sikerült a SyncPlay engedélyezése! Média hiba.", "MessageSyncPlayErrorMissingSession": "A SyncPlay lejátszása sikertelen! Hiányzó munkamenet.", @@ -1482,7 +1482,7 @@ "LabelAutoDiscoveryTracing": "Automatikus felfedezés nyomkövetésének engedélyezése.", "KnownProxiesHelp": "Vesszővel elválasztott lista az ismert IP-címeiről vagy gazdagép neveiről, amelyeket a Jellyfin példányhoz való csatlakozáskor használnak. Erre az 'X-Forwarded-For' fejlécek megfelelő használatához van szükség. Mentés után újra kell indítani.", "HeaderUploadSubtitle": "Felirat feltöltése", - "HeaderPortRanges": "Tűzfal és proxy beállítások", + "HeaderPortRanges": "Tűzfal és proxy beállításai", "HeaderNetworking": "IP protokollok", "HeaderDebugging": "Hibakeresés és nyomkövetés", "HeaderAutoDiscovery": "Hálózati felfedezés", @@ -1523,24 +1523,24 @@ "LabelDisableCustomCss": "Tiltsa le a szerverről biztosított egyéni CSS -tematizálást/kinézetet.", "DisableCustomCss": "A szerver által biztosított egyéni CSS-kód letiltása", "AudioBitDepthNotSupported": "A hang bitmélysége nem támogatott", - "VideoProfileNotSupported": "A videokodek profilja nem támogatott", - "VideoLevelNotSupported": "A videokodek szintje nem támogatott", + "VideoProfileNotSupported": "A videókodek profilja nem támogatott", + "VideoLevelNotSupported": "A videókodek szintje nem támogatott", "VideoFramerateNotSupported": "A videó képfrissítési sebessége nem támogatott", "VideoBitDepthNotSupported": "A videó bitmélysége nem támogatott", "RefFramesNotSupported": "A referenciakeretek nem támogatottak", - "SecondaryAudioNotSupported": "Másodlagos hangsávok nem támogatottak", - "InterlacedVideoNotSupported": "Az átlapolt videó nem támogatott", - "AnamorphicVideoNotSupported": "Az anamorf videók nem támogatottak", + "SecondaryAudioNotSupported": "A másodlagos hangsávok nem támogatottak", + "InterlacedVideoNotSupported": "A váltottsoros videó nem támogatott", + "AnamorphicVideoNotSupported": "Az anamorf videó nem támogatott", "AudioSampleRateNotSupported": "A hang mintavételi aránya nem támogatott", - "AudioProfileNotSupported": "Az audio kodek profilja nem támogatott", + "AudioProfileNotSupported": "A hangkodek profilja nem támogatott", "VideoResolutionNotSupported": "A videó felbontása nem támogatott", - "AudioChannelsNotSupported": "Az audiocsatornák száma nem támogatott", - "AudioBitrateNotSupported": "A hang bitrátája nem támogatott", + "AudioChannelsNotSupported": "A hangcsatornák száma nem támogatott", + "AudioBitrateNotSupported": "A hang bitsebessége nem támogatott", "VideoCodecNotSupported": "A videó kodek nem támogatott", "SubtitleCodecNotSupported": "A felirat kodek nem támogatott", "ContainerNotSupported": "A tároló nem támogatott", "AudioCodecNotSupported": "Az audio kodek nem támogatott", - "LabelHardwareEncoding": "Hardver kódolás", + "LabelHardwareEncoding": "Hardveres kódolás", "Track": "Szám", "Remixer": "Remixelő", "ReleaseGroup": "Kiadási csoport", @@ -1567,7 +1567,7 @@ "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Manuálisan állítsa be az időeltolást (millisecond-ban) a kiválasztott eszközzel az idő szinkronizálásához. Óvatosan állítsd.", "LabelSyncPlaySettingsExtraTimeOffset": "Extra időeltolás", "LabelSyncPlaySettingsDescription": "A SyncPlay beállításainak módosítása", - "HeaderSyncPlayTimeSyncSettings": "Idő szinkron", + "HeaderSyncPlayTimeSyncSettings": "Időszinkron", "HeaderSyncPlayPlaybackSettings": "Lejátszás", "HeaderSyncPlaySettings": "SyncPlay beállítások", "SetUsingLastTracksHelp": "Próbálja meg a felirat/audio sávot az utolsó videóhoz legközelebb eső értékre állítani.", @@ -1606,16 +1606,16 @@ "UnknownVideoStreamInfo": "A videó streamelési információi ismeretlenek", "VideoBitrateNotSupported": "A videó bitrátája nem támogatott", "AudioIsExternal": "Az audiotovábbítás külső", - "LabelHardwareEncodingOptions": "Hardveres kódolási lehetőségek", - "IntelLowPowerEncHelp": "Az alacsony fogyasztású kódolás képes fenntartani a szükségtelen CPU-GPU szinkronizálást. Linuxon le kell tiltani, ha az i915 HuC firmware nincs konfigurálva.", - "EnableIntelLowPowerHevcHwEncoder": "Engedélyezze az Intel alacsony fogyasztású HEVC hardveres kódolóját", - "EnableIntelLowPowerH264HwEncoder": "Engedélyezze az Intel Low-Power H.264 hardveres kódolót", - "PreferSystemNativeHwDecoder": "Előnyben részesítse az operációs rendszer natív DXVA vagy VA-API hardveres dekódereit", - "ContainerBitrateExceedsLimit": "A videó bitrátája meghaladja a limitet", + "LabelHardwareEncodingOptions": "Hardveres kódolás beállításai", + "IntelLowPowerEncHelp": "Az alacsony fogyasztású kódolás felesleges CPU-GPU szinkronizációt tarthat fenn. Linuxon le kell tiltani, ha az i915 HuC firmware nincs beállítva.", + "EnableIntelLowPowerHevcHwEncoder": "Az Intel alacsony fogyasztású HEVC hardveres kódolójának engedélyezése", + "EnableIntelLowPowerH264HwEncoder": "Az Intel alacsony fogyasztású H.264 hardveres kódoló engedélyezése", + "PreferSystemNativeHwDecoder": "Az operációs rendszer natív DXVA vagy VA-API hardveres dekódolóinak előnyben részesítése", + "ContainerBitrateExceedsLimit": "A videó bitsebessége meghaladja a korlátot", "SelectAll": "Összes kiválasztása", "ButtonExitApp": "Kilépés az alkalmazásból", "Clip": "Klip", - "ThemeVideo": "Téma Videó", + "ThemeVideo": "Főcímvideó", "ThemeSong": "Főcímdal", "Sample": "Minta", "Scene": "Jelenet", @@ -1631,10 +1631,10 @@ "AllowEmbeddedSubtitles": "Különféle típusú beágyazott feliratok letiltása", "ShowParentImages": "Sorozatképek megjelenítése", "NextUpRewatching": "Újranézés", - "MixedMoviesShows": "Vegyes Filmek és Műsorok", + "MixedMoviesShows": "Vegyes filmek és sorozatok", "AddToFavorites": "Hozzáadás a kedvencekhez", "CopyFailed": "Nem sikerült másolni", - "Copy": "Másol", + "Copy": "Másolás", "Copied": "Másolva", "GoogleCastUnsupported": "A Google Cast nem támogatott", "ButtonBackspace": "Törlés", @@ -1643,7 +1643,7 @@ "EnableRewatchingNextUpHelp": "Engedélyezze a már megtekintett epizódok megjelenítését a „Következő” panelen.", "EnableRewatchingNextUp": "Engedélyezze az Újranézést a \"Következő rész\"-ben", "Localization": "Lokalizáció", - "ItemDetails": "Fájl részletei", + "ItemDetails": "Elem részletei", "StoryArc": "Sztori Arc", "Production": "Produkció", "OriginalAirDate": "Eredeti megjelenési dátum", @@ -1654,13 +1654,13 @@ "Bold": "Félkövér", "LabelTextWeight": "Betűvastagság", "EnableSplashScreen": "Indítóképernyő engedélyezése", - "MediaInfoDvLevel": "DV Szint", - "MediaInfoDvProfile": "DV Profil", - "MediaInfoDvVersionMinor": "DV Mellék Verzió", - "MediaInfoDvVersionMajor": "DV Fő Verzió", + "MediaInfoDvLevel": "DV szint", + "MediaInfoDvProfile": "DV profil", + "MediaInfoDvVersionMinor": "DV alverzió", + "MediaInfoDvVersionMajor": "DV főverzió", "MediaInfoDoViTitle": "DV cím", - "MediaInfoVideoRangeType": "Videó tartomány típusa", - "LabelVideoRangeType": "Videó tartomány típusa", + "MediaInfoVideoRangeType": "Videótartomány típusa", + "LabelVideoRangeType": "Videótartomány típusa", "VideoRangeTypeNotSupported": "A videó tartománytípusa nem támogatott", "LabelVppTonemappingContrastHelp": "Kontraszt növelésének mértéke VPP tónusleképezés használatakor. Az ajánlott és az alapértelmezett érték 1.", "LabelVppTonemappingContrast": "VPP tónusleképezés kontrasztszintje", @@ -1672,10 +1672,10 @@ "RememberAudioSelectionsHelp": "Próbálja meg úgy beállítani a hangsávot, hogy a legközelebb legyen az utolsó videóhoz.", "RememberAudioSelections": "Hangsáv beállítása az előző elem alapján", "LabelMaxVideoResolution": "Maximálisan engedélyezett felbontás, Video Transzkódolás alatt", - "MediaInfoDvBlSignalCompatibilityId": "Dolby Vision BL jel kompatibilitási azonosító", - "MediaInfoBlPresentFlag": "Dolby Vision BL előre beállított zászló", - "MediaInfoElPresentFlag": "Dolby Vision EL elérhető markerek", - "MediaInfoRpuPresentFlag": "Dolby Vision rpu zászló jelen van", + "MediaInfoDvBlSignalCompatibilityId": "DV bl jel kompatibilitási azonosítója", + "MediaInfoBlPresentFlag": "DV bl előbeállítás-jelző", + "MediaInfoElPresentFlag": "DV el előbeállítás-jelző", + "MediaInfoRpuPresentFlag": "DV rpu előbeállítás-jelző", "IgnoreDtsHelp": "Ennek az opciónak a letiltása megoldhat bizonyos problémákat, pl. hiányzik a hang a külön hang- és videofolyamokkal rendelkező csatornákon.", "IgnoreDts": "DTS (dekódolási időbélyeg) figyelmen kívül hagyása", "OptionDateShowAdded": "Műsor hozzáadásának dátuma", @@ -1703,7 +1703,7 @@ "LabelDummyChapterCountHelp": "Az egyes médiafájlokból kibontható fejezetképek maximális száma.", "PreferEmbeddedExtrasTitlesOverFileNames": "Részesítse előnyben a beágyazott címeket a fájlnevekkel szemben", "SaveRecordingImages": "Rögzített EPG-képek mentése", - "Experimental": "Tapasztalati", + "Experimental": "Kísérleti", "LabelStereoDownmixAlgorithm": "Térhatású csatornák egyesítése", "HeaderDummyChapter": "Fejezetképek", "HeaderRecordingMetadataSaving": "Metaadatok rögzítése", @@ -1720,17 +1720,17 @@ "AllowCollectionManagement": "Ez a felhasználó módosíthatja a gyűjteményeket", "AllowSegmentDeletion": "Szegmensek törlése", "EnableAudioNormalization": "hang normalizálás", - "AllowSegmentDeletionHelp": "Régi szegmensek törlése miután a kliens által letöltésre kerültek. Ez megakadályozza, hogy a teljes, átkódolt fájlt szükséges legyen a merevlemezen tárolni. Kapcsold ki ha lejátszási problémákba ütközöl.", - "LabelThrottleDelaySecondsHelp": "Másodpercben megadott érték melyet követően az átkódoló visszfogásra kerül. Elég nagy értéket szükséges megadni, hogy a kliens számára egy egészséges puffer maradjon. Csak akkor működik ha a visszafogás funkció be van kapcsolva.", + "AllowSegmentDeletionHelp": "Régi szegmensek törlése miután a kliens letöltötte őket. Ez megakadályozza, hogy a teljes, átkódolt fájlt szükséges legyen a merevlemezen tárolni. Kapcsolja ki, ha lejátszási problémákba ütközik.", + "LabelThrottleDelaySecondsHelp": "Másodpercben megadott érték melyet követően az átkódoló visszafogásra kerül. Elég nagy értéket szükséges megadni, hogy a kliens számára egészséges puffer maradjon. Csak akkor működik, ha a visszafogás funkció be van kapcsolva.", "LabelSegmentKeepSeconds": "Szegmensek megtartása", "LabelThrottleDelaySeconds": "Visszafogás", - "LabelSegmentKeepSecondsHelp": "Másodpercben megadott érték mely előtt a szegmensek letöltésre kerülnek a kliens által. Csak akkor működik ha a szegmensek törlése funkció be van kapcsolva.", + "LabelSegmentKeepSecondsHelp": "Másodpercben megadott érték, mely előtt a szegmenseket a kliens letölti. Csak akkor működik, ha a szegmensek törlése funkció be van kapcsolva.", "LabelDummyChapterDurationHelp": "Az üres fejezetek közötti intervallum. Állítsa 0-ra az álfejezet generálásának letiltásához. Ennek megváltoztatása nincs hatással a meglévő álfejezetekre.", "PasswordRequiredForAdmin": "Az adminisztrátori fiókokhoz jelszó szükséges.", "UserMenu": "Felhasználói Menü", "Studio": "Stúdió", - "LabelTonemappingMode": "Tónus leképezési mód", - "Select": "Választás", + "LabelTonemappingMode": "Tónusleképezési mód", + "Select": "Kiválasztás", "LabelDate": "Dátum", "LabelSystem": "Rendszer", "LabelSyncPlayNoGroups": "Nincsenek elérhető csoportok", @@ -1742,11 +1742,11 @@ "SaveRecordingNFOHelp": "Mentse el az EPG-listaszolgáltató metaadatait a médiával együtt.", "EnableAudioNormalizationHelp": "A hang normalizálása állandó erősítést ad hozzá, hogy az átlagot a kívánt szinten tartsa (-18 dB).", "GetThePlugin": "Bővítmény beszerzése", - "LabelEnableLUFSScanHelp": "Az ügyfelek normalizálhatják a hanglejátszást, hogy azonos hangerőt kapjanak a sávok között. Ez hosszabbá teszi a könyvtár beolvasását, és több erőforrást igényel.", + "LabelEnableLUFSScanHelp": "A kliensek normalizálhatják a hanglejátszást, hogy azonos legyen a hangerő a sávok között. Ez hosszabbá teszi a médiatár beolvasását, és több erőforrást igényel.", "Notifications": "Értesítések", "NotificationsMovedMessage": "Az értesítési funkció átkerült a Webhook beépülő modulba.", - "MenuClose": "Menü Bezárása", - "MenuOpen": "Menü Megnyitása", + "MenuClose": "Menü bezárása", + "MenuOpen": "Menü megnyitása", "LabelEnableAudioVbr": "VBR hangkódolás engedélyezése", "LabelEnableAudioVbrHelp": "A változó bitsebesség jobb minőséget kínál az átlagos bitráta arányhoz, de néhány ritka esetben pufferelési és kompatibilitási problémákat okozhat.", "SaveRecordingImagesHelp": "Mentse el az EPG-lista szolgáltatójának képeit a médiával együtt.", @@ -1760,19 +1760,19 @@ "LogLevel.Critical": "Kritikus", "LogLevel.None": "Egyik sem", "MessageRepositoryInstallDisclaimer": "FIGYELMEZTETÉS: Harmadik féltől származó beépülő modulok tárolójának telepítése kockázatokkal jár. Instabil vagy rosszindulatú kódot tartalmazhat, és bármikor megváltozhat. Csak olyan szerzők tárolóit telepítse, akikben megbízik.", - "TonemappingModeHelp": "Válassza ki a tónus leképezési módot. Ha kiégett fénypontokat tapasztal, próbáljon átváltani RGB módra.", + "TonemappingModeHelp": "Válassza ki a tónusleképezési módot. Ha kiégett fénypontokat tapasztal, próbáljon átváltani RGB módra.", "Unknown": "Ismeretlen", "LabelBackdropScreensaverInterval": "Háttér Képernyővédő intervallum", "LabelBackdropScreensaverIntervalHelp": "A különböző hátterek közötti idő másodpercben a háttér képernyővédő használatakor.", "AllowAv1Encoding": "AV1 kódolás engedélyezése", - "GridView": "Rács Nézet", + "GridView": "Rácsnézet", "ListView": "Lista Nézet", - "MachineTranslated": "Gépi fordítás", - "AiTranslated": "Gépi fordítás", + "MachineTranslated": "Gépileg fordítva", + "AiTranslated": "MI-vel fordítva", "SearchResultsEmpty": "Sajnáljuk! Nem találtunk eredményeket a \"{0}\"", "LabelIsHearingImpaired": "Hallássérültek számára (SDH)", - "GoHome": "Kezdőlapra", - "BackdropScreensaver": "Háttér képernyővédő", + "GoHome": "Ugrás a kezdőlapra", + "BackdropScreensaver": "Háttér-képernyővédő", "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": "Hangnormalizálás", @@ -1782,7 +1782,7 @@ "ForeignPartsOnly": "Kényszerített/külföldi alkatrészek", "HearingImpairedShort": "HI/SDH", "HeaderGuestCast": "Vendégsztárok", - "HeaderAllRecordings": "Összes Felvétel", + "HeaderAllRecordings": "Összes felvétel", "LabelWebVersion": "Web verzió", "ButtonEditUser": "Felhasználó szerkesztése", "ChannelResolutionSD": "SD", @@ -1794,34 +1794,34 @@ "LabelBuildVersion": "Build verzió", "LabelServerVersion": "Szerver verzió", "AllowSubtitleManagement": "Feliratok szerkesztésének engedélyezése ennél a felhasználónál", - "AllowContentWithTagsHelp": "Csak a megadott címkék legalább egyikével rendelkező médiát jeleníti meg.", + "AllowContentWithTagsHelp": "Csak a megadott címkék legalább egyikével rendelkező média megjelenítése.", "AirPlay": "AirPlay", "LabelScanBehaviorHelp": "A kiindulási magatartás nem blokkoló, tehát a tartalom a könyvtárba kerül a lejátszástrükk generálás befejezése előtt. A blokkoló magatartás meggátolja könyvtárba kerülést a generálás befejeződéséig, de lényegesen hosszabbá teszi a könyvtárak beolvasását.", "PlaybackError.SERVER_ERROR": "A lejátszás meghiúsult kiszolgáló hiba miatt.", "PlaybackError.NO_MEDIA_ERROR": "Nem található lejátszható tartalom.", - "BlockContentWithTagsHelp": "Rejtse el a legalább egy megadott címkével ellátott tartalmakat.", + "BlockContentWithTagsHelp": "A megadott címkék legalább egyikével ellátott tartalmak elrejtése.", "PlaybackError.NETWORK_ERROR": "A lejátszás meghiúsult hálózati hiba miatt.", "PlaybackError.PLAYER_ERROR": "A lejátszás meghiúsult végzetes lejátszó hiba miatt.", "SavePassword": "Jelszó mentése", - "LabelEncodingFormatOptions": "Enkóder formátum beállítások", - "EncodingFormatHelp": "Válaszd ki, hogy a Jellyfin melyik enkódert használja. Ha hardveres gyorsítás nem elérhető a választott enkóderhez, a Jellyfin szoftver enkódert fog helyette használni. A H264 enkóder mindig engedélyezve lesz.", + "LabelEncodingFormatOptions": "Kódoló formátumbeállításai", + "EncodingFormatHelp": "Válassza ki, hogy a Jellyfin melyik videókódolásra kódoljon át. Ha a hardveres gyorsítás nem érhető el a választott formátumhoz, a Jellyfin szoftveres kódolót fog helyette használni. A H264 kódoló mindig engedélyezve lesz.", "Trickplay": "Lejátszótrükk", "PlaybackError.MEDIA_DECODE_ERROR": "A lejátszás meghiúsult tartalom dekódolási hiba miatt.", "PlaybackError.MEDIA_NOT_SUPPORTED": "A lejátszás meghiúsult, mert a tartalmat a kliens nem támogatja.", "PlaybackError.NotAllowed": "Ennek a tartalomnak a lejátszása nem engedélyezett.", - "BlockingScan": "Blokkoló - beütemezi a generációt és blokkolja a tartalom keresést ameddig elkészül", + "BlockingScan": "Blokkoló – beütemezi az előállítást, a befejeződéséig blokkolja a tartalomkeresést", "LabelTrickplayAccelEncodingHelp": "Jelenleg csak QSV és VAAPI gyorsítókon elérhető, más hardveres gyorsítókat nem befolyásol.", "PriorityHigh": "Magas", - "LabelTrickplayAccelEncoding": "Hardveresen gyorsított MJPEG enkódolás engedélyezése", + "LabelTrickplayAccelEncoding": "Hardveresen gyorsított MJPEG kódolás engedélyezése", "ConfirmDeleteLyrics": "A dalszövegek törlésével azok törlődni fognak a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", - "DeleteEntireSeries": "{0} Epizód törlése", + "DeleteEntireSeries": "{0} epizód törlése", "DeleteEpisode": "Epizód törlése", - "DeleteLyrics": "Dalszövegek törlése", + "DeleteLyrics": "Dalszöveg törlése", "DeleteSeries": "Sorozat törlése", - "DeleteName": "{0} Törlése", + "DeleteName": "{0} törlése", "ErrorDeletingLyrics": "A dalszövegek törlése közben hiba lépett fel. Kérlek ellenőrizd, hogy a Jellyfin rendelkezik e írási jogosultsággal a könyvtárhoz, majd próbáld újra.", "HeaderDeleteSeries": "Sorozat törlése", - "HeaderDeleteLyrics": "Dalszövegek Törlése", + "HeaderDeleteLyrics": "Dalszöveg törlése", "HeaderNoLyrics": "Nem található dalszöveg", "LimitSupportedVideoResolutionHelp": "Használja a maximum engedélyezett videó átkódolási felbontást a maximum támogatott videó felbontásként.", "Lyric": "Dalszöveg", @@ -1843,8 +1843,8 @@ "PlaybackError.ASS_RENDER_ERROR": "Hiba történt az ASS/SSA feliratok renderelésekor.", "PlaybackError.FATAL_HLS_ERROR": "Végzetes hiba jelentkezett a HLS stream-ben.", "LabelTrickplayAccel": "Hardveres dekódolás engedélyezése", - "NonBlockingScan": "Nem blokkoló - beütemezi a generálást, majd visszatér", - "LabelScanBehavior": "Tartalom keresési magatartás", + "NonBlockingScan": "Nem blokkoló – beütemezi az előállítást, majd visszatér", + "LabelScanBehavior": "Tartalomkeresési viselkedés", "ConfirmDeleteSeries": "A sorozat törlésével törlődni fog az ÖSSZES {0} epizód a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", "LabelQscaleHelp": "Az ffmpeg kimeneti képkockák minőségskálája, melyen 2 a legmagasabb és 31 a legalacsonyabb minőségi érték.", "LabelTrickplayThreads": "FFmpeg szálak", @@ -1874,20 +1874,20 @@ "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.", - "DateModified": "Dátum módosítva", + "DateModified": "Módosítás dátuma", "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", + "HeaderAudioAdvanced": "Speciális hangbeállítások", "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", + "HeaderPreviewLyrics": "Dalszöveg előnézete", + "HeaderLyricDownloads": "Dalszövegletö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", + "LabelAllowFmp4TranscodingContainer": "Az fMP4 átkódoló konténer 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.", @@ -1896,7 +1896,7 @@ "EnableDts": "DTS (DCA) bekapcsolása", "EnableTrueHd": "TrueHD bekapcsolása", "HeaderNextItem": "Következő {0}", - "HeaderVideoAdvanced": "Haladó VIdeó", + "HeaderVideoAdvanced": "Speciális videó", "Illustrator": "Illusztrátor", "LabelAlwaysRemuxFlacAudioFiles": "Mindig remuxolja a FLAC-hangfájlokat", "LabelAlwaysRemuxMp3AudioFiles": "Mindig remuxolja az MP3-hangfájlokat", @@ -1908,8 +1908,8 @@ "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", "AlwaysBurnInSubtitleWhenTranscoding": "Mindig égesse be a feliratot átkódoláskor", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Minden felirat beégetése átkódolás aktiválásakor. Ez biztosítja a feliratok szinkronját átkodólás után a kódolás sebességének rovására.", - "HeaderEditPlaylist": "Lejátszási Lista szerkesztése", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Az összes felirat beégetése az átkódolás aktiválásakor. Ez az átkódolási sebesség csökkenése árán biztosítja a felirat szinkronban maradását.", + "HeaderEditPlaylist": "Lejátszási lista szerkesztése", "LabelInstalled": "Telepítve", "LabelIsSynced": "Szinkronizálva van", "LabelMediaSegmentsType": "{0} Szegmensek", @@ -1922,7 +1922,7 @@ "MediaInfoRotation": "Elforgás", "MediaSegmentAction.None": "Egyik sem", "MediaSegmentAction.Skip": "Kihagyás", - "MediaSegmentType.Commercial": "Kereskedelmi", + "MediaSegmentType.Commercial": "Reklám", "MediaSegmentType.Intro": "Intro", "MediaSegmentType.Outro": "Outro", "MediaSegmentType.Preview": "Előnézet", @@ -1933,8 +1933,8 @@ "PlaylistError.CreateFailed": "Hiba a lejátszási lista létrehozásakor", "PlaylistError.UpdateFailed": "Hiba a lejátszási lista frissítésekor", "PluginLoadRepoError": "Egy hiba történt a plugin adatainak lekérdezésekor az adattárból.", - "MediaSegmentAction.AskToSkip": "Kérés a kihagyáshoz", - "MediaSegmentSkipPrompt": "Kihagyás {0}", + "MediaSegmentAction.AskToSkip": "Kihagyás megkérdezése", + "MediaSegmentSkipPrompt": "{0} kihagyása", "MessageCancelSeriesTimerError": "Egy hiba történt miközben a sorozatidőzítő törlésekor", "MessageCancelTimerError": "Egy hiba történt az időzítő törlésekor", "MoveToBottom": "Mozgatás az aljára", @@ -1942,7 +1942,7 @@ "PlaylistPublicDescription": "Engedélyezés, hogy bármilyen bejelentkezett felhasználó megnézhesse ezt a lejátszási listát.", "PreferNonstandardArtistsTag": "Az ELŐADÓ címkéjének használatának előnyben részesítése ha elérhető", "LabelAllowStreamSharing": "Stream megosztás engedélyezése", - "LabelSelectPreferredTranscodeVideoAudioCodec": "Preferált transzkódolási audió kódek videólejátszásnál", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Előnyben részesített átkódolási hangkodek videólejátszásnál", "LabelDropLyricsHere": "Húzd ide a dalszöveget, vagy kattints ide a fájlok böngészéséhez.", "LabelFallbackMaxStreamingBitrate": "Visszaesési max streamelési bitráta (Mbps)", "LabelLyricDownloaders": "Dalszöveg letöltők", @@ -1966,7 +1966,15 @@ "LabelScreensaverTime": "Képernyőkíméjő Idő", "LibraryInvalidItemIdError": "Ez a könyvtár egy érvénytelen állapotban van, és nem lehet szerkeszteni. Valószínűleg egy bugot tapasztalsz: az útvonal az adatbázisban nem a megfelelő útvonal a fájlrendszerben.", "MoviesAndShows": "Filmek és Sorozatok", - "HeaderMediaSegmentActions": "Média Szegmens műveletek", - "AutoSubtitleStylingHelp": "Ez a mód automatikusan vált a natív és egyéni feliratstílus között az eszköz típusod alapjáb.", - "Custom": "Egyéni" + "HeaderMediaSegmentActions": "Médiaszegmens-műveletek", + "AutoSubtitleStylingHelp": "Ez a mód automatikusan vált a natív és az egyéni feliratstílus között az eszköz típusa alapján.", + "Custom": "Egyéni", + "HeaderNextEpisode": "Következő epizód", + "HeaderNextVideo": "Következő videó", + "Native": "Natív", + "NativeSubtitleStylingHelp": "A feliratstílusok egyes eszközökön nem fognak működni. Viszont ez nem jár további teljesítményigénnyel.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Csak kulcsképkockák kinyerése a jelentősen gyorsabb számítás érdekében, de kevésbé pontos időzítéssel. Ha a beállított hardveres dekódoló nem támogatja ezt a módot, akkor a szoftveres dekódoló lesz használva.", + "DeleteServerConfirmation": "Biztos, hogy törli ezt a kiszolgálót?", + "VideoCodecTagNotSupported": "A videókodek-címke nem támogatott", + "LabelTrickplayKeyFrameOnlyExtraction": "Képek előállítása csak kulcsképkockákból" } From 0b47abc0090b9555c946a2e96ba9df00ac843c1a Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:39:17 +0300 Subject: [PATCH 139/235] Migrate libraries display to React --- .../dashboard/controllers/librarydisplay.html | 57 ------ .../dashboard/controllers/librarydisplay.js | 52 ------ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - .../dashboard/routes/libraries/display.tsx | 166 ++++++++++++++++++ src/hooks/useConfiguration.ts | 9 +- src/hooks/useNamedConfiguration.ts | 27 +++ src/strings/en-us.json | 1 + 8 files changed, 197 insertions(+), 123 deletions(-) delete mode 100644 src/apps/dashboard/controllers/librarydisplay.html delete mode 100644 src/apps/dashboard/controllers/librarydisplay.js create mode 100644 src/apps/dashboard/routes/libraries/display.tsx create mode 100644 src/hooks/useNamedConfiguration.ts diff --git a/src/apps/dashboard/controllers/librarydisplay.html b/src/apps/dashboard/controllers/librarydisplay.html deleted file mode 100644 index d641e30c1e..0000000000 --- a/src/apps/dashboard/controllers/librarydisplay.html +++ /dev/null @@ -1,57 +0,0 @@ -
-
-
-
-
- -
${LabelDateAddedBehaviorHelp}
-
- -
- -
${OptionDisplayFolderViewHelp}
-
- - - -
- -
${LabelGroupMoviesIntoCollectionsHelp}
-
- -
- -
${OptionEnableExternalContentInSuggestionsHelp}
-
- -
- -
${OptionSaveMetadataAsHiddenHelp}
-
- -
- -
-
-
-
diff --git a/src/apps/dashboard/controllers/librarydisplay.js b/src/apps/dashboard/controllers/librarydisplay.js deleted file mode 100644 index 74be51e762..0000000000 --- a/src/apps/dashboard/controllers/librarydisplay.js +++ /dev/null @@ -1,52 +0,0 @@ -import loading from 'components/loading/loading'; -import 'elements/emby-checkbox/emby-checkbox'; -import 'elements/emby-button/emby-button'; -import Dashboard from 'utils/dashboard'; - -export default function(view) { - function loadData() { - ApiClient.getServerConfiguration().then(function(config) { - view.querySelector('.chkFolderView').checked = config.EnableFolderView; - view.querySelector('.chkGroupMoviesIntoCollections').checked = config.EnableGroupingIntoCollections; - view.querySelector('.chkDisplaySpecialsWithinSeasons').checked = config.DisplaySpecialsWithinSeasons; - view.querySelector('.chkExternalContentInSuggestions').checked = config.EnableExternalContentInSuggestions; - view.querySelector('#chkSaveMetadataHidden').checked = config.SaveMetadataHidden; - }); - ApiClient.getNamedConfiguration('metadata').then(function(metadata) { - view.querySelector('#selectDateAdded').selectedIndex = metadata.UseFileCreationTimeForDateAdded ? 1 : 0; - }); - } - - view.querySelector('form').addEventListener('submit', function(e) { - loading.show(); - const form = this; - ApiClient.getServerConfiguration().then(function(config) { - config.EnableFolderView = form.querySelector('.chkFolderView').checked; - config.EnableGroupingIntoCollections = form.querySelector('.chkGroupMoviesIntoCollections').checked; - config.DisplaySpecialsWithinSeasons = form.querySelector('.chkDisplaySpecialsWithinSeasons').checked; - config.EnableExternalContentInSuggestions = form.querySelector('.chkExternalContentInSuggestions').checked; - config.SaveMetadataHidden = form.querySelector('#chkSaveMetadataHidden').checked; - ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult); - }); - ApiClient.getNamedConfiguration('metadata').then(function(config) { - config.UseFileCreationTimeForDateAdded = form.querySelector('#selectDateAdded').value === '1'; - ApiClient.updateNamedConfiguration('metadata', config); - }); - - e.preventDefault(); - loading.hide(); - return false; - }); - - view.addEventListener('viewshow', function() { - loadData(); - ApiClient.getSystemInfo().then(function(info) { - if (info.OperatingSystem === 'Windows') { - view.querySelector('.fldSaveMetadataHidden').classList.remove('hide'); - } else { - view.querySelector('.fldSaveMetadataHidden').classList.add('hide'); - } - }); - }); -} - diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 19cf7ea1a5..700b175cbe 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -6,6 +6,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'branding', type: AppType.Dashboard }, { path: 'devices', type: AppType.Dashboard }, { path: 'keys', type: AppType.Dashboard }, + { path: 'libraries/display', type: AppType.Dashboard }, { path: 'logs', type: AppType.Dashboard }, { path: 'playback/resume', type: AppType.Dashboard }, { path: 'playback/streaming', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index 848c242b67..c606c4f1e1 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -30,13 +30,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'library', view: 'library.html' } - }, { - path: 'libraries/display', - pageProps: { - appType: AppType.Dashboard, - controller: 'librarydisplay', - view: 'librarydisplay.html' - } }, { path: 'playback/transcoding', pageProps: { diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx new file mode 100644 index 0000000000..697b448ce5 --- /dev/null +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -0,0 +1,166 @@ +import React from 'react'; +import Alert from '@mui/material/Alert'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import FormControl from '@mui/material/FormControl'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import FormHelperText from '@mui/material/FormHelperText'; +import MenuItem from '@mui/material/MenuItem'; +import Stack from '@mui/material/Stack'; +import Switch from '@mui/material/Switch'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import Loading from 'components/loading/LoadingComponent'; +import Page from 'components/Page'; +import ServerConnections from 'components/ServerConnections'; +import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; +import { useConfiguration } from 'hooks/useConfiguration'; +import { fetchNamedConfiguration, useNamedConfiguration } from 'hooks/useNamedConfiguration'; +import globalize from 'lib/globalize'; +import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; +import { ActionData } from 'types/actionData'; + +export const action = async ({ request }: ActionFunctionArgs) => { + const api = ServerConnections.getCurrentApi(); + if (!api) throw new Error('No Api instance available'); + + const formData = await request.formData(); + const data = Object.fromEntries(formData); + + const { data: config } = await getConfigurationApi(api).getConfiguration(); + const namedConfig = await fetchNamedConfiguration(api, 'metadata'); + + namedConfig.UseFileCreationTimeForDateAdded = data.DateAddedBehavior.toString() === '1'; + config.EnableFolderView = data.DisplayFolderView?.toString() === 'on'; + config.DisplaySpecialsWithinSeasons = data.DisplaySpecialsWithinSeasons?.toString() === 'on'; + config.EnableGroupingIntoCollections = data.GroupMoviesIntoCollections?.toString() === 'on'; + config.EnableExternalContentInSuggestions = data.EnableExternalContentInSuggestions?.toString() === 'on'; + + await getConfigurationApi(api) + .updateConfiguration({ serverConfiguration: config }); + + await getConfigurationApi(api) + .updateNamedConfiguration({ key: 'metadata', body: namedConfig }); + + return { + isSaved: true + }; +}; + +export const Component = () => { + const { + data: config, + isPending: isConfigPending, + isError: isConfigError + } = useConfiguration(); + const { + data: namedConfig, + isPending: isNamedConfigPending, + isError: isNamedConfigError + } = useNamedConfiguration('metadata'); + + const navigation = useNavigation(); + const actionData = useActionData() as ActionData | undefined; + const isSubmitting = navigation.state === 'submitting'; + + if (isConfigPending || isNamedConfigPending) { + return ; + } + + return ( + + +
+ + {isConfigError || isNamedConfigError ? ( + {globalize.translate('DisplayLoadError')} + ) : ( + <> + {!isSubmitting && actionData?.isSaved && ( + + {globalize.translate('SettingsSaved')} + + )} + {globalize.translate('Display')} + + {globalize.translate('OptionDateAddedImportTime')} + {globalize.translate('OptionDateAddedFileTime')} + + + + + } + label={globalize.translate('OptionDisplayFolderView')} + /> + {globalize.translate('OptionDisplayFolderViewHelp')} + + + + + } + label={globalize.translate('LabelDisplaySpecialsWithinSeasons')} + /> + + + + + } + label={globalize.translate('LabelGroupMoviesIntoCollections')} + /> + {globalize.translate('LabelGroupMoviesIntoCollectionsHelp')} + + + + + } + label={globalize.translate('OptionEnableExternalContentInSuggestions')} + /> + {globalize.translate('OptionEnableExternalContentInSuggestionsHelp')} + + + + + )} + +
+
+
+ ); +}; + +Component.displayName = 'DisplayPage'; diff --git a/src/hooks/useConfiguration.ts b/src/hooks/useConfiguration.ts index f1b9d47c3d..ea6d865c92 100644 --- a/src/hooks/useConfiguration.ts +++ b/src/hooks/useConfiguration.ts @@ -6,12 +6,7 @@ import type { AxiosRequestConfig } from 'axios'; export const QUERY_KEY = 'Configuration'; -export const fetchConfiguration = async (api?: Api, options?: AxiosRequestConfig) => { - if (!api) { - console.error('[useLogOptions] No API instance available'); - return; - } - +export const fetchConfiguration = async (api: Api, options?: AxiosRequestConfig) => { const response = await getConfigurationApi(api).getConfiguration(options); return response.data; @@ -22,7 +17,7 @@ export const useConfiguration = () => { return useQuery({ queryKey: [QUERY_KEY], - queryFn: ({ signal }) => fetchConfiguration(api, { signal }), + queryFn: ({ signal }) => fetchConfiguration(api!, { signal }), enabled: !!api }); }; diff --git a/src/hooks/useNamedConfiguration.ts b/src/hooks/useNamedConfiguration.ts new file mode 100644 index 0000000000..66652b510a --- /dev/null +++ b/src/hooks/useNamedConfiguration.ts @@ -0,0 +1,27 @@ +import { Api } from '@jellyfin/sdk'; +import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; +import { useQuery } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import type { AxiosRequestConfig } from 'axios'; + +export const QUERY_KEY = 'NamedConfiguration'; + +interface NamedConfiguration { + [key: string]: unknown; +} + +export const fetchNamedConfiguration = async (api: Api, key: string, options?: AxiosRequestConfig) => { + const response = await getConfigurationApi(api).getNamedConfiguration({ key }, options); + + return response.data as unknown as NamedConfiguration; +}; + +export const useNamedConfiguration = (key: string) => { + const { api } = useApi(); + + return useQuery({ + queryKey: [ QUERY_KEY ], + queryFn: ({ signal }) => fetchNamedConfiguration(api!, key, { signal }), + enabled: !!api + }); +}; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5377cbd88a..6f71ba9898 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -241,6 +241,7 @@ "Display": "Display", "DisplayInMyMedia": "Display on home screen", "DisplayInOtherHomeScreenSections": "Display in home screen sections such as 'Recently Added Media' and 'Continue Watching'", + "DisplayLoadError": "An error occurred while loading display configuration data.", "DisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "DisplayMissingEpisodesWithinSeasonsHelp": "This must also be enabled for TV libraries in the server configuration.", "DisplayModeHelp": "Select the layout style you want for the interface.", From b0243adc5b4731dbde1c8faa68c8614d6e8d8d63 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 25 Feb 2025 16:57:32 +0300 Subject: [PATCH 140/235] Small refactor --- .../dashboard/routes/libraries/display.tsx | 156 +++++++++--------- 1 file changed, 77 insertions(+), 79 deletions(-) diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx index 697b448ce5..c45a2cd983 100644 --- a/src/apps/dashboard/routes/libraries/display.tsx +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -74,90 +74,88 @@ export const Component = () => { className='mainAnimatedPage type-interior' > -
- - {isConfigError || isNamedConfigError ? ( - {globalize.translate('DisplayLoadError')} - ) : ( - <> - {!isSubmitting && actionData?.isSaved && ( - - {globalize.translate('SettingsSaved')} - - )} - {globalize.translate('Display')} - - {globalize.translate('OptionDateAddedImportTime')} - {globalize.translate('OptionDateAddedFileTime')} - + {isConfigError || isNamedConfigError ? ( + {globalize.translate('DisplayLoadError')} + ) : ( + + + {!isSubmitting && actionData?.isSaved && ( + + {globalize.translate('SettingsSaved')} + + )} + {globalize.translate('Display')} + + {globalize.translate('OptionDateAddedImportTime')} + {globalize.translate('OptionDateAddedFileTime')} + - - - } - label={globalize.translate('OptionDisplayFolderView')} - /> - {globalize.translate('OptionDisplayFolderViewHelp')} - + + + } + label={globalize.translate('OptionDisplayFolderView')} + /> + {globalize.translate('OptionDisplayFolderViewHelp')} + - - - } - label={globalize.translate('LabelDisplaySpecialsWithinSeasons')} - /> - + + + } + label={globalize.translate('LabelDisplaySpecialsWithinSeasons')} + /> + - - - } - label={globalize.translate('LabelGroupMoviesIntoCollections')} - /> - {globalize.translate('LabelGroupMoviesIntoCollectionsHelp')} - + + + } + label={globalize.translate('LabelGroupMoviesIntoCollections')} + /> + {globalize.translate('LabelGroupMoviesIntoCollectionsHelp')} + - - - } - label={globalize.translate('OptionEnableExternalContentInSuggestions')} - /> - {globalize.translate('OptionEnableExternalContentInSuggestionsHelp')} - + + + } + label={globalize.translate('OptionEnableExternalContentInSuggestions')} + /> + {globalize.translate('OptionEnableExternalContentInSuggestionsHelp')} + - - - )} - - + +
+ + )}
); From 1ab2197200b2d7989c97184dd76da012221fec9b Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 25 Feb 2025 18:20:29 +0300 Subject: [PATCH 141/235] Invalidate queries --- src/apps/dashboard/routes/libraries/display.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx index c45a2cd983..8b99942805 100644 --- a/src/apps/dashboard/routes/libraries/display.tsx +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -14,11 +14,12 @@ import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; -import { useConfiguration } from 'hooks/useConfiguration'; -import { fetchNamedConfiguration, useNamedConfiguration } from 'hooks/useNamedConfiguration'; +import { QUERY_KEY as CONFIG_QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; +import { fetchNamedConfiguration, QUERY_KEY as NAMED_CONFIG_QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration'; import globalize from 'lib/globalize'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; +import { queryClient } from 'utils/query/queryClient'; export const action = async ({ request }: ActionFunctionArgs) => { const api = ServerConnections.getCurrentApi(); @@ -42,6 +43,13 @@ export const action = async ({ request }: ActionFunctionArgs) => { await getConfigurationApi(api) .updateNamedConfiguration({ key: 'metadata', body: namedConfig }); + void queryClient.invalidateQueries({ + queryKey: [ CONFIG_QUERY_KEY ] + }); + void queryClient.invalidateQueries({ + queryKey: [ NAMED_CONFIG_QUERY_KEY ] + }); + return { isSaved: true }; From 2290a78adf123672992a375d7a98887a3523fa94 Mon Sep 17 00:00:00 2001 From: stanol Date: Tue, 25 Feb 2025 14:47:07 +0000 Subject: [PATCH 142/235] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 7030361b90..1cccd66e1a 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -136,7 +136,7 @@ "ConfirmDeleteItems": "Видалення цих елементів видалить їх як з файлової системи, так і з медіатеки. Ви справді бажаєте продовжити?", "ConfirmDeleteItem": "Видалення цього елемента видалить його як з файлової системи, так і з медіатеки. Ви справді бажаєте продовжити?", "ConfirmDeleteImage": "Видалити зображення?", - "ConfigureDateAdded": "Налаштуйте спосіб визначення метаданих для «Дата додавання» в Панель керування > Медіатеки > Налаштування NFO", + "ConfigureDateAdded": "Налаштуйте спосіб визначення метаданих для «Дата додавання» в Панель керування > Медіатеки > Подання", "Composer": "Композитор", "CommunityRating": "Рейтинг спільноти", "ColorTransfer": "Передача кольору", @@ -1996,5 +1996,9 @@ "CustomSubtitleStylingHelp": "Стилізація субтитрів працюватиме на більшості пристроїв, але потребує додаткових витрат на продуктивність.", "LabelSubtitleStyling": "Стилізація субтитрів", "Native": "Вбудований", - "NativeSubtitleStylingHelp": "Стилізація субтитрів не працюватиме на деяких пристроях. Проте це не впливає на продуктивність." + "NativeSubtitleStylingHelp": "Стилізація субтитрів не працюватиме на деяких пристроях. Проте це не впливає на продуктивність.", + "LabelDevice": "Пристрій", + "LastActive": "Остання активність", + "DeleteServerConfirmation": "Ви впевнені, що хочете видалити цей сервер?", + "LibraryNameInvalid": "Назва медіатеки не може бути порожньою." } From e43a3d89ebda7779d9160847f6eba9ce1f7ba190 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Tue, 25 Feb 2025 17:29:13 +0100 Subject: [PATCH 143/235] i18n retry --- src/apps/dashboard/features/logs/api/useServerLog.ts | 4 ---- src/apps/dashboard/routes/logs/file.tsx | 2 +- src/strings/en-us.json | 1 + 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/apps/dashboard/features/logs/api/useServerLog.ts b/src/apps/dashboard/features/logs/api/useServerLog.ts index 4c337dfa98..21b2d10057 100644 --- a/src/apps/dashboard/features/logs/api/useServerLog.ts +++ b/src/apps/dashboard/features/logs/api/useServerLog.ts @@ -9,10 +9,6 @@ const fetchServerLog = async ( name: string, options?: AxiosRequestConfig ) => { - if (!api) { - console.error('[useServerLog] No API instance available'); - return; - } const response = await getSystemApi(api).getLogFile({ name }, options); // FIXME: TypeScript SDK thinks it is returning a File but in reality it is a string diff --git a/src/apps/dashboard/routes/logs/file.tsx b/src/apps/dashboard/routes/logs/file.tsx index d225008683..24caf4c06b 100644 --- a/src/apps/dashboard/routes/logs/file.tsx +++ b/src/apps/dashboard/routes/logs/file.tsx @@ -66,7 +66,7 @@ export const Component = () => { size='small' onClick={retry} > - Retry + {globalize.translate('Retry')} } > diff --git a/src/strings/en-us.json b/src/strings/en-us.json index ff73246005..85253de3b3 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1445,6 +1445,7 @@ "ReplaceAllMetadata": "Replace all metadata", "ReplaceExistingImages": "Replace existing images", "ReplaceTrickplayImages": "Replace existing trickplay images", + "Retry": "Retry", "Reset": "Reset", "ResetPassword": "Reset Password", "ResolutionMatchSource": "Match Source", From 53b32285191fb31bdd9c555aef000202a98bb928 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Tue, 25 Feb 2025 22:48:15 +0100 Subject: [PATCH 144/235] Use Paper component --- src/apps/dashboard/routes/logs/file.tsx | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/apps/dashboard/routes/logs/file.tsx b/src/apps/dashboard/routes/logs/file.tsx index 24caf4c06b..7eab74be8a 100644 --- a/src/apps/dashboard/routes/logs/file.tsx +++ b/src/apps/dashboard/routes/logs/file.tsx @@ -7,13 +7,13 @@ import Alert from '@mui/material/Alert'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import ButtonGroup from '@mui/material/ButtonGroup'; -import Card from '@mui/material/Card'; -import CardContent from '@mui/material/CardContent'; import Container from '@mui/material/Container'; +import Paper from '@mui/material/Paper'; import Typography from '@mui/material/Typography'; import { ContentCopy, FileDownload } from '@mui/icons-material'; import globalize from 'lib/globalize'; import toast from 'components/toast/toast'; +import { copy } from 'scripts/clipboard'; export const Component = () => { const { file: fileName } = useParams(); @@ -27,8 +27,8 @@ export const Component = () => { const retry = useCallback(() => refetch(), [refetch]); const copyToClipboard = useCallback(async () => { - if ('clipboard' in navigator && log) { - await navigator.clipboard.writeText(log); + if (log) { + await copy(log); toast({ text: globalize.translate('CopyLogSuccess') }); } }, [log]); @@ -94,13 +94,11 @@ export const Component = () => { - - - -
{log}
-
-
-
+ + +
{log}
+
+
)} From 1a15ac2e499a8b8c4c3cc7ecd51afbc1fa851f18 Mon Sep 17 00:00:00 2001 From: Christian Gleich Date: Tue, 25 Feb 2025 22:54:31 +0000 Subject: [PATCH 145/235] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 6802932e72..abd2e57012 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1872,9 +1872,9 @@ "CoverArtist": "Cover-Künstler", "Creator": "Ersteller", "Editor": "Bearbeiter", - "EnableTrueHdHelp": "Schalte dies nur ein wenn dein Gerät TrueHD unterstützt oder an einem kompatiblem audio Empfänger angeschlossen ist, andernfalls könnte es zu Widergabefehlern führen.", + "EnableTrueHdHelp": "Aktiviere diese Funktion nur, wenn dein Gerät TrueHD unterstützt oder an einen kompatiblen Audioreceiver angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", "EnableDts": "DTS zulassen (DCA)", - "EnableDtsHelp": "Schalte dies nur ein, wenn dein Gerät DTS unterstützt oder mit einem kompatiblem audio Empfänger angeschlossen ist, andernfalls könnte es zu Widergabefehlern führen.", + "EnableDtsHelp": "Aktiviere diese Funktion nur, wenn dein Gerät DTS unterstützt oder an einen kompatiblen Audioempfänger angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", "EnableTrueHd": "TrueHD zulassen", "Illustrator": "Illustrator", "HeaderLyricDownloads": "Lyrik Downloads", From 6f071b62a158ecbc20103a9fab1516312d961e8d Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Wed, 26 Feb 2025 17:24:01 +0000 Subject: [PATCH 146/235] 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 a0949d1d2f..cce03f480e 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1392,7 +1392,7 @@ "LabelMaxMuxingQueueSize": "Maximale grootte muxing-wachtrij", "LabelColorPrimaries": "Primaire kleur", "MediaInfoColorPrimaries": "Primaire kleuren", - "LabelTonemappingParamHelp": "Stem het toonmapping-algoritme af. De aanbevolen en standaardwaarden zijn NaN. Laat het in het algemeen leeg.", + "LabelTonemappingParamHelp": "Stel het tonemapping-algoritme af. Dit veld is standaard leeg; het wordt aanbevolen dit zo te laten.", "LabelTonemappingParam": "Tonemapping-parameter", "LabelTonemappingPeakHelp": "Gebruik deze piekwaarde voor het ingangssignaal in plaats van de waarde in de ingesloten metadata. De standaardwaarde is 100 (1000 nit).", "LabelTonemappingPeak": "Tonemapping-piek", @@ -1422,7 +1422,7 @@ "EnableFallbackFontHelp": "Aangepaste alternatieve lettertypen inschakelen. Dit kan onjuiste weergave van ondertiteling voorkomen.", "LabelFallbackFontPathHelp": "Sommige cliënten gebruiken deze lettertypen om ondertiteling weer te geven. Raadpleeg de documentatie voor meer informatie.", "EnableFallbackFont": "Terugvallettertypen inschakelen", - "LabelFallbackFontPath": "Pad naar map terugvallettertype", + "LabelFallbackFontPath": "Pad naar map voor terugvallettertypen", "HeaderSelectFallbackFontPathHelp": "Blader of typ het pad naar de map met het terugvallettertype dat gebruikt moet worden om ASS-/SSA-ondertiteling te renderen.", "HeaderSelectFallbackFontPath": "Pad voor terugvallettertype selecteren", "OptionMaxActiveSessions": "Stel het maximale aantal gelijktijdige gebruikerssessies in.", From 30ee637cd8ae9040f7c178a4e8a10bd72ef66203 Mon Sep 17 00:00:00 2001 From: Yany Date: Wed, 26 Feb 2025 16:43:06 +0000 Subject: [PATCH 147/235] 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 5a7fe408dd..f149969072 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -642,7 +642,7 @@ "Shows": "Seriály", "Shuffle": "Zamiešať", "SkipEpisodesAlreadyInMyLibrary": "Nenahrávať epizódy, ktoré už sú v mojej knižnici", - "Small": "Malé", + "Small": "Malý", "Songs": "Skladby", "Sort": "Zoradiť", "SortByValue": "Zoradiť podľa {0}", From 6cf26b86604277be5cb42b73b756f3c9b036ac52 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Wed, 26 Feb 2025 19:14:39 +0100 Subject: [PATCH 148/235] Remove useless check --- src/apps/dashboard/routes/logs/file.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/apps/dashboard/routes/logs/file.tsx b/src/apps/dashboard/routes/logs/file.tsx index 7eab74be8a..019e8447c7 100644 --- a/src/apps/dashboard/routes/logs/file.tsx +++ b/src/apps/dashboard/routes/logs/file.tsx @@ -80,7 +80,6 @@ export const Component = () => { <> '; + html += ''; + } + + html += "
"; + + if (virtualFolder.showNameWithIcon) { + html += ' '; + } else { + html += escapeHtml(virtualFolder.Name); + } + + html += '
'; + let typeName = getCollectionTypeOptions().filter(function (t) { + return t.value == virtualFolder.CollectionType; + })[0]; + typeName = typeName ? typeName.name : globalize.translate('Other'); + html += "
"; + + if (virtualFolder.showType === false) { + html += ' '; + } else { + html += typeName; + } + + html += '
'; + + if (virtualFolder.showLocations === false) { + html += "
"; + html += ' '; + html += '
'; + } else if (virtualFolder.Locations.length && virtualFolder.Locations.length === 1) { + html += "
"; + html += virtualFolder.Locations[0]; + html += '
'; + } else { + html += "
"; + html += globalize.translate('NumLocationsValue', virtualFolder.Locations.length); + html += '
'; + } + + html += ''; + html += ''; + html += ''; + return html; +} + +window.WizardLibraryPage = { + next: function () { + Dashboard.navigate('wizardsettings.html'); + } +}; +pageClassOn('pageshow', 'mediaLibraryPage', function () { + reloadLibrary(this); +}); +pageIdOn('pageshow', 'mediaLibraryPage', function () { + const page = this; + taskButton({ + mode: 'on', + progressElem: page.querySelector('.refreshProgress'), + taskKey: 'RefreshLibrary', + button: page.querySelector('.btnRefresh') + }); +}); +pageIdOn('pagebeforehide', 'mediaLibraryPage', function () { + const page = this; + taskButton({ + mode: 'off', + progressElem: page.querySelector('.refreshProgress'), + taskKey: 'RefreshLibrary', + button: page.querySelector('.btnRefresh') + }); +}); + From f39f7ca7c0addaeab10fc3918b5bda3f6368b11b Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Fri, 28 Feb 2025 22:06:43 +0000 Subject: [PATCH 165/235] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index f149969072..44175a5b89 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -2003,5 +2003,8 @@ "LibraryNameInvalid": "Názov knižnice nesmie byť prázdny.", "LabelDevice": "Zariadenie", "LastActive": "Naposledy aktívny", - "DeleteServerConfirmation": "Ste si istí, že chcete odstrániť tento server?" + "DeleteServerConfirmation": "Ste si istí, že chcete odstrániť tento server?", + "CopyLogSuccess": "Obsah logu bol úspešne skopírovaný.", + "Retry": "Opakovať", + "LogLoadFailure": "Nepodarilo sa načítať súbor logu. Je možné, že sa do neho práve aktívne zapisuje." } From 3390290fd7393b3ff7ecd4524e6781ade4825c00 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sat, 1 Mar 2025 06:22:55 +0000 Subject: [PATCH 166/235] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 8b3b83ad1d..3864a4b5f2 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -236,7 +236,7 @@ "DeinterlaceMethodHelp": "Chọn cách khử xen kẽ để dùng khi phần mềm chuyển mã xen kẽ nội dung. Khi hỗ trợ tăng tốc phần cứng khử xen kẽ được bật, trình khử xen kẽ phần cứng sẽ dùng cài đặt này.", "DefaultSubtitlesHelp": "Phụ đề được tải dựa trên mặc định và bắt buộc gắn cờ trong dữ liệu mô tả. Ngôn ngữ ưa thích được xem xét khi có nhiều lựa chọn.", "DefaultMetadataLangaugeDescription": "Đây là mặc định của bạn và có thể tùy chỉnh trên cơ sở từng thư viện.", - "DisplayModeHelp": "Chọn kiểu bố trí giao diện mà bạn muốn.", + "DisplayModeHelp": "Chọn kiểu bố cục giao diện mà bạn muốn.", "Download": "Tải về", "Down": "Xuống", "DoNotRecord": "Không ghi lại", @@ -703,7 +703,7 @@ "LabelNewsCategories": "Chuyên mục tin tức", "LabelStable": "Ổn Định", "LabelTonemappingAlgorithm": "Chọn thuật toán ánh xạ tông màu để sử dụng", - "TonemappingAlgorithmHelp": "Có thể điều chỉnh bố trí sắc thái. Nếu bạn không hiểu tùy chọn này, cứ giữ mặc định. Giá trị được đề xuất là 'BT.2390'.", + "TonemappingAlgorithmHelp": "Ánh xạ màu sắc có thể được tinh chỉnh. Nếu bạn không hiểu tùy chọn này, cứ giữ mặc định. Giá trị đề xuất là 'BT.2390'.", "TonemappingRangeHelp": "Chọn dải màu đầu ra. Tự động nghĩa là giống như dải màu đầu vào.", "StopPlayback": "Dừng Phát", "Preview": "Xem Trước", @@ -2000,5 +2000,8 @@ "LibraryNameInvalid": "Tên thư viện không để trống.", "LabelDevice": "Thiết bị", "LastActive": "Hoạt động cuối", - "DeleteServerConfirmation": "Bạn có chắc bạn muốn xóa máy chủ này không?" + "DeleteServerConfirmation": "Bạn có chắc bạn muốn xóa máy chủ này không?", + "CopyLogSuccess": "Sao chép nội dung nhật ký thành công.", + "Retry": "Thử lại", + "LogLoadFailure": "Không tải được tệp nhật ký. Nó vẫn có thể được viết tích cực." } From ad78bb39eef0061d87f1977628ec96cefd19f327 Mon Sep 17 00:00:00 2001 From: AfmanS Date: Sat, 1 Mar 2025 08:15:38 +0000 Subject: [PATCH 167/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 7000853b28..92124b3a5f 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1998,5 +1998,8 @@ "LabelDevice": "Dispositivo", "LastActive": "Última atividade", "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?", - "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio." + "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio.", + "CopyLogSuccess": "Conteúdos do registo copiados com sucesso.", + "Retry": "Tentar novamente", + "LogLoadFailure": "Falha ao carregar o ficheiro de registos. É possível que atualmente esteja a ser escrito." } From b4dc5daef0dc409c4d38436682ca99f64b437a74 Mon Sep 17 00:00:00 2001 From: PIRANY Date: Sat, 1 Mar 2025 13:21:48 +0000 Subject: [PATCH 168/235] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index abd2e57012..2a4ac20d00 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -96,7 +96,7 @@ "ColorSpace": "Farbraum", "CommunityRating": "Communitybewertung", "Composer": "Komponist", - "ConfigureDateAdded": "Legt fest, wie das Feld 'Hinzugefügt am' in NFOs interpretiert werden soll", + "ConfigureDateAdded": "Legen Sie fest, wie die Metadaten für ‚Hinzugefügt am‘ im Dashboard unter Bibliotheken > Anzeige bestimmt werden.", "ConfirmDeleteImage": "Bild löschen?", "ConfirmDeleteItem": "Das Löschen dieses Objekts löscht die Datei vom Laufwerk und in deiner Medienbibliothek. Bist du wirklich sicher?", "ConfirmDeleteItems": "Das Löschen dieser Objekte löscht die Dateien vom Laufwerk und in deiner Medienbibliothek. Bist du wirklich sicher?", @@ -1126,7 +1126,7 @@ "LabelName": "Name", "LabelProfileCodecs": "Codecs", "LabelProfileContainer": "Container", - "Art": "Clearart", + "Art": "Transparente Artworks", "Name": "Name", "Songs": "Lieder", "ValueSpecialEpisodeName": "Extra - {0}", @@ -1330,7 +1330,7 @@ "MessageNoGenresAvailable": "Aktiviere einige Metadaten-Anbieter, um Genres aus dem Internet zu laden.", "EnableFasterAnimationsHelp": "Benutze schnellere Animationen und Übergänge.", "ButtonCast": "Auf Gerät wiedergeben", - "ButtonSyncPlay": "SyncPlay", + "ButtonSyncPlay": "Synchronwiedergabe", "TabRepositories": "Repositorien", "MessageAddRepository": "Wenn du ein Repository hinzufügen möchtest, klicke auf die Schaltfläche neben der Kopfzeile und fülle die angeforderten Informationen aus.", "LabelRepositoryUrlHelp": "Der Speicherort des Repository-Manifests, das du hinzufügen möchtest.", @@ -1339,7 +1339,7 @@ "LabelRepositoryUrl": "URL des Repository", "HeaderNewRepository": "Neues Repository", "MessageNoRepositories": "Keine Repositories.", - "ButtonPlayer": "Player", + "ButtonPlayer": "Wiedergabegerät", "Writers": "Autoren", "ClearQueue": "Wiedergabeliste leeren", "StopPlayback": "Wiedergabe anhalten", @@ -1748,7 +1748,7 @@ "LabelLevel": "Level", "LabelMediaDetails": "Mediendetails", "LabelSystem": "System", - "LogLevel.Trace": "Trace", + "LogLevel.Trace": "Nachverfolgen", "LogLevel.Debug": "Debug", "LogLevel.Information": "Information", "LogLevel.Warning": "Warnung", @@ -1892,7 +1892,7 @@ "PlaylistPublic": "Erlaube öffentlichen Zugriff", "Colorist": "Kolorist", "Penciller": "Bleistiftzeichner", - "Inker": "Inker", + "Inker": "Tuschezeichnung", "Letterer": "Beschreiber", "HeaderVideoAdvanced": "Erweitertes Video", "Alternate": "Alternative", @@ -2003,5 +2003,8 @@ "LibraryNameInvalid": "Der Bibliotheksname darf nicht leer sein.", "DeleteServerConfirmation": "Bist du sicher, dass du diesen Server löschen möchtest?", "LabelDevice": "Gerät", - "LastActive": "Zuletzt aktiv" + "LastActive": "Zuletzt aktiv", + "CopyLogSuccess": "Protokollinhalte erfolgreich kopiert.", + "Retry": "Erneut Versuchen", + "LogLoadFailure": "Fehler beim Laden der Protokolldatei. Sie wird möglicherweise noch beschrieben." } From 7713e31b44bed4c6bba3fbaaae47c0bb41325716 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 1 Mar 2025 21:32:15 +0300 Subject: [PATCH 169/235] Add key to named configuration hook --- src/apps/dashboard/routes/libraries/display.tsx | 12 +++++++----- src/hooks/useConfiguration.ts | 2 +- src/hooks/useNamedConfiguration.ts | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx index 8b99942805..3c958bcb33 100644 --- a/src/apps/dashboard/routes/libraries/display.tsx +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -15,7 +15,7 @@ import Page from 'components/Page'; import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import { QUERY_KEY as CONFIG_QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; -import { fetchNamedConfiguration, QUERY_KEY as NAMED_CONFIG_QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration'; +import { QUERY_KEY as NAMED_CONFIG_QUERY_KEY, NamedConfiguration, useNamedConfiguration } from 'hooks/useNamedConfiguration'; import globalize from 'lib/globalize'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; @@ -29,9 +29,11 @@ export const action = async ({ request }: ActionFunctionArgs) => { const data = Object.fromEntries(formData); const { data: config } = await getConfigurationApi(api).getConfiguration(); - const namedConfig = await fetchNamedConfiguration(api, 'metadata'); - namedConfig.UseFileCreationTimeForDateAdded = data.DateAddedBehavior.toString() === '1'; + const metadataConfig: NamedConfiguration = { + UseFileCreationTimeForDateAdded: data.DateAddedBehavior.toString() === '1' + }; + config.EnableFolderView = data.DisplayFolderView?.toString() === 'on'; config.DisplaySpecialsWithinSeasons = data.DisplaySpecialsWithinSeasons?.toString() === 'on'; config.EnableGroupingIntoCollections = data.GroupMoviesIntoCollections?.toString() === 'on'; @@ -41,13 +43,13 @@ export const action = async ({ request }: ActionFunctionArgs) => { .updateConfiguration({ serverConfiguration: config }); await getConfigurationApi(api) - .updateNamedConfiguration({ key: 'metadata', body: namedConfig }); + .updateNamedConfiguration({ key: 'metadata', body: metadataConfig }); void queryClient.invalidateQueries({ queryKey: [ CONFIG_QUERY_KEY ] }); void queryClient.invalidateQueries({ - queryKey: [ NAMED_CONFIG_QUERY_KEY ] + queryKey: [ NAMED_CONFIG_QUERY_KEY, 'metadata' ] }); return { diff --git a/src/hooks/useConfiguration.ts b/src/hooks/useConfiguration.ts index ea6d865c92..81ddb79f03 100644 --- a/src/hooks/useConfiguration.ts +++ b/src/hooks/useConfiguration.ts @@ -16,7 +16,7 @@ export const useConfiguration = () => { const { api } = useApi(); return useQuery({ - queryKey: [QUERY_KEY], + queryKey: [ QUERY_KEY ], queryFn: ({ signal }) => fetchConfiguration(api!, { signal }), enabled: !!api }); diff --git a/src/hooks/useNamedConfiguration.ts b/src/hooks/useNamedConfiguration.ts index 66652b510a..138355b608 100644 --- a/src/hooks/useNamedConfiguration.ts +++ b/src/hooks/useNamedConfiguration.ts @@ -6,11 +6,11 @@ import type { AxiosRequestConfig } from 'axios'; export const QUERY_KEY = 'NamedConfiguration'; -interface NamedConfiguration { +export interface NamedConfiguration { [key: string]: unknown; } -export const fetchNamedConfiguration = async (api: Api, key: string, options?: AxiosRequestConfig) => { +const fetchNamedConfiguration = async (api: Api, key: string, options?: AxiosRequestConfig) => { const response = await getConfigurationApi(api).getNamedConfiguration({ key }, options); return response.data as unknown as NamedConfiguration; @@ -20,7 +20,7 @@ export const useNamedConfiguration = (key: string) => { const { api } = useApi(); return useQuery({ - queryKey: [ QUERY_KEY ], + queryKey: [ QUERY_KEY, key ], queryFn: ({ signal }) => fetchNamedConfiguration(api!, key, { signal }), enabled: !!api }); From 23b557dc53158effd61065d66370b95cd1aa866c Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Sat, 1 Mar 2025 23:59:50 +0000 Subject: [PATCH 170/235] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index b051824f63..ebfc3d3230 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -2000,8 +2000,11 @@ "MediaSegmentProvidersHelp": "Включить и отсортировать предпочитаемых поставщиков видеофрагментов в порядке приоритета.", "Native": "Встроенные", "NativeSubtitleStylingHelp": "Стилизация субтитров будет работать не на всех устройствах. Зато это не требует дополнительных вычислительных мощностей.", - "LibraryNameInvalid": "Имя библиотеки не может быть пустым или содержать пробелы до или после имени.", + "LibraryNameInvalid": "Имя библиотеки не может быть пустым.", "LabelDevice": "Устройство", "LastActive": "Был активен", - "DeleteServerConfirmation": "Вы уверены, что хотите удалить этот сервер?" + "DeleteServerConfirmation": "Вы уверены, что хотите удалить этот сервер?", + "LogLoadFailure": "Не удалось загрузить файл логов. Возможно, в него активно пишутся логи.", + "CopyLogSuccess": "Логи успешно скопированы.", + "Retry": "Повторить" } From fe78a3a9ff8c1315fc7efdb53d560e86b3f22ab0 Mon Sep 17 00:00:00 2001 From: John Doe Date: Mon, 3 Mar 2025 08:59:03 +0000 Subject: [PATCH 171/235] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 06a32a012c..979f6b372e 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1981,5 +1981,8 @@ "MessageSplitVersionsError": "Tapahtui virhe jaettaessa versioita", "MediaInfoRotation": "Kääntö", "MediaSegmentAction.AskToSkip": "Pyydä ohittamaan", - "MediaSegmentSkipPrompt": "Ohita {0}" + "MediaSegmentSkipPrompt": "Ohita {0}", + "Retry": "Yritä uudelleen", + "Reset": "Nollaa", + "ReplaceTrickplayImages": "Korvaa nykyiset trickplay kuvat" } From d0f5118644e7f579f8c222b964a794e8f9e8e2cb Mon Sep 17 00:00:00 2001 From: LK HO Date: Mon, 3 Mar 2025 07:39:15 +0000 Subject: [PATCH 172/235] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 03efc9ccf1..c5df0ec2eb 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -1275,5 +1275,9 @@ "LastActive": "最後活躍", "DeleteServerConfirmation": "你確定要刪除此伺服器?", "LibraryScanFanoutConcurrency": "平衡掃描媒體庫的數量限制", - "Retry": "重試" + "Retry": "重試", + "LogLoadFailure": "無法載入日誌檔。其他程序可能仍在寫入中。", + "CoverArtist": "翻唱藝人", + "Creator": "創作者", + "CopyLogSuccess": "已複製日誌內容。" } From 10a6227571d909a920b27bce98b4acbca39b5cb1 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Mon, 3 Mar 2025 08:00:24 +0000 Subject: [PATCH 173/235] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index b9ea33ec4d..9a1f660d06 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -446,7 +446,7 @@ "MessageReenableUser": "Begiratu behera berriz aktibatzeko", "MessagePluginInstallError": "Errorea gertatu da osagarri hau instalatzean.", "MessagePluginInstalled": "Osagarria behar bezala instalatu da. Zerbitzaria berriz hasi beharko da aldaketek eragina izan dezaten.", - "MessagePluginInstallDisclaimer": "Komunitateko kideek sortutako osagarriak zure esperientzia ezaugarri gehigarriekin eta beste onura batzuekin hobetzeko modu egokia dira. Instalatu aurretik, kontuan hartu zure zerbitzarian izan ditzaketen efektuak, hala nola liburutegi luzeenetik eskaneatzea, prozesatzea handitzea bigarren planoan edo sistemaren ezegonkortasuna.", + "MessagePluginInstallDisclaimer": "KONTUZ: hirugarrenen pluginak instalatzeak arriskuak ditu. Kode ezegonkorra edo maltzurra izan dezake eta edozein unetan alda daiteke. Ezagutzen dituzun egileen pluginak bakarrik instalatu eta kontuan izan eduki ahal dituen efektuak, kanpoko zerbitzu kontsultak, liburutegi eskaneo luzeagoak edo atzeko planoko prozesamendu handiagoa adibidez.", "MessagePluginConfigurationRequiresLocalAccess": "Osagarri hau konfiguratzeko, hasi saioa zure zerbitzari lokalean zuzenean.", "MessagePleaseWait": "Mesedez, itxaron.", "MessagePleaseEnsureInternetMetadata": "Ziurtatu metadatuak Internetetik deskargatzea aktibatuta dagoela.", @@ -1571,7 +1571,7 @@ "HeaderAccessSchedule": "Sartzeko ordutegia", "HardwareAccelerationWarning": "Hardware bidezko azelerazioa aktibatzeak ingurune batzuetan ezegonkortasunak eragin ditzake. Ziurtatu zure sistema eragilea eta bideo-kontrolatzaileak eguneratuta daudela. Hau aktibatu ondoren bideoak erreproduzitzeko zailtasunak badituzu, doikuntza hau berriro jarri beharko duzu None-n.", "HDPrograms": "Programak HDn", - "H264CrfHelp": "Abiadura konstantearen faktorea (CRF) x264 eta x265 kodifikatzaileentzako aurrez zehaztutako kalitate-doikuntza da. 0 eta 51 arteko balioak ezar ditzake, non balio baxuenak kalitate hobean geratuko liratekeen (fitxategi-tamaina altuagoen kontura). Balio osasuntsuak 18 eta 28 artean daude. X264rako lehenetsitako balioa 23 da, eta x265erako 28; beraz, hori abiapuntu gisa erabil dezakezu.", + "H264CrfHelp": "Abiadura konstantearen faktorea (CRF) x264 eta x265 software kodifikatzaileentzako aurrez zehaztutako kalitate-doikuntza da. 0 eta 51 arteko balioak ezarri daitezke, non balio baxuenak kalitate hobean geratuko liratekeen (fitxategi-tamaina altuagoen kontura). Balio osasuntsuak 18 eta 28 artean daude. x264rako lehenetsitako balioa 23 da, eta x265erako 28; beraz, hori abiapuntu gisa erabil dezakezu. Hardware kodifikatzaileek ez dituzte ezarpen hauek erabiltzen.", "GuideProviderSelectListings": "Hautatu zerrendak", "GuideProviderLogin": "Kredentzialak", "Guide": "Gida", From 1ea2163c173cb65726431389cf0e531457a0d651 Mon Sep 17 00:00:00 2001 From: John Doe Date: Mon, 3 Mar 2025 09:45:40 +0000 Subject: [PATCH 174/235] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 979f6b372e..407686b373 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1683,7 +1683,7 @@ "LabelStereoDownmixAlgorithm": "Stereoäänen alasmiksausalgoritmi", "StereoDownmixAlgorithmHelp": "Algoritmi, jonka perusteella monikanavaääni alasmiksataan steroääneksi.", "HeaderRecordingMetadataSaving": "Tallenteen metatiedot", - "SaveRecordingNFO": "Tallenna tallenteen ohjelmaoppaan metatiedot NFO-tiedostoon", + "SaveRecordingNFO": "Tallenna nauhoituksien ohjelmaoppaan metatiedot NFO-tiedostoon", "SaveRecordingNFOHelp": "Tallenna ohjelmaoppaan tietolähteen metatiedot mediatiedoston oheen.", "SaveRecordingImages": "Tallenna tallenteen ohjelmaoppaan kuvat", "SaveRecordingImagesHelp": "Tallenna ohjelmaoppaan tietolähteen kuvat mediatiedoston oheen.", @@ -1921,7 +1921,7 @@ "Editor": "Ohjaus", "Letterer": "Kirjoittaja", "LibraryScanFanoutConcurrencyHelp": "Samanaikaisten suoritettavien kirjastoskannausten maksimimäärä. Mikäli tämä arvo on asetettu 0, määrä valitaan järjestelmän prosessorin säikeiden lukumäärän mukaan. VAROITUS: Tämän arvon asettaminen liian korkeaksi voi aiheuttaa ongelmia verkkotiedostojärjestelmissä. Jos koet ongelmatilanteista, laske tätä numeroa.", - "SaveLyricsIntoMediaFoldersHelp": "Kappaleen sanojen tallentaminen kappaleen tiedostojen kanssa tekee sanoituksista helpommin hallittavan.", + "SaveLyricsIntoMediaFoldersHelp": "Sanoitusten tallentaminen äänitiedoston kanssa samaan sijaintiin helpottaa niiden hallintaa.", "SelectPreferredTranscodeVideoAudioCodecHelp": "Valitse ensisijainen äänikoodekki videomateriaalin transkoodaamiseen. Jos ensisijainen koodekki ei ole tuettu, serveri käyttää seuraavaksi parasta koodekkia.", "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.", @@ -1984,5 +1984,6 @@ "MediaSegmentSkipPrompt": "Ohita {0}", "Retry": "Yritä uudelleen", "Reset": "Nollaa", - "ReplaceTrickplayImages": "Korvaa nykyiset trickplay kuvat" + "ReplaceTrickplayImages": "Korvaa nykyiset trickplay kuvat", + "RenderPgsSubtitleHelp": "Renderöidäänkö PGS tekstitykset laitteen toimesta. Tällä voidaan välttää raskas tekstitysten poltto kiinteästi kuvaan palvelimen toimesta, mutta lisätään laitteen renderöintikuormaa." } From e03af30f8e621ce1e7f14f098c1cbcca374d3226 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Mon, 3 Mar 2025 12:49:32 +0000 Subject: [PATCH 175/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 2f88a57405..0fa1c1a811 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -478,7 +478,7 @@ "OtherArtist": "Іншы выканаўца", "Overview": "Агляд", "PackageInstallCancelled": "Усталяванне {0} (версія {1}) адменена.", - "PackageInstallFailed": "Памылка ўстаноўкі {0} (версія {1}).", + "PackageInstallFailed": "Не ўдалося ўсталяваць {0} (версія {1}).", "PasswordMatchError": "Пароль і пацвярджэнне пароля павінны супадаць.", "PasswordResetConfirmation": "Вы ўпэўнены, што хочаце скінуць пароль?", "PasswordResetProviderHelp": "Выберыце пастаўшчыка скіду пароля, які будзе выкарыстоўвацца, калі гэты карыстальнік запытвае скід пароля.", @@ -950,7 +950,7 @@ "LabelUserAgent": "Агент карыстальніка", "LabelUserLibrary": "Карыстальніцкая медыятэка", "LabelUserLibraryHelp": "Выберыце, якую медыятэку карыстальніка паказаць на прыладзе. Пакіньце пустым, каб атрымаць налады па змаўчанні.", - "LabelUserLoginAttemptsBeforeLockout": "Няўдалыя спробы ўваходу перад тым, як карыстальнік будзе заблакіраваны", + "LabelUserLoginAttemptsBeforeLockout": "Колькасць няўдалых спроб уваходу да блакіроўкі карыстальніка", "LabelUserMaxActiveSessions": "Максімальная колькасць адначасовых карыстальніцкіх сеансаў", "LabelVersion": "Версія", "LabelVideoResolution": "Разрозненне відэа", @@ -1539,7 +1539,7 @@ "LabelEnableHttpsHelp": "Праслухоўванне праз наладжаны порт HTTPS. Для таго, каб гэта ўступіла ў сілу, таксама неабходна падаць сапраўдны сертыфікат.", "LabelExtractChaptersDuringLibraryScan": "Выманне выяў раздзелаў падчас сканавання бібліятэкі", "LabelExtractChaptersDuringLibraryScanHelp": "Стварайце выявы раздзелаў, калі відэа імпартуюцца падчас сканавання бібліятэкі. У адваротным выпадку яны будуць выняты падчас запланаванай задачы выявы раздзелаў, што дазволіць звычайнаму сканаванню бібліятэкі завяршыцца хутчэй.", - "LabelFailed": "Не атрымалася", + "LabelFailed": "Не ўдалося", "LabelffmpegPathHelp": "Шлях да файла або папкі прыкладання FFmpeg, якая змяшчае FFmpeg.", "LabelFileOrUrl": "Файл або URL", "LabelFolder": "Папка", @@ -1799,12 +1799,12 @@ "LabelSelectPreferredTranscodeVideoCodec": "Пераважны кодэк для перакадавання відэа", "LabelSelectPreferredTranscodeVideoAudioCodec": "Пераважны аўдыёкодэк для перакадавання пры прайграванні відэа", "PlaybackError.FATAL_HLS_ERROR": "У патоку HLS была выяўленая фатальная памылка.", - "PlaybackError.MEDIA_NOT_SUPPORTED": "Не атрымалася прайграць файл, паколькі гэты кліент не падтрымлівае мультымедыйны файл.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "Прайграванне не ўдалося, бо медыяфайл не падтрымліваецца гэтым кліентам.", "PlaylistError.CreateFailed": "Памылка стварэння плэйліста", "PlaylistPublic": "Дазволіць публічны доступ", "LimitSupportedVideoResolutionHelp": "Выкарыстоўвайце \"Максімальнае дазволенае раздзяленне перакадзіравання відэа\" ў якасці максімальнага падтрымоўванага раздзялення відэа.", "PlaybackError.ASS_RENDER_ERROR": "У праграме візуалізацыі субтытраў ASS / SSA была выяўленая памылка.", - "PlaybackError.MEDIA_DECODE_ERROR": "Збой прайгравання адбыўся з-за памылкі пры дэкадаванні мультымедыі.", + "PlaybackError.MEDIA_DECODE_ERROR": "Прайграванне не ўдалося з-за памылкі дэкадзіравання медыяфайла.", "PlaybackError.NETWORK_ERROR": "Збой прайгравання адбыўся з-за сеткавай памылкі.", "PlaylistPublicDescription": "Дазволіць прагляд гэтага плэйліста любому карыстальніку, які ўвайшоў у сістэму.", "HeaderNoLyrics": "Тэксты песень не знойдзены", @@ -1814,7 +1814,7 @@ "LabelWebVersion": "Вэб-версія", "LibraryScanFanoutConcurrency": "Абмежаванне задач паралельнага сканавання бібліятэкі", "Penciller": "Чарцёжнік", - "AllowContentWithTagsHelp": "Паказвайце толькі мультымедыйныя файлы, якія змяшчаюць хоць бы адзін з названых тэгаў.", + "AllowContentWithTagsHelp": "Паказваць толькі медыяфайлы, якія маюць хаця б адну з пазначаных метак.", "Author": "Аўтар", "Creator": "Стваральнік", "DeleteLyrics": "Выдаліць тэкст песні", @@ -1932,5 +1932,10 @@ "MoveToTop": "Перайсці ўверх", "PasswordMissingSaveError": "Новы пароль не можа быць пустым.", "LabelTrickplayKeyFrameOnlyExtraction": "Стварэнне малюнкаў толькі на аснове ключавых кадраў", - "UseCustomTagDelimiters": "Выкарыстоўвайце карыстацкі падзельнік тэгаў" + "UseCustomTagDelimiters": "Выкарыстоўвайце карыстацкі падзельнік тэгаў", + "AutoSubtitleStylingHelp": "Гэты рэжым аўтаматычна пераключае паміж убудаваным і карыстацкім стылямі субтытраў у залежнасці ад тыпу вашай прылады.", + "Custom": "Карыстальніцкі", + "CustomSubtitleStylingHelp": "Стылізацыя субтытраў будзе працаваць на большасці прылад, але можа прывесці да дадатковай нагрузкі на прадукцыйнасць.", + "AllowFmp4TranscodingContainerHelp": "Дазволіць выкарыстанне кантэйнера fMP4 для перакодзіравання на гэтым цюнэры, каб уключыць падтрымку HEVC і HDR. Не ўсе цюнэры сумяшчальныя з гэтым кантэйнерам. Адключыце гэтую функцыю, калі ўзнікаюць праблемы з прайграваннем.", + "LogLoadFailure": "Не ўдалося загрузіць файл журнала. Магчыма, ён можа быць у працэсе запісу." } From 84cc2fbc21f52f0c0d99b61c5fc75169fc3a53d9 Mon Sep 17 00:00:00 2001 From: arnausc Date: Mon, 3 Mar 2025 11:21:47 +0000 Subject: [PATCH 176/235] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 422a7f6e85..56533503fa 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1996,8 +1996,11 @@ "LabelSubtitleStyling": "Estilització de subtítols", "Native": "Nadiu", "NativeSubtitleStylingHelp": "L'estilització de subtítols no funcionarà en alguns dispositius. Tot i això, no suposa cap sobrecàrrega de rendiment.", - "LibraryNameInvalid": "El nom de la biblioteca no pot estar buit ni tenir espais inicials/finals.", + "LibraryNameInvalid": "El nom de la biblioteca no pot estar buit.", "DeleteServerConfirmation": "De veritat vols eliminar aquest servidor?", "LabelDevice": "Dispositiu", - "LastActive": "Últim actiu" + "LastActive": "Últim actiu", + "CopyLogSuccess": "Registres copiats satisfactòriament.", + "Retry": "Tronar a provar", + "LogLoadFailure": "Error al carregar el registre. És probable que encara s'estigui escrivint en ell." } From baff30386edc8e9e0808b83ad809b6ce5d0990b7 Mon Sep 17 00:00:00 2001 From: Peter Heilbo Ratgen Date: Mon, 3 Mar 2025 12:00:02 +0000 Subject: [PATCH 177/235] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/da.json b/src/strings/da.json index 27cad2015d..8c74cccd5d 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1999,5 +1999,7 @@ "LabelSubtitleStyling": "Undertekst Styling", "LabelDevice": "Enhed", "LastActive": "Sidste aktiv", - "LibraryNameInvalid": "Bibloteks navn kan ikke være tom eller starte/slutte med mellemrun." + "LibraryNameInvalid": "Bibloteks navn kan ikke være tom eller starte/slutte med mellemrun.", + "CopyLogSuccess": "Logindhold blev kopieret korrekt.", + "NativeSubtitleStylingHelp": "Underteksters styling vil ikke virke på nogle enheder. Dog, vil der ikke være nogen forringelse af ydeevnen." } From 15e37406cedfad646c105a664c3546dca5f0e8ce Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Mon, 3 Mar 2025 13:50:47 +0000 Subject: [PATCH 178/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 0fa1c1a811..98fe3a1d86 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -232,7 +232,7 @@ "LabelWeb": "Вэб", "Localization": "Лакалізацыя", "MediaInfoBitDepth": "Разрадная глыбіня", - "MediaInfoCodecTag": "Тэг кодэка", + "MediaInfoCodecTag": "Метка кодэка", "MediaInfoFramerate": "Частата кадраў", "MediaInfoProfile": "Профіль", "MessageAlreadyInstalled": "Гэтая версія ўжо ўстаноўлена.", @@ -380,7 +380,7 @@ "DeviceAccessHelp": "Гэта адносіцца толькі да прылад, якія могуць быць адназначна ідэнтыфікаваныя і не перашкаджаюць доступу ў браўзеры. Фільтраванне доступу карыстальнікаў да прылад не дазволіць ім выкарыстоўваць новыя прылады, пакуль яны не будуць зацверджаны тут.", "DirectPlaying": "Прамое прайграванне", "DirectPlayHelp": "Зыходны файл цалкам сумяшчальны з гэтым кліентам і сеанс атрымлівае файл без мадыфікацый.", - "LabelTag": "Тэг", + "LabelTag": "Метка", "LabelTextBackgroundColor": "Колер фону тэксту", "LabelTextWeight": "Вага тэксту", "LabelTime": "Час", @@ -694,7 +694,7 @@ "LabelBaseUrlHelp": "Дадайце карыстальніцкі падкаталог да URL-адраса сервера. Напрыклад: http://example.com/<baseurl>", "LabelBindToLocalNetworkAddressHelp": "Перавызначыць лакальны IP-адрас для сервера HTTP. Калі пакінуць пустым, сервер будзе прывязвацца да ўсіх даступных адрасоў. Змена гэтага значэння патрабуе перазапуску.", "LabelBlastMessageIntervalHelp": "Вызначце працягласць у секундах паміж паведамленнямі blast alive.", - "LabelBlockContentWithTags": "Блакіраваць элементы з тэгамі", + "LabelBlockContentWithTags": "Блакіраваць элементы з меткамі", "LabelBurnSubtitles": "Запісаць субтытры", "LabelCache": "Кэш", "LabelCachePathHelp": "Укажыце карыстацкае размяшчэнне для файлаў кэша сервера, такіх як выявы. Пакіньце пустым, каб выкарыстоўваць сервер па змаўчанні.", @@ -1313,8 +1313,8 @@ "TabRepositories": "Сховішчы", "TabResponses": "Адказы", "TabUpcoming": "Маючы адбыцца", - "Tags": "Тэгі", - "TagsValue": "Тэгі: {0}", + "Tags": "Меткі", + "TagsValue": "Меткі: {0}", "TheseSettingsAffectSubtitlesOnThisDevice": "Гэтыя налады ўплываюць на субтытры на гэтай прыладзе", "Thumb": "Эскіз", "TonemappingAlgorithmHelp": "Тональнае адлюстраванне можна дакладна наладзіць. Калі вы не знаёмыя з гэтымі параметрамі, проста захавайце стандартныя. Рэкамендаванае значэнне - \"BT.2390\".", @@ -1772,7 +1772,7 @@ "LabelJpegQualityHelp": "Якасць сціску JPEG для відарысаў падманнага прайгравання.", "AirPlay": "AirPlay", "AllowSubtitleManagement": "Дазволіць гэтаму карыстальніку рэдагаваць субтытры", - "BlockContentWithTagsHelp": "Схаваць мультымедыя хаця б з адным з указаных тэгаў.", + "BlockContentWithTagsHelp": "Схаваць медыяфайлы, якія маюць хаця б адну з пазначаных метак.", "DlnaMovedMessage": "Функцыянальнасць DLNA перанесена на плагін.", "ChannelResolutionSDPAL": "SD (PAL)", "ChannelResolutionSD": "SD", @@ -1805,12 +1805,12 @@ "LimitSupportedVideoResolutionHelp": "Выкарыстоўвайце \"Максімальнае дазволенае раздзяленне перакадзіравання відэа\" ў якасці максімальнага падтрымоўванага раздзялення відэа.", "PlaybackError.ASS_RENDER_ERROR": "У праграме візуалізацыі субтытраў ASS / SSA была выяўленая памылка.", "PlaybackError.MEDIA_DECODE_ERROR": "Прайграванне не ўдалося з-за памылкі дэкадзіравання медыяфайла.", - "PlaybackError.NETWORK_ERROR": "Збой прайгравання адбыўся з-за сеткавай памылкі.", + "PlaybackError.NETWORK_ERROR": "Прайгравання не ўдалося з-за сеткавай памылкі.", "PlaylistPublicDescription": "Дазволіць прагляд гэтага плэйліста любому карыстальніку, які ўвайшоў у сістэму.", "HeaderNoLyrics": "Тэксты песень не знойдзены", "Illustrator": "Ілюстратар", "LabelServerVersion": "Версія сервера", - "PlaybackError.SERVER_ERROR": "Прайграванне не атрымалася з-за памылкі сервера.", + "PlaybackError.SERVER_ERROR": "Прайграванне не ўдалося з-за памылкі сервера.", "LabelWebVersion": "Вэб-версія", "LibraryScanFanoutConcurrency": "Абмежаванне задач паралельнага сканавання бібліятэкі", "Penciller": "Чарцёжнік", @@ -1831,11 +1831,11 @@ "EnableDts": "Уключыць DTS (DCA)", "HeaderDeleteSeries": "Выдаліць серыял", "HeaderDeleteLyrics": "Выдаліць тэкст песні", - "LabelAllowContentWithTags": "Дазволіць элементы з тэгамі", + "LabelAllowContentWithTags": "Дазволіць элементы з меткамі", "Lyrics": "Тэкст песні", "LibraryScanFanoutConcurrencyHelp": "Максімальную колькасць паралельных задач пры сканаванні бібліятэкі. Пры ўсталёўцы значэння 0 будзе абрана абмежаванне, заснаванае на колькасці ядраў у вашай сістэме. УВАГА: занадта вялікае значэнне можа прывесці да праблем з сеткавымі файлавымі сістэмамі; пры ўзнікненні праблем паменшыце гэта значэнне.", "PlaylistError.AddFailed": "Памылка пры даданні ў плэйліст", - "PlaybackError.PLAYER_ERROR": "Прайграванне не атрымалася з-за фатальнай памылкі прайгравальніка.", + "PlaybackError.PLAYER_ERROR": "Прайграванне не ўдалося з-за крытычнай памылкі прайгравальніка.", "Regional": "Абласны", "HeaderLyricDownloads": "Спампоўка тэкстаў песен", "LabelBuildVersion": "Версія зборкі", @@ -1908,7 +1908,7 @@ "AlwaysRemuxFlacAudioFilesHelp": "Калі ў вас ёсць файлы, якія ваш браўзер адмаўляецца прайграваць або ў якіх ён недакладна разлічвае пазнакі часу, уключыце гэта ў якасці абыходнага шляху.", "Anime": "Анімэ", "EditLyrics": "Рэдагаваць тэкст песні", - "LabelAudioTagSettings": "Налады аўдыятэгаў", + "LabelAudioTagSettings": "Налады аўдыяметак", "AndOtherArtists": "{0} і {1} іншыя выканаўцы.", "HeaderNewPlaylist": "Новы плэйліст", "HeaderEditPlaylist": "Рэдагаваць плэйліст", @@ -1917,8 +1917,8 @@ "LabelAlwaysRemuxFlacAudioFiles": "Заўсёды рэмуксаваць аўдыяфайлы FLAC", "LabelAllowStreamSharing": "Дазволіць агульны доступ да патокаў", "LabelAlwaysRemuxMp3AudioFiles": "Заўсёды рэмуксаваць аўдыяфайлы MP3", - "LabelCustomTagDelimiters": "Карыстацкі падзельнік тэгаў", - "LabelCustomTagDelimitersHelp": "Сімвалы, якія будуць выкарыстоўвацца ў якасці падзельнікаў для падзелу тэгаў.", + "LabelCustomTagDelimiters": "Карыстацкі раздзяляльнік метак", + "LabelCustomTagDelimitersHelp": "Сімвалы, якія выкарыстоўваюцца як раздзяляльнікі для падзелу метак.", "LabelDelimiterWhitelist": "Белы спіс падзельнікаў", "AllowStreamSharingHelp": "Дазволіць Jellyfin дубліраваць паток mpegts з цюнэра і абагульваць гэты дубліраваны паток сваім кліентам. Гэта карысна, калі цюнэр мае ліміт агульнай колькасці патокаў, але таксама можа выклікаць праблемы з прайграваннем.", "LabelAllowFmp4TranscodingContainer": "Дазволіць перакадзіравання fMP4 кантэйнера", @@ -1927,15 +1927,19 @@ "AlwaysRemuxMp3AudioFilesHelp": "Калі ў вас ёсць файлы, для якіх ваш браўзер няправільна разлічвае пазнакі часу, уключыце гэта ў якасці абыходнага шляху.", "HeaderMediaSegmentActions": "Дзеянні з медыясегментамі", "MoveToBottom": "Перайсці ўніз", - "VideoCodecTagNotSupported": "Тэг відэакодэка не падтрымліваецца", + "VideoCodecTagNotSupported": "Метка відэакодэка не падтрымліваецца", "MessageSplitVersionsError": "Падчас падзелу версій адбылася памылка", "MoveToTop": "Перайсці ўверх", "PasswordMissingSaveError": "Новы пароль не можа быць пустым.", "LabelTrickplayKeyFrameOnlyExtraction": "Стварэнне малюнкаў толькі на аснове ключавых кадраў", - "UseCustomTagDelimiters": "Выкарыстоўвайце карыстацкі падзельнік тэгаў", + "UseCustomTagDelimiters": "Выкарыстоўваць карыстацкі раздзяляльнік метак", "AutoSubtitleStylingHelp": "Гэты рэжым аўтаматычна пераключае паміж убудаваным і карыстацкім стылямі субтытраў у залежнасці ад тыпу вашай прылады.", "Custom": "Карыстальніцкі", "CustomSubtitleStylingHelp": "Стылізацыя субтытраў будзе працаваць на большасці прылад, але можа прывесці да дадатковай нагрузкі на прадукцыйнасць.", "AllowFmp4TranscodingContainerHelp": "Дазволіць выкарыстанне кантэйнера fMP4 для перакодзіравання на гэтым цюнэры, каб уключыць падтрымку HEVC і HDR. Не ўсе цюнэры сумяшчальныя з гэтым кантэйнерам. Адключыце гэтую функцыю, калі ўзнікаюць праблемы з прайграваннем.", - "LogLoadFailure": "Не ўдалося загрузіць файл журнала. Магчыма, ён можа быць у працэсе запісу." + "LogLoadFailure": "Не ўдалося загрузіць файл журнала. Магчыма, ён можа быць у працэсе запісу.", + "PreferNonstandardArtistsTagHelp": "Выкарыстоўваць нестандартную метку ARTISTS замест меткі ARTIST, калі яна даступная.", + "UseCustomTagDelimitersHelp": "Раздзяляць меткі выканаўцаў і жанраў з дапамогай карыстацкіх сімвалаў.", + "PlaylistError.UpdateFailed": "Памылка абнаўлення плэйліста", + "PreferNonstandardArtistsTag": "Аддаваць перавагу метцы ARTISTS, калі яна ёсць" } From 16936185898cd2afc007f7e6cb9a234e58e65d74 Mon Sep 17 00:00:00 2001 From: Benji Date: Mon, 3 Mar 2025 12:24:00 -0600 Subject: [PATCH 179/235] Fix text truncation bug (#6589) The fixed height can cause the text to be cut off in other languages --- src/styles/dashboard.scss | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/styles/dashboard.scss b/src/styles/dashboard.scss index 93bab1048f..4fdaa3034a 100644 --- a/src/styles/dashboard.scss +++ b/src/styles/dashboard.scss @@ -214,9 +214,15 @@ div[data-role=controlgroup] a.ui-btn-active { width: 50%; } -.localUsers .cardText-secondary { - white-space: pre-wrap; - height: 3em; +.localUsers { + .cardText-secondary { + white-space: pre-wrap; + min-height: 3em; + } + + .cardBox { + height: 100%; + } } .customCssContainer textarea { From c8d2ce414299dfea04c869dc4ceea000eb04fd1f Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:47:09 +0300 Subject: [PATCH 180/235] Migrate libraries metadata to React --- .../dashboard/controllers/metadataImages.js | 94 ----------- .../dashboard/controllers/metadataimages.html | 44 ----- .../features/libraries/api/useCountries.ts | 21 +++ .../features/libraries/api/useCultures.ts | 21 +++ .../libraries/utils/metadataOptions.ts | 19 +++ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - .../dashboard/routes/libraries/metadata.tsx | 159 ++++++++++++++++++ src/strings/en-us.json | 1 + 9 files changed, 222 insertions(+), 145 deletions(-) delete mode 100644 src/apps/dashboard/controllers/metadataImages.js delete mode 100644 src/apps/dashboard/controllers/metadataimages.html create mode 100644 src/apps/dashboard/features/libraries/api/useCountries.ts create mode 100644 src/apps/dashboard/features/libraries/api/useCultures.ts create mode 100644 src/apps/dashboard/features/libraries/utils/metadataOptions.ts create mode 100644 src/apps/dashboard/routes/libraries/metadata.tsx diff --git a/src/apps/dashboard/controllers/metadataImages.js b/src/apps/dashboard/controllers/metadataImages.js deleted file mode 100644 index 5df096a6f1..0000000000 --- a/src/apps/dashboard/controllers/metadataImages.js +++ /dev/null @@ -1,94 +0,0 @@ -import { ImageResolution } from '@jellyfin/sdk/lib/generated-client/models/image-resolution'; - -import 'jquery'; - -import loading from 'components/loading/loading'; -import globalize from 'lib/globalize'; -import Dashboard from 'utils/dashboard'; - -import 'components/listview/listview.scss'; - -function populateImageResolutionOptions(select) { - let html = ''; - [ - { - name: globalize.translate('ResolutionMatchSource'), - value: ImageResolution.MatchSource - }, - { name: '2160p', value: ImageResolution.P2160 }, - { name: '1440p', value: ImageResolution.P1440 }, - { name: '1080p', value: ImageResolution.P1080 }, - { name: '720p', value: ImageResolution.P720 }, - { name: '480p', value: ImageResolution.P480 }, - { name: '360p', value: ImageResolution.P360 }, - { name: '240p', value: ImageResolution.P240 }, - { name: '144p', value: ImageResolution.P144 } - ].forEach(({ value, name }) => { - html += ``; - }); - select.innerHTML = html; -} - -function populateLanguages(select) { - return ApiClient.getCultures().then(function(languages) { - let html = ''; - html += ""; - for (let i = 0, length = languages.length; i < length; i++) { - const culture = languages[i]; - html += "'; - } - select.innerHTML = html; - }); -} - -function populateCountries(select) { - return ApiClient.getCountries().then(function(allCountries) { - let html = ''; - html += ""; - for (let i = 0, length = allCountries.length; i < length; i++) { - const culture = allCountries[i]; - html += "'; - } - select.innerHTML = html; - }); -} - -function loadPage(page) { - const promises = [ - ApiClient.getServerConfiguration(), - populateLanguages(page.querySelector('#selectLanguage')), - populateCountries(page.querySelector('#selectCountry')) - ]; - - populateImageResolutionOptions(page.querySelector('#txtChapterImageResolution')); - - Promise.all(promises).then(function(responses) { - const config = responses[0]; - page.querySelector('#selectLanguage').value = config.PreferredMetadataLanguage || ''; - page.querySelector('#selectCountry').value = config.MetadataCountryCode || ''; - page.querySelector('#valDummyChapterDuration').value = config.DummyChapterDuration || '0'; - page.querySelector('#txtChapterImageResolution').value = config.ChapterImageResolution || ''; - loading.hide(); - }); -} - -function onSubmit() { - const form = this; - loading.show(); - ApiClient.getServerConfiguration().then(function(config) { - config.PreferredMetadataLanguage = form.querySelector('#selectLanguage').value; - config.MetadataCountryCode = form.querySelector('#selectCountry').value; - config.DummyChapterDuration = form.querySelector('#valDummyChapterDuration').value; - config.ChapterImageResolution = form.querySelector('#txtChapterImageResolution').value; - ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult); - }); - return false; -} - -$(document).on('pageinit', '#metadataImagesConfigurationPage', function() { - $('.metadataImagesConfigurationForm').off('submit', onSubmit).on('submit', onSubmit); -}).on('pageshow', '#metadataImagesConfigurationPage', function() { - loading.show(); - loadPage(this); -}); - diff --git a/src/apps/dashboard/controllers/metadataimages.html b/src/apps/dashboard/controllers/metadataimages.html deleted file mode 100644 index a79d59fc63..0000000000 --- a/src/apps/dashboard/controllers/metadataimages.html +++ /dev/null @@ -1,44 +0,0 @@ -
- -
- -
- -
-
-

${HeaderPreferredMetadataLanguage}

- -

${DefaultMetadataLangaugeDescription}

- -
- -
- -
- -
-
- -
-

${HeaderDummyChapter}

-
- -
${LabelDummyChapterDurationHelp}
-
-
- -
-
${LabelChapterImageResolutionHelp}
-
-
-
- -
-
- -
-
-
- -
-
diff --git a/src/apps/dashboard/features/libraries/api/useCountries.ts b/src/apps/dashboard/features/libraries/api/useCountries.ts new file mode 100644 index 0000000000..8acba7726f --- /dev/null +++ b/src/apps/dashboard/features/libraries/api/useCountries.ts @@ -0,0 +1,21 @@ +import { Api } from '@jellyfin/sdk'; +import { getLocalizationApi } from '@jellyfin/sdk/lib/utils/api/localization-api'; +import { useQuery } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import type { AxiosRequestConfig } from 'axios'; + +const fetchCountries = async (api: Api, options?: AxiosRequestConfig) => { + const response = await getLocalizationApi(api).getCountries(options); + + return response.data; +}; + +export const useCountries = () => { + const { api } = useApi(); + + return useQuery({ + queryKey: [ 'Countries' ], + queryFn: ({ signal }) => fetchCountries(api!, { signal }), + enabled: !!api + }); +}; diff --git a/src/apps/dashboard/features/libraries/api/useCultures.ts b/src/apps/dashboard/features/libraries/api/useCultures.ts new file mode 100644 index 0000000000..0df27178bf --- /dev/null +++ b/src/apps/dashboard/features/libraries/api/useCultures.ts @@ -0,0 +1,21 @@ +import { Api } from '@jellyfin/sdk'; +import { getLocalizationApi } from '@jellyfin/sdk/lib/utils/api/localization-api'; +import { useQuery } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import type { AxiosRequestConfig } from 'axios'; + +const fetchCultures = async (api: Api, options?: AxiosRequestConfig) => { + const response = await getLocalizationApi(api).getCultures(options); + + return response.data; +}; + +export const useCultures = () => { + const { api } = useApi(); + + return useQuery({ + queryKey: [ 'Cultures' ], + queryFn: ({ signal }) => fetchCultures(api!, { signal }), + enabled: !!api + }); +}; diff --git a/src/apps/dashboard/features/libraries/utils/metadataOptions.ts b/src/apps/dashboard/features/libraries/utils/metadataOptions.ts new file mode 100644 index 0000000000..2f49789e97 --- /dev/null +++ b/src/apps/dashboard/features/libraries/utils/metadataOptions.ts @@ -0,0 +1,19 @@ +import { ImageResolution } from '@jellyfin/sdk/lib/generated-client/models/image-resolution'; +import globalize from 'lib/globalize'; + +export function getImageResolutionOptions() { + return [ + { + name: globalize.translate('ResolutionMatchSource'), + value: ImageResolution.MatchSource + }, + { name: '2160p', value: ImageResolution.P2160 }, + { name: '1440p', value: ImageResolution.P1440 }, + { name: '1080p', value: ImageResolution.P1080 }, + { name: '720p', value: ImageResolution.P720 }, + { name: '480p', value: ImageResolution.P480 }, + { name: '360p', value: ImageResolution.P360 }, + { name: '240p', value: ImageResolution.P240 }, + { name: '144p', value: ImageResolution.P144 } + ]; +}; diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 3d71e5f018..5a7398da39 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -7,6 +7,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'devices', type: AppType.Dashboard }, { path: 'keys', type: AppType.Dashboard }, { path: 'libraries/display', type: AppType.Dashboard }, + { path: 'libraries/metadata', type: AppType.Dashboard }, { path: 'logs', type: AppType.Dashboard }, { path: 'logs/:file', page: 'logs/file', type: AppType.Dashboard }, { path: 'playback/resume', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index c606c4f1e1..b690b45440 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -37,13 +37,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'encodingsettings', view: 'encodingsettings.html' } - }, { - path: 'libraries/metadata', - pageProps: { - appType: AppType.Dashboard, - controller: 'metadataImages', - view: 'metadataimages.html' - } }, { path: 'libraries/nfo', pageProps: { diff --git a/src/apps/dashboard/routes/libraries/metadata.tsx b/src/apps/dashboard/routes/libraries/metadata.tsx new file mode 100644 index 0000000000..01de039cca --- /dev/null +++ b/src/apps/dashboard/routes/libraries/metadata.tsx @@ -0,0 +1,159 @@ +import { ImageResolution } from '@jellyfin/sdk/lib/generated-client/models/image-resolution'; +import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; +import Alert from '@mui/material/Alert'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import MenuItem from '@mui/material/MenuItem'; +import Stack from '@mui/material/Stack'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import { useCountries } from 'apps/dashboard/features/libraries/api/useCountries'; +import { useCultures } from 'apps/dashboard/features/libraries/api/useCultures'; +import { getImageResolutionOptions } from 'apps/dashboard/features/libraries/utils/metadataOptions'; +import Loading from 'components/loading/LoadingComponent'; +import Page from 'components/Page'; +import ServerConnections from 'components/ServerConnections'; +import { useConfiguration } from 'hooks/useConfiguration'; +import globalize from 'lib/globalize'; +import React from 'react'; +import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; +import { ActionData } from 'types/actionData'; + +export const action = async ({ request }: ActionFunctionArgs) => { + const api = ServerConnections.getCurrentApi(); + if (!api) throw new Error('No Api instance available'); + + const formData = await request.formData(); + const data = Object.fromEntries(formData); + + const { data: config } = await getConfigurationApi(api).getConfiguration(); + + config.PreferredMetadataLanguage = data.Language.toString(); + config.MetadataCountryCode = data.Country.toString(); + config.DummyChapterDuration = parseInt(data.DummyChapterDuration.toString(), 10); + config.ChapterImageResolution = data.ChapterImageResolution.toString() as ImageResolution; + + await getConfigurationApi(api) + .updateConfiguration({ serverConfiguration: config }); + + return { + isSaved: true + }; +}; + +export const Component = () => { + const { + data: config, + isPending: isConfigPending, + isError: isConfigError + } = useConfiguration(); + const { + data: cultures, + isPending: isCulturesPending, + isError: isCulturesError + } = useCultures(); + const { + data: countries, + isPending: isCountriesPending, + isError: isCountriesError + } = useCountries(); + + const navigation = useNavigation(); + const actionData = useActionData() as ActionData | undefined; + const isSubmitting = navigation.state === 'submitting'; + + const imageResolutions = getImageResolutionOptions(); + + if (isConfigPending || isCulturesPending || isCountriesPending) { + return ; + } + + return ( + + + {isConfigError || isCulturesError || isCountriesError ? ( + {globalize.translate('MetadataImagesLoadError')} + ) : ( +
+ + {!isSubmitting && actionData?.isSaved && ( + + {globalize.translate('SettingsSaved')} + + )} + {globalize.translate('HeaderPreferredMetadataLanguage')} + {globalize.translate('DefaultMetadataLangaugeDescription')} + + + {cultures.map(culture => { + return {culture.DisplayName}; + })} + + + + {countries.map(country => { + return {country.DisplayName}; + })} + + + {globalize.translate('HeaderDummyChapter')} + + + + + {imageResolutions.map(resolution => { + return {resolution.name}; + })} + + + + +
+ )} +
+
+ ); +}; + +Component.displayName = 'MetadataImagesPage'; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 0601312d34..8007057b71 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1172,6 +1172,7 @@ "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.", + "MetadataImagesLoadError": "Failed to load metadata settings", "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 2d313e9ae9f4a8fc4623f4e82e3ccbd8d2c5463c Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 25 Feb 2025 18:21:02 +0300 Subject: [PATCH 181/235] Invalidate query key --- src/apps/dashboard/routes/libraries/metadata.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/apps/dashboard/routes/libraries/metadata.tsx b/src/apps/dashboard/routes/libraries/metadata.tsx index 01de039cca..48150b4acd 100644 --- a/src/apps/dashboard/routes/libraries/metadata.tsx +++ b/src/apps/dashboard/routes/libraries/metadata.tsx @@ -13,11 +13,12 @@ import { getImageResolutionOptions } from 'apps/dashboard/features/libraries/uti import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import ServerConnections from 'components/ServerConnections'; -import { useConfiguration } from 'hooks/useConfiguration'; +import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import globalize from 'lib/globalize'; import React from 'react'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; +import { queryClient } from 'utils/query/queryClient'; export const action = async ({ request }: ActionFunctionArgs) => { const api = ServerConnections.getCurrentApi(); @@ -36,6 +37,10 @@ export const action = async ({ request }: ActionFunctionArgs) => { await getConfigurationApi(api) .updateConfiguration({ serverConfiguration: config }); + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + return { isSaved: true }; From 90f025c7fb8cd56409c3c68b25f2c409c2a8d7d7 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Mon, 3 Mar 2025 22:08:51 +0300 Subject: [PATCH 182/235] Remove optional chaining --- src/apps/dashboard/routes/libraries/metadata.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/apps/dashboard/routes/libraries/metadata.tsx b/src/apps/dashboard/routes/libraries/metadata.tsx index 48150b4acd..61ba4bb513 100644 --- a/src/apps/dashboard/routes/libraries/metadata.tsx +++ b/src/apps/dashboard/routes/libraries/metadata.tsx @@ -96,7 +96,7 @@ export const Component = () => { {cultures.map(culture => { @@ -110,7 +110,7 @@ export const Component = () => { {countries.map(country => { @@ -125,7 +125,7 @@ export const Component = () => { { From 5d0e85bf0ef794ce0a554d3bcfa04f2a65b23d55 Mon Sep 17 00:00:00 2001 From: Jakob Stechow Date: Mon, 3 Mar 2025 20:14:24 +0100 Subject: [PATCH 183/235] Add a basic nix flake for development (#6531) * feat: add a basic nix flake * fix: dev server on nixos --- .gitignore | 5 +++++ flake.lock | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 34 +++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.gitignore b/.gitignore index 2ee674ba4d..d76f8f959c 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,8 @@ config.json # vim *.sw? +# direnv +.direnv/ + +# environment related +.envrc diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000000..43d84114a1 --- /dev/null +++ b/flake.lock @@ -0,0 +1,60 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1739874174, + "narHash": "sha256-XGxSVtojlwjYRYGvGXex0Cw+/363EVJlbY9TPX9bARk=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d2ab2691c798f6b633be91d74b1626980ddaff30", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000000..fde1a17573 --- /dev/null +++ b/flake.nix @@ -0,0 +1,34 @@ +{ + description = "jellyfin-web nix flake"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { + self, + nixpkgs, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem ( + system: let + pkgs = import nixpkgs { + inherit system; + }; + in { + devShell = with pkgs; + mkShell rec { + buildInputs = [ + nodejs_20 + ]; + + shellHook = '' + # Also see: https://github.com/sass/embedded-host-node/issues/334 + echo "Removing sass-embedded from node-modules as its broken on NixOS." + rm -rf node_modules/sass-embedded* + ''; + }; + } + ); +} From 2c6c28c4def676b53872326b2b5e2ea06c50705e Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Mon, 3 Mar 2025 19:39:29 +0000 Subject: [PATCH 184/235] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index f437808ff9..7bde4a5c31 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2005,5 +2005,6 @@ "LibraryNameInvalid": "Bibliotheeknaam kan niet leeg zijn.", "CopyLogSuccess": "Logboekinhoud gekopieerd.", "Retry": "Opnieuw proberen", - "LogLoadFailure": "Laden van logboekbestand mislukt. Mogelijk wordt er nog actief naar geschreven." + "LogLoadFailure": "Laden van logboekbestand mislukt. Mogelijk wordt er nog actief naar geschreven.", + "DisplayLoadError": "Er is een fout opgetreden bij het laden van de weergaveconfiguratiegegevens." } From 1a4d353db51eef52e777f97b646acac038168e92 Mon Sep 17 00:00:00 2001 From: dmitrylyzo <56478732+dmitrylyzo@users.noreply.github.com> Date: Mon, 3 Mar 2025 15:54:10 -0500 Subject: [PATCH 185/235] Backport pull request #6509 from jellyfin-web/release-10.10.z Fix navigation for emby-select element Original-merge: d3054985a551172ddfc5f88847951886f272fc24 Merged-by: thornbill Backported-by: thornbill --- src/elements/emby-select/emby-select.js | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/elements/emby-select/emby-select.js b/src/elements/emby-select/emby-select.js index 2ed9e7c89b..b845c68c16 100644 --- a/src/elements/emby-select/emby-select.js +++ b/src/elements/emby-select/emby-select.js @@ -79,23 +79,9 @@ function onMouseDown(e) { } function onKeyDown(e) { - switch (e.keyCode) { - case 13: - if (!enableNativeMenu()) { - e.preventDefault(); - showActionSheet(this); - } - return; - case 37: - case 38: - case 39: - case 40: - if (layoutManager.tv) { - e.preventDefault(); - } - return; - default: - break; + if (e.keyCode === 13 && !enableNativeMenu()) { + e.preventDefault(); + showActionSheet(this); } } From 31c3e58f7524c1d38a1b743061324e944d7a55a0 Mon Sep 17 00:00:00 2001 From: nielsvanvelzen Date: Mon, 3 Mar 2025 15:54:11 -0500 Subject: [PATCH 186/235] Backport pull request #6570 from jellyfin-web/release-10.10.z Fix catalog plugin page not setting page title Original-merge: 16a084b009885cc41bc4f1734049739c69623719 Merged-by: thornbill Backported-by: thornbill --- src/apps/dashboard/routes/plugins/plugin.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps/dashboard/routes/plugins/plugin.tsx b/src/apps/dashboard/routes/plugins/plugin.tsx index 1e455ac5b5..b75ea1346f 100644 --- a/src/apps/dashboard/routes/plugins/plugin.tsx +++ b/src/apps/dashboard/routes/plugins/plugin.tsx @@ -303,6 +303,7 @@ const PluginPage: FC = () => { return ( From dc92370ce6152cfb0bb5dd6b98da4f3523ce0639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20Grundstr=C3=B6m?= Date: Mon, 3 Mar 2025 22:52:34 +0000 Subject: [PATCH 187/235] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index de78da4f25..9e2db6e45f 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1995,8 +1995,12 @@ "Custom": "Anpassad", "LabelSubtitleStyling": "Styling av undertexter", "Native": "Native", - "LibraryNameInvalid": "Biblioteksnamnet kan inte vara tomt eller börja/sluta med mellanslag.", + "LibraryNameInvalid": "Biblioteksnamnet kan inte vara tomt.", "LabelDevice": "Enhet", "LastActive": "Senast aktiv", - "DeleteServerConfirmation": "Är du säker på att du vill ta bort den här servern?" + "DeleteServerConfirmation": "Är du säker på att du vill ta bort den här servern?", + "CopyLogSuccess": "Kopieringen av loggens innehåll lyckades.", + "DisplayLoadError": "Ett fel inträffade när skärmens konfigurationsdata skulle laddas.", + "MetadataImagesLoadError": "Laddningen av inställningarna för metadatan misslyckades", + "Retry": "Försök igen" } From 22eeb0f27ec5bb3773e8e9eee0ad68aeaec85740 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 05:59:37 +0000 Subject: [PATCH 188/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 98fe3a1d86..b9bb1804ad 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -939,7 +939,7 @@ "LabelTonemappingThresholdHelp": "Параметры алгарытму адлюстравання тонаў наладжваюцца для кожнай сцэны. І парог выкарыстоўваецца, каб вызначыць, змянілася сцэна ці не. Калі адлегласць паміж бягучай сярэдняй яркасцю кадра і бягучай сярэдняй яркасцю перавышае парогавае значэнне, мы пералічым сярэднюю і пікавую яркасць сцэны. Рэкамендуемыя значэнні і значэнні па змаўчанні - 0,8 і 0,2.", "LabelTranscodingProgress": "Ход перакадзіравання", "LabelTranscodingTempPathHelp": "Укажыце карыстальніцкі шлях для перакадаваных файлаў, якія абслугоўваюцца кліентамі. Пакіньце пустым, каб выкарыстоўваць сервер па змаўчанні.", - "LabelTranscodingThreadCountHelp": "Выберыце максімальную колькасць патокаў для выкарыстання пры перакадзіраванні. Памяншэнне колькасці патокаў знізіць загрузку працэсара, але можа быць недастаткова хутка пераўтворана для гладкага прайгравання.", + "LabelTranscodingThreadCountHelp": "Выберыце максімальную колькасць патокаў для выкарыстання пры перакодзіраванні. Памяншэнне колькасці патокаў знізіць нагрузку на працэсар, але можа прывесці да недастаткова хуткага канвертавання для бесперапыннага прайгравання.", "LabelTunerIpAddress": "IP-адрас цюнэра", "LabelTunerType": "Тып цюнэра", "LabelTypeMetadataDownloaders": "Сродкі загрузкі метададзеных ({0})", @@ -970,7 +970,7 @@ "LabelAllowHWTranscoding": "Дазволіць апаратнае перакадзіраванне", "MediaInfoLevel": "Узровень", "MediaInfoRefFrames": "Рэферальныя кадры", - "MediaIsBeingConverted": "Медыя пераўтворыцца ў фармат, сумяшчальны з прыладай, якая прайгравае мультымедыя.", + "MediaIsBeingConverted": "Медыяфайл пераўтворыцца ў фармат, які сумяшчальны з прыладай, якая яго прайграе.", "MessageAddRepository": "Калі вы хочаце дадаць рэпазітар, націсніце кнопку побач з загалоўкам і запоўніце запытаную інфармацыю.", "LabelAutomaticDiscovery": "Уключыць аўтаматычнае выяўленне", "MessageAreYouSureDeleteSubtitles": "Вы ўпэўнены, што хочаце выдаліць гэты файл субтытраў?", From d3322388e16bef9805ea3b7c4fc8bfccc715544b Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 06:03:06 +0000 Subject: [PATCH 189/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index b9bb1804ad..4ae3801de8 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -93,7 +93,7 @@ "Aired": "Эфір", "AnyLanguage": "Любая мова", "Artist": "Выканаўца", - "AllowMediaConversionHelp": "Дайце або забараніце доступ да функцыі перакадзіравання мультымедыя.", + "AllowMediaConversionHelp": "Дайце або забараніце доступ да функцыі канвертавання медыяфайлаў.", "AlwaysPlaySubtitlesHelp": "Субтытры, якія адпавядаюць параметрам мовы, будуць загружаны незалежна ад мовы гуку.", "AllowMediaConversion": "Дазволіць перакадзіраванне мультымедыя", "AllowFfmpegThrottling": "Абмежаваць перакадзіраванне", From e51ae7af1267afe226f46a3fc283eb548b269d48 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 06:09:46 +0000 Subject: [PATCH 190/235] 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, 8 insertions(+), 8 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 4ae3801de8..755a2ef6f7 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -95,7 +95,7 @@ "Artist": "Выканаўца", "AllowMediaConversionHelp": "Дайце або забараніце доступ да функцыі канвертавання медыяфайлаў.", "AlwaysPlaySubtitlesHelp": "Субтытры, якія адпавядаюць параметрам мовы, будуць загружаны незалежна ад мовы гуку.", - "AllowMediaConversion": "Дазволіць перакадзіраванне мультымедыя", + "AllowMediaConversion": "Дазволіць канвертаванне медыяфайлаў", "AllowFfmpegThrottling": "Абмежаваць перакадзіраванне", "AddToPlaylist": "Дадаць у плэйліст", "Album": "Альбом", @@ -144,7 +144,7 @@ "ButtonParentalControl": "Бацькоўскі кантроль", "ButtonShutdown": "Адключыць", "Backdrop": "Заднік", - "ButtonAddMediaLibrary": "Дадаць медыятэку", + "ButtonAddMediaLibrary": "Дадаць бібліятэку медыяфайлаў", "ButtonEditOtherUserPreferences": "Рэдагаваць профіль, выяву і асабістыя налады гэтага карыстальніка.", "ButtonRefreshGuideData": "Абнавіць даныя даведніка", "Authorize": "Аўтарызаваць", @@ -358,8 +358,8 @@ "Conductor": "Дырыжор", "ConfigureDateAdded": "Наладзьце спосаб вызначэння метададзеных для \"Дата дадання\" ў \"Панэль кіравання\" > \"Медыятэка\" > \"Налады NFO\"", "ConfirmDeleteImage": "Выдаліць выяву?", - "ConfirmDeleteItem": "Пры выдаленні гэтага элемента ён будзе выдалены як з файлавай сістэмы, так і з вашай медыятэкі. Вы ўпэўнены, што хочаце працягнуць?", - "ConfirmDeleteItems": "Выдаленне гэтых элементаў прывядзе да іх выдалення як з файлавай сістэмы, так і з вашай медыятэкі. Вы ўпэўнены, што хочаце працягнуць?", + "ConfirmDeleteItem": "Выдаленне гэтага элемента прывядзе да яго выдалення як з файлавай сістэмы, так і з вашай бібліятэкі медыяфайлаў. Вы ўпэўнены, што жадаеце працягнуць?", + "ConfirmDeleteItems": "Выдаленне гэтых элементаў прывядзе да іх выдалення як з файлавай сістэмы, так і з вашай бібліятэкі медыяфайлаў. Вы ўпэўнены, што хочаце працягнуць?", "ConfirmEndPlayerSession": "Вы хочаце адключыць Jellyfin на {0}?", "Console": "Кансоль", "Copy": "Копія", @@ -876,7 +876,7 @@ "DeleteDevicesConfirmation": "Вы ўпэўнены, што хочаце выдаліць усе прылады? Усе астатнія сеансы будуць выключаны. Прылады зноў з'явяцца пры наступным уваходзе карыстальніка.", "DeleteImage": "Выдаліць выяву", "DeleteImageConfirmation": "Вы ўпэўнены, што хочаце выдаліць гэты відарыс?", - "DeleteMedia": "Выдаліць медыя", + "DeleteMedia": "Выдаліць медыяфайл", "DeleteUserConfirmation": "Вы ўпэўнены, што хочаце выдаліць гэтага карыстальніка?", "Depressed": "Прыгнечаны", "Descending": "Па сыходзе", @@ -970,7 +970,7 @@ "LabelAllowHWTranscoding": "Дазволіць апаратнае перакадзіраванне", "MediaInfoLevel": "Узровень", "MediaInfoRefFrames": "Рэферальныя кадры", - "MediaIsBeingConverted": "Медыяфайл пераўтворыцца ў фармат, які сумяшчальны з прыладай, якая яго прайграе.", + "MediaIsBeingConverted": "Медыяфайл канвертуецца ў фармат, які сумяшчальны з прыладай, якая яго прайграе.", "MessageAddRepository": "Калі вы хочаце дадаць рэпазітар, націсніце кнопку побач з загалоўкам і запоўніце запытаную інфармацыю.", "LabelAutomaticDiscovery": "Уключыць аўтаматычнае выяўленне", "MessageAreYouSureDeleteSubtitles": "Вы ўпэўнены, што хочаце выдаліць гэты файл субтытраў?", @@ -1789,8 +1789,8 @@ "HeaderAllRecordings": "Усе запісы", "DeleteName": "Выдаліць {0}", "EnableSmoothScroll": "Уключыць плаўную пракрутку", - "ConfirmDeleteSeries": "Выдаленне гэтага серыялу прывядзе да выдалення ЎСІХ {0} эпізодаў як з файлавай сістэмы, так і з вашай медыятэкі. Вы ўпэўнены, што хочаце працягнуць?", - "ConfirmDeleteLyrics": "Выдаленне гэтых тэкстаў песен прывядзе да іх выдалення як з файлавай сістэмы, так і з вашай медыятэкі. Вы ўпэўнены, што хочаце працягнуць?", + "ConfirmDeleteSeries": "Выдаленне гэтага серыялу прывядзе да выдалення ЎСІХ {0} эпізодаў як з файлавай сістэмы, так і з вашай бібліятэкі медыяфайлаў. Вы ўпэўнены, што хочаце працягнуць?", + "ConfirmDeleteLyrics": "Выдаленне гэтых тэкстаў песень прывядзе да іх выдалення як з файлавай сістэмы, так і з вашай бібліятэкі медыяфайлаў. Вы ўпэўнены, што жадаеце працягнуць?", "EnableTrueHdHelp": "Уключайце, толькі калі ваша прылада падтрымлівае TrueHD або падлучана да сумяшчальнага аўдыяпрыёмніка, у адваротным выпадку гэта можа прывесці да збою прайгравання.", "EnableDtsHelp": "Уключайце, толькі калі ваша прылада падтрымлівае DTS або падлучана да сумяшчальнага аўдыяпрыёмніка, у адваротным выпадку гэта можа прывесці да збою прайгравання.", "CoverArtist": "Аўтар вокладкі", From 74468add250e0c84604bb63a02bd6b288737e03a Mon Sep 17 00:00:00 2001 From: Kityn Date: Tue, 4 Mar 2025 06:18:38 +0000 Subject: [PATCH 191/235] 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 168ec16586..5d5fde498e 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2006,5 +2006,7 @@ "LibraryNameInvalid": "Nazwa biblioteki nie może być pusta.", "CopyLogSuccess": "Zawartość dziennika została pomyślnie skopiowana.", "Retry": "Ponów", - "LogLoadFailure": "Nie udało się załadować pliku dziennika. Nadal może być aktywnie zapisywany." + "LogLoadFailure": "Nie udało się załadować pliku dziennika. Nadal może być aktywnie zapisywany.", + "DisplayLoadError": "Wystąpił błąd podczas ładowania danych konfiguracji wyświetlania.", + "MetadataImagesLoadError": "Nie udało się załadować ustawień metadanych" } From e80b890bd27fe4f003fac90039aad803739288eb Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 06:41:20 +0000 Subject: [PATCH 192/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 755a2ef6f7..a4798bd1b4 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -386,7 +386,7 @@ "LabelTime": "Час", "DirectStreamHelp1": "Відэапаток сумяшчальны з прыладай, але мае несумяшчальны аўдыяфармат (DTS, Dolby TrueHD і г.д.) або колькасць аўдыё каналаў. Відэапаток будзе перапакоўвацца без страт у якасці на хаду перад адпраўкай на прыладу. Будзе перакадзіраваны толькі аўдыё паток.", "Disc": "Дыск", - "DisplayInMyMedia": "Паказаць на галоўным экране", + "DisplayInMyMedia": "Адлюстроўваць на галоўным экране", "DisplayMissingEpisodesWithinSeasonsHelp": "Гэта таксама павінна быць уключана для ТБ-бібліятэк у канфігурацыі сервера.", "DisplayModeHelp": "Выберыце патрэбны стыль раскладкі інтэрфейсу.", "DoNotRecord": "Не запісваць", @@ -887,7 +887,7 @@ "EnablePlugin": "Уключыць", "DisableCustomCss": "Адключыць карыстальніцкі код CSS, прадастаўлены серверам", "DisablePlugin": "Адключыць", - "DisplayInOtherHomeScreenSections": "Паказаць ў раздзелах галоўнага экрана такія секцыі як \"Нядаўна дададзеныя мультымедыя\" і \"Працягнуць прагляд\"", + "DisplayInOtherHomeScreenSections": "Адлюстроўваць у раздзелах галоўнага экрана, такіх як 'Нядаўна даданыя медыяфайлы' і 'Працягнуць прагляд'", "DisplayMissingEpisodesWithinSeasons": "Паказаць адсутныя серыі ў сезону", "DrmChannelsNotImported": "Каналы з DRM не будуць імпартаваны.", "DropShadow": "Цень", From 524d1b6574d663e25de276ec35bedaf9b4c6eb90 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 22 Feb 2025 16:45:48 +0300 Subject: [PATCH 193/235] Migrate tasks edit page to react --- .../scheduledtasks/scheduledtask.html | 84 ------- .../scheduledtasks/scheduledtask.js | 236 ------------------ .../api/useStartTask.ts | 0 .../api/useStopTask.ts | 0 .../dashboard/features/tasks/api/useTask.ts | 35 +++ .../{scheduledtasks => tasks}/api/useTasks.ts | 0 .../features/tasks/api/useUpdateTask.ts | 22 ++ .../tasks/components/NewTriggerForm.tsx | 169 +++++++++++++ .../components/Task.tsx | 0 .../components/TaskLastRan.tsx | 0 .../components/TaskProgress.tsx | 0 .../tasks/components/TaskTriggerCell.tsx | 34 +++ .../components/Tasks.tsx | 0 .../types/taskProps.ts | 0 .../dashboard/features/tasks/utils/edit.ts | 64 +++++ .../{scheduledtasks => tasks}/utils/tasks.ts | 0 src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - src/apps/dashboard/routes/tasks/edit.tsx | 173 +++++++++++++ src/apps/dashboard/routes/tasks/index.tsx | 6 +- 20 files changed, 501 insertions(+), 330 deletions(-) delete mode 100644 src/apps/dashboard/controllers/scheduledtasks/scheduledtask.html delete mode 100644 src/apps/dashboard/controllers/scheduledtasks/scheduledtask.js rename src/apps/dashboard/features/{scheduledtasks => tasks}/api/useStartTask.ts (100%) rename src/apps/dashboard/features/{scheduledtasks => tasks}/api/useStopTask.ts (100%) create mode 100644 src/apps/dashboard/features/tasks/api/useTask.ts rename src/apps/dashboard/features/{scheduledtasks => tasks}/api/useTasks.ts (100%) create mode 100644 src/apps/dashboard/features/tasks/api/useUpdateTask.ts create mode 100644 src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx rename src/apps/dashboard/features/{scheduledtasks => tasks}/components/Task.tsx (100%) rename src/apps/dashboard/features/{scheduledtasks => tasks}/components/TaskLastRan.tsx (100%) rename src/apps/dashboard/features/{scheduledtasks => tasks}/components/TaskProgress.tsx (100%) create mode 100644 src/apps/dashboard/features/tasks/components/TaskTriggerCell.tsx rename src/apps/dashboard/features/{scheduledtasks => tasks}/components/Tasks.tsx (100%) rename src/apps/dashboard/features/{scheduledtasks => tasks}/types/taskProps.ts (100%) create mode 100644 src/apps/dashboard/features/tasks/utils/edit.ts rename src/apps/dashboard/features/{scheduledtasks => tasks}/utils/tasks.ts (100%) create mode 100644 src/apps/dashboard/routes/tasks/edit.tsx diff --git a/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.html b/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.html deleted file mode 100644 index a2352e6470..0000000000 --- a/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.html +++ /dev/null @@ -1,84 +0,0 @@ -
-
-
-
-
-

-
-

-
- -
-
-

${HeaderTaskTriggers}

- -
-
-
-
-
-
-
-
-

${ButtonAddScheduledTaskTrigger}

-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- - -
-
-
-
-
diff --git a/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.js b/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.js deleted file mode 100644 index 7d46af171a..0000000000 --- a/src/apps/dashboard/controllers/scheduledtasks/scheduledtask.js +++ /dev/null @@ -1,236 +0,0 @@ -import loading from 'components/loading/loading'; -import datetime from 'scripts/datetime'; -import dom from 'scripts/dom'; -import globalize from 'lib/globalize'; -import 'elements/emby-input/emby-input'; -import 'elements/emby-button/emby-button'; -import 'elements/emby-select/emby-select'; -import confirm from 'components/confirm/confirm'; -import { getParameterByName } from 'utils/url.ts'; - -function fillTimeOfDay(select) { - const options = []; - - for (let i = 0; i < 86400000; i += 900000) { - options.push({ - name: ScheduledTaskPage.getDisplayTime(i * 10000), - value: i * 10000 - }); - } - - select.innerHTML = options.map(function (o) { - return ''; - }).join(''); -} - -const ScheduledTaskPage = { - refreshScheduledTask: function (view) { - loading.show(); - const id = getParameterByName('id'); - ApiClient.getScheduledTask(id).then(function (task) { - ScheduledTaskPage.loadScheduledTask(view, task); - }); - }, - loadScheduledTask: function (view, task) { - view.querySelector('.taskName').innerHTML = task.Name; - view.querySelector('#pTaskDescription').innerHTML = task.Description; - - import('components/listview/listview.scss').then(() => { - ScheduledTaskPage.loadTaskTriggers(view, task); - }); - - loading.hide(); - }, - loadTaskTriggers: function (context, task) { - let html = ''; - html += '
'; - - for (let i = 0, length = task.Triggers.length; i < length; i++) { - const trigger = task.Triggers[i]; - - html += '
'; - html += ''; - if (trigger.MaxRuntimeTicks) { - html += '
'; - } else { - html += '
'; - } - html += "
" + ScheduledTaskPage.getTriggerFriendlyName(trigger) + '
'; - if (trigger.MaxRuntimeTicks) { - html += '
'; - const hours = trigger.MaxRuntimeTicks / 36e9; - if (hours == 1) { - html += globalize.translate('ValueTimeLimitSingleHour'); - } else { - html += globalize.translate('ValueTimeLimitMultiHour', hours); - } - html += '
'; - } - - html += '
'; - html += ''; - html += '
'; - } - - html += '
'; - context.querySelector('.taskTriggers').innerHTML = html; - }, - // TODO: Replace this mess with date-fns and remove datetime completely - getTriggerFriendlyName: function (trigger) { - if (trigger.Type == 'DailyTrigger') { - return globalize.translate('DailyAt', ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks)); - } - - if (trigger.Type == 'WeeklyTrigger') { - // TODO: The day of week isn't localised as well - return globalize.translate('WeeklyAt', trigger.DayOfWeek, ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks)); - } - - if (trigger.Type == 'SystemEventTrigger' && trigger.SystemEvent == 'WakeFromSleep') { - return globalize.translate('OnWakeFromSleep'); - } - - if (trigger.Type == 'IntervalTrigger') { - const hours = trigger.IntervalTicks / 36e9; - - if (hours == 0.25) { - return globalize.translate('EveryXMinutes', '15'); - } - if (hours == 0.5) { - return globalize.translate('EveryXMinutes', '30'); - } - if (hours == 0.75) { - return globalize.translate('EveryXMinutes', '45'); - } - if (hours == 1) { - return globalize.translate('EveryHour'); - } - - return globalize.translate('EveryXHours', hours); - } - - if (trigger.Type == 'StartupTrigger') { - return globalize.translate('OnApplicationStartup'); - } - - return trigger.Type; - }, - getDisplayTime: function (ticks) { - const ms = ticks / 1e4; - const now = new Date(); - now.setHours(0, 0, 0, 0); - now.setTime(now.getTime() + ms); - return datetime.getDisplayTime(now); - }, - showAddTriggerPopup: function (view) { - view.querySelector('#selectTriggerType').value = 'DailyTrigger'; - view.querySelector('#selectTriggerType').dispatchEvent(new CustomEvent('change', {})); - view.querySelector('#popupAddTrigger').classList.remove('hide'); - }, - confirmDeleteTrigger: function (view, index) { - confirm(globalize.translate('MessageDeleteTaskTrigger'), globalize.translate('HeaderDeleteTaskTrigger')).then(function () { - ScheduledTaskPage.deleteTrigger(view, index); - }); - }, - deleteTrigger: function (view, index) { - loading.show(); - const id = getParameterByName('id'); - ApiClient.getScheduledTask(id).then(function (task) { - task.Triggers.splice(index, 1); - ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () { - ScheduledTaskPage.refreshScheduledTask(view); - }); - }); - }, - refreshTriggerFields: function (page, triggerType) { - if (triggerType == 'DailyTrigger') { - page.querySelector('#fldTimeOfDay').classList.remove('hide'); - page.querySelector('#fldDayOfWeek').classList.add('hide'); - page.querySelector('#fldSelectSystemEvent').classList.add('hide'); - page.querySelector('#fldSelectInterval').classList.add('hide'); - page.querySelector('#selectTimeOfDay').setAttribute('required', 'required'); - } else if (triggerType == 'WeeklyTrigger') { - page.querySelector('#fldTimeOfDay').classList.remove('hide'); - page.querySelector('#fldDayOfWeek').classList.remove('hide'); - page.querySelector('#fldSelectSystemEvent').classList.add('hide'); - page.querySelector('#fldSelectInterval').classList.add('hide'); - page.querySelector('#selectTimeOfDay').setAttribute('required', 'required'); - } else if (triggerType == 'SystemEventTrigger') { - page.querySelector('#fldTimeOfDay').classList.add('hide'); - page.querySelector('#fldDayOfWeek').classList.add('hide'); - page.querySelector('#fldSelectSystemEvent').classList.remove('hide'); - page.querySelector('#fldSelectInterval').classList.add('hide'); - page.querySelector('#selectTimeOfDay').removeAttribute('required'); - } else if (triggerType == 'IntervalTrigger') { - page.querySelector('#fldTimeOfDay').classList.add('hide'); - page.querySelector('#fldDayOfWeek').classList.add('hide'); - page.querySelector('#fldSelectSystemEvent').classList.add('hide'); - page.querySelector('#fldSelectInterval').classList.remove('hide'); - page.querySelector('#selectTimeOfDay').removeAttribute('required'); - } else if (triggerType == 'StartupTrigger') { - page.querySelector('#fldTimeOfDay').classList.add('hide'); - page.querySelector('#fldDayOfWeek').classList.add('hide'); - page.querySelector('#fldSelectSystemEvent').classList.add('hide'); - page.querySelector('#fldSelectInterval').classList.add('hide'); - page.querySelector('#selectTimeOfDay').removeAttribute('required'); - } - }, - getTriggerToAdd: function (page) { - const trigger = { - Type: page.querySelector('#selectTriggerType').value - }; - - if (trigger.Type == 'DailyTrigger') { - trigger.TimeOfDayTicks = page.querySelector('#selectTimeOfDay').value; - } else if (trigger.Type == 'WeeklyTrigger') { - trigger.DayOfWeek = page.querySelector('#selectDayOfWeek').value; - trigger.TimeOfDayTicks = page.querySelector('#selectTimeOfDay').value; - } else if (trigger.Type == 'SystemEventTrigger') { - trigger.SystemEvent = page.querySelector('#selectSystemEvent').value; - } else if (trigger.Type == 'IntervalTrigger') { - trigger.IntervalTicks = page.querySelector('#selectInterval').value; - } - - let timeLimit = page.querySelector('#txtTimeLimit').value || '0'; - timeLimit = parseFloat(timeLimit) * 3600000; - - trigger.MaxRuntimeTicks = timeLimit * 1e4 || null; - - return trigger; - } -}; -export default function (view) { - function onSubmit(e) { - loading.show(); - const id = getParameterByName('id'); - ApiClient.getScheduledTask(id).then(function (task) { - task.Triggers.push(ScheduledTaskPage.getTriggerToAdd(view)); - ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () { - document.querySelector('#popupAddTrigger').classList.add('hide'); - ScheduledTaskPage.refreshScheduledTask(view); - }); - }); - e.preventDefault(); - } - - view.querySelector('.addTriggerForm').addEventListener('submit', onSubmit); - fillTimeOfDay(view.querySelector('#selectTimeOfDay')); - view.querySelector('#popupAddTrigger').parentNode.trigger(new Event('create')); - view.querySelector('.selectTriggerType').addEventListener('change', function () { - ScheduledTaskPage.refreshTriggerFields(view, this.value); - }); - view.querySelector('.btnAddTrigger').addEventListener('click', function () { - ScheduledTaskPage.showAddTriggerPopup(view); - }); - view.addEventListener('click', function (e) { - const btnDeleteTrigger = dom.parentWithClass(e.target, 'btnDeleteTrigger'); - - if (btnDeleteTrigger) { - ScheduledTaskPage.confirmDeleteTrigger(view, parseInt(btnDeleteTrigger.getAttribute('data-index'), 10)); - } - }); - view.addEventListener('viewshow', function () { - ScheduledTaskPage.refreshScheduledTask(view); - }); -} - diff --git a/src/apps/dashboard/features/scheduledtasks/api/useStartTask.ts b/src/apps/dashboard/features/tasks/api/useStartTask.ts similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/api/useStartTask.ts rename to src/apps/dashboard/features/tasks/api/useStartTask.ts diff --git a/src/apps/dashboard/features/scheduledtasks/api/useStopTask.ts b/src/apps/dashboard/features/tasks/api/useStopTask.ts similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/api/useStopTask.ts rename to src/apps/dashboard/features/tasks/api/useStopTask.ts diff --git a/src/apps/dashboard/features/tasks/api/useTask.ts b/src/apps/dashboard/features/tasks/api/useTask.ts new file mode 100644 index 0000000000..98800420b4 --- /dev/null +++ b/src/apps/dashboard/features/tasks/api/useTask.ts @@ -0,0 +1,35 @@ +import type { ScheduledTasksApiGetTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api'; +import type { AxiosRequestConfig } from 'axios'; +import type { Api } from '@jellyfin/sdk'; +import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api'; +import { useQuery } from '@tanstack/react-query'; + +import { useApi } from 'hooks/useApi'; + +export const QUERY_KEY = 'Task'; + +const fetchTask = async ( + api: Api, + params: ScheduledTasksApiGetTaskRequest, + options?: AxiosRequestConfig +) => { + if (!api) { + console.warn('[fetchTasks] No API instance available'); + return; + } + + const response = await getScheduledTasksApi(api).getTask(params, options); + + return response.data; +}; + +export const useTask = (params: ScheduledTasksApiGetTaskRequest) => { + const { api } = useApi(); + + return useQuery({ + queryKey: [ QUERY_KEY, params.taskId ], + queryFn: ({ signal }) => + fetchTask(api!, params, { signal }), + enabled: !!api + }); +}; diff --git a/src/apps/dashboard/features/scheduledtasks/api/useTasks.ts b/src/apps/dashboard/features/tasks/api/useTasks.ts similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/api/useTasks.ts rename to src/apps/dashboard/features/tasks/api/useTasks.ts diff --git a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts new file mode 100644 index 0000000000..8f34c0df38 --- /dev/null +++ b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts @@ -0,0 +1,22 @@ +import { ScheduledTasksApiUpdateTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api'; +import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api'; +import { useMutation } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; +import { QUERY_KEY } from './useTasks'; + +export const useUpdateTask = () => { + const { api } = useApi(); + + return useMutation({ + mutationFn: (params: ScheduledTasksApiUpdateTaskRequest) => ( + getScheduledTasksApi(api!) + .updateTask(params) + ), + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + } + }); +}; diff --git a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx new file mode 100644 index 0000000000..53404885fc --- /dev/null +++ b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx @@ -0,0 +1,169 @@ +import React, { FunctionComponent, useCallback, useMemo, useState } from 'react'; +import Dialog from '@mui/material/Dialog'; +import Button from '@mui/material/Button'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogTitle from '@mui/material/DialogTitle'; +import MenuItem from '@mui/material/MenuItem'; +import Stack from '@mui/material/Stack'; +import TextField from '@mui/material/TextField'; +import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info'; +import { TaskTriggerInfoType } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info-type'; +import { DayOfWeek } from '@jellyfin/sdk/lib/generated-client/models/day-of-week'; +import globalize from 'lib/globalize'; +import { getTimeOfDayOptions } from '../utils/edit'; +import { useLocale } from 'hooks/useLocale'; + +type IProps = { + open: boolean, + title: string, + onClose?: () => void, + onSubmit?: (trigger: TaskTriggerInfo) => void +}; + +const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onSubmit }: IProps) => { + const { dateFnsLocale } = useLocale(); + const [triggerType, setTriggerType] = useState('DailyTrigger'); + + const timeOfDayOptions = useMemo(() => getTimeOfDayOptions(dateFnsLocale), [dateFnsLocale]); + + const onTriggerTypeChange = useCallback((e: React.ChangeEvent) => { + setTriggerType(e.target.value); + }, []); + + return ( + ) => { + e.preventDefault(); + + const formData = new FormData(e.currentTarget); + const data = Object.fromEntries(formData.entries()); + const trigger: TaskTriggerInfo = { + Type: data.TriggerType.toString() as TaskTriggerInfoType + }; + + if (trigger.Type == TaskTriggerInfoType.WeeklyTrigger) { + trigger.DayOfWeek = data.DayOfWeek.toString() as DayOfWeek; + } + + if (trigger.Type == TaskTriggerInfoType.DailyTrigger || trigger.Type == TaskTriggerInfoType.WeeklyTrigger) { + trigger.TimeOfDayTicks = parseInt(data.TimeOfDay.toString(), 10); + } + + if (trigger.Type == TaskTriggerInfoType.IntervalTrigger) { + trigger.IntervalTicks = parseInt(data.Interval.toString(), 10); + } + + if (data.TimeLimit.toString()) { + trigger.MaxRuntimeTicks = parseFloat(data.TimeLimit.toString()) * 3600000 * 1e4; + } + + if (onSubmit) { + onSubmit(trigger); + } + } + }} + > + {title} + + + + + {globalize.translate('OptionDaily')} + {globalize.translate('OptionWeekly')} + {globalize.translate('OptionOnInterval')} + {globalize.translate('OnApplicationStartup')} + + + {triggerType == 'WeeklyTrigger' && ( + + {globalize.translate('Sunday')} + {globalize.translate('Monday')} + {globalize.translate('Tuesday')} + {globalize.translate('Wednesday')} + {globalize.translate('Thursday')} + {globalize.translate('Friday')} + {globalize.translate('Saturday')} + + )} + + {['DailyTrigger', 'WeeklyTrigger'].includes(triggerType) && ( + + {timeOfDayOptions.map((option) => { + return {option.name}; + })} + + )} + + {triggerType == 'IntervalTrigger' && ( + + 15 minutes + 30 minutes + 45 minutes + 1 hour + 2 hours + 3 hours + 4 hours + 6 hours + 8 hours + 12 hours + 24 hours + + )} + + + + + + + + + + + ); +}; + +export default NewTriggerForm; diff --git a/src/apps/dashboard/features/scheduledtasks/components/Task.tsx b/src/apps/dashboard/features/tasks/components/Task.tsx similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/components/Task.tsx rename to src/apps/dashboard/features/tasks/components/Task.tsx diff --git a/src/apps/dashboard/features/scheduledtasks/components/TaskLastRan.tsx b/src/apps/dashboard/features/tasks/components/TaskLastRan.tsx similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/components/TaskLastRan.tsx rename to src/apps/dashboard/features/tasks/components/TaskLastRan.tsx diff --git a/src/apps/dashboard/features/scheduledtasks/components/TaskProgress.tsx b/src/apps/dashboard/features/tasks/components/TaskProgress.tsx similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/components/TaskProgress.tsx rename to src/apps/dashboard/features/tasks/components/TaskProgress.tsx diff --git a/src/apps/dashboard/features/tasks/components/TaskTriggerCell.tsx b/src/apps/dashboard/features/tasks/components/TaskTriggerCell.tsx new file mode 100644 index 0000000000..9f4f8502c9 --- /dev/null +++ b/src/apps/dashboard/features/tasks/components/TaskTriggerCell.tsx @@ -0,0 +1,34 @@ +import React, { FC } from 'react'; +import type { MRT_Cell, MRT_RowData } from 'material-react-table'; +import { useLocale } from 'hooks/useLocale'; +import Box from '@mui/material/Box'; +import Typography from '@mui/material/Typography'; +import { getTriggerFriendlyName } from '../utils/edit'; +import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info'; +import globalize from 'lib/globalize'; + +interface CellProps { + cell: MRT_Cell +} + +const TaskTriggerCell: FC = ({ cell }) => { + const { dateFnsLocale } = useLocale(); + const trigger = cell.getValue(); + + const timeLimitHours = trigger.MaxRuntimeTicks ? trigger.MaxRuntimeTicks / 36e9 : false; + + return ( + + {getTriggerFriendlyName(trigger, dateFnsLocale)} + {timeLimitHours && ( + + {timeLimitHours == 1 ? + globalize.translate('ValueTimeLimitSingleHour') : + globalize.translate('ValueTimeLimitMultiHour', timeLimitHours)} + + )} + + ); +}; + +export default TaskTriggerCell; diff --git a/src/apps/dashboard/features/scheduledtasks/components/Tasks.tsx b/src/apps/dashboard/features/tasks/components/Tasks.tsx similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/components/Tasks.tsx rename to src/apps/dashboard/features/tasks/components/Tasks.tsx diff --git a/src/apps/dashboard/features/scheduledtasks/types/taskProps.ts b/src/apps/dashboard/features/tasks/types/taskProps.ts similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/types/taskProps.ts rename to src/apps/dashboard/features/tasks/types/taskProps.ts diff --git a/src/apps/dashboard/features/tasks/utils/edit.ts b/src/apps/dashboard/features/tasks/utils/edit.ts new file mode 100644 index 0000000000..2637465710 --- /dev/null +++ b/src/apps/dashboard/features/tasks/utils/edit.ts @@ -0,0 +1,64 @@ +import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info'; +import { format, Locale, parse } from 'date-fns'; +import globalize from 'lib/globalize'; + +function getDisplayTime(ticks: number, locale: Locale) { + const ms = ticks / 1e4; + const now = new Date(); + now.setHours(0, 0, 0, 0); + now.setTime(now.getTime() + ms); + return format(now, 'p', { locale: locale }); +} + +export function getTimeOfDayOptions(locale: Locale) { + const options = []; + + for (let i = 0; i < 86400000; i += 900000) { + options.push({ + name: getDisplayTime(i * 10000, locale), + value: i * 10000 + }); + } + + return options; +} + +function getIntervalTriggerTime(ticks: number) { + const hours = ticks / 36e9; + + switch (hours) { + case 0.25: + return globalize.translate('EveryXMinutes', '15'); + case 0.5: + return globalize.translate('EveryXMinutes', '30'); + case 0.75: + return globalize.translate('EveryXMinutes', '45'); + case 1: + return globalize.translate('EveryHour'); + default: + return globalize.translate('EveryXHours', hours); + } +} + +function localizeDayOfWeek(dayOfWeek: string | null | undefined, locale: Locale) { + if (!dayOfWeek) return ''; + + const parsedDayOfWeek = parse(dayOfWeek, 'cccc', new Date()); + + return format(parsedDayOfWeek, 'cccc', { locale: locale }); +} + +export function getTriggerFriendlyName(trigger: TaskTriggerInfo, locale: Locale) { + switch (trigger.Type) { + case 'DailyTrigger': + return globalize.translate('DailyAt', getDisplayTime(trigger.TimeOfDayTicks || 0, locale)); + case 'WeeklyTrigger': + return globalize.translate('WeeklyAt', localizeDayOfWeek(trigger.DayOfWeek, locale), getDisplayTime(trigger.TimeOfDayTicks || 0, locale)); + case 'IntervalTrigger': + return getIntervalTriggerTime(trigger.IntervalTicks || 0); + case 'StartupTrigger': + return globalize.translate('OnApplicationStartup'); + default: + return trigger.Type; + } +} diff --git a/src/apps/dashboard/features/scheduledtasks/utils/tasks.ts b/src/apps/dashboard/features/tasks/utils/tasks.ts similarity index 100% rename from src/apps/dashboard/features/scheduledtasks/utils/tasks.ts rename to src/apps/dashboard/features/tasks/utils/tasks.ts diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 5a7398da39..d66c4ed13d 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -15,6 +15,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'playback/trickplay', type: AppType.Dashboard }, { path: 'plugins/:pluginId', page: 'plugins/plugin', type: AppType.Dashboard }, { path: 'tasks', type: AppType.Dashboard }, + { path: 'tasks/edit', type: AppType.Dashboard }, { path: 'users', type: AppType.Dashboard }, { path: 'users/access', type: AppType.Dashboard }, { path: 'users/add', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index b690b45440..6cd162d88d 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -93,12 +93,5 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'plugins/installed/index', view: 'plugins/installed/index.html' } - }, { - path: 'tasks/edit', - pageProps: { - appType: AppType.Dashboard, - controller: 'scheduledtasks/scheduledtask', - view: 'scheduledtasks/scheduledtask.html' - } } ]; diff --git a/src/apps/dashboard/routes/tasks/edit.tsx b/src/apps/dashboard/routes/tasks/edit.tsx new file mode 100644 index 0000000000..5120f80f05 --- /dev/null +++ b/src/apps/dashboard/routes/tasks/edit.tsx @@ -0,0 +1,173 @@ +import React, { useCallback, useMemo, useState } from 'react'; +import Page from 'components/Page'; +import { useSearchParams } from 'react-router-dom'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import AddIcon from '@mui/icons-material/Add'; +import IconButton from '@mui/material/IconButton'; +import Tooltip from '@mui/material/Tooltip'; +import RemoveCircleIcon from '@mui/icons-material/RemoveCircle'; +import Loading from 'components/loading/LoadingComponent'; +import { MRT_ColumnDef, MRT_Table, useMaterialReactTable } from 'material-react-table'; +import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info'; +import globalize from '../../../../lib/globalize'; +import { useTask } from 'apps/dashboard/features/tasks/api/useTask'; +import { useUpdateTask } from 'apps/dashboard/features/tasks/api/useUpdateTask'; +import ConfirmDialog from 'components/ConfirmDialog'; +import TaskTriggerCell from 'apps/dashboard/features/tasks/components/TaskTriggerCell'; +import NewTriggerForm from 'apps/dashboard/features/tasks/components/NewTriggerForm'; + +const TaskEdit = () => { + const [ searchParams ] = useSearchParams(); + const updateTask = useUpdateTask(); + const taskId = searchParams.get('id'); + const { data: task, isLoading } = useTask({ taskId: taskId || '' }); + const [ isAddTriggerDialogOpen, setIsAddTriggerDialogOpen ] = useState(false); + const [ isRemoveConfirmOpen, setIsRemoveConfirmOpen ] = useState(false); + const [ pendingDeleteTrigger, setPendingDeleteTrigger ] = useState(null); + + const onCloseRemoveConfirmDialog = useCallback(() => { + setPendingDeleteTrigger(null); + setIsRemoveConfirmOpen(false); + }, []); + + const onDeleteTrigger = useCallback((trigger: TaskTriggerInfo | null | undefined) => { + if (trigger) { + setPendingDeleteTrigger(trigger); + setIsRemoveConfirmOpen(true); + } + }, []); + + const onConfirmDelete = useCallback(() => { + const triggersRemaining = task?.Triggers?.filter(trigger => trigger != pendingDeleteTrigger); + + if (task?.Id && triggersRemaining) { + updateTask.mutate({ + taskId: task.Id, + taskTriggerInfo: triggersRemaining + }); + setIsRemoveConfirmOpen(false); + } + }, [task, pendingDeleteTrigger, updateTask]); + + const showAddTriggerDialog = useCallback(() => { + setIsAddTriggerDialogOpen(true); + }, []); + + const handleNewTriggerDialogClose = useCallback(() => { + setIsAddTriggerDialogOpen(false); + }, []); + + const onNewTriggerSubmit = useCallback((trigger: TaskTriggerInfo) => { + if (task?.Triggers && task?.Id) { + const triggers = [...task.Triggers, trigger]; + + updateTask.mutate({ + taskId: task.Id, + taskTriggerInfo: triggers + }); + setIsAddTriggerDialogOpen(false); + } + }, [task, updateTask]); + + const columns = useMemo[]>(() => [ + { + id: 'TriggerTime', + accessorFn: row => row, + Cell: TaskTriggerCell, + header: globalize.translate('LabelTime') + } + ], []); + + const table = useMaterialReactTable({ + columns, + data: task?.Triggers || [], + + enableSorting: false, + enableFilters: false, + enableColumnActions: false, + enablePagination: false, + + state: { + isLoading + }, + + muiTableContainerProps: { + sx: { + maxHeight: 'calc(100% - 7rem)' // 2 x 3.5rem for header and footer + } + }, + + // Custom actions + enableRowActions: true, + positionActionsColumn: 'last', + displayColumnDefOptions: { + 'mrt-row-actions': { + header: '' + } + }, + renderRowActions: ({ row }) => { + return ( + + + onDeleteTrigger(row.original)} + > + + + + + ); + } + }); + + if (isLoading || !task) { + return ; + } + + return ( + + + + + + + {task.Name} + {task.Description} + + + + + + + ); +}; + +export default TaskEdit; diff --git a/src/apps/dashboard/routes/tasks/index.tsx b/src/apps/dashboard/routes/tasks/index.tsx index f742ef8ede..232fb34950 100644 --- a/src/apps/dashboard/routes/tasks/index.tsx +++ b/src/apps/dashboard/routes/tasks/index.tsx @@ -3,10 +3,10 @@ import Page from 'components/Page'; import globalize from 'lib/globalize'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; -import { QUERY_KEY, useTasks } from '../../features/scheduledtasks/api/useTasks'; -import { getCategories, getTasksByCategory } from '../../features/scheduledtasks/utils/tasks'; +import { QUERY_KEY, useTasks } from '../../features/tasks/api/useTasks'; +import { getCategories, getTasksByCategory } from '../../features/tasks/utils/tasks'; import Loading from 'components/loading/LoadingComponent'; -import Tasks from '../../features/scheduledtasks/components/Tasks'; +import Tasks from '../../features/tasks/components/Tasks'; import type { TaskInfo } from '@jellyfin/sdk/lib/generated-client/models/task-info'; import { SessionMessageType } from '@jellyfin/sdk/lib/generated-client/models/session-message-type'; import serverNotifications from 'scripts/serverNotifications'; From 934a05cffa4bb141126459091e8f1afb69892f64 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sun, 23 Feb 2025 14:39:15 +0300 Subject: [PATCH 194/235] Localize interval --- .../tasks/components/NewTriggerForm.tsx | 20 +++++++------------ .../tasks/constants/intervalDuration.ts | 13 ++++++++++++ .../dashboard/features/tasks/utils/edit.ts | 18 ++++++++++++++++- 3 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 src/apps/dashboard/features/tasks/constants/intervalDuration.ts diff --git a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx index 53404885fc..53d7663f3b 100644 --- a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx +++ b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx @@ -11,7 +11,7 @@ import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/ import { TaskTriggerInfoType } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info-type'; import { DayOfWeek } from '@jellyfin/sdk/lib/generated-client/models/day-of-week'; import globalize from 'lib/globalize'; -import { getTimeOfDayOptions } from '../utils/edit'; +import { getIntervalOptions, getTimeOfDayOptions } from '../utils/edit'; import { useLocale } from 'hooks/useLocale'; type IProps = { @@ -27,6 +27,8 @@ const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onSub const timeOfDayOptions = useMemo(() => getTimeOfDayOptions(dateFnsLocale), [dateFnsLocale]); + const intervalOptions = useMemo(() => getIntervalOptions(dateFnsLocale), [dateFnsLocale]); + const onTriggerTypeChange = useCallback((e: React.ChangeEvent) => { setTriggerType(e.target.value); }, []); @@ -124,20 +126,12 @@ const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onSub name='Interval' select fullWidth - defaultValue={'9000000000'} + defaultValue={intervalOptions[0].value} label={globalize.translate('LabelEveryXMinutes')} > - 15 minutes - 30 minutes - 45 minutes - 1 hour - 2 hours - 3 hours - 4 hours - 6 hours - 8 hours - 12 hours - 24 hours + {intervalOptions.map((option) => { + return {option.name}; + })} )} diff --git a/src/apps/dashboard/features/tasks/constants/intervalDuration.ts b/src/apps/dashboard/features/tasks/constants/intervalDuration.ts new file mode 100644 index 0000000000..01bd6ca7f5 --- /dev/null +++ b/src/apps/dashboard/features/tasks/constants/intervalDuration.ts @@ -0,0 +1,13 @@ +export const INTERVAL_DURATION: number[] = [ + 9000000000, // 15 minutes + 18000000000, // 30 minutes + 27000000000, // 45 minutes + 36000000000, // 1 hour + 72000000000, // 2 hours + 108000000000, // 3 hours + 144000000000, // 4 hours + 216000000000, // 6 hours + 288000000000, // 8 hours + 432000000000, // 12 hours + 864000000000 // 24 hours +]; diff --git a/src/apps/dashboard/features/tasks/utils/edit.ts b/src/apps/dashboard/features/tasks/utils/edit.ts index 2637465710..e71f563a71 100644 --- a/src/apps/dashboard/features/tasks/utils/edit.ts +++ b/src/apps/dashboard/features/tasks/utils/edit.ts @@ -1,6 +1,7 @@ import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info'; -import { format, Locale, parse } from 'date-fns'; +import { format, formatDistanceStrict, Locale, parse } from 'date-fns'; import globalize from 'lib/globalize'; +import { INTERVAL_DURATION } from '../constants/intervalDuration'; function getDisplayTime(ticks: number, locale: Locale) { const ms = ticks / 1e4; @@ -23,6 +24,21 @@ export function getTimeOfDayOptions(locale: Locale) { return options; } +export function getIntervalOptions(locale: Locale) { + const options = []; + + for (const ticksDuration of INTERVAL_DURATION) { + const durationMs = Math.floor(ticksDuration / 1e4); + const unit = durationMs < 36e5 ? 'minute' : 'hour'; + options.push({ + name: formatDistanceStrict(0, durationMs, { locale: locale, unit: unit }), + value: ticksDuration + }); + } + + return options; +} + function getIntervalTriggerTime(ticks: number) { const hours = ticks / 36e9; From 145c0700b13133d57590cc74308a2a08bccfdb67 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sun, 23 Feb 2025 14:54:25 +0300 Subject: [PATCH 195/235] Cleanup --- .../dashboard/features/tasks/api/useTask.ts | 5 -- .../dashboard/features/tasks/api/useTasks.ts | 2 +- .../features/tasks/api/useUpdateTask.ts | 2 +- .../tasks/components/NewTriggerForm.tsx | 75 ++++++++++--------- ...tervalDuration.ts => intervalDurations.ts} | 2 +- .../dashboard/features/tasks/utils/edit.ts | 4 +- src/apps/dashboard/routes/tasks/edit.tsx | 4 +- 7 files changed, 48 insertions(+), 46 deletions(-) rename src/apps/dashboard/features/tasks/constants/{intervalDuration.ts => intervalDurations.ts} (87%) diff --git a/src/apps/dashboard/features/tasks/api/useTask.ts b/src/apps/dashboard/features/tasks/api/useTask.ts index 98800420b4..78a430cb57 100644 --- a/src/apps/dashboard/features/tasks/api/useTask.ts +++ b/src/apps/dashboard/features/tasks/api/useTask.ts @@ -13,11 +13,6 @@ const fetchTask = async ( params: ScheduledTasksApiGetTaskRequest, options?: AxiosRequestConfig ) => { - if (!api) { - console.warn('[fetchTasks] No API instance available'); - return; - } - const response = await getScheduledTasksApi(api).getTask(params, options); return response.data; diff --git a/src/apps/dashboard/features/tasks/api/useTasks.ts b/src/apps/dashboard/features/tasks/api/useTasks.ts index 928ec4d639..7a4b6e1c4d 100644 --- a/src/apps/dashboard/features/tasks/api/useTasks.ts +++ b/src/apps/dashboard/features/tasks/api/useTasks.ts @@ -22,7 +22,7 @@ export const useTasks = (params?: ScheduledTasksApiGetTasksRequest) => { const { api } = useApi(); return useQuery({ - queryKey: [QUERY_KEY], + queryKey: [ QUERY_KEY ], queryFn: ({ signal }) => fetchTasks(api!, params, { signal }), enabled: !!api diff --git a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts index 8f34c0df38..47de050a7b 100644 --- a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts +++ b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts @@ -3,7 +3,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; -import { QUERY_KEY } from './useTasks'; +import { QUERY_KEY } from './useTask'; export const useUpdateTask = () => { const { api } = useApi(); diff --git a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx index 53d7663f3b..7819335669 100644 --- a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx +++ b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx @@ -18,21 +18,50 @@ type IProps = { open: boolean, title: string, onClose?: () => void, - onSubmit?: (trigger: TaskTriggerInfo) => void + onAdd?: (trigger: TaskTriggerInfo) => void }; -const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onSubmit }: IProps) => { +const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onAdd }: IProps) => { const { dateFnsLocale } = useLocale(); const [triggerType, setTriggerType] = useState('DailyTrigger'); const timeOfDayOptions = useMemo(() => getTimeOfDayOptions(dateFnsLocale), [dateFnsLocale]); - const intervalOptions = useMemo(() => getIntervalOptions(dateFnsLocale), [dateFnsLocale]); const onTriggerTypeChange = useCallback((e: React.ChangeEvent) => { setTriggerType(e.target.value); }, []); + const onSubmit = useCallback((e: React.FormEvent) => { + e.preventDefault(); + + const formData = new FormData(e.currentTarget); + const data = Object.fromEntries(formData.entries()); + const trigger: TaskTriggerInfo = { + Type: data.TriggerType.toString() as TaskTriggerInfoType + }; + + if (trigger.Type == TaskTriggerInfoType.WeeklyTrigger) { + trigger.DayOfWeek = data.DayOfWeek.toString() as DayOfWeek; + } + + if (trigger.Type == TaskTriggerInfoType.DailyTrigger || trigger.Type == TaskTriggerInfoType.WeeklyTrigger) { + trigger.TimeOfDayTicks = parseInt(data.TimeOfDay.toString(), 10); + } + + if (trigger.Type == TaskTriggerInfoType.IntervalTrigger) { + trigger.IntervalTicks = parseInt(data.Interval.toString(), 10); + } + + if (data.TimeLimit.toString()) { + trigger.MaxRuntimeTicks = parseFloat(data.TimeLimit.toString()) * 3600000 * 1e4; + } + + if (onAdd) { + onAdd(trigger); + } + }, [onAdd]); + return ( = ({ open, title, onClose, onSub fullWidth PaperProps={{ component: 'form', - onSubmit: (e: React.FormEvent) => { - e.preventDefault(); - - const formData = new FormData(e.currentTarget); - const data = Object.fromEntries(formData.entries()); - const trigger: TaskTriggerInfo = { - Type: data.TriggerType.toString() as TaskTriggerInfoType - }; - - if (trigger.Type == TaskTriggerInfoType.WeeklyTrigger) { - trigger.DayOfWeek = data.DayOfWeek.toString() as DayOfWeek; - } - - if (trigger.Type == TaskTriggerInfoType.DailyTrigger || trigger.Type == TaskTriggerInfoType.WeeklyTrigger) { - trigger.TimeOfDayTicks = parseInt(data.TimeOfDay.toString(), 10); - } - - if (trigger.Type == TaskTriggerInfoType.IntervalTrigger) { - trigger.IntervalTicks = parseInt(data.Interval.toString(), 10); - } - - if (data.TimeLimit.toString()) { - trigger.MaxRuntimeTicks = parseFloat(data.TimeLimit.toString()) * 3600000 * 1e4; - } - - if (onSubmit) { - onSubmit(trigger); - } - } + onSubmit: onSubmit }} > {title} @@ -116,7 +117,10 @@ const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onSub label={globalize.translate('LabelTime')} > {timeOfDayOptions.map((option) => { - return {option.name}; + return {option.name}; })} )} @@ -130,7 +134,10 @@ const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onSub label={globalize.translate('LabelEveryXMinutes')} > {intervalOptions.map((option) => { - return {option.name}; + return {option.name}; })} )} diff --git a/src/apps/dashboard/features/tasks/constants/intervalDuration.ts b/src/apps/dashboard/features/tasks/constants/intervalDurations.ts similarity index 87% rename from src/apps/dashboard/features/tasks/constants/intervalDuration.ts rename to src/apps/dashboard/features/tasks/constants/intervalDurations.ts index 01bd6ca7f5..f90d0f0ddd 100644 --- a/src/apps/dashboard/features/tasks/constants/intervalDuration.ts +++ b/src/apps/dashboard/features/tasks/constants/intervalDurations.ts @@ -1,4 +1,4 @@ -export const INTERVAL_DURATION: number[] = [ +export const INTERVAL_DURATIONS: number[] = [ 9000000000, // 15 minutes 18000000000, // 30 minutes 27000000000, // 45 minutes diff --git a/src/apps/dashboard/features/tasks/utils/edit.ts b/src/apps/dashboard/features/tasks/utils/edit.ts index e71f563a71..536146e9c5 100644 --- a/src/apps/dashboard/features/tasks/utils/edit.ts +++ b/src/apps/dashboard/features/tasks/utils/edit.ts @@ -1,7 +1,7 @@ import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info'; import { format, formatDistanceStrict, Locale, parse } from 'date-fns'; import globalize from 'lib/globalize'; -import { INTERVAL_DURATION } from '../constants/intervalDuration'; +import { INTERVAL_DURATIONS } from '../constants/intervalDurations'; function getDisplayTime(ticks: number, locale: Locale) { const ms = ticks / 1e4; @@ -27,7 +27,7 @@ export function getTimeOfDayOptions(locale: Locale) { export function getIntervalOptions(locale: Locale) { const options = []; - for (const ticksDuration of INTERVAL_DURATION) { + for (const ticksDuration of INTERVAL_DURATIONS) { const durationMs = Math.floor(ticksDuration / 1e4); const unit = durationMs < 36e5 ? 'minute' : 'hour'; options.push({ diff --git a/src/apps/dashboard/routes/tasks/edit.tsx b/src/apps/dashboard/routes/tasks/edit.tsx index 5120f80f05..e203dde1f7 100644 --- a/src/apps/dashboard/routes/tasks/edit.tsx +++ b/src/apps/dashboard/routes/tasks/edit.tsx @@ -60,7 +60,7 @@ const TaskEdit = () => { setIsAddTriggerDialogOpen(false); }, []); - const onNewTriggerSubmit = useCallback((trigger: TaskTriggerInfo) => { + const onNewTriggerAdd = useCallback((trigger: TaskTriggerInfo) => { if (task?.Triggers && task?.Id) { const triggers = [...task.Triggers, trigger]; @@ -150,7 +150,7 @@ const TaskEdit = () => { open={isAddTriggerDialogOpen} title={globalize.translate('ButtonAddScheduledTaskTrigger')} onClose={handleNewTriggerDialogClose} - onSubmit={onNewTriggerSubmit} + onAdd={onNewTriggerAdd} /> From 40cb7c6f65e607ba03c302c74122aa8ee79f2c38 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sun, 23 Feb 2025 16:59:46 +0300 Subject: [PATCH 196/235] Invalidate by task id --- src/apps/dashboard/features/tasks/api/useUpdateTask.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts index 47de050a7b..6bc92eacad 100644 --- a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts +++ b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts @@ -13,9 +13,9 @@ export const useUpdateTask = () => { getScheduledTasksApi(api!) .updateTask(params) ), - onSuccess: () => { + onSuccess: (_data, params) => { void queryClient.invalidateQueries({ - queryKey: [ QUERY_KEY ] + queryKey: [ QUERY_KEY, params.taskId ] }); } }); From dd539b89caef9aac702d089ac7c5cdb22aab78f4 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sun, 23 Feb 2025 17:13:56 +0300 Subject: [PATCH 197/235] Refactor into enums --- .../tasks/components/NewTriggerForm.tsx | 38 +++++++++---------- .../features/tasks/components/Task.tsx | 14 ++----- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx index 7819335669..a5eef10723 100644 --- a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx +++ b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx @@ -23,13 +23,13 @@ type IProps = { const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onAdd }: IProps) => { const { dateFnsLocale } = useLocale(); - const [triggerType, setTriggerType] = useState('DailyTrigger'); + const [triggerType, setTriggerType] = useState(TaskTriggerInfoType.DailyTrigger); const timeOfDayOptions = useMemo(() => getTimeOfDayOptions(dateFnsLocale), [dateFnsLocale]); const intervalOptions = useMemo(() => getIntervalOptions(dateFnsLocale), [dateFnsLocale]); const onTriggerTypeChange = useCallback((e: React.ChangeEvent) => { - setTriggerType(e.target.value); + setTriggerType(e.target.value as TaskTriggerInfoType); }, []); const onSubmit = useCallback((e: React.FormEvent) => { @@ -54,13 +54,13 @@ const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onAdd } if (data.TimeLimit.toString()) { - trigger.MaxRuntimeTicks = parseFloat(data.TimeLimit.toString()) * 3600000 * 1e4; + trigger.MaxRuntimeTicks = parseFloat(data.TimeLimit.toString()) * 36e9; } if (onAdd) { onAdd(trigger); } - }, [onAdd]); + }, [ onAdd ]); return ( = ({ open, title, onClose, onAdd onChange={onTriggerTypeChange} label={globalize.translate('LabelTriggerType')} > - {globalize.translate('OptionDaily')} - {globalize.translate('OptionWeekly')} - {globalize.translate('OptionOnInterval')} - {globalize.translate('OnApplicationStartup')} + {globalize.translate('OptionDaily')} + {globalize.translate('OptionWeekly')} + {globalize.translate('OptionOnInterval')} + {globalize.translate('OnApplicationStartup')} - {triggerType == 'WeeklyTrigger' && ( + {triggerType == TaskTriggerInfoType.WeeklyTrigger && ( - {globalize.translate('Sunday')} - {globalize.translate('Monday')} - {globalize.translate('Tuesday')} - {globalize.translate('Wednesday')} - {globalize.translate('Thursday')} - {globalize.translate('Friday')} - {globalize.translate('Saturday')} + {globalize.translate('Sunday')} + {globalize.translate('Monday')} + {globalize.translate('Tuesday')} + {globalize.translate('Wednesday')} + {globalize.translate('Thursday')} + {globalize.translate('Friday')} + {globalize.translate('Saturday')} )} - {['DailyTrigger', 'WeeklyTrigger'].includes(triggerType) && ( + {(triggerType == TaskTriggerInfoType.DailyTrigger || triggerType == TaskTriggerInfoType.WeeklyTrigger) && ( = ({ open, title, onClose, onAdd )} - {triggerType == 'IntervalTrigger' && ( + {triggerType == TaskTriggerInfoType.IntervalTrigger && ( = ({ task }: TaskProps) => { const startTask = useStartTask(); const stopTask = useStopTask(); - const navigateTaskEdit = useCallback(() => { - Dashboard.navigate(`/dashboard/tasks/edit?id=${task.Id}`) - .catch(err => { - console.error('[Task] failed to navigate to task edit page', err); - }); - }, [task]); - const handleStartTask = useCallback(() => { if (task.Id) { startTask.mutate({ taskId: task.Id }); @@ -48,7 +40,7 @@ const Task: FunctionComponent = ({ task }: TaskProps) => { } > - + @@ -59,7 +51,7 @@ const Task: FunctionComponent = ({ task }: TaskProps) => { secondary={task.State == 'Running' ? : } disableTypography /> - + ); }; From a7621d242d20ae1ec0bf33fa4f1324a365cd9fe5 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sun, 23 Feb 2025 17:38:31 +0300 Subject: [PATCH 198/235] Refactor query keys to enum --- src/apps/dashboard/features/tasks/api/queryKey.ts | 4 ++++ src/apps/dashboard/features/tasks/api/useStartTask.ts | 4 ++-- src/apps/dashboard/features/tasks/api/useStopTask.ts | 4 ++-- src/apps/dashboard/features/tasks/api/useTask.ts | 5 ++--- src/apps/dashboard/features/tasks/api/useTasks.ts | 5 ++--- src/apps/dashboard/features/tasks/api/useUpdateTask.ts | 4 ++-- src/apps/dashboard/routes/tasks/index.tsx | 7 ++++--- 7 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 src/apps/dashboard/features/tasks/api/queryKey.ts diff --git a/src/apps/dashboard/features/tasks/api/queryKey.ts b/src/apps/dashboard/features/tasks/api/queryKey.ts new file mode 100644 index 0000000000..83d23b3568 --- /dev/null +++ b/src/apps/dashboard/features/tasks/api/queryKey.ts @@ -0,0 +1,4 @@ +export enum QueryKey { + Task = 'Task', + Tasks = 'Tasks' +}; diff --git a/src/apps/dashboard/features/tasks/api/useStartTask.ts b/src/apps/dashboard/features/tasks/api/useStartTask.ts index ef37b7e6e8..5258904ae3 100644 --- a/src/apps/dashboard/features/tasks/api/useStartTask.ts +++ b/src/apps/dashboard/features/tasks/api/useStartTask.ts @@ -3,7 +3,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; -import { QUERY_KEY } from './useTasks'; +import { QueryKey } from './queryKey'; export const useStartTask = () => { const { api } = useApi(); @@ -15,7 +15,7 @@ export const useStartTask = () => { ), onSuccess: () => { void queryClient.invalidateQueries({ - queryKey: [ QUERY_KEY ] + queryKey: [ QueryKey.Tasks ] }); } }); diff --git a/src/apps/dashboard/features/tasks/api/useStopTask.ts b/src/apps/dashboard/features/tasks/api/useStopTask.ts index 30421ee6af..49ce910c7f 100644 --- a/src/apps/dashboard/features/tasks/api/useStopTask.ts +++ b/src/apps/dashboard/features/tasks/api/useStopTask.ts @@ -3,7 +3,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; -import { QUERY_KEY } from './useTasks'; +import { QueryKey } from './queryKey'; export const useStopTask = () => { const { api } = useApi(); @@ -15,7 +15,7 @@ export const useStopTask = () => { ), onSuccess: () => { void queryClient.invalidateQueries({ - queryKey: [ QUERY_KEY ] + queryKey: [ QueryKey.Tasks ] }); } }); diff --git a/src/apps/dashboard/features/tasks/api/useTask.ts b/src/apps/dashboard/features/tasks/api/useTask.ts index 78a430cb57..9ced51614b 100644 --- a/src/apps/dashboard/features/tasks/api/useTask.ts +++ b/src/apps/dashboard/features/tasks/api/useTask.ts @@ -5,8 +5,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; - -export const QUERY_KEY = 'Task'; +import { QueryKey } from './queryKey'; const fetchTask = async ( api: Api, @@ -22,7 +21,7 @@ export const useTask = (params: ScheduledTasksApiGetTaskRequest) => { const { api } = useApi(); return useQuery({ - queryKey: [ QUERY_KEY, params.taskId ], + queryKey: [ QueryKey.Task, params.taskId ], queryFn: ({ signal }) => fetchTask(api!, params, { signal }), enabled: !!api diff --git a/src/apps/dashboard/features/tasks/api/useTasks.ts b/src/apps/dashboard/features/tasks/api/useTasks.ts index 7a4b6e1c4d..592d4c4c94 100644 --- a/src/apps/dashboard/features/tasks/api/useTasks.ts +++ b/src/apps/dashboard/features/tasks/api/useTasks.ts @@ -5,8 +5,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; - -export const QUERY_KEY = 'Tasks'; +import { QueryKey } from './queryKey'; const fetchTasks = async ( api: Api, @@ -22,7 +21,7 @@ export const useTasks = (params?: ScheduledTasksApiGetTasksRequest) => { const { api } = useApi(); return useQuery({ - queryKey: [ QUERY_KEY ], + queryKey: [ QueryKey.Tasks ], queryFn: ({ signal }) => fetchTasks(api!, params, { signal }), enabled: !!api diff --git a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts index 6bc92eacad..4d3f7c87c0 100644 --- a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts +++ b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts @@ -3,7 +3,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; -import { QUERY_KEY } from './useTask'; +import { QueryKey } from './queryKey'; export const useUpdateTask = () => { const { api } = useApi(); @@ -15,7 +15,7 @@ export const useUpdateTask = () => { ), onSuccess: (_data, params) => { void queryClient.invalidateQueries({ - queryKey: [ QUERY_KEY, params.taskId ] + queryKey: [ QueryKey.Task, params.taskId ] }); } }); diff --git a/src/apps/dashboard/routes/tasks/index.tsx b/src/apps/dashboard/routes/tasks/index.tsx index 232fb34950..7dd66224d4 100644 --- a/src/apps/dashboard/routes/tasks/index.tsx +++ b/src/apps/dashboard/routes/tasks/index.tsx @@ -3,7 +3,7 @@ import Page from 'components/Page'; import globalize from 'lib/globalize'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; -import { QUERY_KEY, useTasks } from '../../features/tasks/api/useTasks'; +import { useTasks } from '../../features/tasks/api/useTasks'; import { getCategories, getTasksByCategory } from '../../features/tasks/utils/tasks'; import Loading from 'components/loading/LoadingComponent'; import Tasks from '../../features/tasks/components/Tasks'; @@ -14,6 +14,7 @@ import Events, { Event } from 'utils/events'; import { ApiClient } from 'jellyfin-apiclient'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; +import { QueryKey } from 'apps/dashboard/features/tasks/api/queryKey'; export const Component = () => { const { __legacyApiClient__ } = useApi(); @@ -22,13 +23,13 @@ export const Component = () => { // TODO: Replace usage of the legacy apiclient when websocket support is added to the TS SDK. useEffect(() => { const onScheduledTasksUpdate = (_e: Event, _apiClient: ApiClient, info: TaskInfo[]) => { - queryClient.setQueryData([ QUERY_KEY ], info); + queryClient.setQueryData([ QueryKey.Tasks ], info); }; const fallbackInterval = setInterval(() => { if (!__legacyApiClient__?.isMessageChannelOpen()) { void queryClient.invalidateQueries({ - queryKey: [ QUERY_KEY ] + queryKey: [ QueryKey.Tasks ] }); } }, 1e4); From 560881bdeaeea2ba0733134a7fe742a655491a02 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sun, 23 Feb 2025 22:34:03 +0300 Subject: [PATCH 199/235] Add onClose --- src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx index a5eef10723..4cec4b0474 100644 --- a/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx +++ b/src/apps/dashboard/features/tasks/components/NewTriggerForm.tsx @@ -67,6 +67,7 @@ const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onAdd open={open} maxWidth={'xs'} fullWidth + onClose={onClose} PaperProps={{ component: 'form', onSubmit: onSubmit From 33ac6d75eac4604b618dc133a64f08e774c67175 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sun, 23 Feb 2025 22:35:25 +0300 Subject: [PATCH 200/235] Add onClose to ConfirmDialog for consistency --- src/components/ConfirmDialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ConfirmDialog.tsx b/src/components/ConfirmDialog.tsx index 08efb3dd2b..bc3c31ced1 100644 --- a/src/components/ConfirmDialog.tsx +++ b/src/components/ConfirmDialog.tsx @@ -27,7 +27,7 @@ const ConfirmDialog: FC = ({ onConfirm, ...dialogProps }) => ( - + {title} From 53a1cb413befed18546d23f67d443bb9ca2e8fb6 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 26 Feb 2025 20:08:21 +0300 Subject: [PATCH 201/235] Use id as path parameter --- src/apps/dashboard/features/tasks/components/Task.tsx | 2 +- src/apps/dashboard/routes/_asyncRoutes.ts | 2 +- src/apps/dashboard/routes/tasks/{edit.tsx => task.tsx} | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) rename src/apps/dashboard/routes/tasks/{edit.tsx => task.tsx} (96%) diff --git a/src/apps/dashboard/features/tasks/components/Task.tsx b/src/apps/dashboard/features/tasks/components/Task.tsx index eca9a665b5..ef140c0cb3 100644 --- a/src/apps/dashboard/features/tasks/components/Task.tsx +++ b/src/apps/dashboard/features/tasks/components/Task.tsx @@ -40,7 +40,7 @@ const Task: FunctionComponent = ({ task }: TaskProps) => { } > - + diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index d66c4ed13d..4ba4d5e5e1 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -15,7 +15,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'playback/trickplay', type: AppType.Dashboard }, { path: 'plugins/:pluginId', page: 'plugins/plugin', type: AppType.Dashboard }, { path: 'tasks', type: AppType.Dashboard }, - { path: 'tasks/edit', type: AppType.Dashboard }, + { path: 'tasks/:id', page: 'tasks/task', type: AppType.Dashboard }, { path: 'users', type: AppType.Dashboard }, { path: 'users/access', type: AppType.Dashboard }, { path: 'users/add', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/tasks/edit.tsx b/src/apps/dashboard/routes/tasks/task.tsx similarity index 96% rename from src/apps/dashboard/routes/tasks/edit.tsx rename to src/apps/dashboard/routes/tasks/task.tsx index e203dde1f7..2aa00f886c 100644 --- a/src/apps/dashboard/routes/tasks/edit.tsx +++ b/src/apps/dashboard/routes/tasks/task.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useMemo, useState } from 'react'; import Page from 'components/Page'; -import { useSearchParams } from 'react-router-dom'; +import { useParams } from 'react-router-dom'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Stack from '@mui/material/Stack'; @@ -19,10 +19,9 @@ import ConfirmDialog from 'components/ConfirmDialog'; import TaskTriggerCell from 'apps/dashboard/features/tasks/components/TaskTriggerCell'; import NewTriggerForm from 'apps/dashboard/features/tasks/components/NewTriggerForm'; -const TaskEdit = () => { - const [ searchParams ] = useSearchParams(); +export const Component = () => { + const { id: taskId } = useParams(); const updateTask = useUpdateTask(); - const taskId = searchParams.get('id'); const { data: task, isLoading } = useTask({ taskId: taskId || '' }); const [ isAddTriggerDialogOpen, setIsAddTriggerDialogOpen ] = useState(false); const [ isRemoveConfirmOpen, setIsRemoveConfirmOpen ] = useState(false); @@ -170,4 +169,4 @@ const TaskEdit = () => { ); }; -export default TaskEdit; +Component.displayName = 'TaskPage'; From 709378f9867272ca30cfc380b9becc04dcd49f2e Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 4 Mar 2025 10:36:05 +0300 Subject: [PATCH 202/235] Use Tasks as query key --- src/apps/dashboard/features/tasks/api/queryKey.ts | 4 ---- src/apps/dashboard/features/tasks/api/useStartTask.ts | 4 ++-- src/apps/dashboard/features/tasks/api/useStopTask.ts | 4 ++-- src/apps/dashboard/features/tasks/api/useTask.ts | 4 ++-- src/apps/dashboard/features/tasks/api/useTasks.ts | 5 +++-- src/apps/dashboard/features/tasks/api/useUpdateTask.ts | 4 ++-- src/apps/dashboard/routes/tasks/index.tsx | 7 +++---- 7 files changed, 14 insertions(+), 18 deletions(-) delete mode 100644 src/apps/dashboard/features/tasks/api/queryKey.ts diff --git a/src/apps/dashboard/features/tasks/api/queryKey.ts b/src/apps/dashboard/features/tasks/api/queryKey.ts deleted file mode 100644 index 83d23b3568..0000000000 --- a/src/apps/dashboard/features/tasks/api/queryKey.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum QueryKey { - Task = 'Task', - Tasks = 'Tasks' -}; diff --git a/src/apps/dashboard/features/tasks/api/useStartTask.ts b/src/apps/dashboard/features/tasks/api/useStartTask.ts index 5258904ae3..ef37b7e6e8 100644 --- a/src/apps/dashboard/features/tasks/api/useStartTask.ts +++ b/src/apps/dashboard/features/tasks/api/useStartTask.ts @@ -3,7 +3,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; -import { QueryKey } from './queryKey'; +import { QUERY_KEY } from './useTasks'; export const useStartTask = () => { const { api } = useApi(); @@ -15,7 +15,7 @@ export const useStartTask = () => { ), onSuccess: () => { void queryClient.invalidateQueries({ - queryKey: [ QueryKey.Tasks ] + queryKey: [ QUERY_KEY ] }); } }); diff --git a/src/apps/dashboard/features/tasks/api/useStopTask.ts b/src/apps/dashboard/features/tasks/api/useStopTask.ts index 49ce910c7f..30421ee6af 100644 --- a/src/apps/dashboard/features/tasks/api/useStopTask.ts +++ b/src/apps/dashboard/features/tasks/api/useStopTask.ts @@ -3,7 +3,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; -import { QueryKey } from './queryKey'; +import { QUERY_KEY } from './useTasks'; export const useStopTask = () => { const { api } = useApi(); @@ -15,7 +15,7 @@ export const useStopTask = () => { ), onSuccess: () => { void queryClient.invalidateQueries({ - queryKey: [ QueryKey.Tasks ] + queryKey: [ QUERY_KEY ] }); } }); diff --git a/src/apps/dashboard/features/tasks/api/useTask.ts b/src/apps/dashboard/features/tasks/api/useTask.ts index 9ced51614b..9df4adaefa 100644 --- a/src/apps/dashboard/features/tasks/api/useTask.ts +++ b/src/apps/dashboard/features/tasks/api/useTask.ts @@ -5,7 +5,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; -import { QueryKey } from './queryKey'; +import { QUERY_KEY } from './useTasks'; const fetchTask = async ( api: Api, @@ -21,7 +21,7 @@ export const useTask = (params: ScheduledTasksApiGetTaskRequest) => { const { api } = useApi(); return useQuery({ - queryKey: [ QueryKey.Task, params.taskId ], + queryKey: [ QUERY_KEY, params.taskId ], queryFn: ({ signal }) => fetchTask(api!, params, { signal }), enabled: !!api diff --git a/src/apps/dashboard/features/tasks/api/useTasks.ts b/src/apps/dashboard/features/tasks/api/useTasks.ts index 592d4c4c94..7a4b6e1c4d 100644 --- a/src/apps/dashboard/features/tasks/api/useTasks.ts +++ b/src/apps/dashboard/features/tasks/api/useTasks.ts @@ -5,7 +5,8 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; -import { QueryKey } from './queryKey'; + +export const QUERY_KEY = 'Tasks'; const fetchTasks = async ( api: Api, @@ -21,7 +22,7 @@ export const useTasks = (params?: ScheduledTasksApiGetTasksRequest) => { const { api } = useApi(); return useQuery({ - queryKey: [ QueryKey.Tasks ], + queryKey: [ QUERY_KEY ], queryFn: ({ signal }) => fetchTasks(api!, params, { signal }), enabled: !!api diff --git a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts index 4d3f7c87c0..dd0e8ac72b 100644 --- a/src/apps/dashboard/features/tasks/api/useUpdateTask.ts +++ b/src/apps/dashboard/features/tasks/api/useUpdateTask.ts @@ -3,7 +3,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; -import { QueryKey } from './queryKey'; +import { QUERY_KEY } from './useTasks'; export const useUpdateTask = () => { const { api } = useApi(); @@ -15,7 +15,7 @@ export const useUpdateTask = () => { ), onSuccess: (_data, params) => { void queryClient.invalidateQueries({ - queryKey: [ QueryKey.Task, params.taskId ] + queryKey: [ QUERY_KEY, params.taskId ] }); } }); diff --git a/src/apps/dashboard/routes/tasks/index.tsx b/src/apps/dashboard/routes/tasks/index.tsx index 7dd66224d4..232fb34950 100644 --- a/src/apps/dashboard/routes/tasks/index.tsx +++ b/src/apps/dashboard/routes/tasks/index.tsx @@ -3,7 +3,7 @@ import Page from 'components/Page'; import globalize from 'lib/globalize'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; -import { useTasks } from '../../features/tasks/api/useTasks'; +import { QUERY_KEY, useTasks } from '../../features/tasks/api/useTasks'; import { getCategories, getTasksByCategory } from '../../features/tasks/utils/tasks'; import Loading from 'components/loading/LoadingComponent'; import Tasks from '../../features/tasks/components/Tasks'; @@ -14,7 +14,6 @@ import Events, { Event } from 'utils/events'; import { ApiClient } from 'jellyfin-apiclient'; import { useApi } from 'hooks/useApi'; import { queryClient } from 'utils/query/queryClient'; -import { QueryKey } from 'apps/dashboard/features/tasks/api/queryKey'; export const Component = () => { const { __legacyApiClient__ } = useApi(); @@ -23,13 +22,13 @@ export const Component = () => { // TODO: Replace usage of the legacy apiclient when websocket support is added to the TS SDK. useEffect(() => { const onScheduledTasksUpdate = (_e: Event, _apiClient: ApiClient, info: TaskInfo[]) => { - queryClient.setQueryData([ QueryKey.Tasks ], info); + queryClient.setQueryData([ QUERY_KEY ], info); }; const fallbackInterval = setInterval(() => { if (!__legacyApiClient__?.isMessageChannelOpen()) { void queryClient.invalidateQueries({ - queryKey: [ QueryKey.Tasks ] + queryKey: [ QUERY_KEY ] }); } }, 1e4); From a0f68ebd8a375ee9e6a1d9508c41f2ea624324cf Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 08:29:32 +0000 Subject: [PATCH 203/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index a4798bd1b4..a644c59af8 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -410,7 +410,7 @@ "Episode": "Эпізод", "Episodes": "Эпізоды", "ErrorAddingListingsToSchedulesDirect": "Пры даданні раскладу ў ваш уліковы запіс Schedules Direct адбылася памылка. Schedules Direct дазваляе толькі абмежаваную колькасць складаў на ўліковы запіс. Магчыма, вам спатрэбіцца ўвайсці на вэб-сайт Schedules Direct і выдаліць іншыя спісы са свайго ўліковага запісу, перш чым працягнуць.", - "ErrorAddingMediaPathToVirtualFolder": "Пры даданні шляху медыя адбылася памылка. Упэўніцеся, што шлях сапраўдны і Jellyfin мае доступ да гэтага месца.", + "ErrorAddingMediaPathToVirtualFolder": "Адбылася памылка пры даданні шляху да медыяфайлаў. Калі ласка, пераканайцеся, што шлях карэктны і Jellyfin мае доступ да гэтага месца.", "ErrorAddingXmlTvFile": "Адбылася памылка доступу да файла XMLTV. Пераканайцеся, што файл існуе, і паўтарыце спробу.", "ErrorPleaseSelectLineup": "Выберыце склад і паўтарыце спробу. Калі няма даступных лінейак, праверце правільнасць вашага імя карыстальніка, пароля і паштовага індэкса.", "LabelTypeText": "Тэкст", From eb8f8084c54ba11d1c4bfb8f8d23c211121327ad Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 11:30:06 +0000 Subject: [PATCH 204/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index a644c59af8..1078a18dc1 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -1454,9 +1454,9 @@ "EnableDetailsBanner": "Банер з падрабязнасцямі", "EnableDetailsBannerHelp": "Адлюстраваць выявы банера ўверсе старонкі з інфармацыяй аб тавары.", "ErrorAddingTunerDevice": "Пры даданні цюнэра адбылася памылка. Пераканайцеся, што ён даступны, і паўтарыце спробу.", - "ErrorDeletingItem": "Пры выдаленні элемента з сервера адбылася памылка. Калі ласка, праверце, што Jellyfin мае доступ для запісу ў тэчку мультымедыя, і паўтарыце спробу.", + "ErrorDeletingItem": "Адбылася памылка пры выдаленні элемента з сервера. Калі ласка, праверце, ці мае Jellyfin правы на запіс у тэчку з медыяфайламі, і паспрабуйце яшчэ раз.", "ErrorGettingTvLineups": "Адбылася памылка спампоўвання падборак ТБ. Пераканайцеся, што ваша інфармацыя правільная, і паўтарыце спробу.", - "ErrorPlayerNotFound": "Прайгравальнік для запытанага носьбіта не знойдзены.", + "ErrorPlayerNotFound": "Прайгравальнік для запытанага медыяфайла не знойдзены.", "ErrorSavingTvProvider": "Адбылася памылка пры захаванні правайдэра ТБ. Пераканайцеся, што ён даступны, і паўтарыце спробу.", "EveryNDays": "Кожныя {0} дзён", "File": "Файл", @@ -1467,7 +1467,7 @@ "GuestStar": "Запрошаная зорка", "HeaderAccessScheduleHelp": "Стварыце графік доступу, каб абмежаваць доступ да пэўных гадзін.", "HeaderAdmin": "Адміністраванне", - "HeaderAllowMediaDeletionFrom": "Дазволіць выдаленне мультымедыя з", + "HeaderAllowMediaDeletionFrom": "Дазволіць выдаленне медыяфайлаў з", "HeaderApiKeys": "Ключы API", "HeaderApiKeysHelp": "Знешнія прыкладанні павінны мець ключ API для сувязі з серверам. Ключы выдаюцца шляхам ўваходу ў сістэму са звычайным уліковым запісам карыстальніка або ўручную прадастаўлення ключа праграме.", "HeaderCancelRecording": "Адмяніць запіс", @@ -1492,7 +1492,7 @@ "HeaderInstall": "Усталяваць", "HeaderInstantMix": "Імгненны мікс", "HeaderKeepSeries": "Захоўвацт серыял", - "HeaderLatestMedia": "Нядаўна дададзеныя медыя", + "HeaderLatestMedia": "Нядаўна даданыя медыяфайлы", "HeaderLatestMovies": "Нядаўна дададзеныя фільмы", "HeaderLatestMusic": "Нядаўна дададзеная музыка", "HeaderLatestRecordings": "Нядаўна дададзеныя запісы", @@ -1794,7 +1794,7 @@ "EnableTrueHdHelp": "Уключайце, толькі калі ваша прылада падтрымлівае TrueHD або падлучана да сумяшчальнага аўдыяпрыёмніка, у адваротным выпадку гэта можа прывесці да збою прайгравання.", "EnableDtsHelp": "Уключайце, толькі калі ваша прылада падтрымлівае DTS або падлучана да сумяшчальнага аўдыяпрыёмніка, у адваротным выпадку гэта можа прывесці да збою прайгравання.", "CoverArtist": "Аўтар вокладкі", - "ErrorDeletingLyrics": "Адбылася памылка пры выдаленні тэксту песні з сервера. Калі ласка, пераканайцеся, што ў Jellyfin ёсць доступ на запіс да тэчкі мультымедыі, і паўторыце спробу.", + "ErrorDeletingLyrics": "Адбылася памылка пры выдаленні тэкстаў песень з сервера. Калі ласка, праверце, ці мае Jellyfin правы на запіс у тэчку з медыяфайламі, і паспрабуйце яшчэ раз.", "HeaderVideoAdvanced": "Пашыранае відэа", "LabelSelectPreferredTranscodeVideoCodec": "Пераважны кодэк для перакадавання відэа", "LabelSelectPreferredTranscodeVideoAudioCodec": "Пераважны аўдыёкодэк для перакадавання пры прайграванні відэа", From 86a5596bb38a1dd54435bfb5e01ea312f04aec08 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 11:39:54 +0000 Subject: [PATCH 205/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 1078a18dc1..bfd143e130 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -631,7 +631,7 @@ "HeaderProfileServerSettingsHelp": "Гэтыя значэнні кантралююць, як сервер будзе прадстаўляць сябе кліентам.", "HeaderRecordingPostProcessing": "Пост-апрацоўка запісу", "HeaderRemoteControl": "Пульт дыстанцыйнага кіравання", - "HeaderRemoveMediaLocation": "Выдаліць месцазнаходжанне мультымедыя", + "HeaderRemoveMediaLocation": "Выдаліць месцазнаходжанне медыяфайлаў", "HeaderResponseProfile": "Профіль адказу", "HeaderResponseProfileHelp": "Профілі адказу дазваляюць наладзіць інфармацыю, якая адпраўляецца на прыладу падчас прайгравання пэўных відаў мультымедыя.", "HeaderRevisionHistory": "Гісторыя версій", @@ -1438,7 +1438,7 @@ "HideWatchedContentFromLatestMedia": "Схаваць прагледжанае змесціва з \"Нядаўна дададзеных медыя\"", "MessageRenameMediaFolder": "Перайменаванне медыятэкі прывядзе да страты ўсіх метададзеных, будзьце асцярожныя.", "LabelMaxDaysForNextUpHelp": "Усталюйце максімальную колькасць дзён, на працягу якіх серыя павінна заставацца ў спісе \"Наступны\", без прагляду.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Наступныя медыя-месцы будуць выдалены з вашай бібліятэкі", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Наступныя месцы захоўвання медыяфайлаў будуць выдалены з вашай бібліятэкі", "Metadata": "Метададзеныя", "MinutesAfter": "хвілін пасля", "MusicAlbum": "Музычны альбом", @@ -1725,7 +1725,7 @@ "LabelSyncPlayNoGroups": "Няма даступных груп", "Notifications": "Апавяшчэнні", "NotificationsMovedMessage": "Функцыянальнасць апавяшчэнняў перанесена ў плагін Webhook.", - "AllowSegmentDeletionHelp": "Выдаліць старыя сегменты пасля таго, як яны былі загружаны кліентам. Гэта пазбаўляе ад неабходнасці захоўваць увесь перакадаваны файл на дыску. Выключыце гэта, калі ўзнікнуць праблемы з прайграваннем.", + "AllowSegmentDeletionHelp": "Выдаляць старыя сегменты пасля іх спампоўкі кліентам. Гэта прадухіляе неабходнасць захоўвання ўсяго перакадаванага файла на дыску. Адключыце, калі заўважаеце праблемы з прайграваннем.", "LabelSystem": "Сістэма", "HeaderEpisodesStatus": "Статус эпізодаў", "LogLevel.None": "Нічога", From ef416fe099280e924874afe218266e29e4d773d8 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 12:02:02 +0000 Subject: [PATCH 206/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index bfd143e130..ae3932764a 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -347,7 +347,7 @@ "Controls": "Элементы кіравання", "LabelRefreshMode": "Рэжым абнаўлення", "LabelSendNotificationToUsers": "Адправіць апавяшчэнне на", - "LabelSkipIfAudioTrackPresent": "Прапусціць, калі аўдыёдарожка па змаўчанні адпавядае мове спампоўкі", + "LabelSkipIfAudioTrackPresent": "Прапусціць, калі па змаўчанні аўдыядарожка адпавядае мове для спампоўкі", "LabelSkipIfGraphicalSubsPresent": "Прапусціць, калі відэа ўжо змяшчае ўбудаваныя субтытры", "LabelSkipIfGraphicalSubsPresentHelp": "Захаванне тэкставых версій субтытраў прывядзе да больш эфектыўнай дастаўкі і знізіць верагоднасць перакадзіравання відэа.", "LabelSortBy": "Сартаваць па", @@ -456,7 +456,7 @@ "NoSubtitlesHelp": "Субтытры не загружаюцца па змаўчанні. Іх усё яшчэ можна ўключыць уручную падчас прайгравання.", "OnApplicationStartup": "Пры запуску прыкладання", "OptionAllowBrowsingLiveTv": "Дазволіць доступ да тэлеканалаў", - "OptionAllowContentDownload": "Дазволіць загрузку мультымедыя", + "OptionAllowContentDownload": "Дазволіць спампоўку медыяфайлаў", "OptionCaptionInfoExSamsung": "CaptionInfoEx ( Samsung )", "OptionCommunityRating": "Рэйтынг супольнасці", "OptionCriticRating": "Рэйтынг крытыкаў", @@ -465,7 +465,7 @@ "OptionDvd": "DVD", "OptionHasThemeSong": "Тэматычная песня", "OptionHideUserFromLoginHelp": "Карысна для прыватных або схаваных уліковых запісаў адміністратара. Карыстальнік павінен будзе ўвайсці ўручную, увёўшы сваё імя карыстальніка і пароль.", - "FFmpegSavePathNotFound": "Мы не можам знайсці FFmpeg па шляху, які вы ўвялі. FFprobe таксама патрабуецца і павінен знаходзіцца ў той жа папцы. Гэтыя кампаненты звычайна злучаны разам у адной загрузцы. Праверце шлях і паўтарыце спробу.", + "FFmpegSavePathNotFound": "Мы не можам знайсці FFmpeg па ўказаным шляху. FFprobe таксама неабходны і павінен знаходзіцца ў той жа тэчцы. Гэтыя кампаненты звычайна ідуць разам у адным спампоўванні. Калі ласка, праверце шлях і паспрабуйце яшчэ раз.", "Filters": "Фільтры", "Genre": "Жанр", "GoogleCastUnsupported": "Google Cast не падтрымліваецца", @@ -753,7 +753,7 @@ "LabelMaxMuxingQueueSizeHelp": "Максімальная колькасць пакетаў, якія можна буферызаваць падчас чакання ініцыялізацыі ўсіх патокаў. Паспрабуйце павялічыць яго, калі ў журналах FFmpeg вы па-ранейшаму сустракаеце памылку \"Занадта шмат пакетаў у буферы для выхаднога патоку\". Рэкамендаванае значэнне - 2048.", "LabelMaxStreamingBitrateHelp": "Укажыце максімальны бітрэйт пры трансляцыі.", "LabelMessageText": "Тэкст паведамлення", - "LabelMetadataDownloadersHelp": "Уключыце і зранжыравайце вашыя пераважныя спампавальнікі метададзеных у парадку прыярытэту. Спампавальнікі з меншым прыярытэтам будуць выкарыстоўвацца толькі для запаўнення адсутнай інфармацыі.", + "LabelMetadataDownloadersHelp": "Уключыце і расстаўце вашых пераважных спампоўшчыкаў метаданых у парадку прыярытэту. Спампоўшчыкі з ніжэйшым прыярытэтам будуць выкарыстоўвацца толькі для запаўнення адсутнай інфармацыі.", "LabelName": "Імя", "LabelNewName": "Новая назва", "LabelNewPassword": "Новы пароль", @@ -818,7 +818,7 @@ "LabelStopping": "Прыпынак", "LabelStopWhenPossible": "Пры магчымасці спыніцеся", "LabelStreamType": "Тып потоку", - "LabelSubtitleDownloaders": "Праграмы для загрузкі субтытраў", + "LabelSubtitleDownloaders": "Спампоўшчыкі субтытраў", "LabelSubtitleFormatHelp": "Прыклад: srt", "LabelSubtitleVerticalPosition": "Вертыкальнае становішча", "LabelSupportedMediaTypes": "Падтрымліваюцца тыпы носьбітаў", @@ -942,7 +942,7 @@ "LabelTranscodingThreadCountHelp": "Выберыце максімальную колькасць патокаў для выкарыстання пры перакодзіраванні. Памяншэнне колькасці патокаў знізіць нагрузку на працэсар, але можа прывесці да недастаткова хуткага канвертавання для бесперапыннага прайгравання.", "LabelTunerIpAddress": "IP-адрас цюнэра", "LabelTunerType": "Тып цюнэра", - "LabelTypeMetadataDownloaders": "Сродкі загрузкі метададзеных ({0})", + "LabelTypeMetadataDownloaders": "Спампоўшчыкі метададзеных ({0})", "LabelUDPPortRange": "Дыяпазон сувязі UDP", "LabelUDPPortRangeHelp": "Забараніць Jellyfin выкарыстоўваць гэты дыяпазон партоў пры падключэнні UDP. (Па змаўчанні 1024 - 645535).
Заўвага: некаторыя функцыі патрабуюць фіксаваных партоў, якія могуць знаходзіцца па-за межамі гэтага дыяпазону.", "LabelUnstable": "Няўстойлівы", @@ -995,7 +995,7 @@ "LabelImageType": "Тып выявы", "MessagePasswordResetForUsers": "У наступных карыстальнікаў былі скінуты паролі. Цяпер яны могуць увайсці з дапамогай PIN-кодаў, якія выкарыстоўваліся для скіду.", "MessagePlayAccessRestricted": "Прайграванне гэтага кантэнту зараз абмежавана. Калі ласка, звярніцеся да адміністратара вашага сервера для атрымання дадатковай інфармацыі.", - "MessagePleaseEnsureInternetMetadata": "Пераканайцеся, што спампоўка інтэрнэт-метададзеных уключана.", + "MessagePleaseEnsureInternetMetadata": "Калі ласка, пераканайцеся, што спампоўка метаданых з інтэрнэту ўключана.", "LabelKodiMetadataUserHelp": "Захоўвайце даныя гадзінніка ў файлы NFO для выкарыстання іншымі праграмамі.", "LabelLineup": "Склад", "MessagePluginConfigurationRequiresLocalAccess": "Каб наладзіць гэты плагін, увайдзіце непасрэдна на лакальны сервер.", @@ -1120,7 +1120,7 @@ "OptionAllUsers": "Усе карыстальнікі", "OptionAutomaticallyGroupSeries": "Аўтаматычна аб'ядноўваць серыі, якія размеркаваны па некалькіх папках", "LabelMaxStreamingBitrate": "Максімальная якасць трансляцыі", - "LabelMetadataDownloadLanguage": "Пажаданая мова спампоўкі", + "LabelMetadataDownloadLanguage": "Пераважная мова для спампоўкі", "OptionAutomaticallyGroupSeriesHelp": "Серыі, якія размешчаны ў некалькіх папках у гэтай бібліятэцы, будуць аўтаматычна аб'яднаны ў адну серыю.", "LabelMinResumeDurationHelp": "Самая кароткая працягласць відэа ў секундах, якая захавае месца прайгравання і дазволіць вам аднавіць.", "OptionDaily": "Штодня", @@ -1174,7 +1174,7 @@ "OptionReportByteRangeSeekingWhenTranscoding": "Паведаміце, што сервер падтрымлівае пошук байтаў пры перакадзіраванні", "MediaInfoExternal": "Знешні", "OptionReportByteRangeSeekingWhenTranscodingHelp": "Гэта патрабуецца для некаторых прылад, якія не вельмі добра шукаюць час.", - "OptionRequirePerfectSubtitleMatch": "Загружаць толькі субтытры, якія ідэальна падыходзяць для відэафайлаў", + "OptionRequirePerfectSubtitleMatch": "Спампоўваць толькі тыя субтытры, якія цалкам адпавядаюць відэафайлам", "MessageConfirmAppExit": "Вы хочаце выйсці?", "MessageConfirmRemoveMediaLocation": "Вы ўпэўнены, што хочаце выдаліць гэта месца?", "MessageCreateAccountAt": "Стварыце ўліковы запіс на {0}", @@ -1455,7 +1455,7 @@ "EnableDetailsBannerHelp": "Адлюстраваць выявы банера ўверсе старонкі з інфармацыяй аб тавары.", "ErrorAddingTunerDevice": "Пры даданні цюнэра адбылася памылка. Пераканайцеся, што ён даступны, і паўтарыце спробу.", "ErrorDeletingItem": "Адбылася памылка пры выдаленні элемента з сервера. Калі ласка, праверце, ці мае Jellyfin правы на запіс у тэчку з медыяфайламі, і паспрабуйце яшчэ раз.", - "ErrorGettingTvLineups": "Адбылася памылка спампоўвання падборак ТБ. Пераканайцеся, што ваша інфармацыя правільная, і паўтарыце спробу.", + "ErrorGettingTvLineups": "Адбылася памылка пры спампоўцы тэлепраграм. Калі ласка, пераканайцеся, што ваша інфармацыя правільная, і паспрабуйце яшчэ раз.", "ErrorPlayerNotFound": "Прайгравальнік для запытанага медыяфайла не знойдзены.", "ErrorSavingTvProvider": "Адбылася памылка пры захаванні правайдэра ТБ. Пераканайцеся, што ён даступны, і паўтарыце спробу.", "EveryNDays": "Кожныя {0} дзён", @@ -1595,7 +1595,7 @@ "LabelMethod": "Метад", "LabelMinAudiobookResume": "Мінімальнае ўзнаўленне аўдыякнігі ў хвілінах", "LabelMinAudiobookResumeHelp": "Лічыцца, што загалоўкі не прайграваюцца, калі яны былі спынены да гэтага часу.", - "LabelMinBackdropDownloadWidth": "Мінімальная шырыня загрузкі фону", + "LabelMinBackdropDownloadWidth": "Мінімальная шырыня спампоўкі фонавага малюнка", "LabelMinResumeDuration": "Мінімальная працягласць узнаўлення", "LabelMinResumePercentage": "Мінімальны працэнт узнаўлення", "LabelMinResumePercentageHelp": "Лічыцца, што загалоўкі не прайграваюцца, калі яны былі спынены да гэтага часу.", @@ -1608,8 +1608,8 @@ "LabelMusicStreamingTranscodingBitrate": "Бітрэйт перакадзіравання музыкі", "LabelMusicStreamingTranscodingBitrateHelp": "Укажыце максімальны бітрэйт пры перадачы музыкі.", "LabelNumber": "Нумар", - "LabelNumberOfGuideDays": "Колькасць дзён даведніка для загрузкі", - "LabelNumberOfGuideDaysHelp": "Спампоўка даведнікаў за некалькі дзён дае магчымасць загадзя планаваць расклад і праглядаць больш спісаў, але загрузка таксама зойме больш часу. Аўто будзе выбіраць на аснове колькасці каналаў.", + "LabelNumberOfGuideDays": "Колькасць дзён для спампоўкі тэлепраграмы", + "LabelNumberOfGuideDaysHelp": "Спампоўка тэлепраграмы на большую колькасць дзён дае магчымасць планаваць наперад і праглядаць больш спісаў, але гэта таксама запатрабуе больш часу для загрузкі. Рэжым 'Аўто' выбірае колькасць дзён у залежнасці ад колькасці каналаў.", "LabelOpenclDevice": "Прылада OpenCL", "LabelOriginalName": "Арыгінальная назва", "LabelScreensaver": "Застаўка", @@ -1673,7 +1673,7 @@ "OnlyForcedSubtitles": "Толькі прымусова", "TabServer": "Сервер", "ThemeVideos": "Тэматычныя відэа", - "OptionAllowContentDownloadHelp": "Карыстальнікі могуць спампоўваць мультымедыя і захоўваць яго на сваіх прыладах. Гэта не тое самае, што функцыя сінхранізацыі. Кніжныя бібліятэкі патрабуюць, каб гэта было ўключана для правільнай працы.", + "OptionAllowContentDownloadHelp": "Карыстальнікі могуць спампоўваць медыяфайлы і захоўваць іх на сваіх прыладах. Гэта не тое самае, што функцыя сінхранізацыі. Кніжныя бібліятэкі патрабуюць, каб гэта было ўключана для правільнай працы.", "OptionAllowLinkSharing": "Дазволіць абагульванне ў сацыяльных сетках", "HeaderRecordingMetadataSaving": "Метададзеныя запісу", "SaveRecordingNFO": "Захаваць метададзеныя запісу EPG у NFO", @@ -1747,7 +1747,7 @@ "LabelThrottleDelaySeconds": "Абмежаваць пасля", "LabelThrottleDelaySecondsHelp": "Час у секундах, пасля якога транскодэр будзе затарможаны. Павінен быць дастаткова вялікім, каб кліент падтрымліваў спраўны буфер. Працуе, толькі калі ўключана рэгуляванне.", "LabelSegmentKeepSeconds": "Час захавання сегментаў", - "LabelSegmentKeepSecondsHelp": "Час у секундах, на працягу якога сегменты павінны захоўвацца пасля іх загрузкі кліентам. Працуе, толькі калі ўключана выдаленне сегмента.", + "LabelSegmentKeepSecondsHelp": "Час у секундах, на працягу якога сегменты павінны захоўвацца пасля іх спампоўкі кліентам. Працуе толькі калі ўключана выдаленне сегментаў.", "LabelLevel": "Узровень", "AiTranslated": "У перакладзе ШІ", "MachineTranslated": "Машынны пераклад", @@ -1837,7 +1837,7 @@ "PlaylistError.AddFailed": "Памылка пры даданні ў плэйліст", "PlaybackError.PLAYER_ERROR": "Прайграванне не ўдалося з-за крытычнай памылкі прайгравальніка.", "Regional": "Абласны", - "HeaderLyricDownloads": "Спампоўка тэкстаў песен", + "HeaderLyricDownloads": "Спампоўка тэкстаў песень", "LabelBuildVersion": "Версія зборкі", "Lyric": "Тэкст песні", "LimitSupportedVideoResolution": "Абмежаваць максімальную падтрымліваемую раздзяляльнасць відэа", @@ -1941,5 +1941,7 @@ "PreferNonstandardArtistsTagHelp": "Выкарыстоўваць нестандартную метку ARTISTS замест меткі ARTIST, калі яна даступная.", "UseCustomTagDelimitersHelp": "Раздзяляць меткі выканаўцаў і жанраў з дапамогай карыстацкіх сімвалаў.", "PlaylistError.UpdateFailed": "Памылка абнаўлення плэйліста", - "PreferNonstandardArtistsTag": "Аддаваць перавагу метцы ARTISTS, калі яна ёсць" + "PreferNonstandardArtistsTag": "Аддаваць перавагу метцы ARTISTS, калі яна ёсць", + "LyricDownloadersHelp": "Уключыце і расстаўце вашых пераважных спампоўшчыкаў тэкстаў песень у парадку прыярытэту.", + "LabelLyricDownloaders": "Спампоўшчыкі тэкстаў песень" } From 12a1018bc6e38f82fe0d4f5ad9dc7e465d137dcb Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Tue, 4 Mar 2025 12:51:46 +0000 Subject: [PATCH 207/235] 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 44175a5b89..5e07ae3ebc 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -2006,5 +2006,7 @@ "DeleteServerConfirmation": "Ste si istí, že chcete odstrániť tento server?", "CopyLogSuccess": "Obsah logu bol úspešne skopírovaný.", "Retry": "Opakovať", - "LogLoadFailure": "Nepodarilo sa načítať súbor logu. Je možné, že sa do neho práve aktívne zapisuje." + "LogLoadFailure": "Nepodarilo sa načítať súbor logu. Je možné, že sa do neho práve aktívne zapisuje.", + "MetadataImagesLoadError": "Nepodarilo sa načítať nastavenia metadát", + "DisplayLoadError": "Pri načítavaní konfiguračných údajov displeja došlo k chybe." } From c3c53aa5d853e439459725470c9b380431deb264 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 12:52:12 +0000 Subject: [PATCH 208/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index ae3932764a..1535bbe155 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -848,7 +848,7 @@ "LabelTitle": "Назва", "LabelTonemappingAlgorithm": "Выберыце алгарытм танальнага адлюстравання для выкарыстання", "LabelTonemappingDesat": "Тонавае адлюстраванне desat", - "ChannelAccessHelp": "Выберыце каналы, каб даць доступ гэтаму карыстальніку. Адміністратары змогуць рэдагаваць усе каналы з дапамогай дыспетчара метададзеных.", + "ChannelAccessHelp": "Выберыце каналы для агульнага доступу з гэтым карыстальнікам. Адміністратары змогуць рэдагаваць усе каналы з дапамогай мэнэджара метададзеных.", "ChannelNumber": "Нумар канала", "ClientSettings": "Налады кліента", "ColorPrimaries": "Асноўныя колеры", From ba100214a320070381d005c35f79206627fd5365 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 12:56:34 +0000 Subject: [PATCH 209/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 1535bbe155..059e396074 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -356,7 +356,7 @@ "LabelSource": "Крыніца", "ClearQueue": "Ачысціць чаргу", "Conductor": "Дырыжор", - "ConfigureDateAdded": "Наладзьце спосаб вызначэння метададзеных для \"Дата дадання\" ў \"Панэль кіравання\" > \"Медыятэка\" > \"Налады NFO\"", + "ConfigureDateAdded": "Наладзьце, як вызначаюцца метададзеныя для 'Дата дадання' ў раздзеле Панэль кіравання > Бібліятэкі > Адлюстраванне", "ConfirmDeleteImage": "Выдаліць выяву?", "ConfirmDeleteItem": "Выдаленне гэтага элемента прывядзе да яго выдалення як з файлавай сістэмы, так і з вашай бібліятэкі медыяфайлаў. Вы ўпэўнены, што жадаеце працягнуць?", "ConfirmDeleteItems": "Выдаленне гэтых элементаў прывядзе да іх выдалення як з файлавай сістэмы, так і з вашай бібліятэкі медыяфайлаў. Вы ўпэўнены, што хочаце працягнуць?", From e82c8f68f1a34e095d39fb400e3d5dd17a8ce86e Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 12:57:45 +0000 Subject: [PATCH 210/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 059e396074..f54e7a9ee1 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -31,7 +31,7 @@ "ButtonCast": "Вяшчаць на прыладу", "Movies": "Фільмы", "Genres": "Жанры", - "Folders": "Папкі", + "Folders": "Тэчкі", "Photos": "Фатаграфіі", "Songs": "Песні", "Channels": "Каналы", @@ -123,7 +123,7 @@ "ButtonRename": "Перайменаваць", "ButtonResume": "Працягнуць", "ButtonScanAllLibraries": "Сканаваць усе бібліятэкі", - "ChangingMetadataImageSettingsNewContent": "Змены ў метаданых або наладах спампоўкі ілюстрацый будуць прымяняцца толькі да новага кантэнту, дададзенага ў вашу бібліятэку. Каб прымяніць змены да існуючых назваў, вам трэба будзе абнавіць іх метаданыя ўручную.", + "ChangingMetadataImageSettingsNewContent": "Змены ў метададзеных або наладах спампоўкі ілюстрацый будуць прымяняцца толькі да новага кантэнту, дададзенага ў вашу бібліятэку. Каб прымяніць змены да існуючых назваў, вам трэба будзе абнавіць іх метададзеныя ўручную.", "ButtonMore": "Больш", "BoxRear": "Скрынка (задняя)", "ButtonManualLogin": "Уваход уручную", @@ -236,7 +236,7 @@ "MediaInfoFramerate": "Частата кадраў", "MediaInfoProfile": "Профіль", "MessageAlreadyInstalled": "Гэтая версія ўжо ўстаноўлена.", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Вы ўпэўнены, што жадаеце выдаліць гэту медыяпапку?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Вы ўпэўнены, што жадаеце выдаліць гэту тэчку з медыяфайламі?", "LabelModelUrl": "URL мадэлі", "MoveLeft": "Рухайцесь налева", "Mute": "Адключыць аўдыё", @@ -337,7 +337,7 @@ "LabelMetadataPathHelp": "Укажыце карыстацкае месцазнаходжанне для спампаваных ілюстрацый і метададзеных.", "LabelMetadataReaders": "Счытвальнікі метададзеных", "LabelMetadataSavers": "Захавальнікі метаданых", - "LabelOptionalNetworkPath": "Агульная сеткавая папка", + "LabelOptionalNetworkPath": "Агульная сеткавая тэчка", "LabelParentNumber": "Бацькоўскі нумар", "LabelPasswordConfirm": "Пароль (пацвердзіць)", "LabelPlaylist": "Плэйліст", @@ -640,11 +640,11 @@ "HeaderSeasons": "Сезоны", "HeaderSelectCertificatePath": "Выберыце шлях да сертыфіката", "HeaderSelectMetadataPath": "Выберыце шлях да метададзеных", - "HeaderSelectMetadataPathHelp": "Праглядзіце або ўвядзіце шлях, які вы хочаце выкарыстоўваць для метададзеных. Папка павінна быць даступнай для запісу.", + "HeaderSelectMetadataPathHelp": "Праглядзіце або ўвядзіце шлях, які вы хочаце выкарыстоўваць для метададзеных. Тэчка павінна быць даступнай для запісу.", "HeaderSelectServerCachePath": "Выберыце шлях да кэша сервера", - "HeaderSelectServerCachePathHelp": "Праглядзіце або ўвядзіце шлях для выкарыстання файлаў кэша сервера. Папка павінна быць даступнай для запісу.", + "HeaderSelectServerCachePathHelp": "Праглядзіце або ўвядзіце шлях для выкарыстання файлаў кэша сервера. Тэчка павінна быць даступнай для запісу.", "HeaderSelectTranscodingPath": "Выберыце часовы шлях перакадзіравання", - "HeaderSelectTranscodingPathHelp": "Праглядзіце або ўвядзіце шлях для перакадзіравання файлаў. Папка павінна быць даступнай для запісу.", + "HeaderSelectTranscodingPathHelp": "Праглядзіце або ўвядзіце шлях для перакадзіравання файлаў. Тэчка павінна быць даступнай для запісу.", "HeaderSeriesOptions": "Параметры серыі", "HeaderSeriesStatus": "Статус серыі", "HeaderServerAddressSettings": "Налады адраса сервера", @@ -761,7 +761,7 @@ "LabelNewsCategories": "Катэгорыі навін", "LabelNotificationEnabled": "Уключыць гэта апавяшчэнне", "LabelOpenclDeviceHelp": "Гэта прылада OpenCL, якая выкарыстоўваецца для танальнага адлюстравання. Левы бок кропкі - гэта нумар платформы, а правы - нумар прылады на платформе. Значэнне па змаўчанні - 0,0. Патрабуецца файл прыкладання FFmpeg, які змяшчае метад апаратнага паскарэння OpenCL.", - "LabelOptionalNetworkPathHelp": "Калі гэтая папка агульнадаступная ў вашай сетцы, прадастаўленне шляху сеткавага абагульвання можа дазволіць кліентам на іншых прыладах атрымаць непасрэдны доступ да медыяфайлаў. Напрыклад, {0} або {1}.", + "LabelOptionalNetworkPathHelp": "Калі гэтая тэчка агульнадаступная ў вашай сетцы, указанне сеткавага шляху дасць магчымасць кліентам на іншых прыладах атрымліваць доступ да медыяфайлаў. Напрыклад, {0} або {1}.", "LabelOriginalAspectRatio": "Зыходныя суадносіны бакоў", "LabelOriginalTitle": "Арыгінальная назва", "LabelParentalRating": "Бацькоўскі рэйтынг", @@ -789,18 +789,18 @@ "LabelQuickConnectCode": "Код Quick Connect", "LabelReasonForTranscoding": "Прычына перакадавання", "LabelRecordingPath": "Шлях запісу па змаўчанні", - "LabelRecordingPathHelp": "Укажыце месца па змаўчанні для захавання запісаў. Калі пакінуць пустым, будзе выкарыстоўвацца папка дадзеных праграмы сервера.", + "LabelRecordingPathHelp": "Вызначце месца для захавання запісаў па змаўчанні. Калі поле пакінуць пустым, запісы будуць захоўвацца ў тэчцы з праграмнымі дадзенымі сервера.", "LabelReleaseDate": "Дата выпуску", "LabelRemoteClientBitrateLimit": "Ліміт бітрэйту струменевай перадачы Інтэрнэту (Мбіт/с)", "LabelRemoteClientBitrateLimitHelp": "Дадатковы ліміт бітрэйту для кожнага патоку для ўсіх сеткавых прылад. Гэта карысна, каб прылады не запытвалі больш высокі бітрэйт, чым можа вытрымаць ваша інтэрнэт-злучэнне. Гэта можа прывесці да павелічэння нагрузкі на працэсар вашага сервера для перакадзіравання відэа на хаду да больш нізкага бітрэйту.", "LabelRepositoryName": "Назва сховішча", "LabelRepositoryNameHelp": "Карыстальніцкая назва, каб адрозніць гэтае сховішча ад іншых, дададзеных на ваш сервер.", - "LabelSaveLocalMetadata": "Захоўвайце ілюстрацыі ў папках мультымедыя", - "LabelSaveLocalMetadataHelp": "Захаванне ілюстрацыі ў папках мультымедыя змесціць іх у месца, дзе іх можна будзе лёгка рэдагаваць.", + "LabelSaveLocalMetadata": "Захоўвайце ілюстрацыі ў тэчках з медыяфайламі", + "LabelSaveLocalMetadataHelp": "Захаванне ілюстрацый у тэчках з медыяфайламі дазволіць лёгка іх рэдагаваць.", "LabelScheduledTaskLastRan": "Апошні запуск {0}, заняў {1}.", "LabelSeasonNumber": "Нумар сезона", - "LabelSelectFolderGroups": "Аўтаматычна групаваць змесціва з наступных папак у віды, такія як \"Фільмы\", \"Музыка\" і \"ТБ\"", - "LabelSelectFolderGroupsHelp": "Папкі, якія не адзначаны, будуць паказвацца самастойна ў іх уласным праглядзе.", + "LabelSelectFolderGroups": "Аўтаматычна групаваць змесціва з наступных тэчак у прадстаўленні, такія як \"Фільмы\", \"Музыка\" і \"ТБ\"", + "LabelSelectFolderGroupsHelp": "Тэчкі, якія не адзначаны, будуць адлюстроўвацца асобна ў сваім уласным прадстаўленні.", "LabelSelectUsers": "Выберыце карыстальнікаў", "LabelSelectVersionToInstall": "Выберыце версію для ўстаноўкі", "LabelSerialNumber": "Серыйны нумар", @@ -929,7 +929,7 @@ "HeaderOnNow": "У эфіры", "HeaderPassword": "Пароль", "HeaderRemoteAccessSettings": "Налады аддаленага доступу", - "HeaderRemoveMediaFolder": "Выдаліць папку мультымедыя", + "HeaderRemoveMediaFolder": "Выдаліць тэчку з медыяфайламі", "Help": "Даведка", "LabelTonemappingDesatHelp": "Ужывайце дэсатурацыю для блікаў, якія перавышаюць гэты ўзровень яркасці. Чым вышэй параметр, тым больш інфармацыі аб колеры будзе захавана. Гэта налада дапамагае прадухіліць ненатуральна цьмяныя колеры для суперблікаў, замест гэтага (плаўна) ператвараючыся ў белыя. Гэта робіць выявы больш натуральнымі, за кошт памяншэння інфармацыі аб колерах, якія не ўваходзяць у дыяпазон. Рэкамендуемыя значэнні і значэнні па змаўчанні - 0 і 0,5.", "LabelTonemappingParamHelp": "Наладзьце алгарытм танальнага адлюстравання. Рэкамендаваныя значэнні і значэнні па змаўчанні - NaN. Як правіла, пакіньце яго пустым.", @@ -1212,7 +1212,7 @@ "OptionEnableExternalContentInSuggestions": "Уключыць знешні кантэнт у прапановах", "OptionEnableM2tsModeHelp": "Уключыце рэжым M2TS пры кадзіраванні ў MPEG-TS.", "OptionEquals": "Роўна", - "PreferEmbeddedTitlesOverFileNamesHelp": "Вызначце загаловак для адлюстравання, які будзе выкарыстоўвацца, калі інтэрнэт-метададзеныя або лакальныя метаданыя недаступныя.", + "PreferEmbeddedTitlesOverFileNamesHelp": "Вызначце загаловак для адлюстравання, які будзе выкарыстоўвацца, калі інтэрнэт-метададзеныя або лакальныя метададзеныя недаступныя.", "OptionImdbRating": "Рэйтынг IMDb", "AllowEmbeddedSubtitles": "Адключыць розныя тыпы ўбудаваных субтытраў", "OptionMax": "Макс", @@ -1497,9 +1497,9 @@ "HeaderLatestMusic": "Нядаўна дададзеная музыка", "HeaderLatestRecordings": "Нядаўна дададзеныя запісы", "HeaderLibraries": "Медыятэкі", - "HeaderLibraryFolders": "Папкі медыятэкі", + "HeaderLibraryFolders": "Тэчкі бібліятэкі", "HeaderLibraryOrder": "Парадак медыятэк", - "HeaderMediaFolders": "Папкі медыятэкі", + "HeaderMediaFolders": "Тэчкі з медыяфайламі", "HeaderMetadataSettings": "Налады метаданых", "HeaderMoreLikeThis": "Больш падобнага", "HeaderMusicQuality": "Якасць музыкі", @@ -1540,9 +1540,9 @@ "LabelExtractChaptersDuringLibraryScan": "Выманне выяў раздзелаў падчас сканавання бібліятэкі", "LabelExtractChaptersDuringLibraryScanHelp": "Стварайце выявы раздзелаў, калі відэа імпартуюцца падчас сканавання бібліятэкі. У адваротным выпадку яны будуць выняты падчас запланаванай задачы выявы раздзелаў, што дазволіць звычайнаму сканаванню бібліятэкі завяршыцца хутчэй.", "LabelFailed": "Не ўдалося", - "LabelffmpegPathHelp": "Шлях да файла або папкі прыкладання FFmpeg, якая змяшчае FFmpeg.", + "LabelffmpegPathHelp": "Шлях да файла FFmpeg або тэчкі, якая змяшчае FFmpeg.", "LabelFileOrUrl": "Файл або URL", - "LabelFolder": "Папка", + "LabelFolder": "Тэчка", "LabelFont": "Шрыфт", "LabelForgotPasswordUsernameHelp": "Увядзіце імя карыстальніка, калі вы яго памятаеце.", "LabelFriendlyName": "Дружалюбнае імя", @@ -1677,7 +1677,7 @@ "OptionAllowLinkSharing": "Дазволіць абагульванне ў сацыяльных сетках", "HeaderRecordingMetadataSaving": "Метададзеныя запісу", "SaveRecordingNFO": "Захаваць метададзеныя запісу EPG у NFO", - "SaveRecordingNFOHelp": "Захоўвайце метаданыя ад пастаўшчыка спісаў EPG разам з медыяфайламі.", + "SaveRecordingNFOHelp": "Захоўвайце метададзеныя ад пастаўшчыка спісаў EPG разам з медыяфайламі.", "SaveRecordingImages": "Захаванне запісу EPG выяў", "SaveRecordingImagesHelp": "Захоўвайце выявы з спісаў EPG разам з мультымедыя.", "PreferEmbeddedExtrasTitlesOverFileNames": "Аддавайце перавагу ўбудаваным загалоўкам, а не імёнам файлаў для extras", From b1a8b5c77e47eb95aee030563653268c4c4e0b69 Mon Sep 17 00:00:00 2001 From: stanol Date: Tue, 4 Mar 2025 13:11:28 +0000 Subject: [PATCH 211/235] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 1cccd66e1a..32df04c914 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -2000,5 +2000,10 @@ "LabelDevice": "Пристрій", "LastActive": "Остання активність", "DeleteServerConfirmation": "Ви впевнені, що хочете видалити цей сервер?", - "LibraryNameInvalid": "Назва медіатеки не може бути порожньою." + "LibraryNameInvalid": "Назва медіатеки не може бути порожньою.", + "CopyLogSuccess": "Вміст журналу успішно скопійовано.", + "Retry": "Повторити", + "LogLoadFailure": "Не вдалося завантажити файл журналу. Можливо, до нього ще ведеться активний запис.", + "DisplayLoadError": "Виникла помилка під час завантаження даних конфігурації дисплея.", + "MetadataImagesLoadError": "Не вдалося завантажити налаштування метаданих" } From deb447dffa7a185ef1c509e7a02977f8ab6034f3 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 4 Mar 2025 18:46:44 +0000 Subject: [PATCH 212/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index f54e7a9ee1..9df87d678a 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -16,7 +16,7 @@ "WizardCompleted": "Гэта ўсё, што нам трэба зараз. Jellyfin пачынае збіраць звесткі аб вашай медыятэцы. Азнаёмцеся пакуль з некаторымі нашымі праграмамі, а затым націсніце Гатова, каб праглядзець Панэль кіравання.", "ButtonSyncPlay": "Функцыя SyncPlay", "Sync": "Сінхранізаваць", - "Playlists": "Плэйлісты", + "Playlists": "Спісы прайгравання", "OptionBluray": "BD", "AddToCollection": "Дадаць у калекцыю", "AdditionalNotificationServices": "Праглядзіце каталог плагінаў, каб усталяваць дадатковыя службы апавяшчэнняў.", @@ -97,7 +97,7 @@ "AlwaysPlaySubtitlesHelp": "Субтытры, якія адпавядаюць параметрам мовы, будуць загружаны незалежна ад мовы гуку.", "AllowMediaConversion": "Дазволіць канвертаванне медыяфайлаў", "AllowFfmpegThrottling": "Абмежаваць перакадзіраванне", - "AddToPlaylist": "Дадаць у плэйліст", + "AddToPlaylist": "Дадаць у спіс прайгравання", "Album": "Альбом", "Anytime": "У любы час", "ButtonBackspace": "Сьцерці", @@ -168,7 +168,7 @@ "ButtonStart": "Пачаць", "ButtonStop": "Спыніць", "ButtonSubmit": "Падаць", - "ButtonTogglePlaylist": "Плэйліст", + "ButtonTogglePlaylist": "Спіс прайгравання", "ButtonTrailer": "Трэйлер", "ButtonUninstall": "Выдаліць", "ButtonWebsite": "Вэб-сайт", @@ -257,7 +257,7 @@ "Recordings": "Запісы", "Ended": "Скончылася", "RememberSubtitleSelections": "Усталюйце дарожку субтытраў на аснове папярэдняга элемента", - "RemoveFromPlaylist": "Выдаліць з плэйліста", + "RemoveFromPlaylist": "Выдаліць з спіса прайгравання", "ChannelNameOnly": "Толькі канал {0}", "Composer": "Кампазітар", "CopyFailed": "Не атрымалася скапіраваць", @@ -340,7 +340,7 @@ "LabelOptionalNetworkPath": "Агульная сеткавая тэчка", "LabelParentNumber": "Бацькоўскі нумар", "LabelPasswordConfirm": "Пароль (пацвердзіць)", - "LabelPlaylist": "Плэйліст", + "LabelPlaylist": "Спіс прайгравання", "LabelPlayMethod": "Спосаб прайгравання", "LabelProfileVideoCodecs": "Відэа кодэкі", "LabelPublicHttpsPort": "Нумар публічнага порта HTTPS", @@ -1800,13 +1800,13 @@ "LabelSelectPreferredTranscodeVideoAudioCodec": "Пераважны аўдыёкодэк для перакадавання пры прайграванні відэа", "PlaybackError.FATAL_HLS_ERROR": "У патоку HLS была выяўленая фатальная памылка.", "PlaybackError.MEDIA_NOT_SUPPORTED": "Прайграванне не ўдалося, бо медыяфайл не падтрымліваецца гэтым кліентам.", - "PlaylistError.CreateFailed": "Памылка стварэння плэйліста", + "PlaylistError.CreateFailed": "Памылка стварэння спіса прайгравання", "PlaylistPublic": "Дазволіць публічны доступ", "LimitSupportedVideoResolutionHelp": "Выкарыстоўвайце \"Максімальнае дазволенае раздзяленне перакадзіравання відэа\" ў якасці максімальнага падтрымоўванага раздзялення відэа.", "PlaybackError.ASS_RENDER_ERROR": "У праграме візуалізацыі субтытраў ASS / SSA была выяўленая памылка.", "PlaybackError.MEDIA_DECODE_ERROR": "Прайграванне не ўдалося з-за памылкі дэкадзіравання медыяфайла.", "PlaybackError.NETWORK_ERROR": "Прайгравання не ўдалося з-за сеткавай памылкі.", - "PlaylistPublicDescription": "Дазволіць прагляд гэтага плэйліста любому карыстальніку, які ўвайшоў у сістэму.", + "PlaylistPublicDescription": "Дазволіць прагляд гэтага спіса прайгравання любому карыстальніку, які ўвайшоў у сістэму.", "HeaderNoLyrics": "Тэксты песень не знойдзены", "Illustrator": "Ілюстратар", "LabelServerVersion": "Версія сервера", @@ -1834,7 +1834,7 @@ "LabelAllowContentWithTags": "Дазволіць элементы з меткамі", "Lyrics": "Тэкст песні", "LibraryScanFanoutConcurrencyHelp": "Максімальную колькасць паралельных задач пры сканаванні бібліятэкі. Пры ўсталёўцы значэння 0 будзе абрана абмежаванне, заснаванае на колькасці ядраў у вашай сістэме. УВАГА: занадта вялікае значэнне можа прывесці да праблем з сеткавымі файлавымі сістэмамі; пры ўзнікненні праблем паменшыце гэта значэнне.", - "PlaylistError.AddFailed": "Памылка пры даданні ў плэйліст", + "PlaylistError.AddFailed": "Памылка пры даданні ў спіс прайгравання", "PlaybackError.PLAYER_ERROR": "Прайграванне не ўдалося з-за крытычнай памылкі прайгравальніка.", "Regional": "Абласны", "HeaderLyricDownloads": "Спампоўка тэкстаў песень", @@ -1910,8 +1910,8 @@ "EditLyrics": "Рэдагаваць тэкст песні", "LabelAudioTagSettings": "Налады аўдыяметак", "AndOtherArtists": "{0} і {1} іншыя выканаўцы.", - "HeaderNewPlaylist": "Новы плэйліст", - "HeaderEditPlaylist": "Рэдагаваць плэйліст", + "HeaderNewPlaylist": "Новы спіс прайгравання", + "HeaderEditPlaylist": "Рэдагаваць спіс прайгравання", "EnableHi10pHelp": "Уключыце, каб пазбегнуць перакадзіравання 10-бітных відэа H.264. Адключыце гэту опцыю, калі відэа паказвае пустыя кадры.", "HeaderAddLyrics": "Дадаць тэкст песні", "LabelAlwaysRemuxFlacAudioFiles": "Заўсёды рэмуксаваць аўдыяфайлы FLAC", @@ -1940,7 +1940,7 @@ "LogLoadFailure": "Не ўдалося загрузіць файл журнала. Магчыма, ён можа быць у працэсе запісу.", "PreferNonstandardArtistsTagHelp": "Выкарыстоўваць нестандартную метку ARTISTS замест меткі ARTIST, калі яна даступная.", "UseCustomTagDelimitersHelp": "Раздзяляць меткі выканаўцаў і жанраў з дапамогай карыстацкіх сімвалаў.", - "PlaylistError.UpdateFailed": "Памылка абнаўлення плэйліста", + "PlaylistError.UpdateFailed": "Памылка абнаўлення спіса прайгравання", "PreferNonstandardArtistsTag": "Аддаваць перавагу метцы ARTISTS, калі яна ёсць", "LyricDownloadersHelp": "Уключыце і расстаўце вашых пераважных спампоўшчыкаў тэкстаў песень у парадку прыярытэту.", "LabelLyricDownloaders": "Спампоўшчыкі тэкстаў песень" From 9d4846c85b274571534a776375622a2c14a5416a Mon Sep 17 00:00:00 2001 From: millallo Date: Tue, 4 Mar 2025 18:11:57 +0000 Subject: [PATCH 213/235] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 4f5e84afad..cc68d7247d 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -2006,5 +2006,7 @@ "LibraryNameInvalid": "Il nome della libreria non può essere vuoto.", "CopyLogSuccess": "Contenuti dei log copiati con successo.", "Retry": "Riprova", - "LogLoadFailure": "Non sono riuscito a caricare il file di log. Potrebbe essere tutt'ora in fase di scrittura." + "LogLoadFailure": "Non sono riuscito a caricare il file di log. Potrebbe essere tutt'ora in fase di scrittura.", + "DisplayLoadError": "Errore durante il caricamento dei dati di configurazione del display.", + "MetadataImagesLoadError": "Caricamento metadati delle immagini fallito" } From 6cd8b14ad68d6a06d884d0e28ba6afe112813c1b Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Tue, 4 Mar 2025 21:19:42 +0000 Subject: [PATCH 214/235] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 7bde4a5c31..635dd0b1d5 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2006,5 +2006,6 @@ "CopyLogSuccess": "Logboekinhoud gekopieerd.", "Retry": "Opnieuw proberen", "LogLoadFailure": "Laden van logboekbestand mislukt. Mogelijk wordt er nog actief naar geschreven.", - "DisplayLoadError": "Er is een fout opgetreden bij het laden van de weergaveconfiguratiegegevens." + "DisplayLoadError": "Er is een fout opgetreden bij het laden van de weergaveconfiguratiegegevens.", + "MetadataImagesLoadError": "Laden van metadata-instellingen mislukt" } From 10d731e69710b053fc0108b3955cca475113eeea Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 4 Mar 2025 19:46:54 +0300 Subject: [PATCH 215/235] Migrate NFO Settings to React --- .../dashboard/controllers/metadatanfo.html | 49 ----- src/apps/dashboard/controllers/metadatanfo.js | 61 ------ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - .../dashboard/routes/libraries/display.tsx | 8 +- src/apps/dashboard/routes/libraries/nfo.tsx | 197 ++++++++++++++++++ src/components/SimpleAlert.tsx | 36 ++++ src/strings/en-us.json | 1 + 8 files changed, 240 insertions(+), 120 deletions(-) delete mode 100644 src/apps/dashboard/controllers/metadatanfo.html delete mode 100644 src/apps/dashboard/controllers/metadatanfo.js create mode 100644 src/apps/dashboard/routes/libraries/nfo.tsx create mode 100644 src/components/SimpleAlert.tsx diff --git a/src/apps/dashboard/controllers/metadatanfo.html b/src/apps/dashboard/controllers/metadatanfo.html deleted file mode 100644 index 62f18b2641..0000000000 --- a/src/apps/dashboard/controllers/metadatanfo.html +++ /dev/null @@ -1,49 +0,0 @@ -
- -
- -
-
- -

${HeaderKodiMetadataHelp}

-
-
- -
${LabelKodiMetadataUserHelp}
-
- -
- -
${LabelKodiMetadataDateFormatHelp}
-
-
- -
${LabelKodiMetadataSaveImagePathsHelp}
-
-
- -
-
${LabelKodiMetadataEnablePathSubstitutionHelp}
-
-
-
- -
${LabelKodiMetadataEnableExtraThumbsHelp}
-
-
-
-
- -
-
diff --git a/src/apps/dashboard/controllers/metadatanfo.js b/src/apps/dashboard/controllers/metadatanfo.js deleted file mode 100644 index 51b7eee36b..0000000000 --- a/src/apps/dashboard/controllers/metadatanfo.js +++ /dev/null @@ -1,61 +0,0 @@ -import escapeHtml from 'escape-html'; -import 'jquery'; - -import loading from 'components/loading/loading'; -import globalize from 'lib/globalize'; -import Dashboard from 'utils/dashboard'; -import alert from 'components/alert'; - -function loadPage(page, config, users) { - let html = ''; - html += users.map(function (user) { - return ''; - }).join(''); - const elem = page.querySelector('#selectUser'); - elem.innerHTML = html; - elem.value = config.UserId || ''; - page.querySelector('#selectReleaseDateFormat').value = config.ReleaseDateFormat; - page.querySelector('#chkSaveImagePaths').checked = config.SaveImagePathsInNfo; - page.querySelector('#chkEnablePathSubstitution').checked = config.EnablePathSubstitution; - page.querySelector('#chkEnableExtraThumbs').checked = config.EnableExtraThumbsDuplication; - loading.hide(); -} - -function onSubmit() { - loading.show(); - const form = this; - ApiClient.getNamedConfiguration(metadataKey).then(function (config) { - config.UserId = form.querySelector('#selectUser').value || null; - config.ReleaseDateFormat = form.querySelector('#selectReleaseDateFormat').value; - config.SaveImagePathsInNfo = form.querySelector('#chkSaveImagePaths').checked; - config.EnablePathSubstitution = form.querySelector('#chkEnablePathSubstitution').checked; - config.EnableExtraThumbsDuplication = form.querySelector('#chkEnableExtraThumbs').checked; - ApiClient.updateNamedConfiguration(metadataKey, config).then(function () { - Dashboard.processServerConfigurationUpdateResult(); - showConfirmMessage(); - }); - }); - return false; -} - -function showConfirmMessage() { - const msg = []; - msg.push(globalize.translate('MetadataSettingChangeHelp')); - alert({ - text: msg.join('

') - }); -} - -const metadataKey = 'xbmcmetadata'; -$(document).on('pageinit', '#metadataNfoPage', function () { - $('.metadataNfoForm').off('submit', onSubmit).on('submit', onSubmit); -}).on('pageshow', '#metadataNfoPage', function () { - loading.show(); - const page = this; - const promise1 = ApiClient.getUsers(); - const promise2 = ApiClient.getNamedConfiguration(metadataKey); - Promise.all([promise1, promise2]).then(function (responses) { - loadPage(page, responses[1], responses[0]); - }); -}); - diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 5a7398da39..1a11b608b4 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -8,6 +8,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'keys', type: AppType.Dashboard }, { path: 'libraries/display', type: AppType.Dashboard }, { path: 'libraries/metadata', type: AppType.Dashboard }, + { path: 'libraries/nfo', type: AppType.Dashboard }, { path: 'logs', type: AppType.Dashboard }, { path: 'logs/:file', page: 'logs/file', type: AppType.Dashboard }, { path: 'playback/resume', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index b690b45440..2af71b7473 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -37,13 +37,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'encodingsettings', view: 'encodingsettings.html' } - }, { - path: 'libraries/nfo', - pageProps: { - appType: AppType.Dashboard, - controller: 'metadatanfo', - view: 'metadatanfo.html' - } }, { path: 'plugins/catalog', pageProps: { diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx index 3c958bcb33..8da3f2453b 100644 --- a/src/apps/dashboard/routes/libraries/display.tsx +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -21,6 +21,8 @@ import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'rea import { ActionData } from 'types/actionData'; import { queryClient } from 'utils/query/queryClient'; +const CONFIG_KEY = 'metadata'; + export const action = async ({ request }: ActionFunctionArgs) => { const api = ServerConnections.getCurrentApi(); if (!api) throw new Error('No Api instance available'); @@ -43,13 +45,13 @@ export const action = async ({ request }: ActionFunctionArgs) => { .updateConfiguration({ serverConfiguration: config }); await getConfigurationApi(api) - .updateNamedConfiguration({ key: 'metadata', body: metadataConfig }); + .updateNamedConfiguration({ key: CONFIG_KEY, body: metadataConfig }); void queryClient.invalidateQueries({ queryKey: [ CONFIG_QUERY_KEY ] }); void queryClient.invalidateQueries({ - queryKey: [ NAMED_CONFIG_QUERY_KEY, 'metadata' ] + queryKey: [ NAMED_CONFIG_QUERY_KEY, CONFIG_KEY ] }); return { @@ -67,7 +69,7 @@ export const Component = () => { data: namedConfig, isPending: isNamedConfigPending, isError: isNamedConfigError - } = useNamedConfiguration('metadata'); + } = useNamedConfiguration(CONFIG_KEY); const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; diff --git a/src/apps/dashboard/routes/libraries/nfo.tsx b/src/apps/dashboard/routes/libraries/nfo.tsx new file mode 100644 index 0000000000..c0dff0f336 --- /dev/null +++ b/src/apps/dashboard/routes/libraries/nfo.tsx @@ -0,0 +1,197 @@ +import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; +import Alert from '@mui/material/Alert'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import FormControl from '@mui/material/FormControl'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import FormHelperText from '@mui/material/FormHelperText'; +import MenuItem from '@mui/material/MenuItem'; +import Stack from '@mui/material/Stack'; +import Switch from '@mui/material/Switch'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import Loading from 'components/loading/LoadingComponent'; +import Page from 'components/Page'; +import ServerConnections from 'components/ServerConnections'; +import SimpleAlert from 'components/SimpleAlert'; +import { QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration'; +import { useUsers } from 'hooks/useUsers'; +import globalize from 'lib/globalize'; +import React, { useCallback, useState } from 'react'; +import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; +import { ActionData } from 'types/actionData'; +import { queryClient } from 'utils/query/queryClient'; + +const CONFIG_KEY = 'xbmcmetadata'; + +interface NFOSettingsConfig { + UserId?: string; + EnableExtraThumbsDuplication?: boolean; + EnablePathSubstitution?: boolean; + ReleaseDateFormat?: string; + SaveImagePathsInNfo?: boolean; +}; + +export const action = async ({ request }: ActionFunctionArgs) => { + const api = ServerConnections.getCurrentApi(); + if (!api) throw new Error('No Api instance available'); + + const formData = await request.formData(); + const data = Object.fromEntries(formData); + + const newConfig: NFOSettingsConfig = { + UserId: data.UserId?.toString(), + ReleaseDateFormat: data.ReleaseDateFormat?.toString(), + SaveImagePathsInNfo: data.SaveImagePathsInNfo?.toString() === 'on', + EnablePathSubstitution: data.EnablePathSubstitution?.toString() === 'on', + EnableExtraThumbsDuplication: data.EnableExtraThumbsDuplication?.toString() === 'on' + }; + + await getConfigurationApi(api) + .updateNamedConfiguration({ key: CONFIG_KEY, body: newConfig }); + + void queryClient.invalidateQueries({ + queryKey: [QUERY_KEY, CONFIG_KEY] + }); + + return { + isSaved: true + }; +}; + +export const Component = () => { + const { + data: config, + isPending: isConfigPending, + isError: isConfigError + } = useNamedConfiguration(CONFIG_KEY); + const { + data: users, + isPending: isUsersPending, + isError: isUsersError + } = useUsers(); + const navigation = useNavigation(); + const actionData = useActionData() as ActionData | undefined; + const isSubmitting = navigation.state === 'submitting'; + const [isAlertOpen, setIsAlertOpen] = useState(false); + + const nfoConfig = config as NFOSettingsConfig; + + const onAlertClose = useCallback(() => { + setIsAlertOpen(false); + }, []); + + const onSubmit = useCallback(() => { + setIsAlertOpen(true); + }, []); + + if (isConfigPending || isUsersPending) { + return ; + } + + return ( + + + + {isConfigError || isUsersError ? ( + {globalize.translate('MetadataNfoLoadError')} + ) : ( +
+ + {!isSubmitting && actionData?.isSaved && ( + + {globalize.translate('SettingsSaved')} + + )} + {globalize.translate('TabNfoSettings')} + {globalize.translate('HeaderKodiMetadataHelp')} + + + {globalize.translate('None')} + {users.map(user => + {user.Name} + )} + + + + yyyy-MM-dd + + + + + } + label={globalize.translate('LabelKodiMetadataSaveImagePaths')} + /> + {globalize.translate('LabelKodiMetadataSaveImagePathsHelp')} + + + + + } + label={globalize.translate('LabelKodiMetadataEnablePathSubstitution')} + /> + {globalize.translate('LabelKodiMetadataEnablePathSubstitutionHelp')} + + + + + } + label={globalize.translate('LabelKodiMetadataEnableExtraThumbs')} + /> + {globalize.translate('LabelKodiMetadataEnableExtraThumbsHelp')} + + + + +
+ )} +
+
+ ); +}; + +Component.displayName = 'NFOSettingsPage'; diff --git a/src/components/SimpleAlert.tsx b/src/components/SimpleAlert.tsx new file mode 100644 index 0000000000..c67465211f --- /dev/null +++ b/src/components/SimpleAlert.tsx @@ -0,0 +1,36 @@ +import Button from '@mui/material/Button'; +import Dialog, { type DialogProps } from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogContentText from '@mui/material/DialogContentText'; +import DialogTitle from '@mui/material/DialogTitle'; +import globalize from 'lib/globalize'; +import React from 'react'; + +interface SimpleAlertDialog extends DialogProps { + title: string; + text: string; + onClose: () => void +}; + +const SimpleAlert = ({ open, title, text, onClose }: SimpleAlertDialog) => { + return ( + + + {title} + + + + {text} + + + + + + + ); +}; + +export default SimpleAlert; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 8007057b71..71de76a2ab 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1174,6 +1174,7 @@ "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders.", "MetadataImagesLoadError": "Failed to load metadata settings", "MetadataManager": "Metadata Manager", + "MetadataNfoLoadError": "Failed to load metadata NFO settings", "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", "MinutesAfter": "minutes after", From 21db47d7c8d2edb85c026333e6dc8c17fc70d38d Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Wed, 5 Mar 2025 10:29:37 +0000 Subject: [PATCH 216/235] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 60 +++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index 9df87d678a..8b263a77ca 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -281,8 +281,8 @@ "ValueOneSeries": "1 серыя", "ValueSeriesCount": "{0} серый", "Writer": "Сцэнарыст", - "HeaderSelectFallbackFontPath": "Выберыце шлях да папкі рэзервовага шрыфта", - "LabelFallbackFontPath": "Шлях да папкі рэзервовага шрыфта", + "HeaderSelectFallbackFontPath": "Выберыце шлях да тэчкі з рэзервовымі шрыфтамі", + "LabelFallbackFontPath": "Шлях да тэчкі з рэзервовымі шрыфтамі", "AspectRatioFill": "Запоўніць", "LabelRemuxingInfo": "Інфармацыя аб рэмуксаванні", "EnableGamepadHelp": "Праслухоўванне ўводу ад любых падлучаных кантролераў. (Патрабуецца: Рэжым адлюстравання \"ТБ\")", @@ -487,7 +487,7 @@ "PinCodeResetComplete": "Easy PIN-код быў скінуты.", "PlayAllFromHere": "Прайграць усё адсюль", "PlayFromBeginning": "Прайграць з пачатку", - "PleaseAddAtLeastOneFolder": "Калі ласка, дадайце хаця б адну папку ў гэту бібліятэку, націснуўшы кнопку \"+\" у раздзеле \"Папкі\".", + "PleaseAddAtLeastOneFolder": "Калі ласка, дадайце хаця б адну тэчку ў гэтую бібліятэку, націснуўшы кнопку \"+\" у раздзеле \"Тэчкі\".", "PleaseSelectTwoItems": "Калі ласка, абярыце як мінімум два пункты.", "Poster": "Плакат", "PreferEmbeddedTitlesOverFileNames": "Аддавайце перавагу ўбудаваным назвам перад назвамі файлаў", @@ -624,7 +624,7 @@ "HeaderParentalRatings": "Бацькоўскі рэйтынг", "HeaderPhotoAlbums": "Фотаальбомы", "HeaderPlayAll": "Прайграваць усе", - "HeaderPlayback": "Прайграванне мультымедыя", + "HeaderPlayback": "Праіграванне медыяфайлаў", "HeaderPlayOn": "Прайграваць далей", "HeaderPleaseSignIn": "Калі ласка, увайдзіце", "HeaderPluginInstallation": "Ўстаноўка плагіна", @@ -649,7 +649,7 @@ "HeaderSeriesStatus": "Статус серыі", "HeaderServerAddressSettings": "Налады адраса сервера", "HeaderServerSettings": "Налады сервера", - "HeaderSetupLibrary": "Наладзьце свае медыятэкі", + "HeaderSetupLibrary": "Наладзіць бібліятэкі медыяфайлаў", "HeaderSubtitleAppearance": "Знешні выгляд субтытраў", "HeaderSubtitleDownloads": "Спампоўка субтытраў", "HeaderSubtitleProfile": "Профіль субтытраў", @@ -887,7 +887,7 @@ "EnablePlugin": "Уключыць", "DisableCustomCss": "Адключыць карыстальніцкі код CSS, прадастаўлены серверам", "DisablePlugin": "Адключыць", - "DisplayInOtherHomeScreenSections": "Адлюстроўваць у раздзелах галоўнага экрана, такіх як 'Нядаўна даданыя медыяфайлы' і 'Працягнуць прагляд'", + "DisplayInOtherHomeScreenSections": "Адлюстроўваць у раздзелах галоўнага экрана, такіх як \"Нядаўна даданыя медыяфайлы\" і \"Працягнуць прагляд\"", "DisplayMissingEpisodesWithinSeasons": "Паказаць адсутныя серыі ў сезону", "DrmChannelsNotImported": "Каналы з DRM не будуць імпартаваны.", "DropShadow": "Цень", @@ -925,7 +925,7 @@ "HeaderDevices": "Прылады", "HeaderEnabledFields": "Уключаныя палі", "HeaderError": "Памылка", - "HeaderMyMedia": "Мае медыя", + "HeaderMyMedia": "Мае медыяфайлы", "HeaderOnNow": "У эфіры", "HeaderPassword": "Пароль", "HeaderRemoteAccessSettings": "Налады аддаленага доступу", @@ -975,7 +975,7 @@ "LabelAutomaticDiscovery": "Уключыць аўтаматычнае выяўленне", "MessageAreYouSureDeleteSubtitles": "Вы ўпэўнены, што хочаце выдаліць гэты файл субтытраў?", "MessageBrowsePluginCatalog": "Праглядзіце наш каталог плагінаў, каб убачыць даступныя плагіны.", - "MessageChangeRecordingPath": "Змена папкі запісу не прывядзе да пераносу існуючых запісаў са старога месца ў новае. Пры жаданні вам трэба будзе перамясціць іх уручную.", + "MessageChangeRecordingPath": "Змена тэчкі для запісаў не пераносіць існуючыя запісы са старога месца захоўвання на новае. Калі неабходна, вам трэба будзе перанесці іх уручную.", "MessageConfirmDeleteGuideProvider": "Вы ўпэўнены, што хочаце выдаліць гэтага пастаўшчыка даведніка?", "MessageConfirmProfileDeletion": "Вы ўпэўнены, што хочаце выдаліць гэты профіль?", "MessageConfirmRevokeApiKey": "Вы ўпэўнены, што хочаце адклікаць гэты ключ API? Злучэнне прыкладання з гэтым серверам будзе раптоўна спынена.", @@ -1096,7 +1096,7 @@ "LabelEnableDlnaServer": "Уключыць сервер DLNA", "LabelEnableIP4": "Уключыць IPv4", "NoNewDevicesFound": "Новыя прылады не знойдзены. Каб дадаць новы цюнэр, зачыніце гэтае дыялогавае акно і ўвядзіце інфармацыю аб прыладзе ўручную.", - "NumLocationsValue": "{0} папак", + "NumLocationsValue": "{0} тэчак", "OneChannel": "Адзін канал", "LabelEncoderPreset": "Папярэдні набор кадавання", "OnlyForcedSubtitlesHelp": "Будуць загружаныя толькі субтытры, пазначаныя як абавязковыя.", @@ -1118,10 +1118,10 @@ "OptionAllowVideoPlaybackTranscoding": "Дазволіць прайграванне відэа, якое патрабуе перакадзіравання", "LabelMaxParentalRating": "Максімальна дазволены бацькоўскі рэйтынг", "OptionAllUsers": "Усе карыстальнікі", - "OptionAutomaticallyGroupSeries": "Аўтаматычна аб'ядноўваць серыі, якія размеркаваны па некалькіх папках", + "OptionAutomaticallyGroupSeries": "Аўтаматычна аб'ядноўваць серыялы, якія размешчаны ў некалькіх тэчках", "LabelMaxStreamingBitrate": "Максімальная якасць трансляцыі", "LabelMetadataDownloadLanguage": "Пераважная мова для спампоўкі", - "OptionAutomaticallyGroupSeriesHelp": "Серыі, якія размешчаны ў некалькіх папках у гэтай бібліятэцы, будуць аўтаматычна аб'яднаны ў адну серыю.", + "OptionAutomaticallyGroupSeriesHelp": "Серыялы, якія размешчаны ў некалькіх тэчках у гэтай бібліятэцы, будуць аўтаматычна аб'яднаны ў адзін серыял.", "LabelMinResumeDurationHelp": "Самая кароткая працягласць відэа ў секундах, якая захавае месца прайгравання і дазволіць вам аднавіць.", "OptionDaily": "Штодня", "LabelModelDescription": "Апісанне мадэлі", @@ -1132,7 +1132,7 @@ "OptionDateAddedImportTime": "Выкарыстоўвайце адсканіраваную дату ў бібліятэцы", "OptionDisableUser": "Адключыць гэтага карыстальніка", "OptionDisableUserHelp": "Сервер не дазволіць ніякіх злучэнняў ад гэтага карыстальніка. Існуючыя сувязі будуць раптоўна спынены.", - "OptionDisplayFolderView": "Адлюстраванне прагляду папак, каб паказаць простыя папкі мультымедыя", + "OptionDisplayFolderView": "Адлюстраваць прагляд тэчак, каб паказваць звычайныя тэчкі з медыяфайламі", "LabelOverview": "Агляд", "LabelPreferredSubtitleLanguage": "Пажаданая мова субтытраў", "LabelProtocolInfo": "Інфармацыя аб пратаколе", @@ -1143,7 +1143,7 @@ "LabelServerNameHelp": "Гэта імя будзе выкарыстоўвацца для ідэнтыфікацыі сервера і па змаўчанні будзе імем хоста сервера.", "LabelSonyAggregationFlags": "Сцягі агрэгацыі Sony", "LabelSportsCategories": "Спартыўныя катэгорыі", - "OptionDisplayFolderViewHelp": "Адлюстроўвайце папкі разам з іншымі медыятэкамі. Гэта можа спатрэбіцца, калі вы жадаеце мець просты выгляд тэчак.", + "OptionDisplayFolderViewHelp": "Адлюстраваць тэчкі побач з іншымі бібліятэкамі медыяфайлаў. Гэта можа быць карысна, калі вы хочаце мець звычайны прагляд тэчак.", "LabelSyncPlayAccessNone": "Адключана для гэтага карыстальніка", "LabelSyncPlayHaltPlaybackDescription": "І ігнаруйце бягучыя абнаўленні спісаў прайгравання", "OptionEnableForAllTuners": "Уключыць для ўсіх цюнэраў", @@ -1261,7 +1261,7 @@ "Save": "Захаваць", "SaveChanges": "Захавайце змены", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Выкарыстоўвайце інфармацыю аб серыі з убудаваных метаданых, калі яны ёсць.", - "SaveSubtitlesIntoMediaFolders": "Захаваць субтытры ў папках мультымедыя", + "SaveSubtitlesIntoMediaFolders": "Захоўваць субтытры ў тэчкі з медыяфайламі", "AllowEmbeddedSubtitlesAllowAllOption": "Дазволіць усе", "AllowEmbeddedSubtitlesAllowImageOption": "Дазволіць малюнак", "Producer": "Прадзюсер", @@ -1347,7 +1347,7 @@ "XmlTvSportsCategoriesHelp": "Праграмы з гэтымі катэгорыямі будуць адлюстроўвацца як спартыўныя праграмы. Раздзяляйце некалькі знакамі '|'.", "Yes": "Так", "Yesterday": "Учора", - "HeaderSelectFallbackFontPathHelp": "Праглядзіце або ўвядзіце шлях да папкі рэзервовага шрыфта, які будзе выкарыстоўвацца для візуалізацыі субтытраў ASS/SSA.", + "HeaderSelectFallbackFontPathHelp": "Абярыце або ўвядзіце шлях да тэчкі з рэзервовымі шрыфтамі для адлюстравання субтытраў у фармаце ASS/SSA.", "LabelFallbackFontPathHelp": "Гэтыя шрыфты выкарыстоўваюцца некаторымі кліентамі для адлюстравання субтытраў. Для атрымання дадатковай інфармацыі звярніцеся да дакументацыі.", "Remuxing": "Рэмуксаванне", "RemuxHelp1": "Мультымедыя знаходзіцца ў несумяшчальным файлавым кантэйнеры (MKV, AVI, WMV і г.д.), але як відэапаток, так і аўдыяпаток сумяшчальныя з прыладай. Мультымедыя будзе перапакоўвацца без страт на хаду перад адпраўкай на прыладу.", @@ -1409,7 +1409,7 @@ "ConfirmDeletion": "Пацвердзіце выдаленне", "Images": "Выявы", "HeaderDebugging": "Адладка і трасіроўка", - "HeaderMyMediaSmall": "Мае мультымедыя (маленькія)", + "HeaderMyMediaSmall": "Мае медыяфайлы (маленькія)", "General": "Агульны", "VideoProfileNotSupported": "Профіль відэакодэка не падтрымліваецца", "AudioBitDepthNotSupported": "Разраднасць аўдыя не падтрымліваецца", @@ -1435,8 +1435,8 @@ "Studios": "Студыі", "Subtitle": "Падзагаловак", "SubtitleVerticalPositionHelp": "Нумар радка, дзе з'яўляецца тэкст. Дадатныя лічбы паказваюць зверху ўніз. Адмоўныя лічбы паказваюць знізу ўверх.", - "HideWatchedContentFromLatestMedia": "Схаваць прагледжанае змесціва з \"Нядаўна дададзеных медыя\"", - "MessageRenameMediaFolder": "Перайменаванне медыятэкі прывядзе да страты ўсіх метададзеных, будзьце асцярожныя.", + "HideWatchedContentFromLatestMedia": "Схаваць прагледжаны змест у \"Нядаўна дададзеныя медыяфайлы\"", + "MessageRenameMediaFolder": "Перайменаванне бібліятэкі медыяфайлаў прывядзе да страты ўсіх метададзеных, будзьце асцярожныя.", "LabelMaxDaysForNextUpHelp": "Усталюйце максімальную колькасць дзён, на працягу якіх серыя павінна заставацца ў спісе \"Наступны\", без прагляду.", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Наступныя месцы захоўвання медыяфайлаў будуць выдалены з вашай бібліятэкі", "Metadata": "Метададзеныя", @@ -1655,7 +1655,7 @@ "Upload": "Загрузіць", "ValueAlbumCount": "{0} альбомаў", "ValueAudioCodec": "Аўдыякодэк: {0}", - "WriteAccessRequired": "Jellyfin патрабуе доступу для запісу ў гэту папку. Забяспечце доступ для запісу і паўтарыце спробу.", + "WriteAccessRequired": "Jellyfin патрабуе правы на запіс у гэтую тэчку. Калі ласка, пераканайцеся, што правы на запіс уключаны, і паспрабуйце яшчэ раз.", "Writers": "Сцэнарысты", "XmlDocumentAttributeListHelp": "Гэтыя атрыбуты прымяняюцца да каранёвага элемента кожнага адказу XML.", "XmlTvKidsCategoriesHelp": "Праграмы з гэтымі катэгорыямі будуць адлюстроўвацца як праграмы для дзяцей. Раздзяляйце некалькі знакамі '|'.", @@ -1754,7 +1754,7 @@ "ForeignPartsOnly": "Толькі прымусовыя/замежныя дэталі", "HearingImpairedShort": "HI/SDH", "HeaderGuestCast": "Запрошаныя зоркі", - "LabelMediaDetails": "Інфармацыя аб медыя", + "LabelMediaDetails": "Падрабязнасці пра медыяфайл", "LogLevel.Debug": "Наладка", "LogLevel.Warning": "Папярэджанне", "LogLevel.Error": "Памылка", @@ -1845,9 +1845,9 @@ "SelectPreferredTranscodeVideoCodecHelp": "Выберыце пераважны відэакодэк для перакадзіравання. Калі пераважны кодэк не падтрымліваецца, сервер будзе выкарыстоўваць наступны найлепшы даступны кодэк.", "SelectPreferredTranscodeVideoAudioCodecHelp": "Выберыце пераважны аўдыякодэк для перакадзіравання відэакантэнту. Калі пераважны кодэк не падтрымліваецца, сервер будзе выкарыстоўваць наступны лепшы даступны кодэк.", "ViewLyrics": "Прагляд тэкстаў песень", - "SaveLyricsIntoMediaFoldersHelp": "Захоўванне тэкстаў песен побач з аўдыяфайламі дазволіць ім лягчэй кіраваць.", + "SaveLyricsIntoMediaFoldersHelp": "Захаванне тэкстаў песень побач з аўдыяфайламі дазволіць лягчэй імі кіраваць.", "Translator": "Перакладчык", - "SaveLyricsIntoMediaFolders": "Захоўвайце тэксты песень у папках мультымедыі", + "SaveLyricsIntoMediaFolders": "Захоўваць тэксты песень у тэчках з медыяфайламі", "LabelEncodingFormatOptions": "Параметры фармату кадавання", "AllowVideoToolboxTonemappingHelp": "Адлюстраванне тонаў з апаратным паскарэннем забяспечваецца VideoToolbox. Ён працуе з большасцю фарматаў HDR, уключаючы HDR10, HDR10+ і HLG, але не працуе з Dolby Vision Profile 5. Ён мае больш высокі прыярытэт, чым іншыя рэалізацыі Metal.", "EnableVideoToolboxTonemapping": "Уключыць тонавае адлюстраванне VideoToolbox", @@ -1925,7 +1925,7 @@ "AlwaysBurnInSubtitleWhenTranscoding": "Заўсёды запісваць субтытры пры перакадзіраванні", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Запісваць усе субтытры пры запуску перакадзіравання. Гэта забяспечвае сінхранізацыю субтытраў пасля перакадзіравання за кошт зніжэння хуткасці перакадзіравання.", "AlwaysRemuxMp3AudioFilesHelp": "Калі ў вас ёсць файлы, для якіх ваш браўзер няправільна разлічвае пазнакі часу, уключыце гэта ў якасці абыходнага шляху.", - "HeaderMediaSegmentActions": "Дзеянні з медыясегментамі", + "HeaderMediaSegmentActions": "Дзеянні з сегментамі медыяфайлаў", "MoveToBottom": "Перайсці ўніз", "VideoCodecTagNotSupported": "Метка відэакодэка не падтрымліваецца", "MessageSplitVersionsError": "Падчас падзелу версій адбылася памылка", @@ -1943,5 +1943,17 @@ "PlaylistError.UpdateFailed": "Памылка абнаўлення спіса прайгравання", "PreferNonstandardArtistsTag": "Аддаваць перавагу метцы ARTISTS, калі яна ёсць", "LyricDownloadersHelp": "Уключыце і расстаўце вашых пераважных спампоўшчыкаў тэкстаў песень у парадку прыярытэту.", - "LabelLyricDownloaders": "Спампоўшчыкі тэкстаў песень" + "LabelLyricDownloaders": "Спампоўшчыкі тэкстаў песень", + "MediaSegmentType.Recap": "Рэзюмэ", + "MediaSegmentAction.AskToSkip": "Запытаць пра пропуск", + "MediaSegmentType.Intro": "Уводзіны", + "LabelMediaSegmentsType": "{0} сегментаў", + "MediaSegmentAction.Skip": "Прапусціць", + "MediaSegmentSkipPrompt": "Прапусціць {0}", + "MediaSegmentType.Outro": "Заключэнне", + "MediaSegmentType.Preview": "Прадпрагляд", + "LabelMediaSegmentProviders": "Пастаўшчыкі сегментаў медыяфайлаў", + "MediaSegmentProvidersHelp": "Уключыце і расстаўце вашых пераважных пастаўшчыкоў сегментаў медыяфайлаў у парадку прыярытэту.", + "MediaSegmentType.Commercial": "Рэклама", + "MediaSegmentAction.None": "Няма" } From e79467bc055e838dfa84ea5d2ebdf8742fe086f4 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Wed, 5 Mar 2025 10:40:42 +0000 Subject: [PATCH 217/235] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 3864a4b5f2..d69f0d6f68 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -2003,5 +2003,7 @@ "DeleteServerConfirmation": "Bạn có chắc bạn muốn xóa máy chủ này không?", "CopyLogSuccess": "Sao chép nội dung nhật ký thành công.", "Retry": "Thử lại", - "LogLoadFailure": "Không tải được tệp nhật ký. Nó vẫn có thể được viết tích cực." + "LogLoadFailure": "Không tải được tệp nhật ký. Nó vẫn có thể được viết tích cực.", + "DisplayLoadError": "Đã xảy ra lỗi trong khi tải dữ liệu cấu hình hiển thị.", + "MetadataImagesLoadError": "Không tải được cài đặt dữ liệu mô tả" } From 917994ce37b46fa89788375210719cd8665c0eb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Wed, 5 Mar 2025 14:57:53 +0000 Subject: [PATCH 218/235] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index b56ab47807..e3df1412bf 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -2006,5 +2006,7 @@ "LibraryNameInvalid": "Název knihovny nesmí být prázdný.", "CopyLogSuccess": "Obsah logu byl úspěšně zkopírován.", "Retry": "Opakovat", - "LogLoadFailure": "Načtení souboru logu se nezdařilo. Možná se do něj právě zapisuje." + "LogLoadFailure": "Načtení souboru logu se nezdařilo. Možná se do něj právě zapisuje.", + "DisplayLoadError": "Načítání konfiguračních dat zobrazení se nezdařilo.", + "MetadataImagesLoadError": "Načítání nastavení metadat se nezdařilo" } From 9dc9aadf98159bee4743b16fee3109da11e89b7c Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 6 Mar 2025 04:29:08 +0300 Subject: [PATCH 219/235] Make title optional for alert --- src/apps/dashboard/routes/libraries/nfo.tsx | 1 - src/components/SimpleAlert.tsx | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/apps/dashboard/routes/libraries/nfo.tsx b/src/apps/dashboard/routes/libraries/nfo.tsx index c0dff0f336..e7025f07e5 100644 --- a/src/apps/dashboard/routes/libraries/nfo.tsx +++ b/src/apps/dashboard/routes/libraries/nfo.tsx @@ -97,7 +97,6 @@ export const Component = () => { > diff --git a/src/components/SimpleAlert.tsx b/src/components/SimpleAlert.tsx index c67465211f..5322662d7d 100644 --- a/src/components/SimpleAlert.tsx +++ b/src/components/SimpleAlert.tsx @@ -8,7 +8,7 @@ import globalize from 'lib/globalize'; import React from 'react'; interface SimpleAlertDialog extends DialogProps { - title: string; + title?: string; text: string; onClose: () => void }; @@ -16,9 +16,11 @@ interface SimpleAlertDialog extends DialogProps { const SimpleAlert = ({ open, title, text, onClose }: SimpleAlertDialog) => { return ( - - {title} - + {title && ( + + {title} + + )} {text} From 730d79636fd66db6b41d91b210a216166f6500d4 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 6 Mar 2025 04:31:31 +0300 Subject: [PATCH 220/235] Remove release date format option --- src/apps/dashboard/routes/libraries/nfo.tsx | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/apps/dashboard/routes/libraries/nfo.tsx b/src/apps/dashboard/routes/libraries/nfo.tsx index e7025f07e5..661bc6dad4 100644 --- a/src/apps/dashboard/routes/libraries/nfo.tsx +++ b/src/apps/dashboard/routes/libraries/nfo.tsx @@ -41,7 +41,7 @@ export const action = async ({ request }: ActionFunctionArgs) => { const newConfig: NFOSettingsConfig = { UserId: data.UserId?.toString(), - ReleaseDateFormat: data.ReleaseDateFormat?.toString(), + ReleaseDateFormat: 'yyyy-MM-dd', SaveImagePathsInNfo: data.SaveImagePathsInNfo?.toString() === 'on', EnablePathSubstitution: data.EnablePathSubstitution?.toString() === 'on', EnableExtraThumbsDuplication: data.EnableExtraThumbsDuplication?.toString() === 'on' @@ -133,16 +133,6 @@ export const Component = () => { )}
- - yyyy-MM-dd - - Date: Thu, 6 Mar 2025 12:08:07 +0000 Subject: [PATCH 221/235] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 9a1f660d06..7603f6337d 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1253,7 +1253,7 @@ "AnyLanguage": "Edozein hizkuntza", "AlwaysPlaySubtitlesHelp": "Hizkuntza-lehentasunarekin bat datozen azpitituluak kargatu egingo dira, audio-hizkuntza edozein dela ere.", "AlwaysPlaySubtitles": "Beti erakutsi azpitituluak", - "AllowTonemappingHelp": "Tonuen mapaketak HDR bideo baten maila dinamikoa SDR bihur dezake irudian xehetasunak eta koloreak mantentzen diren bitartean; beraz, garrantzitsua da jatorrizko eszena irudikatzeko. Une honetan txertatutako HDR10 edo HLG metadatuekin bideoak transkodetzen direnean bakarrik funtzionatzen du. Erreprodukzioa arina ez bada edo huts egiten badu, kontuan hartu dagokion hardware bidezko deskodegailua desaktibatu behar dela.", + "AllowTonemappingHelp": "Tonu-mapaketak bideo baten barruti dinamikoa eraldatu dezake HDRtik SDR-ra, jatorrizko eszena irudikatzeko informazio oso garrantzitsuak diren irudien xehetasunak eta koloreak mantenduz. Gaur egun 10bit HDR10, HLG eta DoVi bideoekin bakarrik funtzionatzen du. Honek dagokion GPGPU exekuzio-denbora behar du.", "AllowRemoteAccessHelp": "Aktibatuta ez badago, urruneko konexio guztiak blokeatu egingo dira.", "AllowRemoteAccess": "Baimendu zerbitzari honetarako urrutiko konexioak", "AllowOnTheFlySubtitleExtractionHelp": "Bezeroa bateragarria denean, azpitituluak erreprodukzioan zehar atera daitezke, bideoa ez bihurtzeko. Hala ere, eta zerbitzari batzuetan, honek denbora asko behar izan dezake eta erreprodukzioak ebakiak izan ditzake prozesuan zehar. Aukera hau desgaitzen du azpitituluak zuzenean bideoan grabatzeko, bezeroarekin berez bateragarriak ez direnean.", @@ -1639,5 +1639,7 @@ "LabelSegmentKeepSeconds": "Segmentuak gordetzeko denbora..", "AirPlay": "AirPlay", "AllowContentWithTagsHelp": "Erakutsi zehaztutako etiketetik gutxienez bat duen serieen media.", - "AllowSubtitleManagement": "Baimendu erabiltzaile honek azpitituluak editatzea" + "AllowSubtitleManagement": "Baimendu erabiltzaile honek azpitituluak editatzea", + "SelectAudioNormalizationHelp": "Pista irabazia - pista bakoitzaren bolumena doitzen du ozentasun berarekin erreproduzitu daitezen. Album irabazia - pista bakoitzaren bolumena doitzen du album batean soilik, albumaren eremu dinamikoa mantentzeko. \"Itzalita\" eta beste aukeren artean aldatzeak uneko erreproduzkzioa berrabiaraztea behar du.", + "LabelProcessPriorityHelp": "Handiago edo txikiago ezartzeak PUZ-ak ffmpeg trickplay sortzeko prozesua beste prozesu batzuekin alderatuta nola lehenesten duen zehaztuko du. Trickplay irudiak sortzen dituzun bitartean moteltzea nabaritzen baduzu, baina ez duzu sorpena erabat gelditu nahi, saiatu hau eta hari kopurua ere jaisten." } From 2129b7a67a04f37b1f2870cf76fe680b98601267 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Thu, 6 Mar 2025 12:14:02 +0000 Subject: [PATCH 222/235] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 7603f6337d..002c1411c3 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1641,5 +1641,6 @@ "AllowContentWithTagsHelp": "Erakutsi zehaztutako etiketetik gutxienez bat duen serieen media.", "AllowSubtitleManagement": "Baimendu erabiltzaile honek azpitituluak editatzea", "SelectAudioNormalizationHelp": "Pista irabazia - pista bakoitzaren bolumena doitzen du ozentasun berarekin erreproduzitu daitezen. Album irabazia - pista bakoitzaren bolumena doitzen du album batean soilik, albumaren eremu dinamikoa mantentzeko. \"Itzalita\" eta beste aukeren artean aldatzeak uneko erreproduzkzioa berrabiaraztea behar du.", - "LabelProcessPriorityHelp": "Handiago edo txikiago ezartzeak PUZ-ak ffmpeg trickplay sortzeko prozesua beste prozesu batzuekin alderatuta nola lehenesten duen zehaztuko du. Trickplay irudiak sortzen dituzun bitartean moteltzea nabaritzen baduzu, baina ez duzu sorpena erabat gelditu nahi, saiatu hau eta hari kopurua ere jaisten." + "LabelProcessPriorityHelp": "Handiago edo txikiago ezartzeak PUZ-ak ffmpeg trickplay sortzeko prozesua beste prozesu batzuekin alderatuta nola lehenesten duen zehaztuko du. Trickplay irudiak sortzen dituzun bitartean moteltzea nabaritzen baduzu, baina ez duzu sorpena erabat gelditu nahi, saiatu hau eta hari kopurua ere jaisten.", + "LibraryScanFanoutConcurrencyHelp": "Liburutegiko azterketarako gehienezko zeregin paraleloen kopurua. 0 ezartzean, zure sistemako nukleoen kopuruan oinarritutako muga bat aukeratuko da. KONTUZ: Hau altuegi ezartzeak arazoak sor ditzake sareko fitxategi-sistemekin; arazorik baduzu, murriztu zenbaki hau." } From d24ce4ffa9397bd744effbab51b64dfb6a6e6bfb Mon Sep 17 00:00:00 2001 From: DyingSlacker <2391773977@outlook.com> Date: Thu, 6 Mar 2025 14:23:15 +0000 Subject: [PATCH 223/235] 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 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index bdde9c32e6..90b5c0e4d6 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -2003,5 +2003,9 @@ "LabelDevice": "设备", "LastActive": "上次活跃", "DeleteServerConfirmation": "您确定要删除此服务器吗?", - "LibraryNameInvalid": "媒体库名称不能为空。" + "LibraryNameInvalid": "媒体库名称不能为空。", + "CopyLogSuccess": "已成功复制日志内容。", + "Retry": "重试", + "DisplayLoadError": "加载显示配置时发生错误。", + "MetadataImagesLoadError": "加载元数据设置时发生错误" } From 7691482a35fe023c4de989fdf6ab95d06a212ba5 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Thu, 6 Mar 2025 15:08:04 +0000 Subject: [PATCH 224/235] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 002c1411c3..750f7b0819 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1642,5 +1642,7 @@ "AllowSubtitleManagement": "Baimendu erabiltzaile honek azpitituluak editatzea", "SelectAudioNormalizationHelp": "Pista irabazia - pista bakoitzaren bolumena doitzen du ozentasun berarekin erreproduzitu daitezen. Album irabazia - pista bakoitzaren bolumena doitzen du album batean soilik, albumaren eremu dinamikoa mantentzeko. \"Itzalita\" eta beste aukeren artean aldatzeak uneko erreproduzkzioa berrabiaraztea behar du.", "LabelProcessPriorityHelp": "Handiago edo txikiago ezartzeak PUZ-ak ffmpeg trickplay sortzeko prozesua beste prozesu batzuekin alderatuta nola lehenesten duen zehaztuko du. Trickplay irudiak sortzen dituzun bitartean moteltzea nabaritzen baduzu, baina ez duzu sorpena erabat gelditu nahi, saiatu hau eta hari kopurua ere jaisten.", - "LibraryScanFanoutConcurrencyHelp": "Liburutegiko azterketarako gehienezko zeregin paraleloen kopurua. 0 ezartzean, zure sistemako nukleoen kopuruan oinarritutako muga bat aukeratuko da. KONTUZ: Hau altuegi ezartzeak arazoak sor ditzake sareko fitxategi-sistemekin; arazorik baduzu, murriztu zenbaki hau." + "LibraryScanFanoutConcurrencyHelp": "Liburutegiko azterketarako gehienezko zeregin paraleloen kopurua. 0 ezartzean, zure sistemako nukleoen kopuruan oinarritutako muga bat aukeratuko da. KONTUZ: Hau altuegi ezartzeak arazoak sor ditzake sareko fitxategi-sistemekin; arazorik baduzu, murriztu zenbaki hau.", + "LabelQsvDeviceHelp": "Zehaztu Intel QSVrako gailua GPU sistema multi-GPU batean. Linuxen, hau errenderizazio nodoa da adib. /dev/dri/renderD128. Windowsen, hau gailuaren indizea 0tik aurrera da. Utzi zuri zer egiten ari zaren jakin ezean.", + "AllowVideoToolboxTonemappingHelp": "VideoToolbox-ek emandako hardware bidezko tonu-mapatzea. HDR formatu gehienekin funtzionatzen du, HDR10, HDR10 + eta HLG barne, baina ez du Dolby Vision 5. profilarekin funtzionatzen. Honek lehentasun handiagoa du beste Metal-eko inplementazioarekin alderatuta." } From c8a2c15f65e28c4764de0b0c89f4f7686d54f881 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:21:22 +0000 Subject: [PATCH 225/235] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 635dd0b1d5..3b2439761c 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -98,7 +98,7 @@ "ColorPrimaries": "Primaire kleuren", "ColorSpace": "Kleurbereik", "ColorTransfer": "Kleuroverdracht", - "CommunityRating": "Beoordeling gemeenschap", + "CommunityRating": "Beoordeling publiek", "Composer": "Componist", "ConfigureDateAdded": "Stel in hoe de metadata voor 'Datum toegevoegd' wordt bepaald in Controlepaneel > Bibliotheken > Weergave", "ConfirmDeleteImage": "Afbeelding verwijderen?", @@ -430,7 +430,7 @@ "LabelCertificatePasswordHelp": "Als je certificaat een wachtwoord vereist, vul het dan hier in.", "LabelChannels": "Kanalen", "LabelCollection": "Collectie", - "LabelCommunityRating": "Beoordeling gemeenschap", + "LabelCommunityRating": "Beoordeling publiek", "LabelContentType": "Inhoudstype", "LabelCountry": "Land/regio", "LabelCriticRating": "Beoordeling critici", @@ -821,7 +821,7 @@ "OptionAutomaticallyGroupSeries": "Automatisch series samenvoegen die over meerdere mappen zijn verspreid", "OptionAutomaticallyGroupSeriesHelp": "Series die verspreid zijn over meerdere mappen binnen deze bibliotheek worden automatisch samengevoegd tot één serie.", "OptionBluray": "BD", - "OptionCommunityRating": "Beoordeling gemeenschap", + "OptionCommunityRating": "Beoordeling publiek", "OptionCriticRating": "Beoordeling critici", "OptionCustomUsers": "Aangepast", "OptionDaily": "Dagelijks", @@ -2007,5 +2007,6 @@ "Retry": "Opnieuw proberen", "LogLoadFailure": "Laden van logboekbestand mislukt. Mogelijk wordt er nog actief naar geschreven.", "DisplayLoadError": "Er is een fout opgetreden bij het laden van de weergaveconfiguratiegegevens.", - "MetadataImagesLoadError": "Laden van metadata-instellingen mislukt" + "MetadataImagesLoadError": "Laden van metadata-instellingen mislukt", + "MetadataNfoLoadError": "Laden van metadata-NFO-instellingen mislukt" } From 8cc0be500a51ff52e48542829da640eeae25c9bc Mon Sep 17 00:00:00 2001 From: Kityn Date: Thu, 6 Mar 2025 23:00:20 +0000 Subject: [PATCH 226/235] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 5d5fde498e..af9c5d7263 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2008,5 +2008,6 @@ "Retry": "Ponów", "LogLoadFailure": "Nie udało się załadować pliku dziennika. Nadal może być aktywnie zapisywany.", "DisplayLoadError": "Wystąpił błąd podczas ładowania danych konfiguracji wyświetlania.", - "MetadataImagesLoadError": "Nie udało się załadować ustawień metadanych" + "MetadataImagesLoadError": "Nie udało się załadować ustawień metadanych", + "MetadataNfoLoadError": "Nie udało się załadować ustawień metadanych NFO" } From 2992c0073486a0c8ae5a681bc4282d2ff61b471a Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Fri, 7 Mar 2025 09:56:01 +0000 Subject: [PATCH 227/235] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 92124b3a5f..da88f0f4cf 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -2001,5 +2001,6 @@ "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio.", "CopyLogSuccess": "Conteúdos do registo copiados com sucesso.", "Retry": "Tentar novamente", - "LogLoadFailure": "Falha ao carregar o ficheiro de registos. É possível que atualmente esteja a ser escrito." + "LogLoadFailure": "Falha ao carregar o ficheiro de registos. É possível que atualmente esteja a ser escrito.", + "MetadataNfoLoadError": "Falha ao carregar as definições de metadados NFO" } From 7b88dd6bf5132bb859d681ba7c9e034ea63edcd3 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Fri, 7 Mar 2025 08:50:13 +0000 Subject: [PATCH 228/235] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index d69f0d6f68..3d72b487fe 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -2005,5 +2005,6 @@ "Retry": "Thử lại", "LogLoadFailure": "Không tải được tệp nhật ký. Nó vẫn có thể được viết tích cực.", "DisplayLoadError": "Đã xảy ra lỗi trong khi tải dữ liệu cấu hình hiển thị.", - "MetadataImagesLoadError": "Không tải được cài đặt dữ liệu mô tả" + "MetadataImagesLoadError": "Không tải được cài đặt dữ liệu mô tả", + "MetadataNfoLoadError": "Tải cài đặt dữ liệu mô tả NFO thất bại" } From be284c03c36af2442b0bb02463764841bd378755 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Fri, 7 Mar 2025 09:55:35 +0000 Subject: [PATCH 229/235] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 6787d53884..bb85b20c05 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1996,5 +1996,6 @@ "LabelDevice": "Dispositivo", "LastActive": "Última atividade", "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?", - "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio." + "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio.", + "MetadataNfoLoadError": "Falha ao carregar as definições de metadados NFO" } From eb312d170d60fa1303ece364ebaa47332b361785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 7 Mar 2025 10:55:30 +0000 Subject: [PATCH 230/235] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index e3df1412bf..2556d6c8cf 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -2005,8 +2005,9 @@ "DeleteServerConfirmation": "Opravdu chcete odstranit tento server?", "LibraryNameInvalid": "Název knihovny nesmí být prázdný.", "CopyLogSuccess": "Obsah logu byl úspěšně zkopírován.", - "Retry": "Opakovat", + "Retry": "Zkusit znovu", "LogLoadFailure": "Načtení souboru logu se nezdařilo. Možná se do něj právě zapisuje.", "DisplayLoadError": "Načítání konfiguračních dat zobrazení se nezdařilo.", - "MetadataImagesLoadError": "Načítání nastavení metadat se nezdařilo" + "MetadataImagesLoadError": "Načítání nastavení metadat se nezdařilo", + "MetadataNfoLoadError": "Načtení nastavení metadat v souborech NFO se nezdařilo" } From 2b9404b9e8bc9db72f337b04fd89b737e033bd61 Mon Sep 17 00:00:00 2001 From: Faustas Date: Sat, 8 Mar 2025 06:30:07 +0000 Subject: [PATCH 231/235] Translated using Weblate (Lithuanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/ --- src/strings/lt-lt.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/lt-lt.json b/src/strings/lt-lt.json index e7a64f6c32..0faabd2c98 100644 --- a/src/strings/lt-lt.json +++ b/src/strings/lt-lt.json @@ -1185,5 +1185,7 @@ "DeleteEntireSeries": "Ištrinti {0} epizodus", "DeleteLyrics": "Ištrinti žodžius", "DeleteServerConfirmation": "Ar tikrai ištrinti šį serverį?", - "Anime": "Anime" + "Anime": "Anime", + "AllowStreamSharingHelp": "Leiskite „Jellyfin“ dublikuoti MPEG-TS srautą iš imtuvo ir bendrinti šį dublikuotą srautą su klientais. Tai naudinga, kai imtuvas turi bendrą srautų kiekio apribojimą, tačiau tai taip pat gali sukelti atkūrimo problemų.", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Įrašykite visus subtitrus į vaizdą, kai pradedamas transkodavimas. Tai užtikrina subtitrų sinchronizaciją po transkodavimo, tačiau sumažina transkodavimo greitį." } From 19a85290e1f2ee6716b05deb1e7641fb5fb2333e Mon Sep 17 00:00:00 2001 From: youngzheimer Date: Sat, 8 Mar 2025 09:13:23 +0000 Subject: [PATCH 232/235] Translated using Weblate (Korean) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/ --- src/strings/ko.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/ko.json b/src/strings/ko.json index 41a154f9fa..8257c0c5f0 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -1019,7 +1019,7 @@ "Ended": "종료", "EndsAtValue": "{0}에 종료", "HeaderDateIssued": "발행일", - "ConfigureDateAdded": "'추가 된 날짜' 메타데이터가 대시보드>라이브러리>NFO 설정 에서 결정되는 방식 구성", + "ConfigureDateAdded": "'추가 된 날짜' 메타데이터가 대시보드 > 라이브러리 > 디스플레이에서 결정되는 방식 구성", "EnableStreamLoopingHelp": "라이브 스트림에 몇 초의 데이터만 포함되어 있고 지속적으로 요청해야 하는 경우, 이 옵션을 활성화하십시오. 필요하지 않은 경우, 이 기능을 사용하면 문제가 발생할 수 있습니다.", "BurnSubtitlesHelp": "트랜스코딩할 때 영상에 자막을 구울 지 설정합니다. 성능상 사용하지 않는 것이 좋습니다. [자동] 으로 설정하면 이미지 기반 자막(VobSub, PGS, SUB, IDX 등)과 일부 ASS, SSA자막을 굽습니다.", "EnableNextVideoInfoOverlay": "재생 중에 다음 비디오 정보 표시", @@ -1764,7 +1764,7 @@ "GoHome": "홈으로", "GridView": "그리드 뷰", "LabelBackdropScreensaverInterval": "배경 화면보호기 간격", - "LabelBackdropScreensaverIntervalHelp": "배경 화면보호기를 사용할 때 서로 다른 배경으로 바뀌는 간격 시간(초)", + "LabelBackdropScreensaverIntervalHelp": "배경 화면보호기를 사용할 때 서로 다른 배경으로 바뀌는 간격 시간 (초).", "ListView": "리스트 뷰", "BackdropScreensaver": "배경 화면보호기", "LogoScreensaver": "로고 화면보호기", @@ -1988,5 +1988,7 @@ "LabelDevice": "장치", "LastActive": "마지막 활동", "DeleteServerConfirmation": "이 서버를 삭제하시겠습니까?", - "LibraryNameInvalid": "라이브러리 이름은 비워둘 수 없고 공백으로 시작하거나 끝날 수 없습니다." + "LibraryNameInvalid": "라이브러리 이름은 비워둘 수 없습니다.", + "Inker": "잉커", + "Retry": "재시도" } From d94ecd331286ce8aec182e0a92ea809f8c5e0cc3 Mon Sep 17 00:00:00 2001 From: Kevin Puertas Date: Sat, 8 Mar 2025 13:48:11 +0000 Subject: [PATCH 233/235] Translated using Weblate (Spanish (Argentina)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/ --- src/strings/es-ar.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/strings/es-ar.json b/src/strings/es-ar.json index 26e8c14e8d..94b41625aa 100644 --- a/src/strings/es-ar.json +++ b/src/strings/es-ar.json @@ -141,7 +141,7 @@ "ColorTransfer": "Transferencia de color", "CommunityRating": "Puntuación de la comunidad", "Composer": "Compositor", - "ConfigureDateAdded": "Configurá cómo se determinan los metadatos para 'Fecha agregada' en el Panel de Control > Biblioteca > Configuraciones NFO", + "ConfigureDateAdded": "Configurá cómo se determinan los metadatos para 'Fecha agregada' en el Panel de Control > Biblioteca > Visualización", "ConfirmDeleteImage": "¿Eliminar imágen?", "ConfirmDeleteItem": "Eliminar este elemento lo va a eliminar tanto del sistema de archivos como de la biblioteca de medios. ¿Estás seguro que deseás continuar?", "ConfirmDeleteItems": "Eliminar estos elementos los va a eliminar tanto del sistema de archivos como de la biblioteca de medios. ¿Estás seguro que deseás continuar?", @@ -1985,5 +1985,8 @@ "LabelMediaSegmentProviders": "Proveedores del segmento de medios", "MediaSegmentProvidersHelp": "Habilitá y clasificá a tus proveedores de segmentos de medios preferidos en orden de prioridad.", "HeaderNextEpisode": "Siguiente capítulo", - "HeaderNextVideo": "Siguiente video" + "HeaderNextVideo": "Siguiente video", + "AutoSubtitleStylingHelp": "Este modo cambiará automáticamente entre los modos de estilo nativo y personalizado de subtítulos basándose en el tipo de su dispositivo.", + "CopyLogSuccess": "El contenido del registro se ha copiado satisfactoriamente.", + "Custom": "Personalizado" } From b02fa96932477dafd84ab0cd11c4c0cbc264b230 Mon Sep 17 00:00:00 2001 From: Kevin Puertas Date: Sat, 8 Mar 2025 13:46:36 +0000 Subject: [PATCH 234/235] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index 849085e040..db2896e3a1 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1756,7 +1756,7 @@ "LabelDeveloper": "Desarrollador", "MessageRepositoryInstallDisclaimer": "ADVERTENCIA: Instalar un complemento de terceros conlleva riesgos. Puede contener código inestable o malicioso, y puede cambiar en cualquier momento. Solo instale complementos de autores en los que confíe.", "HeaderEpisodesStatus": "Estado de los episodios", - "AllowSegmentDeletion": "No Permitir Ninguno", + "AllowSegmentDeletion": "Borrar segmentos", "AllowSegmentDeletionHelp": "Elimine segmentos antiguos después de que el cliente los haya descargado. Esto evita tener que almacenar todo el archivo transcodificado en el disco. Desactívelo si tiene problemas de reproducción.", "LabelThrottleDelaySecondsHelp": "Tiempo en segundos después del cual se acelerará el transcodificador. Debe ser lo suficientemente grande para que el cliente mantenga un búfer saludable. Solo funciona si el estrangulamiento \"throttling\" está habilitada.", "LabelSegmentKeepSeconds": "Tiempo que se mantendrán los segmentos", @@ -1987,7 +1987,7 @@ "MediaSegmentProvidersHelp": "Habilite y clasifique por orden de prioridad a sus proveedores de segmentos de medios preferidos.", "HeaderNextEpisode": "Próximo episodio", "HeaderNextVideo": "Próximo video", - "CustomSubtitleStylingHelp": "El estilo de los subtítulos funcionará en la mayoría de los dispositivos, pero conlleva una sobrecarga adicional de rendimiento.", + "CustomSubtitleStylingHelp": "El estilo en los subtítulos funcionará en la mayoría de los dispositivos, pero tendrá una sobrecarga adicional de rendimiento.", "Custom": "Personalizado", "LabelSubtitleStyling": "Estilo de subtítulos", "Native": "Nativo", @@ -2006,5 +2006,8 @@ "CopyLogSuccess": "El contenido del registro se ha copiado satisfactoriamente.", "Retry": "Reintentar", "LogLoadFailure": "Fallo al cargar el archivo de registro. Es posible que siga siendo activamente escrito.", - "HeaderMediaSegmentActions": "Acciones del segmento de medios" + "HeaderMediaSegmentActions": "Acciones del segmento de medios", + "MetadataNfoLoadError": "Error al cargar la configuración de metadatos NFO", + "DisplayLoadError": "Un error ocurrió mientras se cargaba la configuración de visualización.", + "MetadataImagesLoadError": "Error al cargar la configuración de metadatos" } From 6c28e354623b64316fe23ce66b02ddcb9fb3be9a Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Sat, 8 Mar 2025 12:52:44 +0000 Subject: [PATCH 235/235] 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 3b2439761c..52edcc278d 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1980,7 +1980,7 @@ "MediaSegmentAction.Skip": "Overslaan", "MediaSegmentType.Commercial": "Reclame", "MediaSegmentType.Intro": "Intro", - "MediaSegmentType.Outro": "Outro", + "MediaSegmentType.Outro": "Aftiteling", "MediaSegmentType.Preview": "Vooruitblik", "MediaSegmentType.Recap": "Terugblik", "PlaylistError.UpdateFailed": "Fout bij bijwerken afspeellijst",