From e9aedc3305c3d2db46c80a142e221566d0d38329 Mon Sep 17 00:00:00 2001 From: David Schulte Date: Sat, 8 Jun 2024 00:55:35 +0200 Subject: [PATCH 1/7] Added native PGS (graphical subtitle) rendering for external streams. --- package-lock.json | 35 +++++++++++++++++++++++++++ package.json | 3 ++- src/plugins/htmlVideoPlayer/plugin.js | 29 +++++++++++++++++++++- src/scripts/browserDeviceProfile.js | 16 ++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6ba1d652a4..cd104e0f34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,7 @@ "jquery": "3.7.1", "jstree": "3.3.16", "libarchive.js": "2.0.2", + "libpgs": "0.2.0", "lodash-es": "4.17.21", "markdown-it": "14.1.0", "material-design-icons-iconfont": "6.7.0", @@ -138,6 +139,22 @@ "sass-embedded": "1.77.8" } }, + "../libpgs-js": { + "name": "libpgs", + "version": "0.2.0", + "license": "MIT", + "devDependencies": { + "@tsconfig/recommended": "^1.0.6", + "@types/jest": "^29.5.12", + "jest": "^29.7.0", + "ts-jest": "^29.1.4", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -14971,6 +14988,10 @@ "comlink": "^4.4.1" } }, + "node_modules/libpgs": { + "resolved": "../libpgs-js", + "link": true + }, "node_modules/lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", @@ -36529,6 +36550,20 @@ "comlink": "^4.4.1" } }, + "libpgs": { + "version": "file:../libpgs-js", + "requires": { + "@tsconfig/recommended": "^1.0.6", + "@types/jest": "^29.5.12", + "jest": "^29.7.0", + "ts-jest": "^29.1.4", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + } + }, "lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", diff --git a/package.json b/package.json index d98a9e98d8..15fb8288a8 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,8 @@ "swiper": "11.1.12", "usehooks-ts": "3.1.0", "webcomponents.js": "0.7.24", - "whatwg-fetch": "3.6.20" + "whatwg-fetch": "3.6.20", + "libpgs": "0.2.0" }, "optionalDependencies": { "sass-embedded": "1.77.8" diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 83e247eb83..3aa7873702 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -100,7 +100,7 @@ function enableNativeTrackSupport(mediaSource, track) { if (track) { const format = (track.Codec || '').toLowerCase(); - if (format === 'ssa' || format === 'ass') { + if (format === 'ssa' || format === 'ass' || format === 'pgssub') { return false; } } @@ -213,6 +213,10 @@ export class HtmlVideoPlayer { * @type {any | null | undefined} */ #currentAssRenderer; + /** + * @type {any | null | undefined} + */ + #currentPgsRenderer; /** * @type {number | undefined} */ @@ -1172,6 +1176,12 @@ export class HtmlVideoPlayer { octopus.dispose(); } this.#currentAssRenderer = null; + + const pgsRenderer = this.#currentPgsRenderer; + if (pgsRenderer) { + pgsRenderer.dispose(); + } + this.#currentPgsRenderer = null; } /** @@ -1316,6 +1326,19 @@ export class HtmlVideoPlayer { }); } + /** + * @private + */ + renderPgs(videoElement, track, item) { + import('libpgs').then((libpgs) => { + const options = { + video: videoElement, + subUrl: getTextTrackUrl(track, item) + }; + this.#currentPgsRenderer = new libpgs.PgsRenderer(options); + }); + } + /** * @private */ @@ -1434,6 +1457,10 @@ export class HtmlVideoPlayer { this.renderSsaAss(videoElement, track, item); return; } + if (format === 'pgssub') { + this.renderPgs(videoElement, track, item); + return; + } if (this.requiresCustomSubtitlesElement()) { this.renderSubtitlesWithCustomElement(videoElement, track, item, targetTextTrackIndex); diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 34fad3c237..505f8276ac 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -48,6 +48,15 @@ function supportsTextTracks() { return _supportsTextTracks; } +let _supportsCanvas2D; +function supportsCanvas2D() { + if (_supportsCanvas2D == null) { + _supportsCanvas2D = document.createElement('canvas').getContext('2d') != null; + } + + return _supportsCanvas2D; +} + let _canPlayHls; function canPlayHls() { if (_canPlayHls == null) { @@ -1432,6 +1441,13 @@ export default function (options) { Method: 'External' }); } + + if (supportsCanvas2D()) { + profile.SubtitleProfiles.push({ + Format: 'pgssub', + Method: 'External' + }); + } } profile.ResponseProfiles = []; From febc67f04dfb3bb5afe9383a2a05675fba2c0ac4 Mon Sep 17 00:00:00 2001 From: David Schulte Date: Sun, 9 Jun 2024 21:30:46 +0200 Subject: [PATCH 2/7] Added time offset support for PGS subtitles. --- package-lock.json | 26 ++++++++++---------------- package.json | 4 ++-- src/plugins/htmlVideoPlayer/plugin.js | 6 +++++- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd104e0f34..65e6ed1c8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "jquery": "3.7.1", "jstree": "3.3.16", "libarchive.js": "2.0.2", - "libpgs": "0.2.0", + "libpgs": "0.2.1", "lodash-es": "4.17.21", "markdown-it": "14.1.0", "material-design-icons-iconfont": "6.7.0", @@ -141,7 +141,8 @@ }, "../libpgs-js": { "name": "libpgs", - "version": "0.2.0", + "version": "0.2.1", + "extraneous": true, "license": "MIT", "devDependencies": { "@tsconfig/recommended": "^1.0.6", @@ -14989,8 +14990,10 @@ } }, "node_modules/libpgs": { - "resolved": "../libpgs-js", - "link": true + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.2.1.tgz", + "integrity": "sha512-4aYbQZ7UavFTFCmr1uqTJpQWjtbt1mefvjYWJl4nq3uPVWKp5L/GeGrVWPinoNd2fAXAzuMmvjgKwuYaGff2BQ==", + "license": "MIT" }, "node_modules/lie": { "version": "3.1.1", @@ -36551,18 +36554,9 @@ } }, "libpgs": { - "version": "file:../libpgs-js", - "requires": { - "@tsconfig/recommended": "^1.0.6", - "@types/jest": "^29.5.12", - "jest": "^29.7.0", - "ts-jest": "^29.1.4", - "ts-loader": "^9.5.1", - "ts-node": "^10.9.2", - "typescript": "^5.4.5", - "webpack": "^5.91.0", - "webpack-cli": "^5.1.4" - } + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.2.1.tgz", + "integrity": "sha512-4aYbQZ7UavFTFCmr1uqTJpQWjtbt1mefvjYWJl4nq3uPVWKp5L/GeGrVWPinoNd2fAXAzuMmvjgKwuYaGff2BQ==" }, "lie": { "version": "3.1.1", diff --git a/package.json b/package.json index 15fb8288a8..dfd10fd4fd 100644 --- a/package.json +++ b/package.json @@ -106,6 +106,7 @@ "jquery": "3.7.1", "jstree": "3.3.16", "libarchive.js": "2.0.2", + "libpgs": "0.2.1", "lodash-es": "4.17.21", "markdown-it": "14.1.0", "material-design-icons-iconfont": "6.7.0", @@ -123,8 +124,7 @@ "swiper": "11.1.12", "usehooks-ts": "3.1.0", "webcomponents.js": "0.7.24", - "whatwg-fetch": "3.6.20", - "libpgs": "0.2.0" + "whatwg-fetch": "3.6.20" }, "optionalDependencies": { "sass-embedded": "1.77.8" diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 3aa7873702..be67007dbd 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -594,6 +594,9 @@ export class HtmlVideoPlayer { if (this.#currentAssRenderer) { this.updateCurrentTrackOffset(offsetValue); this.#currentAssRenderer.timeOffset = (this._currentPlayOptions.transcodingOffsetTicks || 0) / 10000000 + offsetValue; + } else if (this.#currentPgsRenderer) { + this.updateCurrentTrackOffset(offsetValue); + this.#currentPgsRenderer.timeOffset = (this._currentPlayOptions.transcodingOffsetTicks || 0) / 10000000 + offsetValue; } else { const trackElements = this.getTextTracks(); // if .vtt currently rendering @@ -1333,7 +1336,8 @@ export class HtmlVideoPlayer { import('libpgs').then((libpgs) => { const options = { video: videoElement, - subUrl: getTextTrackUrl(track, item) + subUrl: getTextTrackUrl(track, item), + timeOffset: (this._currentPlayOptions.transcodingOffsetTicks || 0) / 10000000 }; this.#currentPgsRenderer = new libpgs.PgsRenderer(options); }); From a6732739c57f2323c20357479441b06ad1de3bf5 Mon Sep 17 00:00:00 2001 From: David Schulte Date: Tue, 11 Jun 2024 20:41:13 +0200 Subject: [PATCH 3/7] Respecting local burn-in subtitle setting when checking for PGS support. --- src/scripts/browserDeviceProfile.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 505f8276ac..e85642faea 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -1442,7 +1442,8 @@ export default function (options) { }); } - if (supportsCanvas2D()) { + if (supportsCanvas2D() && options.enablePgsRender !== false && !options.isRetry + && subtitleBurninSetting !== 'allcomplexformats' && subtitleBurninSetting !== 'onlyimageformats') { profile.SubtitleProfiles.push({ Format: 'pgssub', Method: 'External' From c5d3b081cfdbec6172aa09bb4aa2347944faab5d Mon Sep 17 00:00:00 2001 From: David Schulte Date: Thu, 13 Jun 2024 21:29:52 +0200 Subject: [PATCH 4/7] Updated `libpgs` to add web-worker support for PGS rendering. --- package-lock.json | 31 ++++++--------------------- package.json | 2 +- src/plugins/htmlVideoPlayer/plugin.js | 1 + webpack.common.js | 3 ++- 4 files changed, 11 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 65e6ed1c8d..17ca4edde7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "jquery": "3.7.1", "jstree": "3.3.16", "libarchive.js": "2.0.2", - "libpgs": "0.2.1", + "libpgs": "0.4.1", "lodash-es": "4.17.21", "markdown-it": "14.1.0", "material-design-icons-iconfont": "6.7.0", @@ -139,23 +139,6 @@ "sass-embedded": "1.77.8" } }, - "../libpgs-js": { - "name": "libpgs", - "version": "0.2.1", - "extraneous": true, - "license": "MIT", - "devDependencies": { - "@tsconfig/recommended": "^1.0.6", - "@types/jest": "^29.5.12", - "jest": "^29.7.0", - "ts-jest": "^29.1.4", - "ts-loader": "^9.5.1", - "ts-node": "^10.9.2", - "typescript": "^5.4.5", - "webpack": "^5.91.0", - "webpack-cli": "^5.1.4" - } - }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -14990,9 +14973,9 @@ } }, "node_modules/libpgs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.2.1.tgz", - "integrity": "sha512-4aYbQZ7UavFTFCmr1uqTJpQWjtbt1mefvjYWJl4nq3uPVWKp5L/GeGrVWPinoNd2fAXAzuMmvjgKwuYaGff2BQ==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.4.1.tgz", + "integrity": "sha512-I4mIGz7Lf23xy/8mwSx0qlStz0oZFCz9dLC1xXNaqv5MbVdFhZWE+OMhVBLGjfVkjugyboM9XJ+4bCSibAIGuA==", "license": "MIT" }, "node_modules/lie": { @@ -36554,9 +36537,9 @@ } }, "libpgs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.2.1.tgz", - "integrity": "sha512-4aYbQZ7UavFTFCmr1uqTJpQWjtbt1mefvjYWJl4nq3uPVWKp5L/GeGrVWPinoNd2fAXAzuMmvjgKwuYaGff2BQ==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.4.1.tgz", + "integrity": "sha512-I4mIGz7Lf23xy/8mwSx0qlStz0oZFCz9dLC1xXNaqv5MbVdFhZWE+OMhVBLGjfVkjugyboM9XJ+4bCSibAIGuA==" }, "lie": { "version": "3.1.1", diff --git a/package.json b/package.json index dfd10fd4fd..af9a20c2fc 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "jquery": "3.7.1", "jstree": "3.3.16", "libarchive.js": "2.0.2", - "libpgs": "0.2.1", + "libpgs": "0.4.1", "lodash-es": "4.17.21", "markdown-it": "14.1.0", "material-design-icons-iconfont": "6.7.0", diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index be67007dbd..46a3062a11 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1337,6 +1337,7 @@ export class HtmlVideoPlayer { const options = { video: videoElement, subUrl: getTextTrackUrl(track, item), + workerUrl: `${appRouter.baseUrl()}/libraries/libpgs.worker.js`, timeOffset: (this._currentPlayOptions.transcodingOffsetTicks || 0) / 10000000 }; this.#currentPgsRenderer = new libpgs.PgsRenderer(options); diff --git a/webpack.common.js b/webpack.common.js index b58058f53f..61fe394830 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -15,7 +15,8 @@ const Assets = [ '@jellyfin/libass-wasm/dist/js/subtitles-octopus-worker.js', '@jellyfin/libass-wasm/dist/js/subtitles-octopus-worker.wasm', '@jellyfin/libass-wasm/dist/js/subtitles-octopus-worker-legacy.js', - 'pdfjs-dist/build/pdf.worker.js' + 'pdfjs-dist/build/pdf.worker.js', + 'libpgs/dist/libpgs.worker.js' ]; const DEV_MODE = process.env.NODE_ENV !== 'production'; From 8753f8433564af8a75dc3d890ee09600bbec83da Mon Sep 17 00:00:00 2001 From: David Schulte Date: Wed, 10 Jul 2024 21:48:54 +0200 Subject: [PATCH 5/7] Added client setting to enable experimental Pgs subtitle renderer. --- .../subtitlesettings/subtitlesettings.js | 18 ++++++++++++++++++ .../subtitlesettings.template.html | 9 +++++++++ src/scripts/browserDeviceProfile.js | 3 ++- src/strings/en-us.json | 2 ++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/components/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js index 5e55adfd51..7231842e68 100644 --- a/src/components/subtitlesettings/subtitlesettings.js +++ b/src/components/subtitlesettings/subtitlesettings.js @@ -61,6 +61,9 @@ function loadForm(context, user, userSettings, appearanceSettings, apiClient) { context.querySelector('#sliderVerticalPosition').value = appearanceSettings.verticalPosition; context.querySelector('#selectSubtitleBurnIn').value = appSettings.get('subtitleburnin') || ''; + context.querySelector('#chkSubtitleRenderPgs').checked = appSettings.get('subtitlerenderpgs') === 'true'; + + context.querySelector('#selectSubtitleBurnIn').dispatchEvent(new CustomEvent('change', {})); onAppearanceFieldChange({ target: context.querySelector('#selectTextSize') @@ -86,6 +89,7 @@ function save(instance, context, userId, userSettings, apiClient, enableSaveConf loading.show(); appSettings.set('subtitleburnin', context.querySelector('#selectSubtitleBurnIn').value); + appSettings.set('subtitlerenderpgs', context.querySelector('#chkSubtitleRenderPgs').checked); apiClient.getUser(userId).then(function (user) { saveUser(context, user, userSettings, instance.appearanceKey, apiClient).then(function () { @@ -111,6 +115,19 @@ function onSubtitleModeChange(e) { view.querySelector('.subtitles' + this.value + 'Help').classList.remove('hide'); } +function onSubtitleBurnInChange(e) { + const view = dom.parentWithClass(e.target, 'subtitlesettings'); + + const fieldRenderPgs = view.querySelector('.fldRenderPgs'); + + // Pgs option is only available if burn-in mode is set to 'auto' (empty string) + if (this.value) { + fieldRenderPgs.classList.add('hide'); + } else { + fieldRenderPgs.classList.remove('hide'); + } +} + function onAppearanceFieldChange(e) { const view = dom.parentWithClass(e.target, 'subtitlesettings'); @@ -166,6 +183,7 @@ function embed(options, self) { options.element.querySelector('form').addEventListener('submit', self.onSubmit.bind(self)); options.element.querySelector('#selectSubtitlePlaybackMode').addEventListener('change', onSubtitleModeChange); + options.element.querySelector('#selectSubtitleBurnIn').addEventListener('change', onSubtitleBurnInChange); options.element.querySelector('#selectTextSize').addEventListener('change', onAppearanceFieldChange); options.element.querySelector('#selectTextWeight').addEventListener('change', onAppearanceFieldChange); options.element.querySelector('#selectDropShadow').addEventListener('change', onAppearanceFieldChange); diff --git a/src/components/subtitlesettings/subtitlesettings.template.html b/src/components/subtitlesettings/subtitlesettings.template.html index 5f1f14ae9d..0bef96d787 100644 --- a/src/components/subtitlesettings/subtitlesettings.template.html +++ b/src/components/subtitlesettings/subtitlesettings.template.html @@ -32,6 +32,15 @@
${BurnSubtitlesHelp}
+ +
+ +
${RenderPgsSubtitleHelp}
+
diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index e85642faea..87a0726f5f 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -1424,6 +1424,7 @@ export default function (options) { // External vtt or burn in profile.SubtitleProfiles = []; const subtitleBurninSetting = appSettings.get('subtitleburnin'); + const subtitleRenderPgsSetting = appSettings.get('subtitlerenderpgs') === 'true'; if (subtitleBurninSetting !== 'all') { if (supportsTextTracks()) { profile.SubtitleProfiles.push({ @@ -1442,7 +1443,7 @@ export default function (options) { }); } - if (supportsCanvas2D() && options.enablePgsRender !== false && !options.isRetry + if (supportsCanvas2D() && options.enablePgsRender !== false && !options.isRetry && subtitleRenderPgsSetting && subtitleBurninSetting !== 'allcomplexformats' && subtitleBurninSetting !== 'onlyimageformats') { profile.SubtitleProfiles.push({ Format: 'pgssub', diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 642d082cc7..42e024c028 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1383,6 +1383,8 @@ "Remixer": "Remixer", "RemoveFromCollection": "Remove from collection", "RemoveFromPlaylist": "Remove from playlist", + "RenderPgsSubtitle": "Experimental PGS subtitle rendering", + "RenderPgsSubtitleHelp": "Determine if the client should render PGS subtitles instead of using burned in subtitles. This can avoid server-side transcoding in exchange of client-side rendering performance.", "Repeat": "Repeat", "RepeatAll": "Repeat all", "RepeatEpisodes": "Repeat episodes", From da0a255bcc5157681285e66b7766452b52d40a76 Mon Sep 17 00:00:00 2001 From: David Schulte Date: Wed, 14 Aug 2024 19:55:46 +0200 Subject: [PATCH 6/7] Apply suggestions from code review Removed extra line breaks and using `classList.toggle` instead of `add` and `remove` to simplify code. Co-authored-by: Bill Thornton --- src/components/subtitlesettings/subtitlesettings.js | 7 +------ .../subtitlesettings/subtitlesettings.template.html | 1 - 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/components/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js index 7231842e68..da548a747c 100644 --- a/src/components/subtitlesettings/subtitlesettings.js +++ b/src/components/subtitlesettings/subtitlesettings.js @@ -117,15 +117,10 @@ function onSubtitleModeChange(e) { function onSubtitleBurnInChange(e) { const view = dom.parentWithClass(e.target, 'subtitlesettings'); - const fieldRenderPgs = view.querySelector('.fldRenderPgs'); // Pgs option is only available if burn-in mode is set to 'auto' (empty string) - if (this.value) { - fieldRenderPgs.classList.add('hide'); - } else { - fieldRenderPgs.classList.remove('hide'); - } + fieldRenderPgs.classList.toggle('hide', !!this.value); } function onAppearanceFieldChange(e) { diff --git a/src/components/subtitlesettings/subtitlesettings.template.html b/src/components/subtitlesettings/subtitlesettings.template.html index 0bef96d787..003a2a4e22 100644 --- a/src/components/subtitlesettings/subtitlesettings.template.html +++ b/src/components/subtitlesettings/subtitlesettings.template.html @@ -37,7 +37,6 @@
${RenderPgsSubtitleHelp}
From e560d37f99951c8be9d828d065fb2c146a3107d6 Mon Sep 17 00:00:00 2001 From: David Schulte Date: Sun, 18 Aug 2024 00:56:41 +0200 Subject: [PATCH 7/7] Added PGS support for browsers legacy browsers without `OffscreenCanvas` or `Worker` support like webOS 1.2 by updating `libpgs`. --- 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 17ca4edde7..f1cf5aed36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "jquery": "3.7.1", "jstree": "3.3.16", "libarchive.js": "2.0.2", - "libpgs": "0.4.1", + "libpgs": "0.6.0", "lodash-es": "4.17.21", "markdown-it": "14.1.0", "material-design-icons-iconfont": "6.7.0", @@ -14973,9 +14973,9 @@ } }, "node_modules/libpgs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.4.1.tgz", - "integrity": "sha512-I4mIGz7Lf23xy/8mwSx0qlStz0oZFCz9dLC1xXNaqv5MbVdFhZWE+OMhVBLGjfVkjugyboM9XJ+4bCSibAIGuA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.6.0.tgz", + "integrity": "sha512-k8ic6VTJTCun8Ump8iAe+tZi3pa1ZhDlq1v4hmZOmYQzSQ44QpZoClMXuSfJ1B91eRWOO6q50rXhyCPuB9dXbg==", "license": "MIT" }, "node_modules/lie": { @@ -36537,9 +36537,9 @@ } }, "libpgs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.4.1.tgz", - "integrity": "sha512-I4mIGz7Lf23xy/8mwSx0qlStz0oZFCz9dLC1xXNaqv5MbVdFhZWE+OMhVBLGjfVkjugyboM9XJ+4bCSibAIGuA==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/libpgs/-/libpgs-0.6.0.tgz", + "integrity": "sha512-k8ic6VTJTCun8Ump8iAe+tZi3pa1ZhDlq1v4hmZOmYQzSQ44QpZoClMXuSfJ1B91eRWOO6q50rXhyCPuB9dXbg==" }, "lie": { "version": "3.1.1", diff --git a/package.json b/package.json index af9a20c2fc..dd20d2e18b 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "jquery": "3.7.1", "jstree": "3.3.16", "libarchive.js": "2.0.2", - "libpgs": "0.4.1", + "libpgs": "0.6.0", "lodash-es": "4.17.21", "markdown-it": "14.1.0", "material-design-icons-iconfont": "6.7.0",