From fdafdc43918619869d3e195ce3f7d42ff37510a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Ste=CC=A8pien=CC=81?= Date: Sun, 8 Jan 2023 01:13:15 +0100 Subject: [PATCH 01/46] Preload material icons, allow to preload other fonts --- package.json | 5 ++++- templates/_partials/head.tpl | 12 ++++++++---- templates/_partials/preload.tpl | 10 ++++++++++ webpack/webpack.common.js | 3 ++- webpack/webpack.parts.js | 24 ++++++++++++++++++++++-- 5 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 templates/_partials/preload.tpl diff --git a/package.json b/package.json index f24c22c6d..1e01fbfbe 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "expose-loader": "^3.0.0", "fork-ts-checker-webpack-plugin": "^6.3.4", "hot-accept-webpack-plugin": "^2.0.0-beta.7", + "html-webpack-plugin": "^5.5.0", "jest": "^28.1.0", "jest-environment-jsdom": "^28.1.0", "mini-css-extract-plugin": "^1.6.2", @@ -72,6 +73,7 @@ "webpack-bundle-analyzer": "^4.4.2", "webpack-cli": "^4.9.0", "webpack-dev-server": "^4.3.1", + "webpack-font-preload-plugin": "^1.5.0", "webpack-merge": "^5.8.0", "webpack-remove-empty-scripts": "^0.7.2", "webpack-sources": "^0.1.0" @@ -87,8 +89,9 @@ "jquery.browser": "^0.1.0", "material-design-icons-iconfont": "^6.7.0", "nouislider": "^15.5.0", - "vazirmatn": "^32.102.0", "sprintf-js": "^1.1.2", + "swiper": "^7.4.1", + "vazirmatn": "^32.102.0", "wnumb": "^1.2.0" } } diff --git a/templates/_partials/head.tpl b/templates/_partials/head.tpl index 0a5f29cbe..84bb26b53 100644 --- a/templates/_partials/head.tpl +++ b/templates/_partials/head.tpl @@ -10,6 +10,10 @@ {/block} {block name='head_seo'} + {block name='head_preload'} + {include file="_partials/preload.tpl"} + {/block} + {block name='head_seo_title'}{$page.meta.title}{/block} {block name='hook_after_title_tag'} {hook h='displayAfterTitleTag'} @@ -27,13 +31,13 @@ {/foreach} {/block} - + {block name='head_microdata'} {include file="_partials/microdata/head-jsonld.tpl"} {/block} - + {block name='head_microdata_special'}{/block} - + {block name='head_pagination_seo'} {include file="_partials/pagination-seo.tpl"} {/block} @@ -44,7 +48,7 @@ {if !isset($product) && $page.page_name != 'product'}{/if} - {/block} + {/block} {/block} {block name='head_viewport'} diff --git a/templates/_partials/preload.tpl b/templates/_partials/preload.tpl new file mode 100644 index 000000000..602639315 --- /dev/null +++ b/templates/_partials/preload.tpl @@ -0,0 +1,10 @@ +{$themeDir = _PS_THEME_DIR_} +{$preloadFilePath = "`$themeDir`assets/preload.html"} +{$assetsUrl = $urls.theme_assets} + +{if file_exists($preloadFilePath)} + {capture name="preloadBlock"}{include file=$preloadFilePath}{/capture} + {$replaceString = "href=\"$assetsUrl"} + + {$smarty.capture.preloadBlock|replace:'href="../':"href=\"$assetsUrl" nofilter} +{/if} diff --git a/webpack/webpack.common.js b/webpack/webpack.common.js index 65f630afe..42a3da8fb 100644 --- a/webpack/webpack.common.js +++ b/webpack/webpack.common.js @@ -1,7 +1,7 @@ const { merge } = require('webpack-merge'); const path = require('path'); const { - extractScss, extractJs, extractImages, extractFonts, externals, expose, + extractScss, extractJs, extractImages, extractFonts, externals, expose, preloadFonts } = require('./webpack.parts'); exports.commonConfig = ({ @@ -31,5 +31,6 @@ exports.commonConfig = ({ extractJs(), extractImages(), extractFonts(), + preloadFonts(), ) ); diff --git a/webpack/webpack.parts.js b/webpack/webpack.parts.js index e7debbb99..4224bd7bd 100644 --- a/webpack/webpack.parts.js +++ b/webpack/webpack.parts.js @@ -3,6 +3,8 @@ const {CleanWebpackPlugin} = require('clean-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const RemoveEmptyScriptsPlugin = require('webpack-remove-empty-scripts'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const FontPreloadPlugin = require('webpack-font-preload-plugin'); exports.configureDevServer = (serverAddress, publicPath, port, siteURL) => ({ allowedHosts: [serverAddress], @@ -126,7 +128,7 @@ exports.extractImages = () => ({ generator: { outputPath: 'img-dist/', publicPath: '../img-dist/', - filename: '[contenthash].[ext]', + filename: '[contenthash][ext]', }, }, ], @@ -142,7 +144,7 @@ exports.extractFonts = () => ({ generator: { outputPath: 'fonts/', publicPath: '../fonts/', - filename: '[contenthash].[ext]', + filename: '[name]-[contenthash][ext]', }, }, ], @@ -170,6 +172,24 @@ exports.externals = () => ({ }, }); +exports.preloadFonts = () => ({ + plugins: [ + new HtmlWebpackPlugin({ + filename: 'preload.html', + templateContent: '{{{preloadLinks}}}', + inject: false, + }), + new FontPreloadPlugin({ + index: 'preload.html', + extensions: ['woff2'], + filter: /(materialicons)/i, + replaceCallback: ({ indexSource, linksAsString }) => { + return indexSource.replace('{{{preloadLinks}}}', linksAsString); + }, + }), + ] +}); + exports.expose = () => ({ module: { rules: [ From 6153048110eb60bf1d97a4d303b472e151a1e468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Ste=CC=A8pien=CC=81?= Date: Mon, 9 Jan 2023 10:40:31 +0100 Subject: [PATCH 02/46] Removed unused var --- templates/_partials/preload.tpl | 2 -- 1 file changed, 2 deletions(-) diff --git a/templates/_partials/preload.tpl b/templates/_partials/preload.tpl index 602639315..7c425d117 100644 --- a/templates/_partials/preload.tpl +++ b/templates/_partials/preload.tpl @@ -4,7 +4,5 @@ {if file_exists($preloadFilePath)} {capture name="preloadBlock"}{include file=$preloadFilePath}{/capture} - {$replaceString = "href=\"$assetsUrl"} - {$smarty.capture.preloadBlock|replace:'href="../':"href=\"$assetsUrl" nofilter} {/if} From 7806eb868601f97a4dad28677c9fd787737d1e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Ste=CC=A8pien=CC=81?= Date: Tue, 4 Apr 2023 00:21:37 +0200 Subject: [PATCH 03/46] package-lock update --- package-lock.json | 1621 +++++++++++++++------------------------------ 1 file changed, 544 insertions(+), 1077 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d027a741..63d1ba7af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "material-design-icons-iconfont": "^6.7.0", "nouislider": "^15.5.0", "sprintf-js": "^1.1.2", + "swiper": "^7.4.1", "vazirmatn": "^32.102.0", "wnumb": "^1.2.0" }, @@ -55,6 +56,7 @@ "expose-loader": "^3.0.0", "fork-ts-checker-webpack-plugin": "^6.3.4", "hot-accept-webpack-plugin": "^2.0.0-beta.7", + "html-webpack-plugin": "^5.5.0", "jest": "^28.1.0", "jest-environment-jsdom": "^28.1.0", "mini-css-extract-plugin": "^1.6.2", @@ -73,6 +75,7 @@ "webpack-bundle-analyzer": "^4.4.2", "webpack-cli": "^4.9.0", "webpack-dev-server": "^4.3.1", + "webpack-font-preload-plugin": "^1.5.0", "webpack-merge": "^5.8.0", "webpack-remove-empty-scripts": "^0.7.2", "webpack-sources": "^0.1.0" @@ -4538,15 +4541,6 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core/node_modules/pretty-format": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", @@ -4580,18 +4574,6 @@ "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", "dev": true }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/environment": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", @@ -4715,15 +4697,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/reporters/node_modules/jest-worker": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", @@ -4738,18 +4711,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/reporters/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/schemas": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", @@ -10550,6 +10511,12 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/builder-webpack4/node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -10693,6 +10660,15 @@ "node": ">=0.4.0" } }, + "node_modules/@storybook/builder-webpack4/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -11161,6 +11137,55 @@ "node": ">=4" } }, + "node_modules/@storybook/builder-webpack4/node_modules/html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/html-webpack-plugin/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/icss-utils": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", @@ -11464,6 +11489,29 @@ "postcss": "^7.0.6" } }, + "node_modules/@storybook/builder-webpack4/node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -11509,6 +11557,18 @@ "node": ">= 8" } }, + "node_modules/@storybook/builder-webpack4/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12038,21 +12098,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "node_modules/@storybook/builder-webpack5/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -12081,27 +12126,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@storybook/builder-webpack5/node_modules/clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -12119,50 +12143,6 @@ } } }, - "node_modules/@storybook/builder-webpack5/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -12175,50 +12155,6 @@ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "node_modules/@storybook/builder-webpack5/node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/style-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", @@ -16784,6 +16720,12 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/manager-webpack4/node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -16927,6 +16869,15 @@ "node": ">=0.4.0" } }, + "node_modules/@storybook/manager-webpack4/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -17281,6 +17232,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@storybook/manager-webpack4/node_modules/html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/icss-utils": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", @@ -17562,6 +17536,29 @@ "postcss": "^7.0.6" } }, + "node_modules/@storybook/manager-webpack4/node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -17607,6 +17604,18 @@ "node": ">= 8" } }, + "node_modules/@storybook/manager-webpack4/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18037,42 +18046,6 @@ } } }, - "node_modules/@storybook/manager-webpack5/node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "node_modules/@storybook/manager-webpack5/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/@storybook/manager-webpack5/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -18089,50 +18062,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/manager-webpack5/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, "node_modules/@storybook/manager-webpack5/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -18178,50 +18107,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/manager-webpack5/node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/manager-webpack5/node_modules/style-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", @@ -19718,9 +19603,9 @@ } }, "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, "node_modules/@types/http-proxy": { @@ -21063,12 +20948,12 @@ } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -22919,27 +22804,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -25040,6 +24904,14 @@ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", "dev": true }, + "node_modules/dom7": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-4.0.6.tgz", + "integrity": "sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==", + "dependencies": { + "ssr-window": "^4.0.0" + } + }, "node_modules/domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", @@ -26278,15 +26150,6 @@ "@babel/highlight": "^7.10.4" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -26400,18 +26263,6 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -27659,27 +27510,6 @@ "node": ">=10" } }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -28503,61 +28333,77 @@ } }, "node_modules/html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "dev": true, "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" }, "engines": { - "node": ">=6.9" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.20.0" } }, - "node_modules/html-webpack-plugin/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/html-webpack-plugin/node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "source-map": "~0.6.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">= 10.0" } }, - "node_modules/html-webpack-plugin/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" }, "engines": { - "node": ">=4.0.0" + "node": ">=12" } }, - "node_modules/html-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "node_modules/html-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, "node_modules/htmlparser2": { @@ -29839,15 +29685,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-circus/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-circus/node_modules/pretty-format": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", @@ -29987,15 +29824,6 @@ } } }, - "node_modules/jest-config/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-config/node_modules/jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -30099,15 +29927,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-each/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-each/node_modules/jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -30247,15 +30066,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-leak-detector/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-leak-detector/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -30313,15 +30123,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-matcher-utils/node_modules/diff-sequences": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", @@ -30408,15 +30209,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-message-util/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-message-util/node_modules/pretty-format": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", @@ -30676,15 +30468,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot/node_modules/diff-sequences": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", @@ -30800,15 +30583,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-validate/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -35318,13 +35092,13 @@ } }, "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "dependencies": { "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "renderkid": "^3.0.0" } }, "node_modules/pretty-format": { @@ -35341,15 +35115,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -36377,16 +36142,16 @@ "dev": true }, "node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" + "strip-ansi": "^6.0.1" } }, "node_modules/repeat-element": { @@ -37866,6 +37631,11 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, + "node_modules/ssr-window": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", + "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==" + }, "node_modules/ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", @@ -38014,27 +37784,6 @@ "node": ">=10" } }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -38049,33 +37798,12 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", @@ -38156,15 +37884,15 @@ } }, "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -38480,15 +38208,6 @@ "stylelint": "^14.0.0" } }, - "node_modules/stylelint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", @@ -38597,18 +38316,6 @@ "node": ">=4" } }, - "node_modules/stylelint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/stylelint/node_modules/write-file-atomic": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", @@ -38698,6 +38405,29 @@ "node": ">= 10" } }, + "node_modules/swiper": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-7.4.1.tgz", + "integrity": "sha512-dhbL4tpYFvHug1J7GnKElfTi6EYhlZy/vNZRhHkWFyUsWZ1Vovipxj3la5gqllMogygXJMe3zvVv+f6eppvWiA==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "hasInstallScript": true, + "dependencies": { + "dom7": "^4.0.2", + "ssr-window": "^4.0.2" + }, + "engines": { + "node": ">= 4.7.0" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -38760,33 +38490,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/tapable": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", @@ -40052,7 +39761,7 @@ "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, "node_modules/utils-merge": { @@ -40862,37 +40571,41 @@ } } }, - "node_modules/webpack-hot-middleware": { - "version": "2.25.1", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", - "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", + "node_modules/webpack-font-preload-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/webpack-font-preload-plugin/-/webpack-font-preload-plugin-1.5.0.tgz", + "integrity": "sha512-/Nh6MNa7/rbu3ZcqSR1SxB+G5XaITu7U2yZO5INTsVRpVlMLQmHQZCoDt4PP+iFyBdvBCDbA0CImRXHarQ0wpQ==", "dev": true, "dependencies": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "querystring": "^0.2.0", - "strip-ansi": "^6.0.0" + "jsdom": "^19.0.0", + "webpack-sources": "^3.2.2" + }, + "engines": { + "node": ">= 10.17.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/webpack-hot-middleware/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/webpack-font-preload-plugin/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/webpack-hot-middleware/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/webpack-hot-middleware": { + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", + "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "querystring": "^0.2.0", + "strip-ansi": "^6.0.0" } }, "node_modules/webpack-log": { @@ -41184,27 +40897,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -44622,12 +44314,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "pretty-format": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", @@ -44653,15 +44339,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, @@ -44761,12 +44438,6 @@ "v8-to-istanbul": "^9.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "jest-worker": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", @@ -44777,15 +44448,6 @@ "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, @@ -49161,6 +48823,12 @@ "resolve-from": "^5.0.0" } }, + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -49298,6 +48966,12 @@ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -49652,6 +49326,45 @@ } } }, + "html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, "icss-utils": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", @@ -49869,6 +49582,29 @@ "postcss": "^7.0.6" } }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -49905,6 +49641,15 @@ "minipass": "^3.1.1" } }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -50329,18 +50074,6 @@ } } }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -50362,21 +50095,6 @@ "core-js-compat": "^3.8.1" } }, - "clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -50386,34 +50104,6 @@ "ms": "2.1.2" } }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -50426,44 +50116,6 @@ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "style-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", @@ -53984,6 +53636,12 @@ "resolve-from": "^5.0.0" } }, + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -54121,6 +53779,12 @@ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, "babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -54388,6 +54052,23 @@ "path-exists": "^4.0.0" } }, + "html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + } + }, "icss-utils": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", @@ -54597,6 +54278,29 @@ "postcss": "^7.0.6" } }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -54633,6 +54337,15 @@ "minipass": "^3.1.1" } }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -54974,33 +54687,6 @@ "webpack-virtual-modules": "^0.4.1" }, "dependencies": { - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -55011,34 +54697,6 @@ "path-exists": "^4.0.0" } }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -55066,44 +54724,6 @@ "p-limit": "^3.0.2" } }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "style-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", @@ -56313,9 +55933,9 @@ } }, "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, "@types/http-proxy": { @@ -57442,9 +57062,9 @@ "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -58885,23 +58505,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "clone-deep": { @@ -60546,6 +60149,14 @@ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", "dev": true }, + "dom7": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-4.0.6.tgz", + "integrity": "sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==", + "requires": { + "ssr-window": "^4.0.0" + } + }, "domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", @@ -61205,12 +60816,6 @@ "@babel/highlight": "^7.10.4" } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -61286,15 +60891,6 @@ "lru-cache": "^6.0.0" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -62539,23 +62135,6 @@ "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "gensync": { @@ -63191,46 +62770,52 @@ "dev": true }, "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "dev": true, "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" }, "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, "requires": { - "minimist": "^1.2.0" + "source-map": "~0.6.0" } }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -64187,12 +63772,6 @@ "throat": "^6.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "pretty-format": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", @@ -64294,12 +63873,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -64380,12 +63953,6 @@ "pretty-format": "^28.1.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -64499,12 +64066,6 @@ "pretty-format": "^28.1.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -64549,12 +64110,6 @@ "pretty-format": "^28.1.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "diff-sequences": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", @@ -64624,12 +64179,6 @@ "stack-utils": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "pretty-format": { "version": "28.1.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", @@ -64845,12 +64394,6 @@ "semver": "^7.3.5" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "diff-sequences": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", @@ -64940,12 +64483,6 @@ "pretty-format": "^28.1.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -68356,13 +67893,13 @@ "dev": true }, "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "requires": { "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "renderkid": "^3.0.0" } }, "pretty-format": { @@ -68376,12 +67913,6 @@ "react-is": "^17.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -69186,16 +68717,16 @@ "dev": true }, "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "requires": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" + "strip-ansi": "^6.0.1" } }, "repeat-element": { @@ -70328,6 +69859,11 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, + "ssr-window": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", + "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==" + }, "ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", @@ -70455,23 +69991,6 @@ "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "string-width": { @@ -70485,26 +70004,11 @@ "strip-ansi": "^6.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, @@ -70567,12 +70071,12 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -70705,12 +70209,6 @@ "write-file-atomic": "^4.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", @@ -70793,15 +70291,6 @@ "util-deprecate": "^1.0.2" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "write-file-atomic": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", @@ -70975,6 +70464,15 @@ } } }, + "swiper": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-7.4.1.tgz", + "integrity": "sha512-dhbL4tpYFvHug1J7GnKElfTi6EYhlZy/vNZRhHkWFyUsWZ1Vovipxj3la5gqllMogygXJMe3zvVv+f6eppvWiA==", + "requires": { + "dom7": "^4.0.2", + "ssr-window": "^4.0.2" + } + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -71024,26 +70522,11 @@ "uri-js": "^4.2.2" } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, @@ -71959,7 +71442,7 @@ "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, "utils-merge": { @@ -72584,6 +72067,24 @@ } } }, + "webpack-font-preload-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/webpack-font-preload-plugin/-/webpack-font-preload-plugin-1.5.0.tgz", + "integrity": "sha512-/Nh6MNa7/rbu3ZcqSR1SxB+G5XaITu7U2yZO5INTsVRpVlMLQmHQZCoDt4PP+iFyBdvBCDbA0CImRXHarQ0wpQ==", + "dev": true, + "requires": { + "jsdom": "^19.0.0", + "webpack-sources": "^3.2.2" + }, + "dependencies": { + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + } + } + }, "webpack-hot-middleware": { "version": "2.25.1", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", @@ -72594,23 +72095,6 @@ "html-entities": "^2.1.0", "querystring": "^0.2.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "webpack-log": { @@ -72833,23 +72317,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "wrappy": { From 64725454de4a7be22f4cded688515b5a2adcdd87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Ste=CC=A8pien=CC=81?= Date: Mon, 8 May 2023 14:07:00 +0200 Subject: [PATCH 04/46] Swiper dependencies removed --- package-lock.json | 171 ++++++++++++++++++++++++++-------------------- package.json | 1 - 2 files changed, 96 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index 63d1ba7af..ba20adfdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,6 @@ "material-design-icons-iconfont": "^6.7.0", "nouislider": "^15.5.0", "sprintf-js": "^1.1.2", - "swiper": "^7.4.1", "vazirmatn": "^32.102.0", "wnumb": "^1.2.0" }, @@ -6621,8 +6620,15 @@ } }, "node_modules/@storybook/addon-controls/node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/@storybook/addon-controls/node_modules/webpack": { "version": "4.43.0", @@ -7810,8 +7816,15 @@ } }, "node_modules/@storybook/addon-docs/node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/@storybook/addon-docs/node_modules/webpack": { "version": "4.43.0", @@ -8838,8 +8851,15 @@ } }, "node_modules/@storybook/addon-essentials/node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/@storybook/addon-essentials/node_modules/webpack": { "version": "4.43.0", @@ -11657,8 +11677,15 @@ } }, "node_modules/@storybook/builder-webpack4/node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/@storybook/builder-webpack4/node_modules/webpack": { "version": "4.43.0", @@ -14413,8 +14440,15 @@ } }, "node_modules/@storybook/core-server/node_modules/webpack/node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/@storybook/core-server/node_modules/ws": { "version": "8.13.0", @@ -16120,8 +16154,15 @@ } }, "node_modules/@storybook/html/node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/@storybook/html/node_modules/webpack": { "version": "4.43.0", @@ -17695,8 +17736,15 @@ } }, "node_modules/@storybook/manager-webpack4/node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/@storybook/manager-webpack4/node_modules/webpack": { "version": "4.43.0", @@ -19277,8 +19325,15 @@ } }, "node_modules/@storybook/telemetry/node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/@storybook/telemetry/node_modules/webpack": { "version": "4.43.0", @@ -24904,14 +24959,6 @@ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", "dev": true }, - "node_modules/dom7": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/dom7/-/dom7-4.0.6.tgz", - "integrity": "sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==", - "dependencies": { - "ssr-window": "^4.0.0" - } - }, "node_modules/domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", @@ -37631,11 +37678,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, - "node_modules/ssr-window": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", - "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==" - }, "node_modules/ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", @@ -38405,29 +38447,6 @@ "node": ">= 10" } }, - "node_modules/swiper": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-7.4.1.tgz", - "integrity": "sha512-dhbL4tpYFvHug1J7GnKElfTi6EYhlZy/vNZRhHkWFyUsWZ1Vovipxj3la5gqllMogygXJMe3zvVv+f6eppvWiA==", - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/swiperjs" - }, - { - "type": "open_collective", - "url": "http://opencollective.com/swiper" - } - ], - "hasInstallScript": true, - "dependencies": { - "dom7": "^4.0.2", - "ssr-window": "^4.0.2" - }, - "engines": { - "node": ">= 4.7.0" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -46503,7 +46522,10 @@ } }, "chokidar2": { - "version": "file:node_modules/@storybook/addon-docs/node_modules/watchpack/chokidar2" + "version": "file:node_modules/@storybook/addon-docs/node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "debug": { "version": "4.3.4", @@ -47322,7 +47344,10 @@ } }, "chokidar2": { - "version": "file:node_modules/@storybook/addon-essentials/node_modules/watchpack/chokidar2" + "version": "file:node_modules/@storybook/addon-essentials/node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "debug": { "version": "4.3.4", @@ -49081,7 +49106,10 @@ } }, "chokidar2": { - "version": "file:node_modules/@storybook/builder-webpack4/node_modules/watchpack/chokidar2" + "version": "file:node_modules/@storybook/builder-webpack4/node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "chownr": { "version": "2.0.0", @@ -51810,7 +51838,10 @@ } }, "chokidar2": { - "version": "file:node_modules/@storybook/core-server/node_modules/webpack/node_modules/watchpack/chokidar2" + "version": "file:node_modules/@storybook/core-server/node_modules/webpack/node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "commander": { "version": "6.2.1", @@ -52886,7 +52917,10 @@ } }, "chokidar2": { - "version": "file:node_modules/@storybook/html/node_modules/watchpack/chokidar2" + "version": "file:node_modules/@storybook/html/node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "debug": { "version": "4.3.4", @@ -53876,7 +53910,10 @@ } }, "chokidar2": { - "version": "file:node_modules/@storybook/manager-webpack4/node_modules/watchpack/chokidar2" + "version": "file:node_modules/@storybook/manager-webpack4/node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "chownr": { "version": "2.0.0", @@ -55340,7 +55377,10 @@ } }, "chokidar2": { - "version": "file:node_modules/@storybook/telemetry/node_modules/watchpack/chokidar2" + "version": "file:node_modules/@storybook/telemetry/node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "debug": { "version": "4.3.4", @@ -58327,7 +58367,10 @@ } }, "chokidar2": { - "version": "file:node_modules/@storybook/addon-controls/node_modules/watchpack/chokidar2" + "version": "file:node_modules/@storybook/addon-controls/node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "chownr": { "version": "1.1.4", @@ -60149,14 +60192,6 @@ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", "dev": true }, - "dom7": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/dom7/-/dom7-4.0.6.tgz", - "integrity": "sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==", - "requires": { - "ssr-window": "^4.0.0" - } - }, "domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", @@ -69859,11 +69894,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, - "ssr-window": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", - "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==" - }, "ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", @@ -70464,15 +70494,6 @@ } } }, - "swiper": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-7.4.1.tgz", - "integrity": "sha512-dhbL4tpYFvHug1J7GnKElfTi6EYhlZy/vNZRhHkWFyUsWZ1Vovipxj3la5gqllMogygXJMe3zvVv+f6eppvWiA==", - "requires": { - "dom7": "^4.0.2", - "ssr-window": "^4.0.2" - } - }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", diff --git a/package.json b/package.json index 1e01fbfbe..36460fa56 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,6 @@ "material-design-icons-iconfont": "^6.7.0", "nouislider": "^15.5.0", "sprintf-js": "^1.1.2", - "swiper": "^7.4.1", "vazirmatn": "^32.102.0", "wnumb": "^1.2.0" } From 487a7687b22e00cc6ac1f051f8cee2f3ef3abbfe Mon Sep 17 00:00:00 2001 From: Daniel Hlavacek Date: Thu, 20 Jul 2023 14:06:23 +0200 Subject: [PATCH 05/46] Bump version to 0.1.6 --- config/theme.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/theme.yml b/config/theme.yml index bdccb4c4c..4965e7786 100644 --- a/config/theme.yml +++ b/config/theme.yml @@ -1,6 +1,6 @@ name: hummingbird display_name: Hummingbird -version: 0.1.5 +version: 0.1.6 author: name: "PrestaShop Team" email: "pub@prestashop.com" From 81522f2b1bdcf63d265973e1874b84eed798117d Mon Sep 17 00:00:00 2001 From: Daniel Hlavacek Date: Tue, 25 Jul 2023 23:52:55 +0200 Subject: [PATCH 06/46] Do not truncate store day --- templates/cms/stores.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/cms/stores.tpl b/templates/cms/stores.tpl index 2d9ee6c9f..8ed653454 100644 --- a/templates/cms/stores.tpl +++ b/templates/cms/stores.tpl @@ -74,7 +74,7 @@ {foreach $store.business_hours as $day} - {$day.day|truncate:4:'.'} + {$day.day} From bad22dbdda95199d731762d3c7a5686dae88a8ed Mon Sep 17 00:00:00 2001 From: tblivet Date: Fri, 28 Jul 2023 15:36:55 +0200 Subject: [PATCH 07/46] feat: edit payment option to work with ps_checkout --- src/scss/custom/modules/_checkout.scss | 10 ++++++++++ src/scss/custom/modules/_index.scss | 1 + .../checkout/_partials/steps/payment.tpl | 19 +++++++++---------- 3 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 src/scss/custom/modules/_checkout.scss diff --git a/src/scss/custom/modules/_checkout.scss b/src/scss/custom/modules/_checkout.scss new file mode 100644 index 000000000..c00d3f6ae --- /dev/null +++ b/src/scss/custom/modules/_checkout.scss @@ -0,0 +1,10 @@ +.payment__option { + &.ps_checkout-payment-option{ + label{ + // Needed to override ps_checkout !important style + /* stylelint-disable-next-line declaration-no-important */ + display: flex !important; + line-height: initial; + } + } +} diff --git a/src/scss/custom/modules/_index.scss b/src/scss/custom/modules/_index.scss index 354a3741a..2f9f8f37d 100644 --- a/src/scss/custom/modules/_index.scss +++ b/src/scss/custom/modules/_index.scss @@ -1,4 +1,5 @@ @import "featuredproducts"; +@import "checkout"; @import "contactform"; @import "contactinfo"; @import "emailsubscriptions"; diff --git a/templates/checkout/_partials/steps/payment.tpl b/templates/checkout/_partials/steps/payment.tpl index 40f34dded..a0f02bbc0 100644 --- a/templates/checkout/_partials/steps/payment.tpl +++ b/templates/checkout/_partials/steps/payment.tpl @@ -22,23 +22,22 @@ {foreach from=$module_options item="option"}
{* This is the way an option should be selected when Javascript is enabled *} - From 7dad1c66063b07598ffe07fe0c80b620364654e9 Mon Sep 17 00:00:00 2001 From: tblivet Date: Tue, 8 Aug 2023 10:25:00 +0200 Subject: [PATCH 09/46] fix: issue 535 --- .../checkout/_partials/cart-detailed-product-line.tpl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/templates/checkout/_partials/cart-detailed-product-line.tpl b/templates/checkout/_partials/cart-detailed-product-line.tpl index dc79a298e..545a61209 100644 --- a/templates/checkout/_partials/cart-detailed-product-line.tpl +++ b/templates/checkout/_partials/cart-detailed-product-line.tpl @@ -100,10 +100,10 @@ {/if}
-
- {$product.regular_price} + {if $product.has_discount} +
+ {$product.regular_price} - {if $product.has_discount} {if $product.discount_type === 'percentage'} -{$product.discount_percentage_absolute} @@ -113,8 +113,8 @@ -{$product.discount_to_display} {/if} - {/if} -
+
+ {/if} From 81e820452d6a7685c1b47ec16a59d20b8e077575 Mon Sep 17 00:00:00 2001 From: tblivet Date: Tue, 8 Aug 2023 16:55:28 +0200 Subject: [PATCH 10/46] fix: issue 534 --- .../views/templates/front/catalog/facets.tpl | 3 ++- src/js/modules/facetedsearch/index.ts | 23 +++++++++++++++++++ src/scss/core/modules/_facetedsearch.scss | 7 +++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/modules/ps_facetedsearch/views/templates/front/catalog/facets.tpl b/modules/ps_facetedsearch/views/templates/front/catalog/facets.tpl index ce40c32bc..8777152cf 100644 --- a/modules/ps_facetedsearch/views/templates/front/catalog/facets.tpl +++ b/modules/ps_facetedsearch/views/templates/front/catalog/facets.tpl @@ -177,7 +177,7 @@ {elseif $facet.widgetType == 'slider'} {block name='facet_item_slider'} {foreach from=$facet.filters item="filter"} -
+
+
{ // Get all slider configurations found in the DOM document.querySelectorAll(Theme.selectors.facetedsearch.filterSlider).forEach((filter: HTMLElement) => { const container = filter.querySelector(Theme.selectors.facetedsearch.rangeContainer); + const facetedValues = document.querySelector('.js-faceted-values') as HTMLElement; // Init basic slider data let unitPosition = 'suffix'; @@ -88,9 +89,20 @@ export const initSliders = () => { }, }); + // Remove tooltips: + initiatedSlider.removeTooltips(); + initiatedSlider.on('set', (values, handle, unencoded, tap, positions, instance) => { filterHandler(values, instance); }); + + initiatedSlider.on('update', (values) => { + const formattedValues: string[] = values.map((value) => ( + unitPosition === 'suffix' ? `${value}${unitSymbol}` : `${unitSymbol}${value}`), + ); + + facetedValues.innerHTML = formattedValues.join(' - '); + }); } else { container.noUiSlider.updateOptions({ start: sliderValues ?? [min, max], @@ -101,9 +113,20 @@ export const initSliders = () => { }, }, true); + // Remove tooltips: + container.noUiSlider.removeTooltips(); + container.noUiSlider.on('set', (values, handle, unencoded, tap, positions, instance) => { filterHandler(values, instance); }); + + container.noUiSlider.on('update', (values) => { + const formattedValues: string[] = values.map((value) => ( + unitPosition === 'suffix' ? `${value}${unitSymbol}` : `${unitSymbol}${value}`), + ); + + facetedValues.innerHTML = formattedValues.join(' - '); + }); } }); }; diff --git a/src/scss/core/modules/_facetedsearch.scss b/src/scss/core/modules/_facetedsearch.scss index b77192f0b..dc0393a11 100644 --- a/src/scss/core/modules/_facetedsearch.scss +++ b/src/scss/core/modules/_facetedsearch.scss @@ -7,7 +7,7 @@ $component-name: search-filters; } .noUi-horizontal { - margin-bottom: 2rem; + margin-bottom: 1rem; .noUi-handle { display: flex; @@ -17,6 +17,11 @@ $component-name: search-filters; } } + .js-faceted-values{ + font-size: 0.875rem; + color: var(--bs-gray-600); + } + .facet-dropdown { cursor: pointer; } From 482bc85f83aa4c987e6e99cfffcae536763f8082 Mon Sep 17 00:00:00 2001 From: tblivet Date: Thu, 10 Aug 2023 18:04:24 +0200 Subject: [PATCH 11/46] fix: delete cart product when click on minus --- src/js/pages/cart.ts | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/js/pages/cart.ts b/src/js/pages/cart.ts index 3cd14b238..e3d22f848 100644 --- a/src/js/pages/cart.ts +++ b/src/js/pages/cart.ts @@ -10,6 +10,28 @@ import handleCartAction from '../components/UseHandleCartAction'; export default () => { const {Theme} = window; const voucherCodes = document.querySelectorAll(Theme.selectors.cart.discountCode); + const cartContainer = document.querySelector(Theme.selectors.cart.container); + + if (cartContainer) { + cartContainer.addEventListener('click', (event: Event) => { + const eventTarget = event.target as HTMLElement; + + if (eventTarget.classList.contains('js-decrement-button')) { + const targetItem = eventTarget.closest('.cart__item'); + const targetValue = targetItem?.querySelector('.js-cart-line-product-quantity') as HTMLElement | null; + + if (targetValue && targetValue.getAttribute('value') === '1' && targetValue.getAttribute('min') === '1') { + if (targetItem) { + const removeButton = targetItem.querySelector('.remove-from-cart') as HTMLElement | null; + + if (removeButton) { + removeButton.click(); + } + } + } + } + }); + } voucherCodes.forEach((voucher) => { voucher.addEventListener('click', (event: Event) => { @@ -33,8 +55,6 @@ export default () => { }); }); - const cartContainer = document.querySelector(Theme.selectors.cart.container); - if (cartContainer) { cartContainer.addEventListener('click', (event: Event) => { const eventTarget = event.target as HTMLElement; From 87a5d9eb6fdf9d531bfc62148652812871bdb99a Mon Sep 17 00:00:00 2001 From: tblivet Date: Thu, 10 Aug 2023 18:55:07 +0200 Subject: [PATCH 12/46] fix: issue 540 --- src/js/components/dist/useQuantityInput.js | 342 +++++++++++++++++++++ src/js/components/useQuantityInput.ts | 2 +- src/js/constants/dist/selectors-map.js | 167 ++++++++++ src/js/constants/selectors-map.ts | 1 + 4 files changed, 511 insertions(+), 1 deletion(-) create mode 100644 src/js/components/dist/useQuantityInput.js create mode 100644 src/js/constants/dist/selectors-map.js diff --git a/src/js/components/dist/useQuantityInput.js b/src/js/components/dist/useQuantityInput.js new file mode 100644 index 000000000..5fd31f387 --- /dev/null +++ b/src/js/components/dist/useQuantityInput.js @@ -0,0 +1,342 @@ +/** + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +const __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P((resolve) => { resolve(value); }); } + return new (P || (P = Promise))((resolve, reject) => { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +const __generator = (this && this.__generator) || function (thisArg, body) { + let _ = { + label: 0, sent() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [], + }; let f; let y; let t; let + g; + + return g = {next: verb(0), throw: verb(1), return: verb(2)}, typeof Symbol === 'function' && (g[Symbol.iterator] = function () { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError('Generator is already executing.'); + while (_) { + try { + if (f = 1, y && (t = op[0] & 2 ? y.return : op[0] ? y.throw || ((t = y.return) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return {value: op[1], done: false}; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + } + if (op[0] & 5) throw op[1]; return {value: op[0] ? op[1] : void 0, done: true}; + } +}; +exports.__esModule = true; +const useQuantityInput_data_1 = require('@constants/useQuantityInput-data'); +const selectors_map_1 = require('@constants/selectors-map'); +const debounce_1 = require('@helpers/debounce'); +const useAlert_1 = require('./useAlert'); +const useToast_1 = require('./useToast'); + +const ENTER_KEY = 'Enter'; +const ESCAPE_KEY = 'Escape'; +const ARROW_UP_KEY = 'ArrowUp'; +const ARROW_DOWN_KEY = 'ArrowDown'; +const useQuantityInput = function (selector, delay) { + if (selector === void 0) { selector = selectors_map_1.qtyInput.default; } + if (delay === void 0) { delay = useQuantityInput_data_1.default.delay; } + const qtyInputNodeList = document.querySelectorAll(selector); + qtyInputNodeList.forEach((qtyInputWrapper) => { + const qtyInput = qtyInputWrapper.querySelector('input'); + + if (qtyInput) { + const incrementButton = qtyInputWrapper.querySelector(selectors_map_1.qtyInput.increment); + const decrementButton = qtyInputWrapper.querySelector(selectors_map_1.qtyInput.decrement); + + if (incrementButton && decrementButton) { + const qtyInputGroup_1 = {qtyInput, incrementButton, decrementButton}; + // The changeQuantity() will be called immediatly and change the input value for Mouse actions + incrementButton.addEventListener('click', () => changeQuantity(qtyInput, 1)); + decrementButton.addEventListener('click', () => changeQuantity(qtyInput, -1)); + // The changeQuantity() will be called immediatly and change the input value for Keyboard actions + qtyInput.addEventListener('keydown', (event) => { + if (event.key === ARROW_UP_KEY) { + changeQuantity(qtyInput, 1, true); + } + if (event.key === ARROW_DOWN_KEY) { + changeQuantity(qtyInput, -1, true); + } + }); + // The updateQuantity() will be called after timeout and send the update request with current input value + if (qtyInput.hasAttribute('data-update-url')) { + incrementButton.addEventListener('click', debounce_1.default(() => __awaiter(void 0, void 0, void 0, function () { + return __generator(this, (_a) => { + updateQuantity(qtyInputGroup_1, 1); + return [2]; + }); + }), delay)); + decrementButton.addEventListener('click', debounce_1.default(() => __awaiter(void 0, void 0, void 0, function () { + return __generator(this, (_a) => { + updateQuantity(qtyInputGroup_1, -1); + return [2]; + }); + }), delay)); + // If the input element has update URL (e.g. Cart) + // then convert the buttons when user changed the value manually + qtyInput.addEventListener('keyup', (event) => { + const baseValue = qtyInput.getAttribute('value'); + + if (qtyInput.value !== baseValue) { + showConfirmationButtons(qtyInputGroup_1); + } else { + showSpinButtons(qtyInputGroup_1); + } + if (event.key === ENTER_KEY) { + updateQuantity(qtyInputGroup_1, 1); + } + if (event.key === ESCAPE_KEY) { + showSpinButtons(qtyInputGroup_1); + } + }); + } + } + } + }); +}; +const isValidInputNum = function (inputNum) { return !Number.isNaN(inputNum) && Number.isInteger(inputNum); }; +var changeQuantity = function (qtyInput, change, keyboard) { + if (keyboard === void 0) { keyboard = false; } + const {mode} = qtyInput.dataset; + + if (mode !== 'confirmation' || keyboard) { + const baseValue = Number(qtyInput.getAttribute('value')); + const currentValue = Number(qtyInput.value); + const min = (qtyInput.dataset.updateUrl === undefined) ? Number(qtyInput.getAttribute('min')) : 0; + const newValue = Math.max(currentValue + change, min); + qtyInput.value = String(isValidInputNum(newValue) ? newValue : baseValue); + } +}; +var updateQuantity = function (qtyInputGroup, change) { + return __awaiter(void 0, void 0, void 0, function () { + let prestashop; let events; let qtyInput; let mode; let targetValue; let baseValue; let quantity; let requestUrl; let targetButton; let targetButtonIcon; let targetButtonSpinner; let response; let data_1; var errors; let productAlertSelector_1; var errors; let productData; let diff; let error_1; let errorData; let errorMsg; let + productAlertSelector; + let _a; let + _b; + + return __generator(this, (_c) => { + switch (_c.label) { + case 0: + prestashop = window.prestashop, events = window.Theme.events; + qtyInput = qtyInputGroup.qtyInput; + mode = qtyInput.dataset.mode; + if (!(mode === 'confirmation' && change < 0)) return [3 /* break */, 1]; + showSpinButtons(qtyInputGroup); + return [3 /* break */, 13]; + case 1: + targetValue = Number(qtyInput.value); + baseValue = Number(qtyInput.getAttribute('value')); + quantity = targetValue - baseValue; + if (!(isValidInputNum(targetValue) && quantity !== 0)) return [3 /* break */, 12]; + requestUrl = qtyInput.dataset.updateUrl; + if (!(requestUrl !== undefined)) return [3 /* break */, 11]; + targetButton = getTargetButton(qtyInputGroup, change); + targetButtonIcon = targetButton.querySelector('i:not(.d-none)'); + targetButtonSpinner = targetButton.querySelector(selectors_map_1.qtyInput.spinner); + toggleButtonSpinner(targetButton, targetButtonIcon, targetButtonSpinner); + _c.label = 2; + case 2: + _c.trys.push([2, 9, 10, 11]); + return [4 /* yield */, sendUpdateCartRequest(requestUrl, quantity)]; + case 3: + response = _c.sent(); + if (!response.ok) return [3 /* break */, 7]; + return [4 /* yield */, response.json()]; + case 4: + data_1 = _c.sent(); + if (data_1.hasError) { + errors = data_1.errors; + productAlertSelector_1 = resetAlertContainer(qtyInput); + if (errors && productAlertSelector_1) { + errors.forEach((error) => { + useAlert_1.default(error, {type: 'danger', selector: productAlertSelector_1}).show(); + }); + } + } else { + errors = data_1.errors; + if (errors) { + useToast_1.default(errors, {type: 'danger', autohide: false}).show(); + } + } + if (!(((_b = (_a = data_1.cart) === null || _a === void 0 ? void 0 : _a.products) === null || _b === void 0 ? void 0 : _b.length) > 0)) return [3 /* break */, 6]; + productData = data_1.cart.products.find((product) => data_1.id_product === Number(product.id_product) + && data_1.id_product_attribute === Number(product.id_product_attribute)); + if (!(productData + && productData.availability === 'unavailable' + && productData.allow_oosp === 0 + && Number(productData.quantity_wanted) > Number(productData.stock_quantity))) return [3 /* break */, 6]; + diff = Number(productData.stock_quantity) - Number(productData.quantity_wanted); + return [4 /* yield */, sendUpdateCartRequest(productData.update_quantity_url, diff)]; + case 5: + _c.sent(); + _c.label = 6; + case 6: + prestashop.emit(events.updateCart, { + reason: qtyInput.dataset, + resp: data_1, + }); + // Change the input value based on returned quantity + qtyInput.value = data_1.quantity; + // If user used the confirmation mode, need to update input value in the DOM + qtyInput.setAttribute('value', data_1.quantity); + return [3 /* break */, 8]; + case 7: + // Something went wrong so call the catch block + throw response; + case 8: return [3 /* break */, 11]; + case 9: + error_1 = _c.sent(); + // An error has occurred on update so revert to the value in the DOM + qtyInput.value = String(baseValue); + errorData = error_1; + if (errorData.status !== undefined) { + errorMsg = `${errorData.statusText}: ${errorData.url}`; + productAlertSelector = resetAlertContainer(qtyInput); + useAlert_1.default(errorMsg, {type: 'danger', selector: productAlertSelector}).show(); + prestashop.emit(events.handleError, { + eventType: 'updateProductInCart', + resp: errorData, + }); + } + return [3 /* break */, 11]; + case 10: + toggleButtonSpinner(targetButton, targetButtonIcon, targetButtonSpinner); + showSpinButtons(qtyInputGroup); + return [7]; + case 11: return [3 /* break */, 13]; + case 12: + // The input value is not a correct number + showSpinButtons(qtyInputGroup); + _c.label = 13; + case 13: return [2]; + } + }); + }); +}; +var getTargetButton = function (qtyInputGroup, change) { + const {incrementButton} = qtyInputGroup; + const {decrementButton} = qtyInputGroup; + + return (change > 0) ? incrementButton : decrementButton; +}; +var resetAlertContainer = function (qtyInput) { + const {alertId} = qtyInput.dataset; + + if (alertId) { + const productAlertSelector = selectors_map_1.qtyInput.alert(alertId); + const productAlertContainer = document.querySelector(productAlertSelector); + + if (productAlertContainer) { + productAlertContainer.innerHTML = ''; + } + return productAlertSelector; + } + return undefined; +}; +var toggleButtonSpinner = function (button, icon, spinner) { + button.toggleAttribute('disabled'); + icon === null || icon === void 0 ? void 0 : icon.classList.toggle('d-none'); + spinner === null || spinner === void 0 ? void 0 : spinner.classList.toggle('d-none'); +}; +var showSpinButtons = function (qtyInputGroup) { + const {qtyInput} = qtyInputGroup; + const {incrementButton} = qtyInputGroup; + const {decrementButton} = qtyInputGroup; + const {mode} = qtyInput.dataset; + + if (mode === 'confirmation') { + toggleButtonIcon(incrementButton, decrementButton); + qtyInput.dataset.mode = 'spin'; + const baseValue = qtyInput.getAttribute('value'); + + // Maybe user changed the input value manually bu not confirmed + // so revert the input value based on the value in the DOM + if (baseValue) { + qtyInput.value = baseValue; + } + } +}; +var showConfirmationButtons = function (qtyInputGroup) { + const {qtyInput} = qtyInputGroup; + const {incrementButton} = qtyInputGroup; + const {decrementButton} = qtyInputGroup; + const {mode} = qtyInput.dataset; + + if (mode !== 'confirmation') { + toggleButtonIcon(incrementButton, decrementButton); + qtyInput.dataset.mode = 'confirmation'; + } +}; +var toggleButtonIcon = function (incrementButton, decrementButton) { + const incrementButtonIcons = incrementButton.querySelectorAll('i'); + incrementButtonIcons.forEach((icon) => { + icon.classList.toggle('d-none'); + }); + const decrementButtonIcons = decrementButton.querySelectorAll('i'); + decrementButtonIcons.forEach((icon) => { + icon.classList.toggle('d-none'); + }); +}; +var sendUpdateCartRequest = function (updateUrl, quantity) { + return __awaiter(void 0, void 0, void 0, function () { + let formData; let + response; + + return __generator(this, (_a) => { + switch (_a.label) { + case 0: + formData = new FormData(); + formData.append('ajax', '1'); + formData.append('action', 'update'); + formData.append('qty', String(Math.abs(quantity))); + formData.append('op', (quantity > 0) ? 'up' : 'down'); + return [4 /* yield */, fetch(updateUrl, { + method: 'POST', + headers: { + Accept: 'application/json, text/javascript, */*; q=0.01', + }, + body: formData, + })]; + case 1: + response = _a.sent(); + return [2 /* return */, response]; + } + }); + }); +}; +document.addEventListener('DOMContentLoaded', () => { + const {prestashop} = window; + const _a = window.Theme; + const {events} = _a; + const {selectors} = _a; + prestashop.on(events.updatedCart, () => { + useQuantityInput(selectors_map_1.qtyInput.productCartList); + const cartMap = selectors.cart; + const cartOverview = document.querySelector(cartMap.overview); + cartOverview === null || cartOverview === void 0 ? void 0 : cartOverview.focus(); + }); + prestashop.on(events.quickviewOpened, () => useQuantityInput(selectors_map_1.qtyInput.modal)); +}); +exports.default = useQuantityInput; diff --git a/src/js/components/useQuantityInput.ts b/src/js/components/useQuantityInput.ts index 77b95c8c1..1b2c3db33 100644 --- a/src/js/components/useQuantityInput.ts +++ b/src/js/components/useQuantityInput.ts @@ -282,7 +282,7 @@ document.addEventListener('DOMContentLoaded', () => { const {prestashop, Theme: {events, selectors}} = window; prestashop.on(events.updatedCart, () => { - useQuantityInput(); + useQuantityInput(quantityInputMap.productCartList); const {cart: cartMap} = selectors; const cartOverview = document.querySelector(cartMap.overview); diff --git a/src/js/constants/dist/selectors-map.js b/src/js/constants/dist/selectors-map.js new file mode 100644 index 000000000..3898c758e --- /dev/null +++ b/src/js/constants/dist/selectors-map.js @@ -0,0 +1,167 @@ +/** + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +exports.__esModule = true; +exports.passwordPolicy = exports.formValidation = exports.qtyInput = exports.desktopMenu = exports.visiblePassword = exports.mobileMenu = exports.progressRing = exports.checkout = exports.searchBar = exports.languageSelector = exports.currencySelector = exports.blockcart = exports.cart = exports.listing = exports.pageLoader = exports.facetedsearch = void 0; +exports.facetedsearch = { + range: '.js-faceted-slider', + rangeContainer: '.js-faceted-slider-container', + filterSlider: '.js-faceted-filter-slider', + offCanvasFaceted: '#offcanvas-faceted', +}; +exports.pageLoader = '.js-page-loader'; +exports.listing = { + searchFilterToggler: '#search_filter_toggler, .js-search-toggler', + searchFiltersWrapper: '#search_filters_wrapper', + searchFilterControls: '#search_filter_controls', + searchFilters: '#search-filters', + activeSearchFilters: '#js-active-search-filters', + listTop: '#js-product-list-top', + product: '.js-product', + list: '#js-product-list', + listBottom: '#js-product-list-bottom', + listHeader: '#js-product-list-header', + searchFiltersClearAll: '.js-search-filters-clear-all', + searchLink: '.js-search-link', +}; +exports.cart = { + container: '.cart-container', + overview: '.cart-overview', + discountCode: '.js-discount .js-code', + discountName: '[name=discount_name]', + displayPromo: '.display-promo', + promoCode: '#promo-code', + deleteLinkAction: 'delete-from-cart', +}; +exports.blockcart = { + modal: '#blockcart-modal', +}; +exports.currencySelector = { + currencySelector: '.js-currency-selector', +}; +exports.languageSelector = { + languageSelector: '.js-language-selector', +}; +exports.searchBar = { + searchCanvas: '.js-search-offcanvas', + searchWidget: '.js-search-widget', + searchDropdown: '.js-search-dropdown', + searchResults: '.js-search-results', + searchTemplate: '.js-search-template', + searchInput: '.js-search-input', +}; +exports.checkout = { + steps: { + item: '.js-step-item', + current: '.js-current-step', + shownResponsiveStep: '.checkout__steps__step:not(.d-none)', + specificStep(param) { return `.checkout__steps__step[data-step="${param}"]`; }, + specificStepContent(param) { return `#${param}`; }, + backButton(param) { return `.js-step-item button[data-bs-target="#${param}"]`; }, + }, + actionsButtons: '.js-back, .js-edit-addresses, .js-edit-shipping', + termsLink: '.js-terms a', + checkoutModal: '#checkout-modal', + carrierExtraContentWrapper: '.carrier__extra-content-wrapper', + carrierExtraContent: '.carrier__extra-content', + carrierExtraContentActive: '.carrier__extra-content-wrapper--active', +}; +exports.progressRing = { + checkout: { + element: '.progress-ring', + circle: '.progress-ring__circle', + backgroundCircle: '.progress-ring__background-circle', + }, + text: '.progress-ring text', +}; +exports.mobileMenu = { + openChildsButton: '.js-menu-open-child', + backTitle: '.js-menu-back-title', + backButton: '.js-back-button', + menuCanvas: '.js-menu-canvas', + menuCurrent: '.menu--current', + specificParent(param) { return `.menu--parent[data-depth="${param}"]`; }, + specificChild(param) { return `.menu[data-id="${param}"]`; }, +}; +exports.visiblePassword = { + visiblePassword: '.js-visible-password', +}; +exports.desktopMenu = { + dropdownToggles: '.js-menu-desktop .dropdown .dropdown-toggle[data-depth]', + dropdownItemAnchor(depth) { return `.js-menu-desktop a[data-depth="${depth}"]`; }, +}; +exports.qtyInput = { + default: '.js-quantity-button', + productCartList: '.cart__items .js-quantity-button', + modal: '.modal-dialog .js-quantity-button', + increment: '.js-increment-button', + decrement: '.js-decrement-button', + confirm: '.confirmation', + icon: '.material-icons', + spinner: '.spinner-border', + alert(param) { return `#js-product-line-alert--${param}`; }, +}; +exports.formValidation = { + default: '.form-validation', +}; +exports.passwordPolicy = { + template: '#password-feedback', + hint: '.js-hint-password', + container: '.password-strength-feedback', + strengthText: '.password-strength-text', + requirementScore: '.password-requirements-score', + requirementLength: '.password-requirements-length', + requirementScoreIcon: '.password-requirements-score i', + requirementLengthIcon: '.password-requirements-length i', + progressBar: '.progress-bar', +}; +const selectorsMap = { + qtyInput: exports.qtyInput, + alert: { + selector: '#notifications .container', + alert: '.alert', + heading: '.alert-heading', + body: '.alert-body', + icon: '.material-icons', + close: '.btn-close', + }, + toast: { + container: '#js-toast-container', + template: '.js-toast-template', + toast: '.toast', + body: '.toast-body', + close: '.btn-close', + }, + product: { + carousel: '.js-product-carousel', + miniature: '.js-product-miniature', + thumbnail: '.js-thumb-container', + activeThumbail(id) { return `.js-thumb-container:nth-child(${id + 1})`; }, + }, + order: { + returnForm: '.js-order-return-form', + returnFormMainCheckbox: '.js-order-return-form table thead input[type=checkbox]', + returnFormItemCheckbox: '.js-order-return-form table tbody input[type=checkbox]', + }, + modalBody: '.modal-body', + pageCms: '.page-cms', + quickview: '.js-quickview', + quickviewModal: '.quickview', + facetedsearch: exports.facetedsearch, + pageLoader: exports.pageLoader, + listing: exports.listing, + cart: exports.cart, + progressRing: exports.progressRing, + checkout: exports.checkout, + blockcart: exports.blockcart, + currencySelector: exports.currencySelector, + languageSelector: exports.languageSelector, + searchBar: exports.searchBar, + mobileMenu: exports.mobileMenu, + visiblePassword: exports.visiblePassword, + desktopMenu: exports.desktopMenu, + formValidation: exports.formValidation, + passwordPolicy: exports.passwordPolicy, +}; +exports.default = selectorsMap; diff --git a/src/js/constants/selectors-map.ts b/src/js/constants/selectors-map.ts index c7708e39b..bcee0d399 100644 --- a/src/js/constants/selectors-map.ts +++ b/src/js/constants/selectors-map.ts @@ -105,6 +105,7 @@ export const desktopMenu = { export const qtyInput = { default: '.js-quantity-button', + productCartList: '.cart__items .js-quantity-button', modal: '.modal-dialog .js-quantity-button', increment: '.js-increment-button', decrement: '.js-decrement-button', From 04eee2da6cfdd24fa0697d5b19cefe91cd90b2ea Mon Sep 17 00:00:00 2001 From: tblivet Date: Fri, 25 Aug 2023 10:41:35 +0200 Subject: [PATCH 13/46] fix: remove compiled file --- src/js/components/dist/useQuantityInput.js | 342 --------------------- src/js/constants/dist/selectors-map.js | 167 ---------- 2 files changed, 509 deletions(-) delete mode 100644 src/js/components/dist/useQuantityInput.js delete mode 100644 src/js/constants/dist/selectors-map.js diff --git a/src/js/components/dist/useQuantityInput.js b/src/js/components/dist/useQuantityInput.js deleted file mode 100644 index 5fd31f387..000000000 --- a/src/js/components/dist/useQuantityInput.js +++ /dev/null @@ -1,342 +0,0 @@ -/** - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -const __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P((resolve) => { resolve(value); }); } - return new (P || (P = Promise))((resolve, reject) => { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const __generator = (this && this.__generator) || function (thisArg, body) { - let _ = { - label: 0, sent() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [], - }; let f; let y; let t; let - g; - - return g = {next: verb(0), throw: verb(1), return: verb(2)}, typeof Symbol === 'function' && (g[Symbol.iterator] = function () { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError('Generator is already executing.'); - while (_) { - try { - if (f = 1, y && (t = op[0] & 2 ? y.return : op[0] ? y.throw || ((t = y.return) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return {value: op[1], done: false}; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - } - if (op[0] & 5) throw op[1]; return {value: op[0] ? op[1] : void 0, done: true}; - } -}; -exports.__esModule = true; -const useQuantityInput_data_1 = require('@constants/useQuantityInput-data'); -const selectors_map_1 = require('@constants/selectors-map'); -const debounce_1 = require('@helpers/debounce'); -const useAlert_1 = require('./useAlert'); -const useToast_1 = require('./useToast'); - -const ENTER_KEY = 'Enter'; -const ESCAPE_KEY = 'Escape'; -const ARROW_UP_KEY = 'ArrowUp'; -const ARROW_DOWN_KEY = 'ArrowDown'; -const useQuantityInput = function (selector, delay) { - if (selector === void 0) { selector = selectors_map_1.qtyInput.default; } - if (delay === void 0) { delay = useQuantityInput_data_1.default.delay; } - const qtyInputNodeList = document.querySelectorAll(selector); - qtyInputNodeList.forEach((qtyInputWrapper) => { - const qtyInput = qtyInputWrapper.querySelector('input'); - - if (qtyInput) { - const incrementButton = qtyInputWrapper.querySelector(selectors_map_1.qtyInput.increment); - const decrementButton = qtyInputWrapper.querySelector(selectors_map_1.qtyInput.decrement); - - if (incrementButton && decrementButton) { - const qtyInputGroup_1 = {qtyInput, incrementButton, decrementButton}; - // The changeQuantity() will be called immediatly and change the input value for Mouse actions - incrementButton.addEventListener('click', () => changeQuantity(qtyInput, 1)); - decrementButton.addEventListener('click', () => changeQuantity(qtyInput, -1)); - // The changeQuantity() will be called immediatly and change the input value for Keyboard actions - qtyInput.addEventListener('keydown', (event) => { - if (event.key === ARROW_UP_KEY) { - changeQuantity(qtyInput, 1, true); - } - if (event.key === ARROW_DOWN_KEY) { - changeQuantity(qtyInput, -1, true); - } - }); - // The updateQuantity() will be called after timeout and send the update request with current input value - if (qtyInput.hasAttribute('data-update-url')) { - incrementButton.addEventListener('click', debounce_1.default(() => __awaiter(void 0, void 0, void 0, function () { - return __generator(this, (_a) => { - updateQuantity(qtyInputGroup_1, 1); - return [2]; - }); - }), delay)); - decrementButton.addEventListener('click', debounce_1.default(() => __awaiter(void 0, void 0, void 0, function () { - return __generator(this, (_a) => { - updateQuantity(qtyInputGroup_1, -1); - return [2]; - }); - }), delay)); - // If the input element has update URL (e.g. Cart) - // then convert the buttons when user changed the value manually - qtyInput.addEventListener('keyup', (event) => { - const baseValue = qtyInput.getAttribute('value'); - - if (qtyInput.value !== baseValue) { - showConfirmationButtons(qtyInputGroup_1); - } else { - showSpinButtons(qtyInputGroup_1); - } - if (event.key === ENTER_KEY) { - updateQuantity(qtyInputGroup_1, 1); - } - if (event.key === ESCAPE_KEY) { - showSpinButtons(qtyInputGroup_1); - } - }); - } - } - } - }); -}; -const isValidInputNum = function (inputNum) { return !Number.isNaN(inputNum) && Number.isInteger(inputNum); }; -var changeQuantity = function (qtyInput, change, keyboard) { - if (keyboard === void 0) { keyboard = false; } - const {mode} = qtyInput.dataset; - - if (mode !== 'confirmation' || keyboard) { - const baseValue = Number(qtyInput.getAttribute('value')); - const currentValue = Number(qtyInput.value); - const min = (qtyInput.dataset.updateUrl === undefined) ? Number(qtyInput.getAttribute('min')) : 0; - const newValue = Math.max(currentValue + change, min); - qtyInput.value = String(isValidInputNum(newValue) ? newValue : baseValue); - } -}; -var updateQuantity = function (qtyInputGroup, change) { - return __awaiter(void 0, void 0, void 0, function () { - let prestashop; let events; let qtyInput; let mode; let targetValue; let baseValue; let quantity; let requestUrl; let targetButton; let targetButtonIcon; let targetButtonSpinner; let response; let data_1; var errors; let productAlertSelector_1; var errors; let productData; let diff; let error_1; let errorData; let errorMsg; let - productAlertSelector; - let _a; let - _b; - - return __generator(this, (_c) => { - switch (_c.label) { - case 0: - prestashop = window.prestashop, events = window.Theme.events; - qtyInput = qtyInputGroup.qtyInput; - mode = qtyInput.dataset.mode; - if (!(mode === 'confirmation' && change < 0)) return [3 /* break */, 1]; - showSpinButtons(qtyInputGroup); - return [3 /* break */, 13]; - case 1: - targetValue = Number(qtyInput.value); - baseValue = Number(qtyInput.getAttribute('value')); - quantity = targetValue - baseValue; - if (!(isValidInputNum(targetValue) && quantity !== 0)) return [3 /* break */, 12]; - requestUrl = qtyInput.dataset.updateUrl; - if (!(requestUrl !== undefined)) return [3 /* break */, 11]; - targetButton = getTargetButton(qtyInputGroup, change); - targetButtonIcon = targetButton.querySelector('i:not(.d-none)'); - targetButtonSpinner = targetButton.querySelector(selectors_map_1.qtyInput.spinner); - toggleButtonSpinner(targetButton, targetButtonIcon, targetButtonSpinner); - _c.label = 2; - case 2: - _c.trys.push([2, 9, 10, 11]); - return [4 /* yield */, sendUpdateCartRequest(requestUrl, quantity)]; - case 3: - response = _c.sent(); - if (!response.ok) return [3 /* break */, 7]; - return [4 /* yield */, response.json()]; - case 4: - data_1 = _c.sent(); - if (data_1.hasError) { - errors = data_1.errors; - productAlertSelector_1 = resetAlertContainer(qtyInput); - if (errors && productAlertSelector_1) { - errors.forEach((error) => { - useAlert_1.default(error, {type: 'danger', selector: productAlertSelector_1}).show(); - }); - } - } else { - errors = data_1.errors; - if (errors) { - useToast_1.default(errors, {type: 'danger', autohide: false}).show(); - } - } - if (!(((_b = (_a = data_1.cart) === null || _a === void 0 ? void 0 : _a.products) === null || _b === void 0 ? void 0 : _b.length) > 0)) return [3 /* break */, 6]; - productData = data_1.cart.products.find((product) => data_1.id_product === Number(product.id_product) - && data_1.id_product_attribute === Number(product.id_product_attribute)); - if (!(productData - && productData.availability === 'unavailable' - && productData.allow_oosp === 0 - && Number(productData.quantity_wanted) > Number(productData.stock_quantity))) return [3 /* break */, 6]; - diff = Number(productData.stock_quantity) - Number(productData.quantity_wanted); - return [4 /* yield */, sendUpdateCartRequest(productData.update_quantity_url, diff)]; - case 5: - _c.sent(); - _c.label = 6; - case 6: - prestashop.emit(events.updateCart, { - reason: qtyInput.dataset, - resp: data_1, - }); - // Change the input value based on returned quantity - qtyInput.value = data_1.quantity; - // If user used the confirmation mode, need to update input value in the DOM - qtyInput.setAttribute('value', data_1.quantity); - return [3 /* break */, 8]; - case 7: - // Something went wrong so call the catch block - throw response; - case 8: return [3 /* break */, 11]; - case 9: - error_1 = _c.sent(); - // An error has occurred on update so revert to the value in the DOM - qtyInput.value = String(baseValue); - errorData = error_1; - if (errorData.status !== undefined) { - errorMsg = `${errorData.statusText}: ${errorData.url}`; - productAlertSelector = resetAlertContainer(qtyInput); - useAlert_1.default(errorMsg, {type: 'danger', selector: productAlertSelector}).show(); - prestashop.emit(events.handleError, { - eventType: 'updateProductInCart', - resp: errorData, - }); - } - return [3 /* break */, 11]; - case 10: - toggleButtonSpinner(targetButton, targetButtonIcon, targetButtonSpinner); - showSpinButtons(qtyInputGroup); - return [7]; - case 11: return [3 /* break */, 13]; - case 12: - // The input value is not a correct number - showSpinButtons(qtyInputGroup); - _c.label = 13; - case 13: return [2]; - } - }); - }); -}; -var getTargetButton = function (qtyInputGroup, change) { - const {incrementButton} = qtyInputGroup; - const {decrementButton} = qtyInputGroup; - - return (change > 0) ? incrementButton : decrementButton; -}; -var resetAlertContainer = function (qtyInput) { - const {alertId} = qtyInput.dataset; - - if (alertId) { - const productAlertSelector = selectors_map_1.qtyInput.alert(alertId); - const productAlertContainer = document.querySelector(productAlertSelector); - - if (productAlertContainer) { - productAlertContainer.innerHTML = ''; - } - return productAlertSelector; - } - return undefined; -}; -var toggleButtonSpinner = function (button, icon, spinner) { - button.toggleAttribute('disabled'); - icon === null || icon === void 0 ? void 0 : icon.classList.toggle('d-none'); - spinner === null || spinner === void 0 ? void 0 : spinner.classList.toggle('d-none'); -}; -var showSpinButtons = function (qtyInputGroup) { - const {qtyInput} = qtyInputGroup; - const {incrementButton} = qtyInputGroup; - const {decrementButton} = qtyInputGroup; - const {mode} = qtyInput.dataset; - - if (mode === 'confirmation') { - toggleButtonIcon(incrementButton, decrementButton); - qtyInput.dataset.mode = 'spin'; - const baseValue = qtyInput.getAttribute('value'); - - // Maybe user changed the input value manually bu not confirmed - // so revert the input value based on the value in the DOM - if (baseValue) { - qtyInput.value = baseValue; - } - } -}; -var showConfirmationButtons = function (qtyInputGroup) { - const {qtyInput} = qtyInputGroup; - const {incrementButton} = qtyInputGroup; - const {decrementButton} = qtyInputGroup; - const {mode} = qtyInput.dataset; - - if (mode !== 'confirmation') { - toggleButtonIcon(incrementButton, decrementButton); - qtyInput.dataset.mode = 'confirmation'; - } -}; -var toggleButtonIcon = function (incrementButton, decrementButton) { - const incrementButtonIcons = incrementButton.querySelectorAll('i'); - incrementButtonIcons.forEach((icon) => { - icon.classList.toggle('d-none'); - }); - const decrementButtonIcons = decrementButton.querySelectorAll('i'); - decrementButtonIcons.forEach((icon) => { - icon.classList.toggle('d-none'); - }); -}; -var sendUpdateCartRequest = function (updateUrl, quantity) { - return __awaiter(void 0, void 0, void 0, function () { - let formData; let - response; - - return __generator(this, (_a) => { - switch (_a.label) { - case 0: - formData = new FormData(); - formData.append('ajax', '1'); - formData.append('action', 'update'); - formData.append('qty', String(Math.abs(quantity))); - formData.append('op', (quantity > 0) ? 'up' : 'down'); - return [4 /* yield */, fetch(updateUrl, { - method: 'POST', - headers: { - Accept: 'application/json, text/javascript, */*; q=0.01', - }, - body: formData, - })]; - case 1: - response = _a.sent(); - return [2 /* return */, response]; - } - }); - }); -}; -document.addEventListener('DOMContentLoaded', () => { - const {prestashop} = window; - const _a = window.Theme; - const {events} = _a; - const {selectors} = _a; - prestashop.on(events.updatedCart, () => { - useQuantityInput(selectors_map_1.qtyInput.productCartList); - const cartMap = selectors.cart; - const cartOverview = document.querySelector(cartMap.overview); - cartOverview === null || cartOverview === void 0 ? void 0 : cartOverview.focus(); - }); - prestashop.on(events.quickviewOpened, () => useQuantityInput(selectors_map_1.qtyInput.modal)); -}); -exports.default = useQuantityInput; diff --git a/src/js/constants/dist/selectors-map.js b/src/js/constants/dist/selectors-map.js deleted file mode 100644 index 3898c758e..000000000 --- a/src/js/constants/dist/selectors-map.js +++ /dev/null @@ -1,167 +0,0 @@ -/** - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -exports.__esModule = true; -exports.passwordPolicy = exports.formValidation = exports.qtyInput = exports.desktopMenu = exports.visiblePassword = exports.mobileMenu = exports.progressRing = exports.checkout = exports.searchBar = exports.languageSelector = exports.currencySelector = exports.blockcart = exports.cart = exports.listing = exports.pageLoader = exports.facetedsearch = void 0; -exports.facetedsearch = { - range: '.js-faceted-slider', - rangeContainer: '.js-faceted-slider-container', - filterSlider: '.js-faceted-filter-slider', - offCanvasFaceted: '#offcanvas-faceted', -}; -exports.pageLoader = '.js-page-loader'; -exports.listing = { - searchFilterToggler: '#search_filter_toggler, .js-search-toggler', - searchFiltersWrapper: '#search_filters_wrapper', - searchFilterControls: '#search_filter_controls', - searchFilters: '#search-filters', - activeSearchFilters: '#js-active-search-filters', - listTop: '#js-product-list-top', - product: '.js-product', - list: '#js-product-list', - listBottom: '#js-product-list-bottom', - listHeader: '#js-product-list-header', - searchFiltersClearAll: '.js-search-filters-clear-all', - searchLink: '.js-search-link', -}; -exports.cart = { - container: '.cart-container', - overview: '.cart-overview', - discountCode: '.js-discount .js-code', - discountName: '[name=discount_name]', - displayPromo: '.display-promo', - promoCode: '#promo-code', - deleteLinkAction: 'delete-from-cart', -}; -exports.blockcart = { - modal: '#blockcart-modal', -}; -exports.currencySelector = { - currencySelector: '.js-currency-selector', -}; -exports.languageSelector = { - languageSelector: '.js-language-selector', -}; -exports.searchBar = { - searchCanvas: '.js-search-offcanvas', - searchWidget: '.js-search-widget', - searchDropdown: '.js-search-dropdown', - searchResults: '.js-search-results', - searchTemplate: '.js-search-template', - searchInput: '.js-search-input', -}; -exports.checkout = { - steps: { - item: '.js-step-item', - current: '.js-current-step', - shownResponsiveStep: '.checkout__steps__step:not(.d-none)', - specificStep(param) { return `.checkout__steps__step[data-step="${param}"]`; }, - specificStepContent(param) { return `#${param}`; }, - backButton(param) { return `.js-step-item button[data-bs-target="#${param}"]`; }, - }, - actionsButtons: '.js-back, .js-edit-addresses, .js-edit-shipping', - termsLink: '.js-terms a', - checkoutModal: '#checkout-modal', - carrierExtraContentWrapper: '.carrier__extra-content-wrapper', - carrierExtraContent: '.carrier__extra-content', - carrierExtraContentActive: '.carrier__extra-content-wrapper--active', -}; -exports.progressRing = { - checkout: { - element: '.progress-ring', - circle: '.progress-ring__circle', - backgroundCircle: '.progress-ring__background-circle', - }, - text: '.progress-ring text', -}; -exports.mobileMenu = { - openChildsButton: '.js-menu-open-child', - backTitle: '.js-menu-back-title', - backButton: '.js-back-button', - menuCanvas: '.js-menu-canvas', - menuCurrent: '.menu--current', - specificParent(param) { return `.menu--parent[data-depth="${param}"]`; }, - specificChild(param) { return `.menu[data-id="${param}"]`; }, -}; -exports.visiblePassword = { - visiblePassword: '.js-visible-password', -}; -exports.desktopMenu = { - dropdownToggles: '.js-menu-desktop .dropdown .dropdown-toggle[data-depth]', - dropdownItemAnchor(depth) { return `.js-menu-desktop a[data-depth="${depth}"]`; }, -}; -exports.qtyInput = { - default: '.js-quantity-button', - productCartList: '.cart__items .js-quantity-button', - modal: '.modal-dialog .js-quantity-button', - increment: '.js-increment-button', - decrement: '.js-decrement-button', - confirm: '.confirmation', - icon: '.material-icons', - spinner: '.spinner-border', - alert(param) { return `#js-product-line-alert--${param}`; }, -}; -exports.formValidation = { - default: '.form-validation', -}; -exports.passwordPolicy = { - template: '#password-feedback', - hint: '.js-hint-password', - container: '.password-strength-feedback', - strengthText: '.password-strength-text', - requirementScore: '.password-requirements-score', - requirementLength: '.password-requirements-length', - requirementScoreIcon: '.password-requirements-score i', - requirementLengthIcon: '.password-requirements-length i', - progressBar: '.progress-bar', -}; -const selectorsMap = { - qtyInput: exports.qtyInput, - alert: { - selector: '#notifications .container', - alert: '.alert', - heading: '.alert-heading', - body: '.alert-body', - icon: '.material-icons', - close: '.btn-close', - }, - toast: { - container: '#js-toast-container', - template: '.js-toast-template', - toast: '.toast', - body: '.toast-body', - close: '.btn-close', - }, - product: { - carousel: '.js-product-carousel', - miniature: '.js-product-miniature', - thumbnail: '.js-thumb-container', - activeThumbail(id) { return `.js-thumb-container:nth-child(${id + 1})`; }, - }, - order: { - returnForm: '.js-order-return-form', - returnFormMainCheckbox: '.js-order-return-form table thead input[type=checkbox]', - returnFormItemCheckbox: '.js-order-return-form table tbody input[type=checkbox]', - }, - modalBody: '.modal-body', - pageCms: '.page-cms', - quickview: '.js-quickview', - quickviewModal: '.quickview', - facetedsearch: exports.facetedsearch, - pageLoader: exports.pageLoader, - listing: exports.listing, - cart: exports.cart, - progressRing: exports.progressRing, - checkout: exports.checkout, - blockcart: exports.blockcart, - currencySelector: exports.currencySelector, - languageSelector: exports.languageSelector, - searchBar: exports.searchBar, - mobileMenu: exports.mobileMenu, - visiblePassword: exports.visiblePassword, - desktopMenu: exports.desktopMenu, - formValidation: exports.formValidation, - passwordPolicy: exports.passwordPolicy, -}; -exports.default = selectorsMap; From fd55b60b96f07eae5b41dcae80d851fb1a8d46c8 Mon Sep 17 00:00:00 2001 From: tblivet Date: Thu, 31 Aug 2023 18:07:29 +0200 Subject: [PATCH 14/46] fix: input change on cart qty below 1 --- src/js/pages/cart.ts | 45 +++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/js/pages/cart.ts b/src/js/pages/cart.ts index e3d22f848..134d179b6 100644 --- a/src/js/pages/cart.ts +++ b/src/js/pages/cart.ts @@ -6,33 +6,13 @@ import {Collapse} from 'bootstrap'; import {isHTMLElement} from '@helpers/typeguards'; import handleCartAction from '../components/UseHandleCartAction'; +import { qtyInput } from '@constants/selectors-map'; export default () => { const {Theme} = window; const voucherCodes = document.querySelectorAll(Theme.selectors.cart.discountCode); const cartContainer = document.querySelector(Theme.selectors.cart.container); - if (cartContainer) { - cartContainer.addEventListener('click', (event: Event) => { - const eventTarget = event.target as HTMLElement; - - if (eventTarget.classList.contains('js-decrement-button')) { - const targetItem = eventTarget.closest('.cart__item'); - const targetValue = targetItem?.querySelector('.js-cart-line-product-quantity') as HTMLElement | null; - - if (targetValue && targetValue.getAttribute('value') === '1' && targetValue.getAttribute('min') === '1') { - if (targetItem) { - const removeButton = targetItem.querySelector('.remove-from-cart') as HTMLElement | null; - - if (removeButton) { - removeButton.click(); - } - } - } - } - }); - } - voucherCodes.forEach((voucher) => { voucher.addEventListener('click', (event: Event) => { event.stopPropagation(); @@ -56,9 +36,32 @@ export default () => { }); if (cartContainer) { + console.log(cartContainer); cartContainer.addEventListener('click', (event: Event) => { const eventTarget = event.target as HTMLElement; + const targetItem = eventTarget.closest('.cart__item'); + const targetValue = targetItem?.querySelector('.js-cart-line-product-quantity') as HTMLInputElement | null; + const removeButton = targetItem?.querySelector('.remove-from-cart') as HTMLElement | null; + + if (targetValue) { + if (eventTarget.classList.contains('js-increment-button')) { + if (targetValue.dataset.mode === 'confirmation' && Number(targetValue.value) < 1) { + if (removeButton) { + removeButton.click(); + } + } + } + + if (eventTarget.classList.contains('js-decrement-button')) { + if (targetValue.getAttribute('value') === '1' && targetValue.getAttribute('min') === '1') { + if (removeButton) { + removeButton.click(); + } + } + } + } + if (eventTarget.dataset.linkAction === Theme.selectors.cart.deleteLinkAction) { handleCartAction(event); } From a4bd5cee1140a853f15e8842f3b963b8d5fbb265 Mon Sep 17 00:00:00 2001 From: tblivet Date: Thu, 31 Aug 2023 18:09:47 +0200 Subject: [PATCH 15/46] refacto: remove console log --- src/js/pages/cart.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/js/pages/cart.ts b/src/js/pages/cart.ts index 134d179b6..9a73a39e9 100644 --- a/src/js/pages/cart.ts +++ b/src/js/pages/cart.ts @@ -36,7 +36,6 @@ export default () => { }); if (cartContainer) { - console.log(cartContainer); cartContainer.addEventListener('click', (event: Event) => { const eventTarget = event.target as HTMLElement; From fd439cc911f36a75bcb711411e305176c6506356 Mon Sep 17 00:00:00 2001 From: tblivet Date: Thu, 31 Aug 2023 18:12:59 +0200 Subject: [PATCH 16/46] chore: lint --- src/js/pages/cart.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/js/pages/cart.ts b/src/js/pages/cart.ts index 9a73a39e9..e00c066fb 100644 --- a/src/js/pages/cart.ts +++ b/src/js/pages/cart.ts @@ -6,7 +6,6 @@ import {Collapse} from 'bootstrap'; import {isHTMLElement} from '@helpers/typeguards'; import handleCartAction from '../components/UseHandleCartAction'; -import { qtyInput } from '@constants/selectors-map'; export default () => { const {Theme} = window; @@ -47,7 +46,7 @@ export default () => { if (eventTarget.classList.contains('js-increment-button')) { if (targetValue.dataset.mode === 'confirmation' && Number(targetValue.value) < 1) { if (removeButton) { - removeButton.click(); + removeButton.click(); } } } From b6c0f6be3ee0385e0057cefcdc2fe059de1ac15a Mon Sep 17 00:00:00 2001 From: rodriciru Date: Tue, 5 Sep 2023 13:16:46 +0000 Subject: [PATCH 17/46] Add classes to make menu elements tall as parent --- modules/ps_mainmenu/ps_mainmenu.tpl | 8 ++++---- modules/ps_searchbar/ps_searchbar.tpl | 2 +- templates/_partials/header.tpl | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/ps_mainmenu/ps_mainmenu.tpl b/modules/ps_mainmenu/ps_mainmenu.tpl index 6f582bb8a..3a293c6ca 100644 --- a/modules/ps_mainmenu/ps_mainmenu.tpl +++ b/modules/ps_mainmenu/ps_mainmenu.tpl @@ -2,12 +2,12 @@ {if $nodes|count}
diff --git a/modules/blockwishlist/views/templates/components/modals/share.tpl b/modules/blockwishlist/views/templates/components/modals/share.tpl index ec7857235..f43608165 100644 --- a/modules/blockwishlist/views/templates/components/modals/share.tpl +++ b/modules/blockwishlist/views/templates/components/modals/share.tpl @@ -14,9 +14,7 @@ >
From 98928f36ac097a777a9312599e4ae8330b5c1333 Mon Sep 17 00:00:00 2001 From: Yannick Armand Date: Fri, 2 Feb 2024 22:31:33 +0100 Subject: [PATCH 40/46] Address card: add border --- src/scss/custom/components/_address.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/scss/custom/components/_address.scss b/src/scss/custom/components/_address.scss index 6c4f7272a..2f5d64f97 100644 --- a/src/scss/custom/components/_address.scss +++ b/src/scss/custom/components/_address.scss @@ -2,6 +2,7 @@ $component-name: address; .#{$component-name} { background: lighten($gray-100, 2%); + border: 1px solid $gray-200; &__content { margin: 0; From 9bd3873c8811f6cac7dcb5e19d2fb821d6b8b1bf Mon Sep 17 00:00:00 2001 From: Yannick Armand Date: Fri, 2 Feb 2024 22:32:37 +0100 Subject: [PATCH 41/46] Checkout address card: avoid border jump on select --- src/scss/custom/pages/_checkout.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scss/custom/pages/_checkout.scss b/src/scss/custom/pages/_checkout.scss index 55e57e1f3..570974d30 100644 --- a/src/scss/custom/pages/_checkout.scss +++ b/src/scss/custom/pages/_checkout.scss @@ -2,6 +2,7 @@ $component-name: step; .#{$component-name} { .address { + margin: 1px; border: 1px solid $gray-300; &, @@ -10,6 +11,7 @@ $component-name: step; } &.selected { + margin: 0; border: 2px solid $primary; } } From 240c711dcf9e9260d19900dceaa28293d59f1613 Mon Sep 17 00:00:00 2001 From: Yannick Armand Date: Fri, 2 Feb 2024 22:34:22 +0100 Subject: [PATCH 42/46] Checkout address card: border with the same gray as in the account --- src/scss/custom/pages/_checkout.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scss/custom/pages/_checkout.scss b/src/scss/custom/pages/_checkout.scss index 570974d30..6f67b9c32 100644 --- a/src/scss/custom/pages/_checkout.scss +++ b/src/scss/custom/pages/_checkout.scss @@ -3,7 +3,7 @@ $component-name: step; .#{$component-name} { .address { margin: 1px; - border: 1px solid $gray-300; + border: 1px solid $gray-200; &, &__content { From 5f313f0e80a628e4200b77d555e7d8cf980b05ce Mon Sep 17 00:00:00 2001 From: Marco Ingraiti Date: Mon, 5 Feb 2024 21:34:25 +0100 Subject: [PATCH 43/46] refactor: changed lazyloading with fetchpriority --- templates/catalog/_partials/category-header.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/catalog/_partials/category-header.tpl b/templates/catalog/_partials/category-header.tpl index 2548b5fbe..43b9236e9 100644 --- a/templates/catalog/_partials/category-header.tpl +++ b/templates/catalog/_partials/category-header.tpl @@ -13,7 +13,7 @@
{if !empty($category.image.legend)}{$category.image.legend}{else}{$category.name}{/if} From a02d6e47dc4e63195d54663862e694869d464326 Mon Sep 17 00:00:00 2001 From: Hlavtox Date: Thu, 22 Feb 2024 15:37:23 +0100 Subject: [PATCH 44/46] Bump version --- README.md | 2 +- config/theme.yml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5f0ab9a40..f0b020492 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Hummingbird theme -This is a PrestaShop's theme we are working on. Please, if you work on this theme, use the `8.0.x` branch of PrestaShop to make sure this theme is compatible with the latest `8.x` version. +This is a PrestaShop's theme we are working on. Please, if you work on this theme, use the `8.1.x` branch of PrestaShop to make sure this theme is compatible with the latest `8.1.x` version. [Read more](https://build.prestashop.com/news/new-theme-announce/) about this theme on the blog. diff --git a/config/theme.yml b/config/theme.yml index 762431ec2..ffa938e62 100644 --- a/config/theme.yml +++ b/config/theme.yml @@ -1,6 +1,6 @@ name: hummingbird display_name: Hummingbird -version: 0.1.6 +version: 0.1.7 author: name: "PrestaShop Team" email: "pub@prestashop.com" diff --git a/package-lock.json b/package-lock.json index ba20adfdb..443c92d64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "prestashop-hummingbird-dev-tools", - "version": "0.1.5", + "version": "0.1.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "prestashop-hummingbird-dev-tools", - "version": "0.1.5", + "version": "0.1.7", "license": "AFL-3.0", "dependencies": { "@fontsource/inter": "^4.5.0", diff --git a/package.json b/package.json index 36460fa56..d1b530a92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "prestashop-hummingbird-dev-tools", - "version": "0.1.5", + "version": "0.1.7", "description": "Tools to help while developing the Hummingbird theme", "engines": { "node": ">= 14" From 51d40ba5d3aa96a797fb8eff8e54e914444d261d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Fri, 17 May 2024 11:18:44 +0200 Subject: [PATCH 45/46] Fixed version for nodeJS and npm --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f0b020492..9acc2a27c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This is a PrestaShop's theme we are working on. Please, if you work on this them ## How to build assets -Same as the PrestaShop project, you need at least **NodeJS 14.x** and **NPM 7** in order to build the project. +Same as the PrestaShop project, you need at least **NodeJS 16.x** and **NPM 8** in order to build the project. First you need to install every node module: From cd74796002ba13aa3f1db1843bf026ebbdf7c64f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Mon, 20 May 2024 09:44:06 +0200 Subject: [PATCH 46/46] Bump to 0.2.0 --- config/theme.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/theme.yml b/config/theme.yml index ffa938e62..30fe18104 100644 --- a/config/theme.yml +++ b/config/theme.yml @@ -1,6 +1,6 @@ -name: hummingbird +name: hummingbird display_name: Hummingbird -version: 0.1.7 +version: 0.2.0 author: name: "PrestaShop Team" email: "pub@prestashop.com"